diff --git a/config/routes.js b/config/routes.js index a5d721d..29ab5db 100644 --- a/config/routes.js +++ b/config/routes.js @@ -30,17 +30,29 @@ export default [ name: 'emergencyResource', component: './business_emergencyResource/EmergencyResource', }, - // 安全管理基础信息 + // 应急预案管理 { - path: '/topnavbar00/business/basicinformation', - name: 'basicinformation', - component: './business_basicinformation/BasicInformation', + path: '/topnavbar00/business/emergencyPlan', + name: 'emergencyPlan', + component: './business_emergencyPlan/EmergencyPlan', }, - // 隐患排查 + // 应急演练管理 { - path: '/topnavbar00/business/hiddentrouble', - name: 'hiddentrouble', - component: './business_hiddentrouble/HiddenTrouble', + path: '/topnavbar00/business/emergencyDrill', + name: 'emergencyDrill', + component: './business_emergencyDrill/EmergencyDrill', + }, + // 应急值班管理 + { + path: '/topnavbar00/business/emergencyDuty', + name: 'emergencyDuty', + component: './business_emergencyDuty/EmergencyDuty', + }, + // 事故接警单 + { + path: '/topnavbar00/business/emergencyAccident', + name: 'emergencyAccident', + component: './business_emergencyAccident/EmergencyAccident', }, ], }, diff --git a/src/assets/img/menuicon2.svg b/src/assets/img/menuicon2.svg new file mode 100644 index 0000000..5bfffe1 --- /dev/null +++ b/src/assets/img/menuicon2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/img/menuicon3.svg b/src/assets/img/menuicon3.svg new file mode 100644 index 0000000..1308b70 --- /dev/null +++ b/src/assets/img/menuicon3.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/img/menuicon4.svg b/src/assets/img/menuicon4.svg new file mode 100644 index 0000000..6a6ee3a --- /dev/null +++ b/src/assets/img/menuicon4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/img/menuicon5.svg b/src/assets/img/menuicon5.svg new file mode 100644 index 0000000..6a6ee3a --- /dev/null +++ b/src/assets/img/menuicon5.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/pages/business_emergencyResource copy 2/EmergencyResource.js b/src/pages/business_emergencyAccident/EmergencyAccident.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/EmergencyResource.js rename to src/pages/business_emergencyAccident/EmergencyAccident.js diff --git a/src/pages/business_emergencyResource copy 2/EmergencyResource.less b/src/pages/business_emergencyAccident/EmergencyResource.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/EmergencyResource.less rename to src/pages/business_emergencyAccident/EmergencyResource.less diff --git a/src/pages/business_emergencyResource copy 2/components/AtmospherePollutantLibrary.js b/src/pages/business_emergencyAccident/components/AtmospherePollutantLibrary.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/AtmospherePollutantLibrary.js rename to src/pages/business_emergencyAccident/components/AtmospherePollutantLibrary.js diff --git a/src/pages/business_emergencyResource copy 2/components/AtmospherePollutantLibrary.less b/src/pages/business_emergencyAccident/components/AtmospherePollutantLibrary.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/AtmospherePollutantLibrary.less rename to src/pages/business_emergencyAccident/components/AtmospherePollutantLibrary.less diff --git a/src/pages/business_emergencyResource copy 2/components/ComplianceManagement.js b/src/pages/business_emergencyAccident/components/ComplianceManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/ComplianceManagement.js rename to src/pages/business_emergencyAccident/components/ComplianceManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/ComplianceManagement.less b/src/pages/business_emergencyAccident/components/ComplianceManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/ComplianceManagement.less rename to src/pages/business_emergencyAccident/components/ComplianceManagement.less diff --git a/src/pages/business_emergencyResource copy 2/components/EnvironmentalPersonnelManagement.js b/src/pages/business_emergencyAccident/components/EnvironmentalPersonnelManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/EnvironmentalPersonnelManagement.js rename to src/pages/business_emergencyAccident/components/EnvironmentalPersonnelManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/EnvironmentalPersonnelManagement.less b/src/pages/business_emergencyAccident/components/EnvironmentalPersonnelManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/EnvironmentalPersonnelManagement.less rename to src/pages/business_emergencyAccident/components/EnvironmentalPersonnelManagement.less diff --git a/src/pages/business_emergencyResource copy 2/components/EquipmentManagement.js b/src/pages/business_emergencyAccident/components/EquipmentManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/EquipmentManagement.js rename to src/pages/business_emergencyAccident/components/EquipmentManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/EquipmentManagement.less b/src/pages/business_emergencyAccident/components/EquipmentManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/EquipmentManagement.less rename to src/pages/business_emergencyAccident/components/EquipmentManagement.less diff --git a/src/pages/business_emergencyResource copy 2/components/EvaluationReport.js b/src/pages/business_emergencyAccident/components/EvaluationReport.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/EvaluationReport.js rename to src/pages/business_emergencyAccident/components/EvaluationReport.js diff --git a/src/pages/business_emergencyResource copy 2/components/EvaluationReport.less b/src/pages/business_emergencyAccident/components/EvaluationReport.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/EvaluationReport.less rename to src/pages/business_emergencyAccident/components/EvaluationReport.less diff --git a/src/pages/business_emergencyResource copy 2/components/OnlineMonitoring.js b/src/pages/business_emergencyAccident/components/OnlineMonitoring.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/OnlineMonitoring.js rename to src/pages/business_emergencyAccident/components/OnlineMonitoring.js diff --git a/src/pages/business_emergencyResource copy 2/components/OnlineMonitoring.less b/src/pages/business_emergencyAccident/components/OnlineMonitoring.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/OnlineMonitoring.less rename to src/pages/business_emergencyAccident/components/OnlineMonitoring.less diff --git a/src/pages/business_emergencyResource copy 2/components/PollutionSourceManagement.js b/src/pages/business_emergencyAccident/components/PollutionSourceManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/PollutionSourceManagement.js rename to src/pages/business_emergencyAccident/components/PollutionSourceManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/PollutionSourceManagement.less b/src/pages/business_emergencyAccident/components/PollutionSourceManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/PollutionSourceManagement.less rename to src/pages/business_emergencyAccident/components/PollutionSourceManagement.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/DischargePermitManagement.js b/src/pages/business_emergencyAccident/components/secondary_menu/DischargePermitManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/DischargePermitManagement.js rename to src/pages/business_emergencyAccident/components/secondary_menu/DischargePermitManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/DischargePermitManagement.less b/src/pages/business_emergencyAccident/components/secondary_menu/DischargePermitManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/DischargePermitManagement.less rename to src/pages/business_emergencyAccident/components/secondary_menu/DischargePermitManagement.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/EnvironmentalTaskList.js b/src/pages/business_emergencyAccident/components/secondary_menu/EnvironmentalTaskList.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/EnvironmentalTaskList.js rename to src/pages/business_emergencyAccident/components/secondary_menu/EnvironmentalTaskList.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/EnvironmentalTaskList.less b/src/pages/business_emergencyAccident/components/secondary_menu/EnvironmentalTaskList.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/EnvironmentalTaskList.less rename to src/pages/business_emergencyAccident/components/secondary_menu/EnvironmentalTaskList.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/InformationDisclosure.js b/src/pages/business_emergencyAccident/components/secondary_menu/InformationDisclosure.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/InformationDisclosure.js rename to src/pages/business_emergencyAccident/components/secondary_menu/InformationDisclosure.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/InformationDisclosure.less b/src/pages/business_emergencyAccident/components/secondary_menu/InformationDisclosure.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/InformationDisclosure.less rename to src/pages/business_emergencyAccident/components/secondary_menu/InformationDisclosure.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitManagement.js b/src/pages/business_emergencyAccident/components/secondary_menu/PermitManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitManagement.js rename to src/pages/business_emergencyAccident/components/secondary_menu/PermitManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitManagement.less b/src/pages/business_emergencyAccident/components/secondary_menu/PermitManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitManagement.less rename to src/pages/business_emergencyAccident/components/secondary_menu/PermitManagement.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitStatistics.js b/src/pages/business_emergencyAccident/components/secondary_menu/PermitStatistics.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitStatistics.js rename to src/pages/business_emergencyAccident/components/secondary_menu/PermitStatistics.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitStatistics.less b/src/pages/business_emergencyAccident/components/secondary_menu/PermitStatistics.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/PermitStatistics.less rename to src/pages/business_emergencyAccident/components/secondary_menu/PermitStatistics.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/ProtectionFacilityMaintenance.js b/src/pages/business_emergencyAccident/components/secondary_menu/ProtectionFacilityMaintenance.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/ProtectionFacilityMaintenance.js rename to src/pages/business_emergencyAccident/components/secondary_menu/ProtectionFacilityMaintenance.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/ProtectionFacilityMaintenance.less b/src/pages/business_emergencyAccident/components/secondary_menu/ProtectionFacilityMaintenance.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/ProtectionFacilityMaintenance.less rename to src/pages/business_emergencyAccident/components/secondary_menu/ProtectionFacilityMaintenance.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/RegulationCompliance.js b/src/pages/business_emergencyAccident/components/secondary_menu/RegulationCompliance.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/RegulationCompliance.js rename to src/pages/business_emergencyAccident/components/secondary_menu/RegulationCompliance.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/RegulationCompliance.less b/src/pages/business_emergencyAccident/components/secondary_menu/RegulationCompliance.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/RegulationCompliance.less rename to src/pages/business_emergencyAccident/components/secondary_menu/RegulationCompliance.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/SupervisionInspection.js b/src/pages/business_emergencyAccident/components/secondary_menu/SupervisionInspection.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/SupervisionInspection.js rename to src/pages/business_emergencyAccident/components/secondary_menu/SupervisionInspection.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/SupervisionInspection.less b/src/pages/business_emergencyAccident/components/secondary_menu/SupervisionInspection.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/SupervisionInspection.less rename to src/pages/business_emergencyAccident/components/secondary_menu/SupervisionInspection.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/WasteGasPollutionControl.js b/src/pages/business_emergencyAccident/components/secondary_menu/WasteGasPollutionControl.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/WasteGasPollutionControl.js rename to src/pages/business_emergencyAccident/components/secondary_menu/WasteGasPollutionControl.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/WasteGasPollutionControl.less b/src/pages/business_emergencyAccident/components/secondary_menu/WasteGasPollutionControl.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/WasteGasPollutionControl.less rename to src/pages/business_emergencyAccident/components/secondary_menu/WasteGasPollutionControl.less diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/WastewaterFacilityManagement.js b/src/pages/business_emergencyAccident/components/secondary_menu/WastewaterFacilityManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/WastewaterFacilityManagement.js rename to src/pages/business_emergencyAccident/components/secondary_menu/WastewaterFacilityManagement.js diff --git a/src/pages/business_emergencyResource copy 2/components/secondary_menu/WastewaterFacilityManagement.less b/src/pages/business_emergencyAccident/components/secondary_menu/WastewaterFacilityManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 2/components/secondary_menu/WastewaterFacilityManagement.less rename to src/pages/business_emergencyAccident/components/secondary_menu/WastewaterFacilityManagement.less diff --git a/src/pages/business_emergencyResource copy 3/EmergencyResource.js b/src/pages/business_emergencyDrill/EmergencyDrill.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/EmergencyResource.js rename to src/pages/business_emergencyDrill/EmergencyDrill.js diff --git a/src/pages/business_emergencyResource copy 3/EmergencyResource.less b/src/pages/business_emergencyDrill/EmergencyResource.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/EmergencyResource.less rename to src/pages/business_emergencyDrill/EmergencyResource.less diff --git a/src/pages/business_emergencyResource copy 3/components/AtmospherePollutantLibrary.js b/src/pages/business_emergencyDrill/components/AtmospherePollutantLibrary.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/AtmospherePollutantLibrary.js rename to src/pages/business_emergencyDrill/components/AtmospherePollutantLibrary.js diff --git a/src/pages/business_emergencyResource copy 3/components/AtmospherePollutantLibrary.less b/src/pages/business_emergencyDrill/components/AtmospherePollutantLibrary.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/AtmospherePollutantLibrary.less rename to src/pages/business_emergencyDrill/components/AtmospherePollutantLibrary.less diff --git a/src/pages/business_emergencyResource copy 3/components/ComplianceManagement.js b/src/pages/business_emergencyDrill/components/ComplianceManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/ComplianceManagement.js rename to src/pages/business_emergencyDrill/components/ComplianceManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/ComplianceManagement.less b/src/pages/business_emergencyDrill/components/ComplianceManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/ComplianceManagement.less rename to src/pages/business_emergencyDrill/components/ComplianceManagement.less diff --git a/src/pages/business_emergencyResource copy 3/components/EnvironmentalPersonnelManagement.js b/src/pages/business_emergencyDrill/components/EnvironmentalPersonnelManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/EnvironmentalPersonnelManagement.js rename to src/pages/business_emergencyDrill/components/EnvironmentalPersonnelManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/EnvironmentalPersonnelManagement.less b/src/pages/business_emergencyDrill/components/EnvironmentalPersonnelManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/EnvironmentalPersonnelManagement.less rename to src/pages/business_emergencyDrill/components/EnvironmentalPersonnelManagement.less diff --git a/src/pages/business_emergencyResource copy 3/components/EquipmentManagement.js b/src/pages/business_emergencyDrill/components/EquipmentManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/EquipmentManagement.js rename to src/pages/business_emergencyDrill/components/EquipmentManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/EquipmentManagement.less b/src/pages/business_emergencyDrill/components/EquipmentManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/EquipmentManagement.less rename to src/pages/business_emergencyDrill/components/EquipmentManagement.less diff --git a/src/pages/business_emergencyResource copy 3/components/EvaluationReport.js b/src/pages/business_emergencyDrill/components/EvaluationReport.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/EvaluationReport.js rename to src/pages/business_emergencyDrill/components/EvaluationReport.js diff --git a/src/pages/business_emergencyResource copy 3/components/EvaluationReport.less b/src/pages/business_emergencyDrill/components/EvaluationReport.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/EvaluationReport.less rename to src/pages/business_emergencyDrill/components/EvaluationReport.less diff --git a/src/pages/business_emergencyResource copy 3/components/OnlineMonitoring.js b/src/pages/business_emergencyDrill/components/OnlineMonitoring.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/OnlineMonitoring.js rename to src/pages/business_emergencyDrill/components/OnlineMonitoring.js diff --git a/src/pages/business_emergencyResource copy 3/components/OnlineMonitoring.less b/src/pages/business_emergencyDrill/components/OnlineMonitoring.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/OnlineMonitoring.less rename to src/pages/business_emergencyDrill/components/OnlineMonitoring.less diff --git a/src/pages/business_emergencyResource copy 3/components/PollutionSourceManagement.js b/src/pages/business_emergencyDrill/components/PollutionSourceManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/PollutionSourceManagement.js rename to src/pages/business_emergencyDrill/components/PollutionSourceManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/PollutionSourceManagement.less b/src/pages/business_emergencyDrill/components/PollutionSourceManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/PollutionSourceManagement.less rename to src/pages/business_emergencyDrill/components/PollutionSourceManagement.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/DischargePermitManagement.js b/src/pages/business_emergencyDrill/components/secondary_menu/DischargePermitManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/DischargePermitManagement.js rename to src/pages/business_emergencyDrill/components/secondary_menu/DischargePermitManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/DischargePermitManagement.less b/src/pages/business_emergencyDrill/components/secondary_menu/DischargePermitManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/DischargePermitManagement.less rename to src/pages/business_emergencyDrill/components/secondary_menu/DischargePermitManagement.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/EnvironmentalTaskList.js b/src/pages/business_emergencyDrill/components/secondary_menu/EnvironmentalTaskList.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/EnvironmentalTaskList.js rename to src/pages/business_emergencyDrill/components/secondary_menu/EnvironmentalTaskList.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/EnvironmentalTaskList.less b/src/pages/business_emergencyDrill/components/secondary_menu/EnvironmentalTaskList.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/EnvironmentalTaskList.less rename to src/pages/business_emergencyDrill/components/secondary_menu/EnvironmentalTaskList.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/InformationDisclosure.js b/src/pages/business_emergencyDrill/components/secondary_menu/InformationDisclosure.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/InformationDisclosure.js rename to src/pages/business_emergencyDrill/components/secondary_menu/InformationDisclosure.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/InformationDisclosure.less b/src/pages/business_emergencyDrill/components/secondary_menu/InformationDisclosure.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/InformationDisclosure.less rename to src/pages/business_emergencyDrill/components/secondary_menu/InformationDisclosure.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitManagement.js b/src/pages/business_emergencyDrill/components/secondary_menu/PermitManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitManagement.js rename to src/pages/business_emergencyDrill/components/secondary_menu/PermitManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitManagement.less b/src/pages/business_emergencyDrill/components/secondary_menu/PermitManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitManagement.less rename to src/pages/business_emergencyDrill/components/secondary_menu/PermitManagement.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitStatistics.js b/src/pages/business_emergencyDrill/components/secondary_menu/PermitStatistics.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitStatistics.js rename to src/pages/business_emergencyDrill/components/secondary_menu/PermitStatistics.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitStatistics.less b/src/pages/business_emergencyDrill/components/secondary_menu/PermitStatistics.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/PermitStatistics.less rename to src/pages/business_emergencyDrill/components/secondary_menu/PermitStatistics.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/ProtectionFacilityMaintenance.js b/src/pages/business_emergencyDrill/components/secondary_menu/ProtectionFacilityMaintenance.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/ProtectionFacilityMaintenance.js rename to src/pages/business_emergencyDrill/components/secondary_menu/ProtectionFacilityMaintenance.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/ProtectionFacilityMaintenance.less b/src/pages/business_emergencyDrill/components/secondary_menu/ProtectionFacilityMaintenance.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/ProtectionFacilityMaintenance.less rename to src/pages/business_emergencyDrill/components/secondary_menu/ProtectionFacilityMaintenance.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/RegulationCompliance.js b/src/pages/business_emergencyDrill/components/secondary_menu/RegulationCompliance.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/RegulationCompliance.js rename to src/pages/business_emergencyDrill/components/secondary_menu/RegulationCompliance.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/RegulationCompliance.less b/src/pages/business_emergencyDrill/components/secondary_menu/RegulationCompliance.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/RegulationCompliance.less rename to src/pages/business_emergencyDrill/components/secondary_menu/RegulationCompliance.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/SupervisionInspection.js b/src/pages/business_emergencyDrill/components/secondary_menu/SupervisionInspection.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/SupervisionInspection.js rename to src/pages/business_emergencyDrill/components/secondary_menu/SupervisionInspection.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/SupervisionInspection.less b/src/pages/business_emergencyDrill/components/secondary_menu/SupervisionInspection.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/SupervisionInspection.less rename to src/pages/business_emergencyDrill/components/secondary_menu/SupervisionInspection.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/WasteGasPollutionControl.js b/src/pages/business_emergencyDrill/components/secondary_menu/WasteGasPollutionControl.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/WasteGasPollutionControl.js rename to src/pages/business_emergencyDrill/components/secondary_menu/WasteGasPollutionControl.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/WasteGasPollutionControl.less b/src/pages/business_emergencyDrill/components/secondary_menu/WasteGasPollutionControl.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/WasteGasPollutionControl.less rename to src/pages/business_emergencyDrill/components/secondary_menu/WasteGasPollutionControl.less diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/WastewaterFacilityManagement.js b/src/pages/business_emergencyDrill/components/secondary_menu/WastewaterFacilityManagement.js similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/WastewaterFacilityManagement.js rename to src/pages/business_emergencyDrill/components/secondary_menu/WastewaterFacilityManagement.js diff --git a/src/pages/business_emergencyResource copy 3/components/secondary_menu/WastewaterFacilityManagement.less b/src/pages/business_emergencyDrill/components/secondary_menu/WastewaterFacilityManagement.less similarity index 100% rename from src/pages/business_emergencyResource copy 3/components/secondary_menu/WastewaterFacilityManagement.less rename to src/pages/business_emergencyDrill/components/secondary_menu/WastewaterFacilityManagement.less diff --git a/src/pages/business_plan/EmergencyResource.js b/src/pages/business_emergencyDuty/EmergencyDuty.js similarity index 100% rename from src/pages/business_plan/EmergencyResource.js rename to src/pages/business_emergencyDuty/EmergencyDuty.js diff --git a/src/pages/business_plan/EmergencyResource.less b/src/pages/business_emergencyDuty/EmergencyResource.less similarity index 100% rename from src/pages/business_plan/EmergencyResource.less rename to src/pages/business_emergencyDuty/EmergencyResource.less diff --git a/src/pages/business_plan/components/AtmospherePollutantLibrary.js b/src/pages/business_emergencyDuty/components/AtmospherePollutantLibrary.js similarity index 100% rename from src/pages/business_plan/components/AtmospherePollutantLibrary.js rename to src/pages/business_emergencyDuty/components/AtmospherePollutantLibrary.js diff --git a/src/pages/business_plan/components/AtmospherePollutantLibrary.less b/src/pages/business_emergencyDuty/components/AtmospherePollutantLibrary.less similarity index 100% rename from src/pages/business_plan/components/AtmospherePollutantLibrary.less rename to src/pages/business_emergencyDuty/components/AtmospherePollutantLibrary.less diff --git a/src/pages/business_plan/components/ComplianceManagement.js b/src/pages/business_emergencyDuty/components/ComplianceManagement.js similarity index 100% rename from src/pages/business_plan/components/ComplianceManagement.js rename to src/pages/business_emergencyDuty/components/ComplianceManagement.js diff --git a/src/pages/business_plan/components/ComplianceManagement.less b/src/pages/business_emergencyDuty/components/ComplianceManagement.less similarity index 100% rename from src/pages/business_plan/components/ComplianceManagement.less rename to src/pages/business_emergencyDuty/components/ComplianceManagement.less diff --git a/src/pages/business_plan/components/EnvironmentalPersonnelManagement.js b/src/pages/business_emergencyDuty/components/EnvironmentalPersonnelManagement.js similarity index 100% rename from src/pages/business_plan/components/EnvironmentalPersonnelManagement.js rename to src/pages/business_emergencyDuty/components/EnvironmentalPersonnelManagement.js diff --git a/src/pages/business_plan/components/EnvironmentalPersonnelManagement.less b/src/pages/business_emergencyDuty/components/EnvironmentalPersonnelManagement.less similarity index 100% rename from src/pages/business_plan/components/EnvironmentalPersonnelManagement.less rename to src/pages/business_emergencyDuty/components/EnvironmentalPersonnelManagement.less diff --git a/src/pages/business_plan/components/EquipmentManagement.js b/src/pages/business_emergencyDuty/components/EquipmentManagement.js similarity index 100% rename from src/pages/business_plan/components/EquipmentManagement.js rename to src/pages/business_emergencyDuty/components/EquipmentManagement.js diff --git a/src/pages/business_plan/components/EquipmentManagement.less b/src/pages/business_emergencyDuty/components/EquipmentManagement.less similarity index 100% rename from src/pages/business_plan/components/EquipmentManagement.less rename to src/pages/business_emergencyDuty/components/EquipmentManagement.less diff --git a/src/pages/business_plan/components/EvaluationReport.js b/src/pages/business_emergencyDuty/components/EvaluationReport.js similarity index 100% rename from src/pages/business_plan/components/EvaluationReport.js rename to src/pages/business_emergencyDuty/components/EvaluationReport.js diff --git a/src/pages/business_plan/components/EvaluationReport.less b/src/pages/business_emergencyDuty/components/EvaluationReport.less similarity index 100% rename from src/pages/business_plan/components/EvaluationReport.less rename to src/pages/business_emergencyDuty/components/EvaluationReport.less diff --git a/src/pages/business_plan/components/OnlineMonitoring.js b/src/pages/business_emergencyDuty/components/OnlineMonitoring.js similarity index 100% rename from src/pages/business_plan/components/OnlineMonitoring.js rename to src/pages/business_emergencyDuty/components/OnlineMonitoring.js diff --git a/src/pages/business_plan/components/OnlineMonitoring.less b/src/pages/business_emergencyDuty/components/OnlineMonitoring.less similarity index 100% rename from src/pages/business_plan/components/OnlineMonitoring.less rename to src/pages/business_emergencyDuty/components/OnlineMonitoring.less diff --git a/src/pages/business_plan/components/PollutionSourceManagement.js b/src/pages/business_emergencyDuty/components/PollutionSourceManagement.js similarity index 100% rename from src/pages/business_plan/components/PollutionSourceManagement.js rename to src/pages/business_emergencyDuty/components/PollutionSourceManagement.js diff --git a/src/pages/business_plan/components/PollutionSourceManagement.less b/src/pages/business_emergencyDuty/components/PollutionSourceManagement.less similarity index 100% rename from src/pages/business_plan/components/PollutionSourceManagement.less rename to src/pages/business_emergencyDuty/components/PollutionSourceManagement.less diff --git a/src/pages/business_plan/components/secondary_menu/DischargePermitManagement.js b/src/pages/business_emergencyDuty/components/secondary_menu/DischargePermitManagement.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/DischargePermitManagement.js rename to src/pages/business_emergencyDuty/components/secondary_menu/DischargePermitManagement.js diff --git a/src/pages/business_plan/components/secondary_menu/DischargePermitManagement.less b/src/pages/business_emergencyDuty/components/secondary_menu/DischargePermitManagement.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/DischargePermitManagement.less rename to src/pages/business_emergencyDuty/components/secondary_menu/DischargePermitManagement.less diff --git a/src/pages/business_plan/components/secondary_menu/EnvironmentalTaskList.js b/src/pages/business_emergencyDuty/components/secondary_menu/EnvironmentalTaskList.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/EnvironmentalTaskList.js rename to src/pages/business_emergencyDuty/components/secondary_menu/EnvironmentalTaskList.js diff --git a/src/pages/business_plan/components/secondary_menu/EnvironmentalTaskList.less b/src/pages/business_emergencyDuty/components/secondary_menu/EnvironmentalTaskList.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/EnvironmentalTaskList.less rename to src/pages/business_emergencyDuty/components/secondary_menu/EnvironmentalTaskList.less diff --git a/src/pages/business_plan/components/secondary_menu/InformationDisclosure.js b/src/pages/business_emergencyDuty/components/secondary_menu/InformationDisclosure.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/InformationDisclosure.js rename to src/pages/business_emergencyDuty/components/secondary_menu/InformationDisclosure.js diff --git a/src/pages/business_plan/components/secondary_menu/InformationDisclosure.less b/src/pages/business_emergencyDuty/components/secondary_menu/InformationDisclosure.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/InformationDisclosure.less rename to src/pages/business_emergencyDuty/components/secondary_menu/InformationDisclosure.less diff --git a/src/pages/business_plan/components/secondary_menu/PermitManagement.js b/src/pages/business_emergencyDuty/components/secondary_menu/PermitManagement.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/PermitManagement.js rename to src/pages/business_emergencyDuty/components/secondary_menu/PermitManagement.js diff --git a/src/pages/business_plan/components/secondary_menu/PermitManagement.less b/src/pages/business_emergencyDuty/components/secondary_menu/PermitManagement.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/PermitManagement.less rename to src/pages/business_emergencyDuty/components/secondary_menu/PermitManagement.less diff --git a/src/pages/business_plan/components/secondary_menu/PermitStatistics.js b/src/pages/business_emergencyDuty/components/secondary_menu/PermitStatistics.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/PermitStatistics.js rename to src/pages/business_emergencyDuty/components/secondary_menu/PermitStatistics.js diff --git a/src/pages/business_plan/components/secondary_menu/PermitStatistics.less b/src/pages/business_emergencyDuty/components/secondary_menu/PermitStatistics.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/PermitStatistics.less rename to src/pages/business_emergencyDuty/components/secondary_menu/PermitStatistics.less diff --git a/src/pages/business_plan/components/secondary_menu/ProtectionFacilityMaintenance.js b/src/pages/business_emergencyDuty/components/secondary_menu/ProtectionFacilityMaintenance.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/ProtectionFacilityMaintenance.js rename to src/pages/business_emergencyDuty/components/secondary_menu/ProtectionFacilityMaintenance.js diff --git a/src/pages/business_plan/components/secondary_menu/ProtectionFacilityMaintenance.less b/src/pages/business_emergencyDuty/components/secondary_menu/ProtectionFacilityMaintenance.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/ProtectionFacilityMaintenance.less rename to src/pages/business_emergencyDuty/components/secondary_menu/ProtectionFacilityMaintenance.less diff --git a/src/pages/business_plan/components/secondary_menu/RegulationCompliance.js b/src/pages/business_emergencyDuty/components/secondary_menu/RegulationCompliance.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/RegulationCompliance.js rename to src/pages/business_emergencyDuty/components/secondary_menu/RegulationCompliance.js diff --git a/src/pages/business_plan/components/secondary_menu/RegulationCompliance.less b/src/pages/business_emergencyDuty/components/secondary_menu/RegulationCompliance.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/RegulationCompliance.less rename to src/pages/business_emergencyDuty/components/secondary_menu/RegulationCompliance.less diff --git a/src/pages/business_plan/components/secondary_menu/SupervisionInspection.js b/src/pages/business_emergencyDuty/components/secondary_menu/SupervisionInspection.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/SupervisionInspection.js rename to src/pages/business_emergencyDuty/components/secondary_menu/SupervisionInspection.js diff --git a/src/pages/business_plan/components/secondary_menu/SupervisionInspection.less b/src/pages/business_emergencyDuty/components/secondary_menu/SupervisionInspection.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/SupervisionInspection.less rename to src/pages/business_emergencyDuty/components/secondary_menu/SupervisionInspection.less diff --git a/src/pages/business_plan/components/secondary_menu/WasteGasPollutionControl.js b/src/pages/business_emergencyDuty/components/secondary_menu/WasteGasPollutionControl.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/WasteGasPollutionControl.js rename to src/pages/business_emergencyDuty/components/secondary_menu/WasteGasPollutionControl.js diff --git a/src/pages/business_plan/components/secondary_menu/WasteGasPollutionControl.less b/src/pages/business_emergencyDuty/components/secondary_menu/WasteGasPollutionControl.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/WasteGasPollutionControl.less rename to src/pages/business_emergencyDuty/components/secondary_menu/WasteGasPollutionControl.less diff --git a/src/pages/business_plan/components/secondary_menu/WastewaterFacilityManagement.js b/src/pages/business_emergencyDuty/components/secondary_menu/WastewaterFacilityManagement.js similarity index 100% rename from src/pages/business_plan/components/secondary_menu/WastewaterFacilityManagement.js rename to src/pages/business_emergencyDuty/components/secondary_menu/WastewaterFacilityManagement.js diff --git a/src/pages/business_plan/components/secondary_menu/WastewaterFacilityManagement.less b/src/pages/business_emergencyDuty/components/secondary_menu/WastewaterFacilityManagement.less similarity index 100% rename from src/pages/business_plan/components/secondary_menu/WastewaterFacilityManagement.less rename to src/pages/business_emergencyDuty/components/secondary_menu/WastewaterFacilityManagement.less diff --git a/src/pages/business_emergencyPlan/EmergencyPlan.js b/src/pages/business_emergencyPlan/EmergencyPlan.js new file mode 100644 index 0000000..9c373f3 --- /dev/null +++ b/src/pages/business_emergencyPlan/EmergencyPlan.js @@ -0,0 +1,77 @@ +import React, { useState } from 'react'; +import { Card, Row, Col, Statistic, Progress, Button, Space } from 'antd'; +import styles from './EmergencyPlan.less'; +import ComplianceManagement from './components/ComplianceManagement'; //合规性管理 +import OnlineMonitoring from './components/OnlineMonitoring'; //在线监测预警 +import EnvironmentalPersonnelManagement from './components/EnvironmentalPersonnelManagement'; //环保人员管理 +import EvaluationReport from './components/EvaluationReport'; //评估报告 +import EquipmentManagement from './components/EquipmentManagement'; //环保设备设施管理 +import PollutionSourceManagement from './components/PollutionSourceManagement'; //污染源管理 + + + +const SafeMajorHazardList = () => { + const [activeModule, setActiveModule] = useState('organization'); + + const handleModuleClick = (module) => { + setActiveModule(module) + } + + + const renderModule = () => { + switch (activeModule) { + case 'organization': + return ; + case 'equipment': + return ; + case 'firefighting': + return ; + case 'other': + return ; + case 'equipmentManagement': + return ; + case 'pollutionSource': + return ; + default: + return ; + } + }; + + + return ( +
+
+ + + + + +
+
+ {renderModule()} +
+
+ ); +}; + +export default SafeMajorHazardList; diff --git a/src/pages/business_emergencyPlan/EmergencyPlan.less b/src/pages/business_emergencyPlan/EmergencyPlan.less new file mode 100644 index 0000000..08e9b05 --- /dev/null +++ b/src/pages/business_emergencyPlan/EmergencyPlan.less @@ -0,0 +1,69 @@ +.container { + background-color: transparent; + width: 100%; + height: 89vh; + overflow: hidden; + display: flex; + flex-direction: column; + + .TopButton { + background-color: white; + width: 100%; + padding: 8px 30px 5px 30px; + display: flex; + gap: 24px; + margin-left: 6px; + + .TopButtonItem { + background-color: #FFFFFF !important; + color: #999999 !important; + font-family: 'PingFang SC', sans-serif !important; + font-weight: 500 !important; + font-size: 14px !important; + line-height: 100% !important; + border-radius: 8px !important; + padding: 4px 16px !important; + height: auto !important; + border: none !important; + box-shadow: none !important; + position: relative !important; + display: flex !important; + flex-direction: column !important; + align-items: center !important; + gap: 5px !important; + transition: all 0.3s ease !important; + + &:hover { + color: #999999 !important; + border: none !important; + } + + &:focus { + color: #999999 !important; + border: none !important; + } + + &.active { + background: linear-gradient(98.03deg, #00E49C 0.68%, #00D841 98.3%) !important; + box-shadow: 0px 2px 2px 0px #AEEDDE !important; + color: #FFFFFF !important; + + &::after { + content: ''; + width: 28px; + height: 5px; + background-color: #FFFFFF; + border-radius: 6px; + opacity: 1; + } + } + } + } + + .content { + // ======== 内容区域样式 ======== + flex: 1; // ======== 占据剩余空间 ======== + overflow-y: auto; // ======== 允许垂直滚动 ======== + padding: 0; // ======== 无内边距 ======== + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/AtmospherePollutantLibrary.js b/src/pages/business_emergencyPlan/components/AtmospherePollutantLibrary.js new file mode 100644 index 0000000..a16f589 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/AtmospherePollutantLibrary.js @@ -0,0 +1,513 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Space, Modal, Select } from 'antd'; +import { SearchOutlined, RedoOutlined, CloseOutlined, EyeOutlined, DeleteOutlined, PlusOutlined, UploadOutlined, EditOutlined, DownloadOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './AtmospherePollutantLibrary.less'; +import licence1 from '@/assets/business_envinformation/image1.svg'; +import licence2 from '@/assets/business_envinformation/image2.svg'; +import viewicon from '@/assets/business_envinformation/viewicon.svg'; +import editicon from '@/assets/business_envinformation/editicon.svg'; +import downloadicon from '@/assets/business_envinformation/downloadicon.svg'; +import deleteicon from '@/assets/business_envinformation/deleteicon.svg'; +import icon_add from '@/assets/business_envinformation/icon_add.svg'; + +const AtmospherePollutantLibrary = () => { + const [form] = Form.useForm(); + const [isModalVisible, setIsModalVisible] = useState(false); + const [currentImage, setCurrentImage] = useState(null); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 19, + }); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [dataSource, setDataSource] = useState([ + { + key: 1, + serialNumber: 1, + pollutantName: '对乙酰氨基酚栓', + category: 25, + mainFeatures: '在接受调查的19为华尔街分析师...', + monitoringPoint: 1.25, + emittingEnterprise: '每日协通(北京)咨询有限公司', + monthlyEmission: 4.6, + quarterlyEmission: 4.6, + yearlyEmission: 5.0, + }, + { + key: 2, + serialNumber: 2, + pollutantName: '萘普生缓释胶囊(适洛特)', + category: 27, + mainFeatures: '热到融化的马路、无穷无尽的野火...', + monitoringPoint: 1.25, + emittingEnterprise: '赢王科技有限公司', + monthlyEmission: 1.1, + quarterlyEmission: 1.1, + yearlyEmission: 1.8, + }, + { + key: 3, + serialNumber: 3, + pollutantName: '复方感冒灵片', + category: 44, + mainFeatures: '从病虫害探测、土壤墒情监测智能...', + monitoringPoint: 1.25, + emittingEnterprise: '北京福商商务服务有限公司', + monthlyEmission: 2.4, + quarterlyEmission: 2.4, + yearlyEmission: 5.0, + }, + { + key: 4, + serialNumber: 4, + pollutantName: '红药片', + category: 21, + mainFeatures: '近日,有科普博主发帖称,某社交...', + monitoringPoint: 1.25, + emittingEnterprise: '实华国际租赁有限公司', + monthlyEmission: 3.6, + quarterlyEmission: 3.6, + yearlyEmission: 4.7, + }, + { + key: 5, + serialNumber: 5, + pollutantName: '布洛芬混悬液(翔宇赛可)', + category: 56, + mainFeatures: '在七八十年代,这种面料做成的服...', + monitoringPoint: 1.25, + emittingEnterprise: '北京冠钧财经策划有限公司', + monthlyEmission: 3.0, + quarterlyEmission: 3.0, + yearlyEmission: 4.7, + }, + { + key: 6, + serialNumber: 6, + pollutantName: '阿莫西林胶囊', + category: 32, + mainFeatures: '抗生素类药物,用于治疗细菌感染...', + monitoringPoint: 1.15, + emittingEnterprise: '华北制药集团有限责任公司', + monthlyEmission: 2.8, + quarterlyEmission: 2.8, + yearlyEmission: 3.5, + }, + { + key: 7, + serialNumber: 7, + pollutantName: '头孢拉定胶囊', + category: 28, + mainFeatures: '头孢类抗生素,广谱抗菌药物...', + monitoringPoint: 1.30, + emittingEnterprise: '石药集团欧意药业有限公司', + monthlyEmission: 1.9, + quarterlyEmission: 1.9, + yearlyEmission: 2.3, + }, + { + key: 8, + serialNumber: 8, + pollutantName: '复方甘草片', + category: 35, + mainFeatures: '镇咳祛痰药物,含有甘草提取物...', + monitoringPoint: 1.20, + emittingEnterprise: '太极集团重庆桐君阁药厂有限公司', + monthlyEmission: 3.2, + quarterlyEmission: 3.2, + yearlyEmission: 4.1, + }, + { + key: 9, + serialNumber: 9, + pollutantName: '板蓝根颗粒', + category: 41, + mainFeatures: '清热解毒,凉血利咽的中成药...', + monitoringPoint: 1.10, + emittingEnterprise: '广州白云山和记黄埔中药有限公司', + monthlyEmission: 4.5, + quarterlyEmission: 4.5, + yearlyEmission: 5.8, + }, + { + key: 10, + serialNumber: 10, + pollutantName: '维生素C片', + category: 22, + mainFeatures: '补充维生素C,增强免疫力...', + monitoringPoint: 1.35, + emittingEnterprise: '华润三九医药股份有限公司', + monthlyEmission: 2.1, + quarterlyEmission: 2.1, + yearlyEmission: 2.7, + }, + { + key: 11, + serialNumber: 11, + pollutantName: '感冒清热颗粒', + category: 38, + mainFeatures: '疏风散寒,解表清热的中成药...', + monitoringPoint: 1.25, + emittingEnterprise: '北京同仁堂股份有限公司', + monthlyEmission: 3.7, + quarterlyEmission: 3.7, + yearlyEmission: 4.9, + }, + { + key: 12, + serialNumber: 12, + pollutantName: '双氯芬酸钠缓释片', + category: 29, + mainFeatures: '非甾体抗炎药,用于缓解疼痛...', + monitoringPoint: 1.18, + emittingEnterprise: '扬子江药业集团有限公司', + monthlyEmission: 1.6, + quarterlyEmission: 1.6, + yearlyEmission: 2.0, + }, + { + key: 13, + serialNumber: 13, + pollutantName: '藿香正气水', + category: 43, + mainFeatures: '解表化湿,理气和中的中成药...', + monitoringPoint: 1.22, + emittingEnterprise: '云南白药集团股份有限公司', + monthlyEmission: 2.9, + quarterlyEmission: 2.9, + yearlyEmission: 3.8, + }, + { + key: 14, + serialNumber: 14, + pollutantName: '蒙脱石散', + category: 26, + mainFeatures: '止泻药物,保护胃肠黏膜...', + monitoringPoint: 1.28, + emittingEnterprise: '博福-益普生制药有限公司', + monthlyEmission: 1.4, + quarterlyEmission: 1.4, + yearlyEmission: 1.9, + }, + { + key: 15, + serialNumber: 15, + pollutantName: '复方丹参片', + category: 37, + mainFeatures: '活血化瘀,理气止痛的中成药...', + monitoringPoint: 1.16, + emittingEnterprise: '天津中新药业集团股份有限公司', + monthlyEmission: 3.3, + quarterlyEmission: 3.3, + yearlyEmission: 4.2, + }, + { + key: 16, + serialNumber: 16, + pollutantName: '奥美拉唑肠溶胶囊', + category: 31, + mainFeatures: '质子泵抑制剂,治疗胃溃疡...', + monitoringPoint: 1.33, + emittingEnterprise: '阿斯利康制药有限公司', + monthlyEmission: 2.2, + quarterlyEmission: 2.2, + yearlyEmission: 2.8, + }, + { + key: 17, + serialNumber: 17, + pollutantName: '六味地黄丸', + category: 45, + mainFeatures: '滋阴补肾的经典中成药...', + monitoringPoint: 1.12, + emittingEnterprise: '仲景宛西制药股份有限公司', + monthlyEmission: 4.1, + quarterlyEmission: 4.1, + yearlyEmission: 5.3, + }, + { + key: 18, + serialNumber: 18, + pollutantName: '阿司匹林肠溶片', + category: 24, + mainFeatures: '解热镇痛抗炎药,预防血栓...', + monitoringPoint: 1.27, + emittingEnterprise: '拜耳医药保健有限公司', + monthlyEmission: 1.8, + quarterlyEmission: 1.8, + yearlyEmission: 2.4, + }, + { + key: 19, + serialNumber: 19, + pollutantName: '复方黄连素片', + category: 39, + mainFeatures: '清热燥湿,行气止痛的中成药...', + monitoringPoint: 1.21, + emittingEnterprise: '哈药集团三精制药有限公司', + monthlyEmission: 2.6, + quarterlyEmission: 2.6, + yearlyEmission: 3.4, + }, + ]); + + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const start = (current - 1) * pageSize; + const end = start + pageSize; + return dataSource.slice(start, end); + }; + + const columns = [ + { + title: ( + 0} + onChange={(e) => handleSelectAll(e.target.checked)} + /> + ), + key: 'selection', + width: 60, + align: 'center', + fixed: 'left', + render: (_, record) => ( + { + if (e.target.checked) { + setSelectedRowKeys([...selectedRowKeys, record.key]); + } else { + setSelectedRowKeys(selectedRowKeys.filter(key => key !== record.key)); + } + }} + /> + ), + }, + { + title: '序号', + dataIndex: 'serialNumber', + key: 'serialNumber', + width: 80, + align: 'center', + }, + { + title: '特征污染物名称', + dataIndex: 'pollutantName', + key: 'pollutantName', + width: 200, + align: 'center', + }, + { + title: '种类', + dataIndex: 'category', + key: 'category', + width: 100, + align: 'center', + }, + { + title: '主要特征', + dataIndex: 'mainFeatures', + key: 'mainFeatures', + width: 300, + }, + { + title: '环境监测点', + dataIndex: 'monitoringPoint', + key: 'monitoringPoint', + width: 120, + align: 'center', + }, + { + title: '排放企业', + dataIndex: 'emittingEnterprise', + key: 'emittingEnterprise', + width: 200, + }, + { + title: '本月排放量', + dataIndex: 'monthlyEmission', + key: 'monthlyEmission', + width: 120, + align: 'center', + }, + { + title: '本季度排放量', + dataIndex: 'quarterlyEmission', + key: 'quarterlyEmission', + width: 130, + align: 'center', + }, + { + title: '本年度排放量', + dataIndex: 'yearlyEmission', + key: 'yearlyEmission', + width: 130, + align: 'center', + }, + { + title: '操作', + key: 'action', + width: 140, + align: 'center', + fixed: 'right', + render: (_, record) => ( + + {/* 编辑 handleEdit(record)} + /> + 下载 handleDownload(record)} + /> */} + 删除 handleDelete(record)} + /> + + ), + }, + ]; + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + const handleView = (record) => { + console.log('查看:', record); + // TODO: 实现查看功能 + }; + + const handleEdit = (record) => { + console.log('编辑:', record); + // TODO: 实现编辑功能 + }; + + const handleDownload = (record) => { + console.log('下载:', record); + // TODO: 实现下载功能 + }; + + const handleDelete = (record) => { + console.log('删除:', record); + // TODO: 实现删除功能 + }; + + const handleAdd = () => { + console.log('新增'); + // TODO: 实现新增功能 + }; + + const handleImport = () => { + console.log('导入'); + // TODO: 实现导入功能 + }; + + const handleQuery = () => { + console.log('查询'); + // TODO: 实现查询功能 + }; + + const handleTableChange = (pagination) => { + setPagination(pagination); + }; + + // 全选功能 + const handleSelectAll = (checked) => { + if (checked) { + const allKeys = getCurrentPageData().map(item => item.key); + setSelectedRowKeys(allKeys); + } else { + setSelectedRowKeys([]); + } + }; + + // 批量操作 + const handleBatchOperation = (operation) => { + console.log(`批量${operation}:`, selectedRowKeys); + // TODO: 实现批量操作功能 + }; + + return ( +
+ {/* 页面头部 */} +
+ 大气污染特征污染物名录库 +
+ {/* 第一块:操作按钮和筛选条件 */} +
+
+ + +
+
+ + {/* 第二块:表格 */} +
+ `共 ${total} 条`, + showSizeChanger: false, + } + }} + onChange={handleTableChange} + // scroll={{ x: 3000}} + /> +
+ + {/* 图片弹窗 */} + setIsModalVisible(false)} + footer={null} + closeIcon={} + width="auto" + centered + styles={{ + mask: { backgroundColor: '#10101080' }, + content: { padding: 0, background: 'transparent', boxShadow: 'none' } + }} + > + {currentImage && 许可证} + +
+ ); +}; + +export default AtmospherePollutantLibrary; diff --git a/src/pages/business_emergencyPlan/components/AtmospherePollutantLibrary.less b/src/pages/business_emergencyPlan/components/AtmospherePollutantLibrary.less new file mode 100644 index 0000000..d1550dc --- /dev/null +++ b/src/pages/business_emergencyPlan/components/AtmospherePollutantLibrary.less @@ -0,0 +1,218 @@ +.atmospherePollutantLibrary { + width: 100%; + height: 100%; + // padding: 20px; + // background-color: #fff; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + + .pageHeader { + margin-bottom: 15px; + background: #fff; + padding: 15px 15px 15px 20px; + border-radius: 2px; + color: #333333; + font-size: 16px; + font-weight: 500; + } + + .searchSection { + background: #fff; + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; + + .leftButtons { + display: flex; + gap: 12px; + + .addButton { + background-color: #00D48A; + color: #fff; + height: 28px; + border-radius: 4px; + display: flex; + align-items: center; + gap: 4px; + + &:hover { + background-color: #00D48A; + border-color: #00D48A; + } + } + + .importButton { + display: flex; + align-items: center; + background-color: #fff; + border-color: #D7D7D7; + color: #333; + height: 28px; + border-radius: 4px; + + &:hover { + border-color: #40a9ff; + color: #40a9ff; + } + } + } + + // .rightControls { + // display: flex; + // align-items: center; + // gap: 12px; + + // .filterLabel { + // color: #333; + // font-size: 14px; + // white-space: nowrap; + // } + + // .queryButton { + // background-color: #52c41a; + // border-color: #52c41a; + // color: white; + // height: 28px; + // border-radius: 4px; + // display: flex; + // align-items: center; + // justify-content: center; + + // &:hover { + // background-color: #73d13d; + // border-color: #73d13d; + // } + // } + + // .selectInput { + // :global { + // .ant-select-selector { + // display: flex; + // align-items: center; + // height: 28px !important; + // } + + // .ant-select-selection-item { + // display: flex; + // align-items: center; + // line-height: 1; + // } + + // .ant-select-selection-placeholder { + // display: flex; + // align-items: center; + // line-height: 1; + // } + // } + // } + // } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + padding: 0 25px 0; + background-color: #fff; + overflow: hidden; // 只设置垂直隐藏 + min-width: 0; // 确保可以收缩 + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead>tr>th { + background-color: #FAFAFA; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody>tr>td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody>tr:hover>td { + background-color: #f5f5f5; + } + + // 固定列样式 + .ant-table-thead>tr>th.ant-table-cell-fix-left, + .ant-table-tbody>tr>td.ant-table-cell-fix-left { + background-color: #FAFAFA; + z-index: 1; + } + + .ant-table-thead>tr>th.ant-table-cell-fix-right, + .ant-table-tbody>tr>td.ant-table-cell-fix-right { + background-color: #FAFAFA; + z-index: 1; + } + + // 固定列阴影效果 + .ant-table-cell-fix-left { + // box-shadow: 0px 0 4px 0px #00000040; + } + + .ant-table-cell-fix-right { + // box-shadow: 0px 0 4px 0px #00000040; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + // 页码距离上边距 + .ant-pagination { + text-align: right; + margin-top: 70px !important; + } + } + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/ComplianceManagement.js b/src/pages/business_emergencyPlan/components/ComplianceManagement.js new file mode 100644 index 0000000..e44970b --- /dev/null +++ b/src/pages/business_emergencyPlan/components/ComplianceManagement.js @@ -0,0 +1,62 @@ +import React, { useState } from 'react'; +import styles from './ComplianceManagement.less'; +import PermitManagement from './secondary_menu/PermitManagement'; // 排污许可 +import RegulationCompliance from './secondary_menu/RegulationCompliance'; // 法规符合性 +import SupervisionInspection from './secondary_menu/SupervisionInspection'; // 监督检查 +import InformationDisclosure from './secondary_menu/InformationDisclosure'; // 信息公开及绿色通道 + +const ComplianceManagement = () => { + const [activeMenu, setActiveMenu] = useState('permit'); + + const menuItems = [ + { key: 'permit', label: '排污许可' }, + { key: 'regulation', label: '法规符合性' }, + { key: 'inspection', label: '监督检查' }, + { key: 'disclosure', label: '信息公开及绿色通道' } + ]; + + const handleMenuClick = (key) => { + setActiveMenu(key); + }; + + const renderContent = () => { + switch (activeMenu) { + case 'permit': + return ; + case 'regulation': + return ; + case 'inspection': + return ; + case 'disclosure': + return ; + default: + return ; + } + }; + + return ( +
+ {/* 左侧菜单 */} +
+ {menuItems.map(item => ( +
handleMenuClick(item.key)} + > + {activeMenu === item.key &&
} + {item.label} +
+ ))} +
+ + {/* 右侧内容区 */} +
+ {renderContent()} +
+
+ ); +}; + +export default ComplianceManagement; + diff --git a/src/pages/business_emergencyPlan/components/ComplianceManagement.less b/src/pages/business_emergencyPlan/components/ComplianceManagement.less new file mode 100644 index 0000000..b58637a --- /dev/null +++ b/src/pages/business_emergencyPlan/components/ComplianceManagement.less @@ -0,0 +1,85 @@ +.container { + width: 100%; + height: 100%; + display: flex; + gap: 10px; + padding-left: 5px; + // padding-right: 5px; + padding-top: 10px; + padding-bottom: 10px; + background-color: #f5f5f5; + + // 左侧菜单 + .leftMenu { + display: flex; + flex-direction: column; + // gap: 1px; + flex-shrink: 0; + background-color: #fff; + + .menuItem { + width: 180px; + height: 50px; + background-color: #FFFFFF; + border-radius: 4px; + display: flex; + align-items: center; + position: relative; + cursor: pointer; + transition: all 0.3s ease; + padding-left: 20px; + + .menuText { + font-size: 14px; + color: #999999; + font-weight: 400; + transition: color 0.3s ease; + } + + // 激活状态的指示器(左侧长条) + .activeIndicator { + position: absolute; + left: 3px; + width: 17.34765625px; + height: 1.97802734375px; + border-radius: 6px; + background-color: #009D6F; + transform: rotate(-90deg); + } + + // 激活状态样式 + &.active { + background-color: #D4FFEC; + + .menuText { + color: #009D6F; + } + } + + // 鼠标悬停效果 + &:hover:not(.active) { + background-color: #f9f9f9; + } + } + } + + // 右侧内容区 + .rightContent { + flex: 1; + // background-color: #FFFFFF; + border-radius: 4px; + // padding: 20px; + overflow: auto; + + .contentPlaceholder { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + color: #666666; + } + } +} + diff --git a/src/pages/business_emergencyPlan/components/EnvironmentalPersonnelManagement.js b/src/pages/business_emergencyPlan/components/EnvironmentalPersonnelManagement.js new file mode 100644 index 0000000..805e60e --- /dev/null +++ b/src/pages/business_emergencyPlan/components/EnvironmentalPersonnelManagement.js @@ -0,0 +1,1025 @@ + +import React, { useState, useEffect } from 'react'; +import moment from 'moment'; +import { Card, Result, Select, Button, Drawer, Upload, Input, Modal, Form, DatePicker, Row, Col } from 'antd'; +import { CheckCircleOutlined, ExportOutlined, PlusOutlined, UploadOutlined, UserOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './EnvironmentalPersonnelManagement.less'; +// import './EnvironmentalPersonnelManagement.less'; + +import img1 from '@/assets/safe_majorHazard/online_monitoring/img1.png'; +import img2 from '@/assets/safe_majorHazard/online_monitoring/img2.png'; +import img3 from '@/assets/safe_majorHazard/online_monitoring/img3.png'; +import map1 from '@/assets/safe_majorHazard/online_monitoring/map.png'; +import risk1 from '@/assets/safe_majorHazard/online_monitoring/risk1.png'; +import risk2 from '@/assets/safe_majorHazard/online_monitoring/risk2.png'; +import risk3 from '@/assets/safe_majorHazard/online_monitoring/risk3.png'; +// import eqicon1 from '@/assets/business_basic/eqicon1.png'; +// import eqicon2 from '@/assets/business_basic/eqicon2.png'; +// import eqicon3 from '@/assets/business_basic/eqicon3.png'; +// import eqicon4 from '@/assets/business_basic/eqicon4.png'; +import viewIcon from '@/assets/business_envinformation/viewicon.svg'; +import editIcon from '@/assets/business_envinformation/editicon.svg'; +import deleteIcon from '@/assets/business_envinformation/deleteicon.svg'; +import personnelIcon from '@/assets/business_envinformation/personnel.svg'; + + + + + +const EnvironmentalPersonnelManagement = () => { + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRows, setSelectedRows] = useState([]); + const [loading, setLoading] = useState(false); + const [dataSource, setDataSource] = useState([]); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 0, + }); + const [drawerVisible, setDrawerVisible] = useState(false); + const [selectedRecord, setSelectedRecord] = useState(null); + const [modalVisible, setModalVisible] = useState(false); + const [form] = Form.useForm(); + const [editDrawerVisible, setEditDrawerVisible] = useState(false); + const [editForm] = Form.useForm(); + + + + + // 表格列定义 + const columns = [ + { + title: '序号', + dataIndex: 'id', + key: 'id', + width: 80, + render: (text, record, index) => { + const page = pagination.current || 1; + const pageSize = pagination.pageSize || 10; + const number = (page - 1) * pageSize + index + 1; + return number; + } + }, + { + title: '姓名', + dataIndex: 'name', + key: 'name', + width: 120, + }, + { + title: '部门', + dataIndex: 'department', + key: 'department', + width: 120, + filters: [ + { text: '环保管理', value: '环保管理' }, + { text: '技术部', value: '技术部' }, + { text: '生产部', value: '生产部' }, + { text: '质量部', value: '质量部' }, + ], + onFilter: (value, record) => record.department === value, + }, + { + title: '岗位', + dataIndex: 'position', + key: 'position', + width: 120, + filters: [ + { text: '污水化验', value: '污水化验' }, + { text: '环境监测', value: '环境监测' }, + { text: '环保工程师', value: '环保工程师' }, + { text: '安全员', value: '安全员' }, + { text: '技术员', value: '技术员' }, + ], + onFilter: (value, record) => record.position === value, + }, + { + title: '入职时间', + dataIndex: 'joinDate', + key: 'joinDate', + width: 120, + sorter: (a, b) => { + // 将日期字符串转换为Date对象进行比较 + const dateA = new Date(a.joinDate); + const dateB = new Date(b.joinDate); + return dateA - dateB; + }, + }, + { + title: '岗位职责', + dataIndex: 'responsibility', + key: 'responsibility', + width: 200, + }, + { + title: '联系方式', + dataIndex: 'contact', + key: 'contact', + width: 150, + }, + { + title: '操作', + key: 'action', + width: 180, + render: (_, record) => ( +
+ 查看 handleView(record)} + /> + 编辑 handleEdit(record)} + /> + 删除 +
+ ), + }, + ]; + + // 模拟数据 + const mockData = [ + { + key: '1', + id: '001', + name: '吴振峰', + department: '环保管理', + position: '污水运行', + joinDate: '2025-09-02', + responsibility: '保障污水设备运行、处理故障', + contact: '13321493732', + employeeId: '434545', + gender: '男', + birthDate: '2025-08-08', + idCard: '340802199809050811', + address: '西辛南区46号楼2单元101室', + other: '暂无' + }, + { + key: '2', + id: '002', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138002', + }, + { + key: '3', + id: '003', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138003', + }, + { + key: '4', + id: '004', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138004', + }, + { + key: '5', + id: '005', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138005', + }, + { + key: '6', + id: '006', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138006', + }, + { + key: '7', + id: '007', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138007', + }, + { + key: '8', + id: '008', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138008', + }, + { + key: '9', + id: '009', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138009', + }, + { + key: '10', + id: '010', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138010', + }, + { + key: '11', + id: '011', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138011', + }, + { + key: '12', + id: '012', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138012', + }, + { + key: '13', + id: '013', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138013', + }, + { + key: '14', + id: '014', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138014', + }, + { + key: '15', + id: '015', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138015', + }, + { + key: '16', + id: '016', + name: '张一龙', + department: '环保管理', + position: '污水化验', + joinDate: '2025-08-25', + responsibility: '定期采样分析', + contact: '13800138016', + }, + ]; + + // 初始化数据 + useEffect(() => { + setPagination(prev => ({ ...prev, total: mockData.length })); + }, []); + + // 根据分页获取当前页数据 + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const startIndex = (current - 1) * pageSize; + const endIndex = startIndex + pageSize; + return mockData.slice(startIndex, endIndex); + }; + + // 表格选择变化 + const onSelectChange = (newSelectedRowKeys, newSelectedRows) => { + setSelectedRowKeys(newSelectedRowKeys); + setSelectedRows(newSelectedRows); + }; + + // 新增设备按钮点击事件 + const handleAddDevice = () => { + console.log('新增设备'); + // TODO: 实现新增设备逻辑 + }; + + // 导出数据按钮点击事件 + const handleExportData = () => { + console.log('导出数据'); + // TODO: 实现导出数据逻辑 + }; + + // 分页变化处理 + const handleTableChange = (pagination) => { + setPagination(prev => ({ + ...prev, + current: pagination.current, + pageSize: pagination.pageSize, + })); + }; + + // 查看详情 + const handleView = (record) => { + setSelectedRecord(record); + setDrawerVisible(true); + }; + + // 关闭抽屉 + const handleCloseDrawer = () => { + setDrawerVisible(false); + setSelectedRecord(null); + }; + + // 打开新增模态框 + const handleOpenModal = () => { + setModalVisible(true); + }; + + // 关闭新增模态框 + const handleCloseModal = () => { + setModalVisible(false); + form.resetFields(); + }; + + // 保存新增数据 + const handleSave = () => { + form.validateFields().then(values => { + console.log('新增数据:', values); + // TODO: 实现保存逻辑 + setModalVisible(false); + form.resetFields(); + }).catch(error => { + console.log('表单验证失败:', error); + }); + }; + + // 打开编辑抽屉 + const handleEdit = (record) => { + console.log('点击编辑按钮,记录:', record); + setSelectedRecord(record); + setEditDrawerVisible(true); + console.log('设置编辑抽屉可见:', true); + // 设置表单初始值 + editForm.setFieldsValue({ + name: record.name, + employeeId: record.employeeId, + department: record.department, + position: record.position, + gender: record.gender, + address: record.address, + birthDate: record.birthDate ? moment(record.birthDate) : null, + joinDate: record.joinDate ? moment(record.joinDate) : null, + idCard: record.idCard, + contact: record.contact, + responsibility: record.responsibility, + other: record.other + }); + }; + + // 关闭编辑抽屉 + const handleCloseEditDrawer = () => { + setEditDrawerVisible(false); + setSelectedRecord(null); + editForm.resetFields(); + }; + + // 保存编辑数据 + const handleEditSave = () => { + editForm.validateFields().then(values => { + console.log('编辑数据:', values); + // TODO: 实现保存逻辑 + setEditDrawerVisible(false); + editForm.resetFields(); + }).catch(error => { + console.log('表单验证失败:', error); + }); + }; + + return ( +
+ {/* 第一个div - 高度20% */} +
+
+
+ {/* 块1 */} +
+
+
环保总人数
+
258
+
截止到 2025-09-11 07:35
+
+
+ + {/* 块2 */} +
+
+
管理岗人数
+
58
+
截止到 2025-09-11 07:35
+
+
+ + {/* 块3 */} +
+
+
污水运行人数
+
51
+
截止到 2025-09-11 07:35
+
+
+ + {/* 块4 */} +
+
+
污水化验人数
+
28
+
截止到 2025-09-11 07:35
+
+
+ + {/* 块5 */} +
+
+
危废管理人员
+
50
+
截止到 2025-09-11 07:35
+
+
+ + {/* 块6 */} +
+
+
一般固体废物管理人员
+
58
+
截止到 2025-09-11 07:35
+
+
+ +
+
+
+ + + + {/* 第三个div - 占满剩余位置 */} +
+
+ {/* 第一行 - 表单控件 */} +
+ + +
+ 筛选条件 + + + +
+
+ + {/* 第二行 - 表格 */} +
+ + `共 ${total} 条`, + }} + /> +
+
+
+ + {/* 侧边抽屉 */} + 查看} + placement="right" + onClose={handleCloseDrawer} + open={drawerVisible} + width={600} + closable={false} + bodyStyle={{ fontSize: '12px' }} + > + {selectedRecord && ( +
+ {/* 姓名和头像区域 */} +
+
+

+ {selectedRecord.name} +

+ + {/* 基本信息 - 两列布局 */} +
+
+
+ 工号: + {selectedRecord.employeeId} +
+
+ 部门: + {selectedRecord.department} +
+
+ 岗位: + {selectedRecord.position} +
+
+ 性别: + {selectedRecord.gender} +
+
+ 住址: + {selectedRecord.address} +
+
+ +
+
+ 出生日期: + {selectedRecord.birthDate} +
+
+ 入职时间: + {selectedRecord.joinDate} +
+
+ 身份证号: + {selectedRecord.idCard} +
+
+ 联系方式: + {selectedRecord.contact} +
+
+
+
+ + {/* 头像上传区域 */} +
+
+ personnel +
+
上传
+
+
+ + {/* 岗位职责 */} +
+
+ 岗位职责 +
+ +
+ + {/* 其他 */} +
+
+ 其他 +
+ +
+
+ )} +
+ + {/* 新增模态框 */} + + 取消 + , + + ]} + closable={true} + > +
+ {/* 第一行:姓名 + 出生日期 */} +
+
+ 姓名 + + + +
+
+ 出生日期 + + + +
+
+ + {/* 第二行:工号 + 入职时间 */} +
+
+ 工号 + + + +
+
+ 入职时间 + + + +
+
+ + {/* 第三行:部门 + 身份证号 */} +
+
+ 部门 + + + +
+
+ 身份证号 + + + +
+
+ + {/* 第四行:岗位 + 联系方式 */} +
+
+ 岗位 + + + +
+
+ 联系方式 + + + +
+
+ + {/* 第五行:性别 + 照片 */} +
+
+ 性别 + + + +
+
+ 照片 + +
+
+ + {/* 第六行:住址 */} +
+ 住址 + + + +
+ + {/* 岗位职责 */} + 岗位职责} + name="responsibility" + rules={[{ required: true, message: '请输入岗位职责' }]} + > + + + + {/* 其他 */} + 其他} + name="other" + > + + +
+
+ + {/* 编辑抽屉 */} + 编辑} + placement="right" + onClose={handleCloseEditDrawer} + open={editDrawerVisible} + width={600} + closable={false} + destroyOnClose={true} + bodyStyle={{ fontSize: '12px' }} + footer={[ + , + + ]} + > + {selectedRecord && ( +
+ {/* 姓名和头像区域 */} +
+
+

+ {selectedRecord.name} +

+ + {/* 基本信息 - 两列布局 */} +
+
+
+ 工号: + {selectedRecord.employeeId} +
+
+ 部门: + {selectedRecord.department} +
+
+ 岗位: + {selectedRecord.position} +
+
+ 性别: + {selectedRecord.gender} +
+
+ 住址: + {selectedRecord.address} +
+
+ +
+
+ 出生日期: + {selectedRecord.birthDate} +
+
+ 入职时间: + {selectedRecord.joinDate} +
+
+ 身份证号: + {selectedRecord.idCard} +
+
+ 联系方式: + {selectedRecord.contact} +
+
+
+
+ + {/* 头像上传区域 */} +
+
+ personnel +
+
上传
+
+
+ + {/* 岗位职责 */} +
+
+ 岗位职责 +
+ +
+ + {/* 其他 */} +
+
+ 其他 +
+ +
+
+ )} +
+
+ ); +}; + +export default EnvironmentalPersonnelManagement; diff --git a/src/pages/business_emergencyPlan/components/EnvironmentalPersonnelManagement.less b/src/pages/business_emergencyPlan/components/EnvironmentalPersonnelManagement.less new file mode 100644 index 0000000..744c04b --- /dev/null +++ b/src/pages/business_emergencyPlan/components/EnvironmentalPersonnelManagement.less @@ -0,0 +1,536 @@ + + + +// 表单输入框样式 +.formInput { + :global(.ant-input) { + color: #333333 !important; + font-size: 12px !important; + } + + :global(.ant-select-selector) { + color: #333333 !important; + font-size: 12px !important; + } + + :global(.ant-picker-input input) { + color: #333333 !important; + font-size: 12px !important; + } +} + + +.Rcontainer { + padding: 8px 6px 0px 6px; + height: 100%; + display: flex; + flex-direction: column; + gap: 10px; + + // 第一个div - 高度20% + .RcontainerTop { + height: 18%; + // background-color: #fff; + border-radius: 4px; + display: flex; + flex-direction: column; + + .sectionContent { + height: 100%; + display: flex; + flex-direction: column; + // padding: 15px; + + .blocksContainer { + flex: 1; + display: flex; + gap: 10px; + height: 100%; + + .blockItem { + flex: 1; + height: 100%; + display: flex; + // background: linear-gradient(170.5deg, #F5F7FF 6.87%, #FFFFFF 47.65%); + border-radius: 4px; + // border: 2px solid #FFFFFF; + + // 块1 - 蓝色渐变 + SVG背景 + &.block1 { + background: + url('@/assets/business_envinformation/background1.svg'), + + linear-gradient(180deg, #DBEBFF 0%, #DBEBFF 12.5%, rgba(255, 255, 255, 0.700824) 56%, rgba(255, 255, 255, 0.01) 100%), + linear-gradient(0deg, #FFFFFF, #FFFFFF); + // linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; + } + + // 块2 - 黄色渐变 + &.block2 { + background: + url('@/assets/business_envinformation/background2.svg'), + linear-gradient(180deg, #FFFEDB 0%, #F5FFDB 19.23%, #FFFFFF 55.77%, #FFFFFF 100%); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; + } + + // 块3 - 绿色渐变 + &.block3 { + background: + url('@/assets/business_envinformation/background3.svg'), + linear-gradient(180deg, #8CFFCD 0%, #C0FFE4 12.5%, #FFFFFF 56%, #FFFFFF 100%); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; + } + + // 块4 - 青色渐变 + &.block4 { + background: + url('@/assets/business_envinformation/background4.svg'), + linear-gradient(180deg, #C5FFFC 0%, #C0FFFC 12.5%, #FFFFFF 56%, #FFFFFF 100%); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; + } + + // 块5 - 红色渐变 + &.block5 { + background: + url('@/assets/business_envinformation/background5.svg'), + linear-gradient(180deg, #FFD2D2 0%, #FFD9D9 12.5%, #FFFFFF 56%, #FFFFFF 100%); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; + } + + // 块6 - 紫色渐变 + &.block6 { + background: + url('@/assets/business_envinformation/background6.svg'), + linear-gradient(180deg, #F2D7FF 0%, #F4DDFF 12.5%, #FFFFFF 56%, #FFFFFF 100%); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; + } + + .blockLeft { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + padding: 15px; + padding-left: 20px; + gap: 8px; + + .blockTitle { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #333333; + line-height: 1.2; + } + + .blockNumber { + font-family: PingFang SC; + font-weight: 700; + font-size: 24px; + color: #333333; + line-height: 1.2; + + // 特定数字颜色 + &.number258 { + color: #0080FF; + } + + &.number58 { + color: #EFB700; + } + + &.number51 { + color: #00DA86; + } + + &.number28 { + color: #00DA86; + } + + &.number50 { + color: #FD0404; + } + + &.number58Second { + color: #A318E4; + } + } + + .blockTime { + font-family: PingFang SC; + font-weight: 400; + font-size: 10px; + color: #999999; + line-height: 1.2; + } + + .blockChange { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #1269FF; + line-height: 1.2; + display: flex; + align-items: center; + gap: 4px; + + .arrow { + font-size: 14px; + font-weight: bold; + } + + .checkIcon { + font-size: 16px; + color: #1269FF; + } + } + } + + .blockRight { + flex: 1; + height: 100%; + background-color: transparent; + border-radius: 0 4px 4px 0; + display: flex; + align-items: center; + justify-content: center; + + .blockImage { + // width: 80%; + height: 65%; + // height: 80%; + object-fit: contain; + margin-right: -5px; + } + } + } + } + } + } + + + // 第三个div - 占满剩余位置 + .RcontainerBottom { + flex: 1; // 占满剩余空间 + display: flex; + flex-direction: column; + background-color: #fff; + padding: 15px; + + .sectionContent { + height: 100%; + display: flex; + flex-direction: column; + gap: 15px; + + // 第一行 - 表单控件 + .formRow { + display: flex; + align-items: center; + gap: 15px; + flex-shrink: 0; + + .addButton { + display: flex; + align-items: center; + gap: 4px; + height: 28px; + border: 1px solid #00D48A; + border-radius: 2px; + color: #fff; + font-weight: 400; + font-size: 12px; + padding: 0 10px; + background: #00D48A; + cursor: pointer; + transition: all 0.2s ease; + + &:hover { + background-color: #00B875; + border-color: #00B875; + } + + .buttonIcon { + font-size: 16px; + font-weight: bold; + } + } + + .rightControls { + display: flex; + align-items: center; + gap: 15px; + margin-left: auto; + + .filterLabel { + font-size: 13px; + color: #333333; + white-space: nowrap; + } + + // Select组件样式 + :global(.ant-select) { + font-size: 12px; + height: 28px !important; + } + + :global(.ant-select .ant-select-selector) { + height: 28px !important; + font-size: 12px; + border-radius: 2px !important; + display: flex !important; + align-items: center !important; + padding: 0 11px !important; + } + + :global(.ant-select .ant-select-selection-item) { + line-height: 1.5714285714285714; + font-size: 12px; + } + + :global(.ant-select .ant-select-selection-placeholder) { + line-height: 1.5714285714285714; + font-size: 12px; + color: #00000040 !important; + } + + .searchInput { + width: 150px; + height: 28px; + border: 1px solid #d9d9d9; + border-radius: 2px; + padding: 0 12px; + font-size: 12px; + + &:focus { + border-color: #2E4CD4; + outline: none; + } + + &::placeholder { + color: #00000040; + } + } + + .queryButton, .resetButton { + height: 28px; + border: 1px solid #d9d9d9; + border-radius: 4px; + padding: 0 16px; + font-size: 12px; + cursor: pointer; + transition: all 0.2s ease; + + &:hover { + border-color: #2E4CD4; + color: #2E4CD4; + } + } + + .queryButton { + background-color: #00D48A; + color: #fff; + border-color: #00D48A; + + &:hover { + background-color: #00B875; + border-color: #00B875; + color: #fff; + } + } + + .resetButton { + background-color: #fff; + color: #666; + + &:hover { + background-color: #f5f5f5; + } + } + } + } + + // 第二行 - 表格 + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + + .ant-table { + flex: 1; + overflow: auto; + } + + .ant-table-pagination { + flex-shrink: 0; + margin: 16px 0 0 0; + padding: 0; + } + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead > tr > th { + background-color: #fafafa; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + } + + .ant-table-tbody > tr > td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + } + + .ant-table-tbody > tr:hover > td { + background-color: #f5f5f5; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + .ant-pagination { + text-align: right; + } + } + } + } + } +} + +// 操作按钮图标样式 +.eye-icon { + width: 20px; + height: 12.5px; + position: relative; + display: inline-block; + + &::before { + content: ''; + position: absolute; + width: 20px; + height: 12.5px; + border: 2px solid #86F278; + border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; + top: 0; + left: 0; + transform: rotate(-180deg); + opacity: 1; + } + + &::after { + content: ''; + position: absolute; + width: 6px; + height: 6px; + background-color: #86F278; + border-radius: 50%; + top: 3.5px; + left: 7px; + transform: rotate(-180deg); + } +} + +.edit-icon { + width: 16px; + height: 16px; + position: relative; + display: inline-block; + + &::before { + content: ''; + position: absolute; + width: 12px; + height: 2px; + background-color: #1890ff; + top: 3px; + left: 2px; + transform: rotate(45deg); + } + + &::after { + content: ''; + position: absolute; + width: 2px; + height: 12px; + background-color: #1890ff; + top: 2px; + left: 7px; + transform: rotate(45deg); + } +} + +.delete-icon { + width: 16px; + height: 16px; + position: relative; + display: inline-block; + + &::before { + content: ''; + position: absolute; + width: 12px; + height: 2px; + background-color: #ff4d4f; + top: 7px; + left: 2px; + transform: rotate(45deg); + } + + &::after { + content: ''; + position: absolute; + width: 12px; + height: 2px; + background-color: #ff4d4f; + top: 7px; + left: 2px; + transform: rotate(-45deg); + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/EquipmentManagement.js b/src/pages/business_emergencyPlan/components/EquipmentManagement.js new file mode 100644 index 0000000..fea3dd2 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/EquipmentManagement.js @@ -0,0 +1,58 @@ +import React, { useState } from 'react'; +import { Tabs } from 'antd'; +import styles from './EquipmentManagement.less'; + +// 导入子页面组件 +import WasteGasPollutionControl from './secondary_menu/WasteGasPollutionControl'; +import WastewaterFacilityManagement from './secondary_menu/WastewaterFacilityManagement'; +import ProtectionFacilityMaintenance from './secondary_menu/ProtectionFacilityMaintenance'; + +const EquipmentManagement = () => { + const [activeTab, setActiveTab] = useState('waste-gas-control'); + + // 标签页配置 + const tabItems = [ + { + key: 'waste-gas-control', + label: '废气污染防治信息', + children: + }, + { + key: 'wastewater-facility', + label: '废水设置运行管理', + children: + }, + { + key: 'protection-facility', + label: '防护设施检维修管理', + children: + } + ]; + + // 标签页切换处理 + const handleTabChange = (key) => { + setActiveTab(key); + }; + + return ( +
+ +
+ ); +}; + +export default EquipmentManagement; + diff --git a/src/pages/business_emergencyPlan/components/EquipmentManagement.less b/src/pages/business_emergencyPlan/components/EquipmentManagement.less new file mode 100644 index 0000000..e844009 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/EquipmentManagement.less @@ -0,0 +1,119 @@ +.container { + width: 100%; + height: 100%; + padding: 16px; + // background-color: #f5f5f5; + + .tabs { + height: 100%; + background-color: transparent; + border-radius: 8px; + // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + + :global(.ant-tabs-nav) { + margin: 0; + padding: 0 0px; + background-color: transparent; + border-bottom: none; + } + + :global(.ant-tabs-tab) { + padding: 16px 24px !important; + font-size: 14px !important; + font-weight: 400 !important; + color: #AFAFAF !important; + background: transparent !important; + border: none !important; + position: relative; + + &:hover { + color: #AFAFAF !important; + background-color: transparent !important; + } + + &.ant-tabs-tab-active { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + + + } + } + + // 额外的全局样式覆盖,确保优先级足够高 + :global(.ant-tabs-tab.ant-tabs-tab-active) { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + } + + // 更强的选择器优先级 + :global(.ant-tabs .ant-tabs-tab.ant-tabs-tab-active) { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + } + + // 针对可能的嵌套结构 + :global(.ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active) { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + } + + // // 覆盖 Ant Design 5.x 的高优先级样式 + // :global(.ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + // color: #009D6F !important; + // text-shadow: none !important; + // } + + // 使用更高优先级的选择器 + :global(.ant-tabs.ant-tabs-top .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + color: #009D6F !important; + text-shadow: none !important; + } + + // 针对 CSS 模块的覆盖 + :global(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + color: #009D6F !important; + text-shadow: none !important; + } + + // 最高优先级覆盖 + :global(.ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + color: #009D6F !important; + text-shadow: none !important; + } + + // 覆盖Ant Design的默认下划线 + :global(.ant-tabs-ink-bar) { + background: none !important; + &::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%) rotate(180deg); + width: 38.36132812500014px; + height: 3.3613271713256965px; + background-color: #009D6F; + opacity: 1; + border-radius: 2px; + z-index: 1; + } + } + + :global(.ant-tabs-content-holder) { + height: calc(100% - 60px); + // padding: 20px; + + .ant-tabs-content { + height: 100%; + + .ant-tabs-tabpane { + height: 100%; + } + } + } + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/EvaluationReport.js b/src/pages/business_emergencyPlan/components/EvaluationReport.js new file mode 100644 index 0000000..3015091 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/EvaluationReport.js @@ -0,0 +1,57 @@ +import React, { useState } from 'react'; +import { Tabs } from 'antd'; +import styles from './EvaluationReport.less'; + +// 导入子页面组件 +import PermitStatistics from './secondary_menu/PermitStatistics'; +import EnvironmentalTaskList from './secondary_menu/EnvironmentalTaskList'; +import DischargePermitManagement from './secondary_menu/DischargePermitManagement'; + +const EvaluationReport = () => { + const [activeTab, setActiveTab] = useState('permit-statistics'); + + // 标签页配置 + const tabItems = [ + { + key: 'permit-statistics', + label: '许可证信息统计表', + children: + }, + { + key: 'environmental-task-list', + label: '环保管理任务清单', + children: + }, + { + key: 'discharge-permit-management', + label: '排污许可执行管理', + children: + } + ]; + + // 标签页切换处理 + const handleTabChange = (key) => { + setActiveTab(key); + }; + + return ( +
+ +
+ ); +}; + +export default EvaluationReport; diff --git a/src/pages/business_emergencyPlan/components/EvaluationReport.less b/src/pages/business_emergencyPlan/components/EvaluationReport.less new file mode 100644 index 0000000..e844009 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/EvaluationReport.less @@ -0,0 +1,119 @@ +.container { + width: 100%; + height: 100%; + padding: 16px; + // background-color: #f5f5f5; + + .tabs { + height: 100%; + background-color: transparent; + border-radius: 8px; + // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + + :global(.ant-tabs-nav) { + margin: 0; + padding: 0 0px; + background-color: transparent; + border-bottom: none; + } + + :global(.ant-tabs-tab) { + padding: 16px 24px !important; + font-size: 14px !important; + font-weight: 400 !important; + color: #AFAFAF !important; + background: transparent !important; + border: none !important; + position: relative; + + &:hover { + color: #AFAFAF !important; + background-color: transparent !important; + } + + &.ant-tabs-tab-active { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + + + } + } + + // 额外的全局样式覆盖,确保优先级足够高 + :global(.ant-tabs-tab.ant-tabs-tab-active) { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + } + + // 更强的选择器优先级 + :global(.ant-tabs .ant-tabs-tab.ant-tabs-tab-active) { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + } + + // 针对可能的嵌套结构 + :global(.ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active) { + color: #009D6F !important; + background-color: #fff !important; + border-bottom: none !important; + } + + // // 覆盖 Ant Design 5.x 的高优先级样式 + // :global(.ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + // color: #009D6F !important; + // text-shadow: none !important; + // } + + // 使用更高优先级的选择器 + :global(.ant-tabs.ant-tabs-top .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + color: #009D6F !important; + text-shadow: none !important; + } + + // 针对 CSS 模块的覆盖 + :global(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + color: #009D6F !important; + text-shadow: none !important; + } + + // 最高优先级覆盖 + :global(.ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { + color: #009D6F !important; + text-shadow: none !important; + } + + // 覆盖Ant Design的默认下划线 + :global(.ant-tabs-ink-bar) { + background: none !important; + &::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%) rotate(180deg); + width: 38.36132812500014px; + height: 3.3613271713256965px; + background-color: #009D6F; + opacity: 1; + border-radius: 2px; + z-index: 1; + } + } + + :global(.ant-tabs-content-holder) { + height: calc(100% - 60px); + // padding: 20px; + + .ant-tabs-content { + height: 100%; + + .ant-tabs-tabpane { + height: 100%; + } + } + } + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/OnlineMonitoring.js b/src/pages/business_emergencyPlan/components/OnlineMonitoring.js new file mode 100644 index 0000000..3e4b6b5 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/OnlineMonitoring.js @@ -0,0 +1,716 @@ + +import React, { useEffect, useRef, useState } from 'react'; +import { Card, Result, Select, Button } from 'antd'; +import * as echarts from 'echarts'; +import StandardTable from '@/components/StandardTable'; +import styles from './OnlineMonitoring.less'; + +import alarm0 from '@/assets/safe_majorHazard/online_monitoring/alarm0.png'; +import alarm1 from '@/assets/safe_majorHazard/online_monitoring/alarm1.png'; +import alarm2 from '@/assets/safe_majorHazard/online_monitoring/alarm2.png'; +import alarm3 from '@/assets/safe_majorHazard/online_monitoring/alarm3.png'; +import exportIcon from '@/assets/safe_majorHazard/online_monitoring/export.png'; +import deleteIcon from '@/assets/safe_majorHazard/online_monitoring/delete.png'; + +const OnlineMonitoring = () => { + const chartRef = useRef(null); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRows, setSelectedRows] = useState([]); + const [loading, setLoading] = useState(false); + const [dataSource, setDataSource] = useState([]); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 5, + total: 0, + }); + + useEffect(() => { + if (chartRef.current) { + const chart = echarts.init(chartRef.current); + + const option = { + color: ['#04A7F3', '#E7C42C', '#EC6941'], + + legend: { + data: ['液位', '温度', '压力'], + top: "-3px", + left: "center", + itemGap: 40, // 图例间距 + textStyle: { + fontSize: 10 + } + }, + grid: { + left: '2%', + right: '4%', + bottom: '2%', + top: '12%', + containLabel: true + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['0:00', '2:00', '4:00', '6:00', '8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00', '24:00'], + axisLabel: { + fontSize: 10 + } + }, + yAxis: { + type: 'value', + min: 0, + max: 500, + axisLabel: { + formatter: '{value}', + fontSize: 10 + } + }, + series: [ + { + name: '液位', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#04A7F3' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(4, 167, 243, 0.3)' }, + { offset: 1, color: 'rgba(4, 167, 243, 0)' } + ] + } + }, + symbol: 'none', // 不显示数据点 + data: [120, 200, 150, 300, 250, 400, 350, 280, 320, 180, 220, 160, 140] + }, + { + name: '温度', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#E7C42C' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(231, 196, 44, 0.3)' }, + { offset: 1, color: 'rgba(231, 196, 44, 0)' } + ] + } + }, + symbol: 'none', + data: [80, 120, 100, 180, 160, 220, 200, 150, 170, 90, 110, 85, 75] + }, + { + name: '压力', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#EC6941' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 1, + x2: 0, + y2: 0, + colorStops: [ + { offset: 0, color: 'rgba(236, 105, 65, 0)' }, + { offset: 1, color: 'rgba(236, 105, 65, 0.3)' } + ] + } + }, + symbol: 'none', + data: [200, 300, 250, 450, 400, 430, 480, 420, 480, 280, 320, 260, 240] + } + ] + }; + + chart.setOption(option); + + // 响应式调整 - 使用ResizeObserver监听容器尺寸变化 + let resizeTimer = null; + const handleResize = () => { + // 防抖处理,避免频繁调用resize + if (resizeTimer) { + clearTimeout(resizeTimer); + } + resizeTimer = setTimeout(() => { + chart.resize(); + }, 100); + }; + + // 监听窗口大小变化 + window.addEventListener('resize', handleResize); + + // 监听容器尺寸变化(解决菜单栏伸缩时的自适应问题) + let resizeObserver = null; + if (window.ResizeObserver) { + resizeObserver = new ResizeObserver(() => { + // 使用setTimeout确保DOM更新完成后再调整图表 + setTimeout(() => { + handleResize(); + }, 0); + }); + resizeObserver.observe(chartRef.current); + } + + return () => { + window.removeEventListener('resize', handleResize); + if (resizeObserver) { + resizeObserver.disconnect(); + } + if (resizeTimer) { + clearTimeout(resizeTimer); + } + chart.dispose(); + }; + } + }, []); + + // 表格列定义 + const columns = [ + { + title: '编号', + dataIndex: 'id', + key: 'id', + width: 80, + render: (text, record, index) => { + const page = pagination.current || 1; + const pageSize = pagination.pageSize || 5; + const number = (page - 1) * pageSize + index + 1; + return `0${number}`.slice(-2); + } + }, + { + title: '报警时间', + dataIndex: 'alarmTime', + key: 'alarmTime', + width: 150, + }, + { + title: '报警传感器名称', + dataIndex: 'sensorName', + key: 'sensorName', + width: 150, + }, + { + title: '报警类型', + dataIndex: 'alarmType', + key: 'alarmType', + width: 120, + }, + { + title: '报警内容', + dataIndex: 'alarmContent', + key: 'alarmContent', + width: 200, + }, + { + title: '优先级', + dataIndex: 'priority', + key: 'priority', + width: 80, + render: (text) => { + const colorMap = { + '高': '#FF4D4F', + '中': '#FAAD14', + '低': '#52C41A' + }; + return {text}; + } + }, + { + title: '处理状态', + dataIndex: 'status', + key: 'status', + width: 100, + render: (text) => { + const statusMap = { + '未处理': { color: '#FF4D4F', bg: '#FFF2F0' }, + '处理中': { color: '#FAAD14', bg: '#FFFBE6' }, + '已处理': { color: '#52C41A', bg: '#F6FFED' } + }; + const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' }; + return ( + + {text} + + ); + } + }, + { + title: '处理时间', + dataIndex: 'processTime', + key: 'processTime', + width: 150, + }, + { + title: '处理人', + dataIndex: 'processor', + key: 'processor', + width: 100, + }, + { + title: '操作', + key: 'action', + width: 120, + render: (_, record) => ( +
+ +
+ ), + }, + ]; + + // 模拟数据 + const mockData = [ + { + key: '1', + id: '001', + alarmTime: '2024-01-15 08:30:25', + sensorName: 'LNG储罐', + alarmType: '温度超限', + alarmContent: '储罐温度超过安全阈值', + priority: '高', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '2', + id: '002', + alarmTime: '2024-01-15 09:15:10', + sensorName: 'LNG储罐', + alarmType: '压力异常', + alarmContent: '管道压力异常波动', + priority: '中', + status: '处理中', + processTime: '2024-01-15 09:20:00', + processor: '张三', + }, + { + key: '3', + id: '003', + alarmTime: '2024-01-15 10:45:30', + sensorName: 'LNG储罐', + alarmType: '液位异常', + alarmContent: '储罐液位低于警戒线', + priority: '高', + status: '已处理', + processTime: '2024-01-15 11:00:15', + processor: '李四', + }, + { + key: '4', + id: '004', + alarmTime: '2024-01-15 11:20:45', + sensorName: 'LNG储罐', + alarmType: '气体泄漏', + alarmContent: '检测到可燃气体泄漏', + priority: '高', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '5', + id: '005', + alarmTime: '2024-01-15 12:10:20', + sensorName: 'LNG储罐', + alarmType: '设备振动', + alarmContent: '设备异常振动', + priority: '低', + status: '已处理', + processTime: '2024-01-15 12:30:00', + processor: '王五', + }, + { + key: '6', + id: '006', + alarmTime: '2024-01-15 13:25:15', + sensorName: 'LNG管道', + alarmType: '流量异常', + alarmContent: '管道流量异常波动', + priority: '中', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '7', + id: '007', + alarmTime: '2024-01-15 14:10:30', + sensorName: 'LNG储罐', + alarmType: '温度异常', + alarmContent: '储罐温度异常升高', + priority: '高', + status: '处理中', + processTime: '2024-01-15 14:15:00', + processor: '赵六', + }, + { + key: '8', + id: '008', + alarmTime: '2024-01-15 15:45:20', + sensorName: 'LNG管道', + alarmType: '压力超限', + alarmContent: '管道压力超过安全阈值', + priority: '高', + status: '已处理', + processTime: '2024-01-15 16:00:00', + processor: '孙七', + }, + { + key: '9', + id: '009', + alarmTime: '2024-01-15 16:30:45', + sensorName: 'LNG储罐', + alarmType: '液位超限', + alarmContent: '储罐液位超过警戒线', + priority: '中', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '10', + id: '010', + alarmTime: '2024-01-15 17:15:10', + sensorName: 'LNG管道', + alarmType: '泄漏检测', + alarmContent: '检测到轻微气体泄漏', + priority: '低', + status: '已处理', + processTime: '2024-01-15 17:30:00', + processor: '周八', + }, + { + key: '11', + id: '011', + alarmTime: '2024-01-15 18:20:35', + sensorName: 'LNG储罐', + alarmType: '设备故障', + alarmContent: '储罐阀门异常关闭', + priority: '高', + status: '处理中', + processTime: '2024-01-15 18:25:00', + processor: '吴九', + }, + { + key: '12', + id: '012', + alarmTime: '2024-01-15 19:05:50', + sensorName: 'LNG管道', + alarmType: '温度异常', + alarmContent: '管道温度异常下降', + priority: '中', + status: '未处理', + processTime: '-', + processor: '-', + }, + ]; + + // 初始化数据 + useEffect(() => { + setPagination(prev => ({ ...prev, total: mockData.length })); + }, []); + + // 根据分页获取当前页数据 + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const startIndex = (current - 1) * pageSize; + const endIndex = startIndex + pageSize; + return mockData.slice(startIndex, endIndex); + }; + + // 表格选择变化 + const onSelectChange = (newSelectedRowKeys, newSelectedRows) => { + setSelectedRowKeys(newSelectedRowKeys); + setSelectedRows(newSelectedRows); + }; + + // 分页变化处理 + const handleTableChange = (pagination) => { + setPagination(prev => ({ + ...prev, + current: pagination.current, + pageSize: pagination.pageSize, + })); + }; + + // 导出功能 + const handleExport = () => { + console.log('导出数据'); + // 这里可以添加导出逻辑 + }; + + // 批量删除功能 + const handleBatchDelete = () => { + if (selectedRowKeys.length === 0) { + console.log('没有选中任何行'); + // 可以在这里添加提示用户选择行的逻辑 + return; + } + console.log('批量删除', selectedRowKeys); + // 这里可以添加批量删除逻辑 + }; + + return ( +
+
+
+
+
+
+ alarm0 +
+ +
+
总报警
+
1456
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+ alarm1 +
+
+
一级报警
+
357
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+ alarm2 +
+
+
二级报警
+
401
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+ alarm3 +
+
+
三级报警
+
556
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+
+
+
+
预警看板
+
+
+
检测对象
+ + + + + + +
+
+
+
+ {/*
超标污染物数量
*/} + {chartReady && ( + + )} +
+
62%
+
超标污染物数量
+
+
+
+ {/*
超标污染物种类
*/} + {chartReady && ( + + )} +
+
25%
+
超标污染物种类
+
+
+
+
+ + {/* 超标排放统计 */} +
+
+
超标排放统计
+
+ + +
+
+
+ {chartReady && ( + + )} +
+
+ + {/* 环境分类卡片 */} +
+ +
+
AIR POLLUSION
+
+
+
+
大气环境
+
大气环境
+
+
特征污染物名录库
+
+ icon_factory +
+
+
+
WATER POLLUSION
+
+
+
+
水环境
+
水环境
+
+
特征污染物名录库
+
+ icon_water +
+
+
+
SOILPOLLUSION
+
+
+
+
土壤及地下水
+
土壤及地下水
+
+
特征污染物名录库
+
+ icon_soil + +
+
+
+
+ + {/* 污染源管理表格区域 */} +
+
+ 污染源管理 +
+ + +
+
+ + ({ + name: record.name, + }), + }} + pagination={{ + showTotal: (total, range) => `共 ${total} 条`, + showSizeChanger: true, + showQuickJumper: true, + pageSizeOptions: ['5', '10', '20', '50', '100'], + defaultPageSize: 5, + size: 'small', + }} + /> +
+
+ ); +}; + +export default PollutionSourceManagement; + diff --git a/src/pages/business_emergencyPlan/components/PollutionSourceManagement.less b/src/pages/business_emergencyPlan/components/PollutionSourceManagement.less new file mode 100644 index 0000000..7f48f4c --- /dev/null +++ b/src/pages/business_emergencyPlan/components/PollutionSourceManagement.less @@ -0,0 +1,590 @@ +.pollutionDashboard { + width: 100%; + min-height: 75vh; + // background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); + padding: 15px; + box-sizing: border-box; + + // 顶部统计区域 + .statsSection { + display: flex; + gap: 15px; + margin-bottom: 15px; + height: 35vh; + align-items: stretch; + + // 污染物排放统计卡片 + .pollutantStatsCard { + width: 37%; + height: 100%; + background: url('@/assets/business_envinformation/background7.svg'), + linear-gradient(180deg, #E2FFF5 0%, rgba(255, 255, 255, 0.6) 51.44%), + linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)); + background-repeat: no-repeat; + border-radius: 2px; + padding: 10px 20px; + display: flex; + flex-direction: column; + + .cardTitle { + background: transparent; + color: #000000; + font-weight: 500; + font-size: 16px; + padding: 0; + margin: 0 0 15px 0; + border: none; + display: flex; + align-items: center; + justify-content: space-between; + } + } + + // 超标排放统计卡片 + .exceedanceStatsCard { + width: 40%; + height: 100%; + background: url('@/assets/business_envinformation/background8.svg'), + linear-gradient(180.21deg, rgba(255, 227, 227, 0.58) 0.18%, #FFFFFF 53.1%), + linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)); + background-repeat: no-repeat; + border-radius: 2px; + padding: 10px 20px; + display: flex; + flex-direction: column; + + .cardTitle { + background: transparent; + color: #000000; + font-weight: 500; + font-size: 16px; + padding: 0; + margin: 0 0 15px 0; + border: none; + display: flex; + align-items: center; + justify-content: space-between; + } + + .filterGroup { + display: flex; + gap: 10px; + } + + .exceedanceTimeFilter, + .exceedanceCategoryFilter { + width: 100px; + flex-shrink: 0; + + :global(.ant-select-selector) { + border-radius: 2px; + border: 1px solid #FFC3C3; + background: #FFDEDEB2; + transition: all 0.3s ease; + } + } + } + + // 卡片头部筛选器 + .cardHeader { + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; + margin-bottom: 0; + + .cardTitle { + background: transparent; + color: #000000; + font-weight: 500; + font-size: 16px; + padding: 0; + margin: 0; + border: none; + flex-shrink: 0; + } + + .filterGroup { + display: flex; + gap: 10px; + } + + .timeFilter, + .categoryFilter { + width: 100px; + flex-shrink: 0; + + :global(.ant-select-selector) { + border-radius: 2px; + border: 1px solid #73E9C6; + background: #C0FFE9AB; + transition: all 0.3s ease; + } + } + } + + // 图表容器 + .chartsContainer { + display: flex; + gap: 20px; + justify-content: space-between; + background: transparent; + flex: 1; + + .pieChartContainer { + flex: 1; + text-align: center; + position: relative; + background: transparent; + height: 100%; + min-height: 200px; + + .chartTitle { + font-size: 14px; + color: #666; + margin-bottom: 10px; + font-weight: 500; + background: transparent; + } + + .chartCenterContent { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 10; + background: transparent; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .chartValue { + font-size: 18px; + font-weight: bold; + color: #FF2F2F; + background: transparent; + margin: 0; + line-height: 1; + } + + .chartLabel { + font-size: 12px; + font-weight: 500; + color: #000000; + background: transparent; + margin: 0; + margin-top: 2px; + line-height: 1; + } + } + } + + // 条形图容器 + .barChartContainer { + flex: 1; + margin-top: 10px; + } + + // 环境分类卡片区域 + .environmentalCategories { + flex: 1; // 撑满剩余宽度 + height: 100%; + display: flex; + flex-direction: column; + gap: 15px; + // background-color: pink; + + .categoryCard1 { + flex: 1; + background: linear-gradient(90deg, rgba(27, 201, 181, 0.2) 0%, rgba(58, 255, 216, 0) 100%); + position: relative; + padding: 5px 15px; + + .airPollutionText { + position: absolute; + top: 2px; + left: 12px; + background: linear-gradient(183.17deg, rgba(0, 255, 217, 0.1) 2.62%, rgba(0, 153, 131, 0.1) 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 600; + font-style: normal; + font-size: 22px; + line-height: 22px; + letter-spacing: 0%; + z-index: 1; + pointer-events: none; + } + } + + .categoryCard2 { + flex: 1; + background: linear-gradient(90deg, rgba(36, 149, 255, 0.2) 0%, rgba(85, 164, 255, 0) 100%); + position: relative; + padding: 5px 15px; + + .waterPollutionText { + position: absolute; + top: 2px; + left: 12px; + background: linear-gradient(183.17deg, rgba(0, 170, 255, 0.1) 2.62%, rgba(89, 186, 255, 0.1) 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 600; + font-style: normal; + font-size: 22px; + line-height: 22px; + letter-spacing: 0%; + z-index: 1; + pointer-events: none; + } + } + + .categoryCard3 { + flex: 1; + background: linear-gradient(90deg, rgba(25, 60, 234, 0.2) 0%, rgba(139, 193, 255, 0) 100%); + position: relative; + cursor: pointer; + padding: 5px 15px; + + .soilPollutionText { + position: absolute; + top: 2px; + left: 12px; + background: linear-gradient(183.17deg, rgba(0, 89, 255, 0.1) 2.62%, rgba(89, 117, 255, 0.1) 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 600; + font-style: normal; + font-size: 22px; + line-height: 22px; + letter-spacing: 0%; + z-index: 1; + pointer-events: none; + } + } + + .categoryContent { + display: flex; + justify-content: space-between; + align-items: center; + + .categoryInfo { + flex: 1; + + .titleContainer { + display: flex; + flex-direction: column; + margin-bottom: 5px; + } + + .categoryTitle { + font-size: 16px; + font-weight: 600; + color: #333; + margin-bottom: 0px; + + &.atmosphereGradient { + background: linear-gradient(183.17deg, #0EE5C5 2.62%, #08C2C2 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 700; + font-size: 24px; + line-height: 22px; + letter-spacing: 0%; + margin-top: 10px; + } + + &.atmosphereMirror { + background: linear-gradient(183.17deg, rgba(168, 255, 242, 0) 2.62%, rgba(86, 237, 214, 0) 65.7%, #00D9B9 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 700; + font-size: 24px; + line-height: 22px; + letter-spacing: 0%; + margin-top: 0px; + transform: scaleY(-1); + } + + &.waterGradient { + background: linear-gradient(183.17deg, #40AFFF 2.62%, #00B3FF 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 700; + font-size: 24px; + line-height: 22px; + letter-spacing: 0%; + margin-top: 10px; + } + + &.waterMirror { + background: linear-gradient(183.17deg, rgba(64, 175, 255, 0) 2.62%, rgba(0, 179, 255, 0) 65.7%, #00B3FF 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 700; + font-size: 24px; + line-height: 22px; + letter-spacing: 0%; + margin-top: 0px; + transform: scaleY(-1); + } + + &.soilGradient { + background: linear-gradient(183.17deg, #6E90FF 2.62%, #3D90EF 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 700; + font-size: 24px; + line-height: 22px; + letter-spacing: 0%; + margin-top: 10px; + } + + &.soilMirror { + background: linear-gradient(183.17deg, rgba(110, 144, 255, 0) 2.62%, rgba(61, 144, 239, 0) 65.7%, #3D90EF 132.53%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-family: 'Alimama ShuHeiTi', sans-serif; + font-weight: 700; + font-size: 24px; + line-height: 22px; + letter-spacing: 0%; + margin-top: 0px; + transform: scaleY(-1); + } + } + + .categorySubtitle { + font-size: 12px; + color: #666; + + &.pollutantSubtitle { + color: rgba(51, 51, 51, 1); + font-family: 'Alibaba PuHuiTi', sans-serif; + font-weight: 500; + font-size: 14px; + line-height: 22px; + letter-spacing: 4%; + margin-top: -20px; + } + } + } + + .categoryIcon { + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + margin-right: 5px; + // border-radius: 50%; + // background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + + .factoryIcon, + .waterIcon, + .soilIcon { + font-size: 20px; + filter: grayscale(0); + } + } + } + } + } + + // 表格卡片 + .tableCard { + background: #fff; + border-radius: 2px; + // box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + // border: 1px solid rgba(255, 255, 255, 0.2); + // backdrop-filter: blur(10px); + padding: 20px; + + .cardTitle { + // background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); + color: rgba(0, 0, 0, 1); + font-weight: 500; + font-size: 16px; + padding: 12px 16px; + margin: -20px -20px 10px -20px; + // border-radius: 12px 12px 0 0; + // border-bottom: 2px solid #e8f4fd; + display: flex; + justify-content: space-between; + align-items: center; + + .titleButtons { + display: flex; + gap: 10px; + align-items: center; + + .titleAddButton { + background: rgba(0, 212, 138, 1); + border: none; + border-radius: 4px; + color: #fff; + font-weight: 500; + transition: all 0.3s ease; + height: 32px; + padding: 4px 15px; + font-size: 14px; + + &:hover { + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); + } + } + + .titleReportButton { + border-radius: 4px; + border: 1px solid #d9d9d9; + background: #fff; + color: #666; + transition: all 0.3s ease; + height: 32px; + padding: 4px 15px; + font-size: 14px; + + &:hover { + border-color: #40a9ff; + color: #40a9ff; + transform: translateY(-1px); + } + } + } + } + } + + + // 自定义Tooltip样式 + .customTooltip { + background: rgba(0, 0, 0, 0.8); + border-radius: 8px; + padding: 10px; + color: white; + font-size: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + + .tooltipLabel { + font-weight: 600; + margin-bottom: 5px; + color: #fff; + } + + .tooltipStatus { + color: #ff6b6b; + margin-bottom: 3px; + } + + .tooltipExceedance { + color: #ffd93d; + margin-bottom: 3px; + } + + .tooltipType { + color: #a8e6cf; + font-size: 11px; + } + } + + // 响应式设计 + @media (max-width: 1200px) { + .statsSection { + grid-template-columns: 1fr 1fr; + grid-template-rows: auto auto; + + .environmentalCategories { + grid-column: 1 / -1; + flex-direction: row; + gap: 15px; + + .categoryCard { + flex: 1; + } + } + } + } + + @media (max-width: 768px) { + padding: 10px; + + .statsSection { + grid-template-columns: 1fr; + gap: 15px; + + .environmentalCategories { + flex-direction: column; + } + } + + } + + // 表格样式优化 + :global(.ant-table) { + // border-radius: 8px; + overflow: hidden; + // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + font-size: 12px; + color: rgba(0, 0, 0, 0.85); + + :global(.ant-table-thead > tr > th) { + // background: linear-gradient(90deg, #f8f9fa 0%, #e9ecef 100%); + // border-bottom: 2px solid #dee2e6; + font-weight: 400; + + } + + :global(.ant-table-tbody > tr) { + // transition: all 0.3s ease; + } + + :global(.ant-table-tbody > tr > td) { + // border-bottom: 1px solid #f0f0f0; + } + } + + // 分页器样式 + // :global(.ant-pagination) { + // margin-top: 20px; + // text-align: center; + + // :global(.ant-pagination-item) { + // border-radius: 6px; + // border: 1px solid #d9d9d9; + // transition: all 0.3s ease; + + // &.ant-pagination-item-active { + // background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + // border-color: #667eea; + // color: white; + // } + // } + + // :global(.ant-pagination-prev), + // :global(.ant-pagination-next) { + // border-radius: 6px; + // border: 1px solid #d9d9d9; + // transition: all 0.3s ease; + // } + // } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/DischargePermitManagement.js b/src/pages/business_emergencyPlan/components/secondary_menu/DischargePermitManagement.js new file mode 100644 index 0000000..765d995 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/DischargePermitManagement.js @@ -0,0 +1,345 @@ +import React, { useState } from 'react'; +import { Button, Input, Select } from 'antd'; +import { SearchOutlined, RedoOutlined, UploadOutlined, DownloadOutlined, DeleteOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './DischargePermitManagement.less'; +// import attachment from '@/assets/business_envinformation/attachment.svg'; +import downloadicon from '@/assets/business_envinformation/downloadicon.svg'; +import deleteicon from '@/assets/business_envinformation/deleteicon.svg'; + + + + +const DischargePermitManagement = () => { + const [activeTab, setActiveTab] = useState('actual'); + + // 实际排放数据 + const actualEmissionData = [ + { key: 1, emissionType: '前林市', pollutant: '51669811', outletType: '信用风险管理与法律防', outletName: '北京那蓝国际贸易有限公司', permittedEmission: '5年', annualTotal: '2025-08-15' }, + { key: 2, emissionType: '拉萨市', pollutant: '34887875', outletType: '涉外警务', outletName: '中瀚石林企业咨询(上海)有限公司', permittedEmission: '5年', annualTotal: '2025-08-15' }, + { key: 3, emissionType: '长家界市', pollutant: '12345678', outletType: '环境设计', outletName: '上海环境科技有限公司', permittedEmission: '5年', annualTotal: '2025-08-15' }, + { key: 4, emissionType: '北京市', pollutant: '87654321', outletType: '污染治理', outletName: '北京环保科技有限公司', permittedEmission: '5年', annualTotal: '2025-08-15' }, + { key: 5, emissionType: '上海市', pollutant: '11223344', outletType: '排放监测', outletName: '上海监测技术有限公司', permittedEmission: '5年', annualTotal: '2025-08-15' }, + { key: 6, emissionType: '广州市', pollutant: '55667788', outletType: '工业废水', outletName: '广州环保科技股份有限公司', permittedEmission: '3年', annualTotal: '2025-09-10' }, + { key: 7, emissionType: '深圳市', pollutant: '99887766', outletType: '生活污水', outletName: '深圳水务集团有限公司', permittedEmission: '4年', annualTotal: '2025-07-20' }, + { key: 8, emissionType: '杭州市', pollutant: '33445566', outletType: '农业面源', outletName: '杭州农业科技有限公司', permittedEmission: '2年', annualTotal: '2025-10-05' }, + { key: 9, emissionType: '南京市', pollutant: '77889900', outletType: '工业废气', outletName: '南京工业集团股份有限公司', permittedEmission: '6年', annualTotal: '2025-06-15' }, + { key: 10, emissionType: '武汉市', pollutant: '11223355', outletType: '交通污染', outletName: '武汉交通发展有限公司', permittedEmission: '3年', annualTotal: '2025-11-20' }, + { key: 11, emissionType: '成都市', pollutant: '66778899', outletType: '建筑扬尘', outletName: '成都建筑工程有限公司', permittedEmission: '5年', annualTotal: '2025-05-30' }, + { key: 12, emissionType: '西安市', pollutant: '44556677', outletType: '餐饮油烟', outletName: '西安餐饮管理有限公司', permittedEmission: '4年', annualTotal: '2025-12-10' } + ]; + + // 超标排放数据 + const excessiveEmissionData = [ + { key: 1, emissionType: '俞林市', pollutant: '51669811', outletType: '信用风险管理与法律防', outletName: '北京那蓝国际贸易有限公司', permittedEmission: '5年', annualTotal: '2025-08-15' }, + { key: 2, emissionType: '拉萨市', pollutant: '34887875', outletType: '涉外警务', outletName: '中瀚石林企业咨询(上海)有限公司', permittedEmission: '5年', annualTotal: '2025-08-09' }, + { key: 3, emissionType: '长家界市', pollutant: '1716652546', outletType: '环境设计', outletName: '水木晨曦(北京)科技有限公司', permittedEmission: '5年', annualTotal: '2025-08-17' }, + { key: 4, emissionType: '潭市', pollutant: '384654762', outletType: '电子竞技运动与管理', outletName: '亚商桥(北京)咨询有限公司', permittedEmission: '5年', annualTotal: '2025-08-18' }, + { key: 5, emissionType: '次州市', pollutant: '34669295254', outletType: '精算学', outletName: '中讯通讯科技有限公司', permittedEmission: '5年', annualTotal: '2025-08-13' }, + { key: 6, emissionType: '驻马店市', pollutant: '4347052411', outletType: '数字媒体艺术', outletName: '嘉实瑞沃德(北京)商贸有限公司', permittedEmission: '5年', annualTotal: '2025-08-21' }, + { key: 7, emissionType: '三亚市', pollutant: '388946891', outletType: '技术侦察学', outletName: '中大国际文化有限公司', permittedEmission: '5年', annualTotal: '2025-08-17' }, + { key: 8, emissionType: '巢湖市', pollutant: '7190228566', outletType: '财政学', outletName: '嘉实瑞沃德(北京)商贸有限公司', permittedEmission: '5年', annualTotal: '2025-08-20' }, + { key: 9, emissionType: '东营市', pollutant: '6656363924', outletType: '保险学', outletName: '北京济丰国际医院管理有限公司', permittedEmission: '5年', annualTotal: '2025-08-27' }, + { key: 10, emissionType: '九龙', pollutant: '622145211', outletType: '英语', outletName: '北京庆奔科贸有限公司', permittedEmission: '5年', annualTotal: '2025-08-28' }, + { key: 11, emissionType: '深圳市', pollutant: '99887766', outletType: '生活污水', outletName: '深圳水务集团有限公司', permittedEmission: '4年', annualTotal: '2025-07-20' }, + { key: 12, emissionType: '杭州市', pollutant: '33445566', outletType: '农业面源', outletName: '杭州农业科技有限公司', permittedEmission: '2年', annualTotal: '2025-10-05' } + ]; + + // 污染治理设备异常情况数据 + const equipmentAbnormalData = [ + { key: 1, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 2, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 3, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 4, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 5, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 6, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 7, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 8, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 9, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 10, emissionType: '类型1', pollutant: '10:15:10—10:50:10', outletType: '管道', outletName: '老化', permittedEmission: '因子名称', annualTotal: '管口5m内' }, + { key: 11, emissionType: '类型2', pollutant: '11:20:15—11:45:30', outletType: '风机', outletName: '磨损', permittedEmission: '因子名称2', annualTotal: '风机10m内' }, + { key: 12, emissionType: '类型3', pollutant: '14:30:20—15:10:40', outletType: '泵站', outletName: '堵塞', permittedEmission: '因子名称3', annualTotal: '泵站15m内' } + ]; + + // 实际排放和超标排放的表格列定义 + const normalColumns = [ + { + title: '序号', + dataIndex: 'key', + key: 'key', + width: 80, + align: 'center', + }, + { + title: '排放物类型', + dataIndex: 'emissionType', + key: 'emissionType', + width: 100, + }, + { + title: '污染物', + dataIndex: 'pollutant', + key: 'pollutant', + width: 100, + }, + { + title: '排放口类型', + dataIndex: 'outletType', + key: 'outletType', + width: 160, + }, + { + title: '排放口编号/排放口名称', + dataIndex: 'outletName', + key: 'outletName', + width: 220, + }, + { + title: '许可排放量(吨)', + dataIndex: 'permittedEmission', + key: 'permittedEmission', + width: 120, + }, + { + title: '年度合计', + dataIndex: 'annualTotal', + key: 'annualTotal', + width: 120, + }, + { + title: '第一季度', + key: 'q1', + width: 80, + render: () => 附件, + }, + { + title: '二季度', + key: 'q2', + width: 80, + render: () => 附件, + }, + { + title: '三季度', + key: 'q3', + width: 80, + render: () => 附件, + }, + { + title: '四季度', + key: 'q4', + width: 80, + render: () => 附件, + }, + { + title: '操作', + key: 'action', + width: 100, + render: (_, record) => ( +
+ 下载 + 删除 +
+ ), + }, + ]; + + // 污染治理设备异常情况的表格列定义 + const equipmentColumns = [ + { + title: '序号', + dataIndex: 'key', + key: 'key', + width: 80, + align: 'center', + }, + { + title: '故障类型', + dataIndex: 'emissionType', + key: 'emissionType', + width: 100, + }, + { + title: '超标时段(开始时段—结束时段)', + dataIndex: 'pollutant', + key: 'pollutant', + width: 200, + }, + { + title: '故障设施', + dataIndex: 'outletType', + key: 'outletType', + width: 100, + }, + { + title: '故障原因', + dataIndex: 'outletName', + key: 'outletName', + width: 100, + }, + { + title: '排放因子', + dataIndex: 'permittedEmission', + key: 'permittedEmission', + width: 100, + }, + { + title: '排放范围', + dataIndex: 'annualTotal', + key: 'annualTotal', + width: 120, + }, + { + title: '排放因子浓度(mg/m³或dB(A))', + key: 'concentration', + width: 200, + render: () => '2025-08-15', + }, + { + title: '应对', + key: 'response', + width: 80, + render: () => '—', + }, + { + title: '操作', + key: 'action', + width: 120, + render: (_, record) => ( +
+ 下载 + 删除 +
+ ), + }, + ]; + + // 获取当前标签页的数据 + const getCurrentData = () => { + switch (activeTab) { + case 'actual': + return actualEmissionData; + case 'excessive': + return excessiveEmissionData; + case 'equipment': + return equipmentAbnormalData; + default: + return actualEmissionData; + } + }; + + // 获取当前标签页的列定义 + const getCurrentColumns = () => { + switch (activeTab) { + case 'actual': + case 'excessive': + return normalColumns; + case 'equipment': + return equipmentColumns; + default: + return normalColumns; + } + }; + + // 分页配置 + const pagination = { + current: 1, + pageSize: 10, + total: 12, + showTotal: (total) => `共 ${total} 条`, + showSizeChanger: true, + showQuickJumper: true, + }; + + return ( +
+
+
+ + + +
+ +
+ 筛选条件 + + + + +
+
+ +
+ +
+
+ ); +}; + +export default DischargePermitManagement; \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/DischargePermitManagement.less b/src/pages/business_emergencyPlan/components/secondary_menu/DischargePermitManagement.less new file mode 100644 index 0000000..6bb0c75 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/DischargePermitManagement.less @@ -0,0 +1,160 @@ +.dischargePermitManagement { + width: 100%; + height: 100%; + background-color: #fff; + padding: 20px; + + .tabContainer { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 15px; + padding: 0 ; + // border-bottom: 1px solid #e8e8e8; + + .tabButtons { + display: flex; + gap: 0; + background-color: #F4F4F4; + border-radius: 4px; + padding: 4px 8px; + align-items: center; + + .tabButton { + padding: 8px 20px; + border: none; + background-color: transparent; + color: #666; + font-size: 14px; + font-weight: 500; + cursor: pointer; + border-radius: 4px; + transition: all 0.3s ease; + height: auto; + line-height: 1.4; + + &:hover { + color: #1890ff; + background-color: rgba(24, 144, 255, 0.1); + } + + &.active { + background-color: #03C598; + color: #fff; + } + } + } + + .filterSection { + display: flex; + align-items: center; + gap: 12px; + border-radius: 4px; + + .filterLabel { + font-size: 14px; + color: #333; + } + + .filterSelect { + min-width: 120px; + } + + .filterInput { + min-width: 200px; + border-radius: 4px; + } + + .queryBtn { + background-color: #00D48A; + border-color: #00D48A; + border-radius: 4px; + + &:hover { + background-color: #389e0d; + border-color: #389e0d; + } + } + + .resetBtn, .uploadBtn { + background-color: #fff; + color: #666; + border-color: #d9d9d9; + border-radius: 4px; + + + &:hover { + border-color: #1890ff; + color: #1890ff; + } + } + } + } + + .tableContent { + width: 100%; + + // 覆盖表头样式 + :global { + .ant-table-thead > tr > th { + font-weight: 400 !important; + font-size: 12px !important; + color: #333 !important; + text-align: center !important; + background-color: #FAFAFA !important; + } + + .ant-table-tbody > tr > td { + font-size: 12px; + color: #333; + text-align: center; + } + + .ant-table-wrapper { + width: 100%; + max-width: 100%; + } + } + + .attachmentLink { + color: #1890ff; + text-decoration: none; + font-size: 12px; + + &:hover { + text-decoration: underline; + } + } + + .actionButtons { + display: flex; + gap: 20px; + justify-content: center; + align-items: center; + + .downloadIcon, .deleteIcon { + width: 20px; + height: 20px; + cursor: pointer; + transition: all 0.3s ease; + + &:hover { + transform: scale(1.1); + opacity: 0.8; + } + } + + .downloadIcon { + &:hover { + filter: brightness(1.2); + } + } + + .deleteIcon { + &:hover { + filter: brightness(1.2) saturate(1.5); + } + } + } + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/EnvironmentalTaskList.js b/src/pages/business_emergencyPlan/components/secondary_menu/EnvironmentalTaskList.js new file mode 100644 index 0000000..f4e6367 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/EnvironmentalTaskList.js @@ -0,0 +1,42 @@ +import React from 'react'; +import styles from './EnvironmentalTaskList.less'; + +const EnvironmentalTaskList = () => { + return ( +
+
+
+

2) 环保管理任务清单

+

依据排污许可证副本中的环保要求,提供生成环保管理要求任务清单;

+

环保任务清单包括:大气排放口信息,大气污染物有组织排放许可年限值,大气污染物无组织排放年限制、企业大气排放总许可量;废水排放口、废水污染物排放许可限制;固体废物排放信息、自行贮存和自行利用/处置设施信息;工业噪声排放信息;

+

环境管理要求包括:自行检测及记录表、环境管理台账记录。

+
+
+
+
+ 共85条 +
+
+ +
+ + + ... + + + + + + ... + + +
+
+
+
+ ); +}; + +export default EnvironmentalTaskList; diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/EnvironmentalTaskList.less b/src/pages/business_emergencyPlan/components/secondary_menu/EnvironmentalTaskList.less new file mode 100644 index 0000000..c9f43c6 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/EnvironmentalTaskList.less @@ -0,0 +1,105 @@ +.environmentalTaskListContainer { + width: 100%; + height: 72vh; + display: flex; + flex-direction: column; + background-color: #fff; + position: relative; +} + +.environmentalTaskListContent { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 0px 20px; +} + +.environmentalTaskListText { + max-width: 800px; + text-align: left; + line-height: 1.6; + + h2 { + font-size: 20px; + color: #333; + margin-bottom: 20px; + font-weight: 600; + } + + p { + font-size: 16px; + color: #333; + margin-bottom: 15px; + text-indent: 2em; + } +} + +.environmentalTaskListPagination { + position: absolute; + bottom: 20px; + right: 20px; + display: flex; + align-items: center; + gap: 20px; + background: #fff; + padding: 10px 20px; + border-radius: 4px; + // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.paginationInfo { + font-size: 14px; + color: #666; +} + +.paginationControls { + display: flex; + align-items: center; + gap: 10px; +} + +.pageSizeSelect { + padding: 4px 8px; + border: 1px solid #d9d9d9; + border-radius: 4px; + font-size: 12px; + background: #fff; +} + +.pageNumbers { + display: flex; + align-items: center; + gap: 4px; +} + +.pageButton, .pageNumber { + padding: 4px 8px; + border: 1px solid #d9d9d9; + background: #fff; + border-radius: 4px; + font-size: 12px; + cursor: pointer; + min-width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + border-color: #1890ff; + color: #1890ff; + } +} + +.pageNumber.active { + background: #1890ff; + color: #fff; + border-color: #1890ff; +} + +.pageEllipsis { + padding: 4px 8px; + font-size: 12px; + color: #666; +} diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/InformationDisclosure.js b/src/pages/business_emergencyPlan/components/secondary_menu/InformationDisclosure.js new file mode 100644 index 0000000..4366372 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/InformationDisclosure.js @@ -0,0 +1,13 @@ +import React from 'react'; +import styles from './InformationDisclosure.less'; + +const InformationDisclosure = () => { + return ( +
+
待开发
+
+ ); +}; + +export default InformationDisclosure; + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/InformationDisclosure.less b/src/pages/business_emergencyPlan/components/secondary_menu/InformationDisclosure.less new file mode 100644 index 0000000..022f9de --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/InformationDisclosure.less @@ -0,0 +1,15 @@ +.container { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-color: #fff; + + .content { + font-size: 24px; + color: #999999; + font-weight: 400; + } +} + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/PermitManagement.js b/src/pages/business_emergencyPlan/components/secondary_menu/PermitManagement.js new file mode 100644 index 0000000..f8e20d1 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/PermitManagement.js @@ -0,0 +1,286 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Space, Modal } from 'antd'; +import { SearchOutlined, RedoOutlined, CloseOutlined, EyeOutlined, DeleteOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './PermitManagement.less'; +import licence1 from '@/assets/business_envinformation/licence1.svg'; +import licence2 from '@/assets/business_envinformation/licence2.svg'; + +const PermitManagement = () => { + const [form] = Form.useForm(); + const [isModalVisible, setIsModalVisible] = useState(false); + const [currentImage, setCurrentImage] = useState(null); + const [dataSource, setDataSource] = useState([ + { + key: 1, + companyName: '北京某某环保有限公司', + permitNumber: 'PWX-BJ-2023-001', + issueOrg: '北京市生态环境局', + expireDate: '2025-12-31', + original: '已上传', + duplicate: '已上传', + }, + { + key: 2, + companyName: '上海某某化工有限公司', + permitNumber: 'PWX-SH-2023-002', + issueOrg: '上海市生态环境局', + expireDate: '2025-10-15', + original: '已上传', + duplicate: '已上传', + }, + { + key: 3, + companyName: '广州某某制造有限公司', + permitNumber: 'PWX-GZ-2023-003', + issueOrg: '广州市生态环境局', + expireDate: '2026-03-20', + original: '未上传', + duplicate: '已上传', + }, + { + key: 4, + companyName: '深圳某某电子有限公司', + permitNumber: 'PWX-SZ-2023-004', + issueOrg: '深圳市生态环境局', + expireDate: '2025-08-10', + original: '已上传', + duplicate: '未上传', + }, + { + key: 5, + companyName: '成都某某科技有限公司', + permitNumber: 'PWX-CD-2023-005', + issueOrg: '成都市生态环境局', + expireDate: '2026-01-25', + original: '已上传', + duplicate: '已上传', + }, + { + key: 6, + companyName: '武汉某某工业有限公司', + permitNumber: 'PWX-WH-2023-006', + issueOrg: '武汉市生态环境局', + expireDate: '2025-11-30', + original: '已上传', + duplicate: '已上传', + }, + { + key: 7, + companyName: '杭州某某环保有限公司', + permitNumber: 'PWX-HZ-2023-007', + issueOrg: '杭州市生态环境局', + expireDate: '2026-05-15', + original: '未上传', + duplicate: '已上传', + }, + { + key: 8, + companyName: '南京某某化学有限公司', + permitNumber: 'PWX-NJ-2023-008', + issueOrg: '南京市生态环境局', + expireDate: '2025-09-20', + original: '已上传', + duplicate: '已上传', + }, + { + key: 9, + companyName: '重庆某某重工有限公司', + permitNumber: 'PWX-CQ-2023-009', + issueOrg: '重庆市生态环境局', + expireDate: '2026-02-28', + original: '已上传', + duplicate: '未上传', + }, + { + key: 10, + companyName: '天津某某制药有限公司', + permitNumber: 'PWX-TJ-2023-010', + issueOrg: '天津市生态环境局', + expireDate: '2025-07-10', + original: '已上传', + duplicate: '已上传', + }, + { + key: 11, + companyName: '西安某某材料有限公司', + permitNumber: 'PWX-XA-2023-011', + issueOrg: '西安市生态环境局', + expireDate: '2026-04-05', + original: '未上传', + duplicate: '已上传', + }, + { + key: 12, + companyName: '青岛某某机械有限公司', + permitNumber: 'PWX-QD-2023-012', + issueOrg: '青岛市生态环境局', + expireDate: '2025-12-15', + original: '已上传', + duplicate: '已上传', + }, + ]); + + const columns = [ + { + title: '序号', + dataIndex: 'key', + key: 'key', + width: 80, + align: 'center', + }, + { + title: '企业名称', + dataIndex: 'companyName', + key: 'companyName', + width: 200, + }, + { + title: '排污许可证号', + dataIndex: 'permitNumber', + key: 'permitNumber', + width: 180, + }, + { + title: '颁发机构', + dataIndex: 'issueOrg', + key: 'issueOrg', + width: 180, + }, + { + title: '到期时间', + dataIndex: 'expireDate', + key: 'expireDate', + width: 120, + sorter: (a, b) => new Date(a.expireDate) - new Date(b.expireDate), + showSorterTooltip: false, + }, + { + title: '正本', + dataIndex: 'original', + key: 'original', + width: 100, + align: 'center', + render: () => { setCurrentImage(licence1); setIsModalVisible(true); }}>附件 + }, + { + title: '副本', + dataIndex: 'duplicate', + key: 'duplicate', + width: 100, + align: 'center', + render: () => { setCurrentImage(licence2); setIsModalVisible(true); }}>附件 + }, + { + title: '操作', + key: 'action', + width: 150, + align: 'center', + render: (_, record) => ( + + handleView(record)} + /> + handleDelete(record)} + /> + + ), + }, + ]; + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + const handleView = (record) => { + console.log('查看:', record); + // TODO: 实现查看功能 + }; + + const handleEdit = (record) => { + console.log('编辑:', record); + // TODO: 实现编辑功能 + }; + + const handleDelete = (record) => { + console.log('删除:', record); + // TODO: 实现删除功能 + }; + + return ( +
+ {/* 第一块:搜索表单 */} +
+
+ + + + + + + + + + + + + + + +
+
+ + {/* 第二块:表格 */} +
+ `共 ${total} 条`, + } + }} + /> +
+ + {/* 图片弹窗 */} + setIsModalVisible(false)} + footer={null} + closeIcon={} + width="auto" + centered + styles={{ + mask: { backgroundColor: '#10101080' }, + content: { padding: 0, background: 'transparent', boxShadow: 'none' } + }} + > + {currentImage && 许可证} + +
+ ); +}; + +export default PermitManagement; + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/PermitManagement.less b/src/pages/business_emergencyPlan/components/secondary_menu/PermitManagement.less new file mode 100644 index 0000000..b200e6c --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/PermitManagement.less @@ -0,0 +1,137 @@ +.permitContainer { + width: 100%; + height: 100%; + // padding: 20px; + background-color: #fff; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + + .searchSection { + // margin-bottom: 20px; + padding: 20px; + // background-color: #fafafa; + // border-radius: 2px; + + :global { + .ant-form-inline { + display: flex; + + .ant-form-item { + margin-right: 16px; + margin-bottom: 0; + } + + .ant-form-item:nth-last-child(2) { + margin-left: auto; + } + + .ant-form-item:last-child { + margin-right: 0; + } + } + + .ant-form-item-label { + font-weight: 500; + + label { + color: #666666; + font-size: 13px; + } + } + + .ant-input::placeholder, + .ant-picker-input input::placeholder { + color: #00000040; + font-size: 13px; + } + } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 0 20px 0; + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table { + flex: 1; + overflow: auto; + margin: 0; + } + + .ant-table-pagination { + flex-shrink: 0; + + } + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead > tr > th { + background-color: #fafafa; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + } + + .ant-table-tbody > tr > td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + } + + .ant-table-tbody > tr:hover > td { + background-color: #f5f5f5; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + .ant-pagination { + text-align: right; + margin-top: 70px !important; + } + } + } +} + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/PermitStatistics.js b/src/pages/business_emergencyPlan/components/secondary_menu/PermitStatistics.js new file mode 100644 index 0000000..fec1778 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/PermitStatistics.js @@ -0,0 +1,421 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Space, Modal, Select } from 'antd'; +import { SearchOutlined, RedoOutlined, CloseOutlined, EyeOutlined, DeleteOutlined, PlusOutlined, UploadOutlined, EditOutlined, DownloadOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './PermitStatistics.less'; +import licence1 from '@/assets/business_envinformation/image1.svg'; +import licence2 from '@/assets/business_envinformation/image2.svg'; +import viewicon from '@/assets/business_envinformation/viewicon.svg'; +import editicon from '@/assets/business_envinformation/editicon.svg'; +import downloadicon from '@/assets/business_envinformation/downloadicon.svg'; +import deleteicon from '@/assets/business_envinformation/deleteicon.svg'; + + + +const PermitStatistics = () => { + const [form] = Form.useForm(); + const [isModalVisible, setIsModalVisible] = useState(false); + const [currentImage, setCurrentImage] = useState(null); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 14, + }); + const [dataSource, setDataSource] = useState([ + { + key: 1, + administrativeRegion: '榆林市', + permitNumber: '51669811', + industryCategory: '信用风险管理与法律防', + companyName: '北京那蓝国际贸易有限公司', + validityPeriod: '5年', + issueDate: '2025-08-15', + original: '附件', + duplicate: '附件', + }, + { + key: 2, + administrativeRegion: '拉萨市', + permitNumber: '34887875', + industryCategory: '涉外警务', + companyName: '中潮石林企业咨询(上海)有限公司北京分公司', + validityPeriod: '5年', + issueDate: '2025-08-09', + original: '附件', + duplicate: '附件', + }, + { + key: 3, + administrativeRegion: '长家界市', + permitNumber: '1716652546', + industryCategory: '环境设计', + companyName: '水木晨曦(北京)科技有限公司', + validityPeriod: '5年', + issueDate: '2025-08-17', + original: '附件', + duplicate: '附件', + }, + { + key: 4, + administrativeRegion: '马潭市', + permitNumber: '384654762', + industryCategory: '电子竞技运动与管理', + companyName: '亚商桥(北京)咨询有限公司', + validityPeriod: '5年', + issueDate: '2025-08-17', + original: '附件', + duplicate: '附件', + }, + { + key: 5, + administrativeRegion: '交州市', + permitNumber: '34669295254', + industryCategory: '精算学', + companyName: '中讯通讯科技有限公司', + validityPeriod: '5年', + issueDate: '2025-08-13', + original: '附件', + duplicate: '附件', + }, + { + key: 6, + administrativeRegion: '驻马店市', + permitNumber: '4347052411', + industryCategory: '数字媒体艺术', + companyName: '嘉实瑞沃德(北京)商贸有限公司', + validityPeriod: '5年', + issueDate: '2025-08-21', + original: '附件', + duplicate: '附件', + }, + { + key: 7, + administrativeRegion: '三亚市', + permitNumber: '388946691', + industryCategory: '技术侦察学', + companyName: '中大国际文化有限公司', + validityPeriod: '5年', + issueDate: '2025-08-17', + original: '附件', + duplicate: '附件', + }, + { + key: 8, + administrativeRegion: '美湖市', + permitNumber: '7190228566', + industryCategory: '财政学', + companyName: '嘉实瑞沃德(北京)商贸有限公司', + validityPeriod: '5年', + issueDate: '2025-08-20', + original: '附件', + duplicate: '附件', + }, + { + key: 9, + administrativeRegion: '东营市', + permitNumber: '6656363924', + industryCategory: '保险学', + companyName: '北京清丰国际医院管理有限公司', + validityPeriod: '5年', + issueDate: '2025-06-27', + original: '附件', + duplicate: '附件', + }, + { + key: 10, + administrativeRegion: '九龙', + permitNumber: '622145211', + industryCategory: '英语', + companyName: '北京庆奔科贸有限公司', + validityPeriod: '5年', + issueDate: '2025-08-28', + original: '附件', + duplicate: '附件', + }, + { + key: 11, + administrativeRegion: '深圳市', + permitNumber: '755123456', + industryCategory: '计算机科学与技术', + companyName: '深圳创新科技有限公司', + validityPeriod: '3年', + issueDate: '2025-09-01', + original: '附件', + duplicate: '附件', + }, + { + key: 12, + administrativeRegion: '杭州市', + permitNumber: '571789012', + industryCategory: '电子商务', + companyName: '杭州数字贸易有限公司', + validityPeriod: '4年', + issueDate: '2025-09-05', + original: '附件', + duplicate: '附件', + }, + { + key: 13, + administrativeRegion: '成都市', + permitNumber: '028345678', + industryCategory: '生物技术', + companyName: '成都生物科技股份有限公司', + validityPeriod: '5年', + issueDate: '2025-09-10', + original: '附件', + duplicate: '附件', + }, + { + key: 14, + administrativeRegion: '武汉市', + permitNumber: '027456789', + industryCategory: '机械工程', + companyName: '武汉智能制造有限公司', + validityPeriod: '3年', + issueDate: '2025-09-15', + original: '附件', + duplicate: '附件', + }, + ]); + + const columns = [ + { + title: '序号', + dataIndex: 'key', + key: 'key', + width: 80, + align: 'center', + }, + { + title: '行政区', + dataIndex: 'administrativeRegion', + key: 'administrativeRegion', + width: 120, + }, + { + title: '许可证编号', + dataIndex: 'permitNumber', + key: 'permitNumber', + width: 130, + }, + { + title: '行业类别', + dataIndex: 'industryCategory', + key: 'industryCategory', + width: 200, + }, + { + title: '企业名称', + dataIndex: 'companyName', + key: 'companyName', + width: 230, + }, + { + title: '有效期限', + dataIndex: 'validityPeriod', + key: 'validityPeriod', + width: 80, + align: 'center', + }, + { + title: '发证日期', + dataIndex: 'issueDate', + key: 'issueDate', + width: 120, + align: 'center', + }, + { + title: '正本', + dataIndex: 'original', + key: 'original', + width: 80, + align: 'center', + render: () => { setCurrentImage(licence1); setIsModalVisible(true); }}>附件 + }, + { + title: '副本', + dataIndex: 'duplicate', + key: 'duplicate', + width: 120, + align: 'center', + render: () => { setCurrentImage(licence2); setIsModalVisible(true); }}>附件 + }, + { + title: '操作', + key: 'action', + width: 140, + align: 'center', + render: (_, record) => ( + + 查看 handleView(record)} + /> + 编辑 handleEdit(record)} + /> + 下载 handleDownload(record)} + /> + 删除 handleDelete(record)} + /> + + ), + }, + ]; + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + const handleView = (record) => { + console.log('查看:', record); + // TODO: 实现查看功能 + }; + + const handleEdit = (record) => { + console.log('编辑:', record); + // TODO: 实现编辑功能 + }; + + const handleDownload = (record) => { + console.log('下载:', record); + // TODO: 实现下载功能 + }; + + const handleDelete = (record) => { + console.log('删除:', record); + // TODO: 实现删除功能 + }; + + const handleAdd = () => { + console.log('新增'); + // TODO: 实现新增功能 + }; + + const handleImport = () => { + console.log('导入'); + // TODO: 实现导入功能 + }; + + const handleQuery = () => { + console.log('查询'); + // TODO: 实现查询功能 + }; + + const handleTableChange = (pagination) => { + setPagination(pagination); + }; + + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const start = (current - 1) * pageSize; + const end = start + pageSize; + return dataSource.slice(start, end); + }; + + return ( +
+ {/* 第一块:操作按钮和筛选条件 */} +
+
+ + +
+ +
+ 筛选条件 + + + +
+
+ + {/* 第二块:表格 */} +
+ `共 ${total} 条`, + showSizeChanger: false, + } + }} + onChange={handleTableChange} + /> +
+ + {/* 图片弹窗 */} + setIsModalVisible(false)} + footer={null} + closeIcon={} + width="auto" + centered + styles={{ + mask: { backgroundColor: '#10101080' }, + content: { padding: 0, background: 'transparent', boxShadow: 'none' } + }} + > + {currentImage && 许可证} + +
+ ); +}; + +export default PermitStatistics; diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/PermitStatistics.less b/src/pages/business_emergencyPlan/components/secondary_menu/PermitStatistics.less new file mode 100644 index 0000000..54aa30e --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/PermitStatistics.less @@ -0,0 +1,187 @@ +.permitContainer { + width: 100%; + height: 100%; + // padding: 20px; + background-color: #fff; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + + .searchSection { + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; + + .leftButtons { + display: flex; + gap: 12px; + + .addButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 32px; + border-radius: 4px; + display: flex; + align-items: center; + gap: 4px; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .importButton { + background-color: white; + border-color: #d9d9d9; + color: #333; + height: 32px; + border-radius: 4px; + + &:hover { + border-color: #40a9ff; + color: #40a9ff; + } + } + } + + .rightControls { + display: flex; + align-items: center; + gap: 12px; + + .filterLabel { + color: #333; + font-size: 14px; + white-space: nowrap; + } + + .queryButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 28px; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .selectInput { + :global { + .ant-select-selector { + display: flex; + align-items: center; + height: 28px !important; + } + + .ant-select-selection-item { + display: flex; + align-items: center; + line-height: 1; + } + + .ant-select-selection-placeholder { + display: flex; + align-items: center; + line-height: 1; + } + } + } + } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 0 20px 0; + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table { + flex: 1; + overflow: auto; + margin: 0; + } + + .ant-table-pagination { + flex-shrink: 0; + + } + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead > tr > th { + background-color: #fafafa; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + } + + .ant-table-tbody > tr > td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + } + + .ant-table-tbody > tr:hover > td { + background-color: #f5f5f5; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + .ant-pagination { + text-align: right; + margin-top: 70px !important; + } + } + } +} diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/ProtectionFacilityMaintenance.js b/src/pages/business_emergencyPlan/components/secondary_menu/ProtectionFacilityMaintenance.js new file mode 100644 index 0000000..a83b5c2 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/ProtectionFacilityMaintenance.js @@ -0,0 +1,578 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Space, Modal, Select } from 'antd'; +import { SearchOutlined, RedoOutlined, CloseOutlined, EyeOutlined, DeleteOutlined, PlusOutlined, UploadOutlined, EditOutlined, DownloadOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './ProtectionFacilityMaintenance.less'; +import licence1 from '@/assets/business_envinformation/image1.svg'; +import licence2 from '@/assets/business_envinformation/image2.svg'; +import viewicon from '@/assets/business_envinformation/viewicon.svg'; +import editicon from '@/assets/business_envinformation/editicon.svg'; +import downloadicon from '@/assets/business_envinformation/downloadicon.svg'; +import deleteicon from '@/assets/business_envinformation/deleteicon.svg'; + +const ProtectionFacilityMaintenance = () => { + const [form] = Form.useForm(); + const [isModalVisible, setIsModalVisible] = useState(false); + const [currentImage, setCurrentImage] = useState(null); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 13, + }); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [dataSource, setDataSource] = useState([ + { + key: 1, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + facilityCode: '35.236.217.212', + startTime: '2025-08-23 06:18', + endTime: '2025-08-23 06:18', + pollutantType: '123', + concentration: '39', + unit: 'm³/d', + dischargeDestination: '大气', + eventReason: '从病虫害探测、土壤墒情监测智能...', + isReported: '已报告', + responseMeasures: '2025-08-23 06:18', + }, + { + key: 2, + recordTime: '2025-09-02', + recorder: '王嘉骐', + reviewer: '赵子峰', + facilityName: '复方水杨酸甲酯乳膏(曼秀雷敦)', + facilityCode: '65.177.48.116', + startTime: '2025-09-07 17:48', + endTime: '2025-09-07 17:48', + pollutantType: '大气污染物', + concentration: '52', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '从病虫害探测、土壤墒情监测智能...', + isReported: '已报告', + responseMeasures: '2025-09-07 17:48', + }, + { + key: 3, + recordTime: '2025-09-06', + recorder: '王嘉琪', + reviewer: '郑清予', + facilityName: '口炎清颗粒(大神)', + facilityCode: '111.161.135.125', + startTime: '2025-09-04 13:08', + endTime: '2025-09-04 13:08', + pollutantType: '污水', + concentration: '28', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '从病虫害探测、土壤墒情监测智能...', + isReported: '已报告', + responseMeasures: '2025-09-04 13:08', + }, + { + key: 4, + recordTime: '2025-08-22', + recorder: '王佛瑶', + reviewer: '赵玉', + facilityName: '烧烫伤膏(茂祥)', + facilityCode: '162.208.135.147', + startTime: '2025-08-28 22:40', + endTime: '2025-08-28 22:40', + pollutantType: '污水', + concentration: '46', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '近期,高铁"熊孩子"事件频出,...', + isReported: '已报告', + responseMeasures: '2025-08-28 22:40', + }, + { + key: 5, + recordTime: '2025-08-31', + recorder: '吴子萱', + reviewer: '钱品妍', + facilityName: '云南白药(云南白药)', + facilityCode: '138.6.246.181', + startTime: '2025-09-17 19:48', + endTime: '2025-09-17 19:48', + pollutantType: '污水', + concentration: '37', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '刘某及同伴三人前往该射击俱乐部...', + isReported: '已报告', + responseMeasures: '2025-09-17 19:48', + }, + { + key: 6, + recordTime: '2025-08-29', + recorder: '何风景', + reviewer: '赵海洲', + facilityName: '麝香壮骨膏(修正)', + facilityCode: '134.80.173.128', + startTime: '2025-09-02 22:21', + endTime: '2025-09-02 22:21', + pollutantType: '污水', + concentration: '53', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '一位网友在社交平台发布的视频显...', + isReported: '未报告', + responseMeasures: '2025-09-02 22:21', + }, + { + key: 7, + recordTime: '2025-08-28', + recorder: '李琳颖', + reviewer: '李建刚', + facilityName: '复方醋酸甲羟孕酮胶囊(妇复春)', + facilityCode: '218.169.25.43', + startTime: '2025-09-06 16:27', + endTime: '2025-09-06 16:27', + pollutantType: '污水', + concentration: '24', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '盛夏时节,四川绵竹市汉旺镇一株...', + isReported: '未报告', + responseMeasures: '2025-09-06 16:27', + }, + { + key: 8, + recordTime: '2025-08-22', + recorder: '赵午光', + reviewer: '钱泽西', + facilityName: '桂龙药膏', + facilityCode: '54.218.80.84', + startTime: '2025-09-12 22:50', + endTime: '2025-09-12 22:50', + pollutantType: '污水', + concentration: '47', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '随着"热射病"这一高温疾病快速...', + isReported: '未报告', + responseMeasures: '2025-09-12 22:50', + }, + { + key: 9, + recordTime: '2025-08-21', + recorder: '王凤娇', + reviewer: '李金泽', + facilityName: '和兴白花油(和兴白花油)', + facilityCode: '222.1.18.173', + startTime: '2025-09-10 04:28', + endTime: '2025-09-10 04:28', + pollutantType: '污水', + concentration: '33', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '夏粮丰,全年稳。国家粮食和物资...', + isReported: '未报告', + responseMeasures: '2025-09-10 04:28', + }, + { + key: 10, + recordTime: '2025-09-09', + recorder: '赵涛', + reviewer: '何能', + facilityName: '茶苯海明含片(贻晗柠)', + facilityCode: '136.200.182.22', + startTime: '2025-08-30 07:15', + endTime: '2025-08-30 07:15', + pollutantType: '污水', + concentration: '34', + unit: 'm³/d', + dischargeDestination: '河流', + eventReason: '近日,一则"携程推出火车卧铺女...', + isReported: '未报告', + responseMeasures: '2025-08-30 07:15', + }, + { + key: 11, + recordTime: '2025-09-15', + recorder: '李小明', + reviewer: '王建国', + facilityName: '阿莫西林胶囊(华北制药)', + facilityCode: '192.168.1.100', + startTime: '2025-09-15 14:30', + endTime: '2025-09-15 16:45', + pollutantType: '大气污染物', + concentration: '68', + unit: 'mg/m³', + dischargeDestination: '大气', + eventReason: '设备故障导致废气处理系统异常运行...', + isReported: '已报告', + responseMeasures: '2025-09-15 16:45', + }, + { + key: 12, + recordTime: '2025-09-18', + recorder: '张美丽', + reviewer: '刘德华', + facilityName: '布洛芬缓释胶囊(中美史克)', + facilityCode: '10.0.0.25', + startTime: '2025-09-18 09:20', + endTime: '2025-09-18 11:30', + pollutantType: '污水', + concentration: '42', + unit: 'mg/L', + dischargeDestination: '污水处理厂', + eventReason: '管道泄漏导致废水直接排放...', + isReported: '未报告', + responseMeasures: '2025-09-18 11:30', + }, + { + key: 13, + recordTime: '2025-09-20', + recorder: '陈志强', + reviewer: '周杰伦', + facilityName: '头孢拉定胶囊(石药集团)', + facilityCode: '172.16.0.88', + startTime: '2025-09-20 20:15', + endTime: '2025-09-20 22:00', + pollutantType: '噪声', + concentration: '85', + unit: 'dB', + dischargeDestination: '环境', + eventReason: '夜间施工未采取降噪措施...', + isReported: '已报告', + responseMeasures: '2025-09-20 22:00', + }, + ]); + + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const start = (current - 1) * pageSize; + const end = start + pageSize; + return dataSource.slice(start, end); + }; + + const columns = [ + { + title: ( + 0} + onChange={(e) => handleSelectAll(e.target.checked)} + /> + ), + key: 'selection', + width: 60, + align: 'center', + fixed: 'left', + render: (_, record) => ( + { + if (e.target.checked) { + setSelectedRowKeys([...selectedRowKeys, record.key]); + } else { + setSelectedRowKeys(selectedRowKeys.filter(key => key !== record.key)); + } + }} + /> + ), + }, + { + title: '记录时间', + dataIndex: 'recordTime', + key: 'recordTime', + width: 120, + align: 'center', + }, + { + title: '记录人', + dataIndex: 'recorder', + key: 'recorder', + width: 100, + align: 'center', + }, + { + title: '审核人', + dataIndex: 'reviewer', + key: 'reviewer', + width: 100, + align: 'center', + }, + { + title: '设施名称', + dataIndex: 'facilityName', + key: 'facilityName', + width: 200, + }, + { + title: '编号', + dataIndex: 'facilityCode', + key: 'facilityCode', + width: 150, + align: 'center', + }, + { + title: '异常情况起始时刻', + dataIndex: 'startTime', + key: 'startTime', + width: 160, + align: 'center', + }, + { + title: '异常情况终止时刻', + dataIndex: 'endTime', + key: 'endTime', + width: 160, + align: 'center', + }, + { + title: '污染物种类', + dataIndex: 'pollutantType', + key: 'pollutantType', + width: 120, + align: 'center', + }, + { + title: '污染物排放浓度', + dataIndex: 'concentration', + key: 'concentration', + width: 140, + align: 'center', + }, + { + title: '浓度单位', + dataIndex: 'unit', + key: 'unit', + width: 100, + align: 'center', + }, + { + title: '排放去向', + dataIndex: 'dischargeDestination', + key: 'dischargeDestination', + width: 100, + align: 'center', + }, + { + title: '事件原因', + dataIndex: 'eventReason', + key: 'eventReason', + width: 180, + }, + { + title: '是否报告', + dataIndex: 'isReported', + key: 'isReported', + width: 100, + align: 'center', + render: (text) => ( + + {text} + + ), + }, + { + title: '应对措施', + dataIndex: 'responseMeasures', + key: 'responseMeasures', + width: 150, + align: 'center', + }, + { + title: '操作', + key: 'action', + width: 100, + align: 'center', + fixed: 'right', + render: (_, record) => ( + + 编辑 handleEdit(record)} + /> + 下载 handleDownload(record)} + /> + 删除 handleDelete(record)} + /> + + ), + }, + ]; + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + const handleView = (record) => { + console.log('查看:', record); + // TODO: 实现查看功能 + }; + + const handleEdit = (record) => { + console.log('编辑:', record); + // TODO: 实现编辑功能 + }; + + const handleDownload = (record) => { + console.log('下载:', record); + // TODO: 实现下载功能 + }; + + const handleDelete = (record) => { + console.log('删除:', record); + // TODO: 实现删除功能 + }; + + const handleAdd = () => { + console.log('新增'); + // TODO: 实现新增功能 + }; + + const handleImport = () => { + console.log('导入'); + // TODO: 实现导入功能 + }; + + const handleQuery = () => { + console.log('查询'); + // TODO: 实现查询功能 + }; + + const handleTableChange = (pagination) => { + setPagination(pagination); + }; + + // 全选功能 + const handleSelectAll = (checked) => { + if (checked) { + const allKeys = getCurrentPageData().map(item => item.key); + setSelectedRowKeys(allKeys); + } else { + setSelectedRowKeys([]); + } + }; + + // 批量操作 + const handleBatchOperation = (operation) => { + console.log(`批量${operation}:`, selectedRowKeys); + // TODO: 实现批量操作功能 + }; + + return ( +
+ {/* 第一块:操作按钮和筛选条件 */} +
+
+ + + +
+ +
+ 筛选条件 + + + +
+
+ + {/* 第二块:表格 */} +
+ `共 ${total} 条`, + showSizeChanger: false, + } + }} + onChange={handleTableChange} + scroll={{ x: 3000 }} + /> +
+ + {/* 图片弹窗 */} + setIsModalVisible(false)} + footer={null} + closeIcon={} + width="auto" + centered + styles={{ + mask: { backgroundColor: '#10101080' }, + content: { padding: 0, background: 'transparent', boxShadow: 'none' } + }} + > + {currentImage && 许可证} + +
+ ); +}; + +export default ProtectionFacilityMaintenance; diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/ProtectionFacilityMaintenance.less b/src/pages/business_emergencyPlan/components/secondary_menu/ProtectionFacilityMaintenance.less new file mode 100644 index 0000000..38c8a2e --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/ProtectionFacilityMaintenance.less @@ -0,0 +1,205 @@ +.protectionFacilityContainer { + width: 100%; + height: 100%; + // padding: 20px; + background-color: #fff; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + + .searchSection { + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; + + .leftButtons { + display: flex; + gap: 12px; + + .addButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 32px; + border-radius: 4px; + display: flex; + align-items: center; + gap: 4px; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .importButton { + background-color: white; + border-color: #d9d9d9; + color: #333; + height: 32px; + border-radius: 4px; + + &:hover { + border-color: #40a9ff; + color: #40a9ff; + } + } + } + + .rightControls { + display: flex; + align-items: center; + gap: 12px; + + .filterLabel { + color: #333; + font-size: 14px; + white-space: nowrap; + } + + .queryButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 28px; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .selectInput { + :global { + .ant-select-selector { + display: flex; + align-items: center; + height: 28px !important; + } + + .ant-select-selection-item { + display: flex; + align-items: center; + line-height: 1; + } + + .ant-select-selection-placeholder { + display: flex; + align-items: center; + line-height: 1; + } + } + } + } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + padding: 0 20px 0; + overflow: hidden; // 只设置垂直隐藏 + min-width: 0; // 确保可以收缩 + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead > tr > th { + background-color: #fafafa; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody > tr > td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody > tr:hover > td { + background-color: #f5f5f5; + } + + // 固定列样式 + .ant-table-thead > tr > th.ant-table-cell-fix-left, + .ant-table-tbody > tr > td.ant-table-cell-fix-left { + background-color: #fafafa; + z-index: 1; + } + + .ant-table-thead > tr > th.ant-table-cell-fix-right, + .ant-table-tbody > tr > td.ant-table-cell-fix-right { + background-color: #fafafa; + z-index: 1; + } + + // 固定列阴影效果 + .ant-table-cell-fix-left { + // box-shadow: 0px 0 4px 0px #00000040; + } + + .ant-table-cell-fix-right { + // box-shadow: 0px 0 4px 0px #00000040; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + .ant-pagination { + text-align: right; + margin-top: 25px !important; + } + } + } +} diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/RegulationCompliance.js b/src/pages/business_emergencyPlan/components/secondary_menu/RegulationCompliance.js new file mode 100644 index 0000000..8dcaeff --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/RegulationCompliance.js @@ -0,0 +1,592 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Select, Drawer, Descriptions, Tag } from 'antd'; +import styles from './RegulationCompliance.less'; +import stipulation1 from '@/assets/business_envinformation/stipulation1.svg'; + +const RegulationCompliance = () => { + const [form] = Form.useForm(); + const [drawerVisible, setDrawerVisible] = useState(false); + const [selectedRegulation, setSelectedRegulation] = useState(null); + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + // 显示抽屉详情 + const showDrawer = (regulation) => { + setSelectedRegulation(regulation); + setDrawerVisible(true); + }; + + // 关闭抽屉 + const onCloseDrawer = () => { + setDrawerVisible(false); + setSelectedRegulation(null); + }; + + // 模拟法规数据(实际应该从后端获取) + const mockRegulationDetail = { + name: '2025排污许可条例', + publishDate: '2025-08-24', + department: '环保部门名称', + content: '在此输入具体的法规内容...', + status: '有效', + category: '排污许可', + version: '1.0', + updateTime: '2025-08-24' + }; + + + return ( +
+ {/* 第一块:搜索表单 */} +
+
+ + + + + + + + + + + + + + + +
+
+ + {/* 第二块:表格区域 */} +
+
+ {/* 法规合规管理块1 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-24 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块2 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-25 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块3 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-26 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块4 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-27 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块5 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-28 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块6 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-29 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块7 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-30 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块8 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-08-31 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块9 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-09-01 +
+
+ 发布部门    环保部门名称9 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块10 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-09-02 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块11 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-09-03 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+ + {/* 法规合规管理块12 */} +
+ {/* 第一行:法规名称 */} +
+ 法规图标 + 2025排污许可条例 +
+ + {/* 第二行:发布时间和发布部门 */} +
+
+ 发布时间    2025-09-04 +
+
+ 发布部门    环保部门名称 +
+
+ + {/* 第三行:操作按钮 */} +
+
showDrawer(mockRegulationDetail)} + style={{ cursor: 'pointer' }} + > + + + +
+
+ + + +
+
+
+
+
+ + {/* 静态分页组件 */} +
+
+ 共85条 + {/* */} + + + ... + + + + + + ... + + +
+
+ + {/* 抽屉详情 */} + + {selectedRegulation && ( + + + {selectedRegulation.name} + + + {selectedRegulation.publishDate} + + + {selectedRegulation.department} + + + {selectedRegulation.status} + + + {selectedRegulation.category} + + + {selectedRegulation.version} + + + {selectedRegulation.updateTime} + + +
+ {selectedRegulation.content} +
+
+
+ )} +
+
+ ); +}; + +export default RegulationCompliance; + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/RegulationCompliance.less b/src/pages/business_emergencyPlan/components/secondary_menu/RegulationCompliance.less new file mode 100644 index 0000000..f26410a --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/RegulationCompliance.less @@ -0,0 +1,204 @@ +.regulationContainer { + width: 100%; + height: 100%; + + display: flex; + flex-direction: column; + + .searchSection { + padding: 20px; + background-color: #fff; + + :global { + .ant-form-inline { + display: flex; + + .ant-form-item { + margin-right: 16px; + margin-bottom: 0; + } + + .ant-form-item:nth-last-child(2) { + margin-left: auto; + } + + .ant-form-item:last-child { + margin-right: 0; + } + } + + .ant-form-item-label { + font-weight: 500; + + label { + color: #666666; + font-size: 13px; + } + } + + .ant-input::placeholder, + .ant-picker-input input::placeholder { + color: #00000040; + font-size: 13px; + } + } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 20px; + + .blocksContainer { + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-template-rows: repeat(3, 1fr); + gap: 20px; + margin-bottom: 20px; + } + + .regulationBlock { + background-color: #fff; + // border: 1px solid #EEEEEE; + border-radius: 2px; + // padding: 8px 16px; + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 120px; + } + + + .regulationTitle { + font-size: 14px; + font-weight: 500; + color: #333333; + padding: 8px 16px; + border: 1px solid #EEEEEE; + border-bottom: none; + margin-bottom: 0; + display: flex; + align-items: center; + } + + .regulationInfo { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + padding-left: 15px; + border: 1px solid #EEEEEE; + border-bottom: none; + margin-bottom: 0; + } + + .publishDate { + font-size: 12px; + color: #666666; + font-weight: 400; + margin-bottom: 6px; + + } + + .publishDepartment { + font-size: 12px; + color: #666666; + font-weight: 400; + + } + + .actionButtons { + display: flex; + + justify-content: center; + gap: 8px; + width: 100%; + // margin-bottom: 0; + border: 1px solid #EEEEEE; + border-bottom: none; + // padding-top: 4px; + } + + .actionButton { + width: calc(50% - 4px); + height: 24px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + border-radius: 2px; + transition: background-color 0.2s; + + &:hover { + background-color: #f5f5f5; + } + } + + } + + .paginationContainer { + position: fixed; + bottom: 10px; + right: 10px; + z-index: 1000; + } + + .pagination { + display: flex; + align-items: center; + gap: 8px; + // background: #fff; + padding: 8px 30px; + border-radius: 4px; + // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + } + + .totalItems { + font-size: 12px; + color: #666; + margin-right: 8px; + } + + .pageSizeSelect { + font-size: 12px; + border: 1px solid #d9d9d9; + border-radius: 2px; + padding: 2px 6px; + margin-right: 8px; + background: #fff; + } + + .pageButton { + width: 28px; + height: 28px; + border: 1px solid #d9d9d9; + background: #fff; + color: #333; + font-size: 12px; + border-radius: 2px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; + + &:hover { + border-color: #00D48A; + color: #00D48A; + } + + &.active { + background: #00D48A; + border-color: #00D48A; + color: #fff; + } + } + + .ellipsis { + font-size: 12px; + color: #999; + padding: 0 4px; + } +} \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/SupervisionInspection.js b/src/pages/business_emergencyPlan/components/secondary_menu/SupervisionInspection.js new file mode 100644 index 0000000..da0cca8 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/SupervisionInspection.js @@ -0,0 +1,13 @@ +import React from 'react'; +import styles from './SupervisionInspection.less'; + +const SupervisionInspection = () => { + return ( +
+
待开发
+
+ ); +}; + +export default SupervisionInspection; + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/SupervisionInspection.less b/src/pages/business_emergencyPlan/components/secondary_menu/SupervisionInspection.less new file mode 100644 index 0000000..022f9de --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/SupervisionInspection.less @@ -0,0 +1,15 @@ +.container { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-color: #fff; + + .content { + font-size: 24px; + color: #999999; + font-weight: 400; + } +} + diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/WasteGasPollutionControl.js b/src/pages/business_emergencyPlan/components/secondary_menu/WasteGasPollutionControl.js new file mode 100644 index 0000000..4c079d0 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/WasteGasPollutionControl.js @@ -0,0 +1,803 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Space, Modal, Select } from 'antd'; +import { SearchOutlined, RedoOutlined, CloseOutlined, EyeOutlined, DeleteOutlined, PlusOutlined, UploadOutlined, EditOutlined, DownloadOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './WasteGasPollutionControl.less'; +import licence1 from '@/assets/business_envinformation/image1.svg'; +import licence2 from '@/assets/business_envinformation/image2.svg'; +import viewicon from '@/assets/business_envinformation/viewicon.svg'; +import editicon from '@/assets/business_envinformation/editicon.svg'; +import downloadicon from '@/assets/business_envinformation/downloadicon.svg'; +import deleteicon from '@/assets/business_envinformation/deleteicon.svg'; + +const WasteGasPollutionControl = () => { + const [form] = Form.useForm(); + const [isModalVisible, setIsModalVisible] = useState(false); + const [currentImage, setCurrentImage] = useState(null); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 12, + }); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [dataSource, setDataSource] = useState([ + { + key: 1, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 2, + recordTime: '2025-09-02', + recorder: '王嘉琪', + reviewer: '赵子能', + facilityName: '复方水杨酸甲酯乳膏(曼秀雷敦)', + code: '65.177.48.116', + equipmentModel: '3D8d4ffa-bD7e-AffF-ED68-839DAFe74c27', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '14:10', + endRunTime: '03:06', + isNormal: '异常', + pollutantFlueGasVolume: '2', + pollutantFactor: '烟尘2', + treatmentEfficiency: '93.81', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '59.12', + pressure: '95', + emissionTime: '100', + powerConsumption: '34', + byproductName: '二氧化碳', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-08-24 05:16', + reagentAdditionAmount: '2', + }, + { + key: 3, + recordTime: '2025-09-06', + recorder: '王嘉琪', + reviewer: '郑清予', + facilityName: '口炎清颗粒(大神)', + code: '111.161.135.125', + equipmentModel: '19b89E82-ae94-6bF7-2355-8DBC2d6a6009', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '12:26', + endRunTime: '03:26', + isNormal: '异常', + pollutantFlueGasVolume: '2', + pollutantFactor: '烟尘', + treatmentEfficiency: '91.40', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '59.95', + pressure: '90', + emissionTime: '95', + powerConsumption: '55', + byproductName: '二氧化碳', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-08-30 18:34', + reagentAdditionAmount: '2', + }, + { + key: 4, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 5, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 6, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 7, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 8, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 9, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 10, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 11, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 12, + recordTime: '2025-08-29', + recorder: '赵喜行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + equipmentModel: '6Ddb888D-3d7A-305E-3372-109F7154Ad3A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantFlueGasVolume: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + exhaustStackHeight: '2', + exhaustTemperature: '50.48', + pressure: '100', + emissionTime: '115', + powerConsumption: '39', + byproductName: '氮气', + byproductProduction: '2', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + ]); + + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const start = (current - 1) * pageSize; + const end = start + pageSize; + return dataSource.slice(start, end); + }; + + const columns = [ + { + title: ( + 0} + onChange={(e) => handleSelectAll(e.target.checked)} + /> + ), + key: 'selection', + width: 60, + align: 'center', + fixed: 'left', + render: (_, record) => ( + { + if (e.target.checked) { + setSelectedRowKeys([...selectedRowKeys, record.key]); + } else { + setSelectedRowKeys(selectedRowKeys.filter(key => key !== record.key)); + } + }} + /> + ), + }, + { + title: '记录时间', + dataIndex: 'recordTime', + key: 'recordTime', + width: 120, + align: 'center', + }, + { + title: '记录人', + dataIndex: 'recorder', + key: 'recorder', + width: 100, + align: 'center', + }, + { + title: '审核人', + dataIndex: 'reviewer', + key: 'reviewer', + width: 100, + align: 'center', + }, + { + title: '设施名称', + dataIndex: 'facilityName', + key: 'facilityName', + width: 200, + }, + { + title: '编码', + dataIndex: 'code', + key: 'code', + width: 150, + }, + { + title: '设备型号', + dataIndex: 'equipmentModel', + key: 'equipmentModel', + width: 200, + }, + { + title: '参数名称', + dataIndex: 'parameterName', + key: 'parameterName', + width: 120, + align: 'center', + }, + { + title: '设计值', + dataIndex: 'designValue', + key: 'designValue', + width: 100, + align: 'center', + }, + { + title: '单位', + dataIndex: 'unit', + key: 'unit', + width: 80, + align: 'center', + }, + { + title: '开始运行时间', + dataIndex: 'startRunTime', + key: 'startRunTime', + width: 120, + align: 'center', + }, + { + title: '结束运行时间', + dataIndex: 'endRunTime', + key: 'endRunTime', + width: 120, + align: 'center', + }, + { + title: '是否正常', + dataIndex: 'isNormal', + key: 'isNormal', + width: 100, + align: 'center', + render: (text) => ( + + {text} + + ), + }, + { + title: '污染物烟气量(m³/h)', + dataIndex: 'pollutantFlueGasVolume', + key: 'pollutantFlueGasVolume', + width: 150, + align: 'center', + }, + { + title: '污染因子', + dataIndex: 'pollutantFactor', + key: 'pollutantFactor', + width: 120, + align: 'center', + }, + { + title: '治理效率(%)', + dataIndex: 'treatmentEfficiency', + key: 'treatmentEfficiency', + width: 120, + align: 'center', + }, + { + title: '数据来源', + dataIndex: 'dataSource', + key: 'dataSource', + width: 120, + align: 'center', + }, + { + title: '排气筒高度(m)', + dataIndex: 'exhaustStackHeight', + key: 'exhaustStackHeight', + width: 130, + align: 'center', + }, + { + title: '排气温度(℃)', + dataIndex: 'exhaustTemperature', + key: 'exhaustTemperature', + width: 130, + align: 'center', + }, + { + title: '压力(kpa)', + dataIndex: 'pressure', + key: 'pressure', + width: 100, + align: 'center', + }, + { + title: '排放时间(h)', + dataIndex: 'emissionTime', + key: 'emissionTime', + width: 120, + align: 'center', + }, + { + title: '耗电量(kWh)', + dataIndex: 'powerConsumption', + key: 'powerConsumption', + width: 120, + align: 'center', + }, + { + title: '副产物名称', + dataIndex: 'byproductName', + key: 'byproductName', + width: 120, + align: 'center', + }, + { + title: '副产物产生量(t)', + dataIndex: 'byproductProduction', + key: 'byproductProduction', + width: 140, + align: 'center', + }, + { + title: '药剂名称', + dataIndex: 'reagentName', + key: 'reagentName', + width: 120, + align: 'center', + }, + { + title: '药剂添加时间', + dataIndex: 'reagentAdditionTime', + key: 'reagentAdditionTime', + width: 150, + align: 'center', + }, + { + title: '药剂添加量(t)', + dataIndex: 'reagentAdditionAmount', + key: 'reagentAdditionAmount', + width: 140, + align: 'center', + }, + { + title: '操作', + key: 'action', + width: 140, + align: 'center', + fixed: 'right', + render: (_, record) => ( + + {/* 查看 handleView(record)} + /> */} + 编辑 handleEdit(record)} + /> + 下载 handleDownload(record)} + /> + 删除 handleDelete(record)} + /> + + ), + }, + ]; + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + const handleView = (record) => { + console.log('查看:', record); + // TODO: 实现查看功能 + }; + + const handleEdit = (record) => { + console.log('编辑:', record); + // TODO: 实现编辑功能 + }; + + const handleDownload = (record) => { + console.log('下载:', record); + // TODO: 实现下载功能 + }; + + const handleDelete = (record) => { + console.log('删除:', record); + // TODO: 实现删除功能 + }; + + const handleAdd = () => { + console.log('新增'); + // TODO: 实现新增功能 + }; + + const handleImport = () => { + console.log('导入'); + // TODO: 实现导入功能 + }; + + const handleQuery = () => { + console.log('查询'); + // TODO: 实现查询功能 + }; + + const handleTableChange = (pagination) => { + setPagination(pagination); + }; + + // 全选功能 + const handleSelectAll = (checked) => { + if (checked) { + const allKeys = getCurrentPageData().map(item => item.key); + setSelectedRowKeys(allKeys); + } else { + setSelectedRowKeys([]); + } + }; + + // 批量操作 + const handleBatchOperation = (operation) => { + console.log(`批量${operation}:`, selectedRowKeys); + // TODO: 实现批量操作功能 + }; + + return ( +
+ {/* 第一块:操作按钮和筛选条件 */} +
+
+ + + + {/* */} +
+ +
+ 筛选条件 + + + +
+
+ + {/* 第二块:表格 */} +
+ `共 ${total} 条`, + showSizeChanger: false, + } + }} + onChange={handleTableChange} + scroll={{ x: 3000 }} + /> +
+ + {/* 图片弹窗 */} + setIsModalVisible(false)} + footer={null} + closeIcon={} + width="auto" + centered + styles={{ + mask: { backgroundColor: '#10101080' }, + content: { padding: 0, background: 'transparent', boxShadow: 'none' } + }} + > + {currentImage && 许可证} + +
+ ); +}; + +export default WasteGasPollutionControl; diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/WasteGasPollutionControl.less b/src/pages/business_emergencyPlan/components/secondary_menu/WasteGasPollutionControl.less new file mode 100644 index 0000000..7b23dad --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/WasteGasPollutionControl.less @@ -0,0 +1,205 @@ +.wasteGasContainer { + width: 100%; + height: 100%; + // padding: 20px; + background-color: #fff; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + + .searchSection { + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; + + .leftButtons { + display: flex; + gap: 12px; + + .addButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 32px; + border-radius: 4px; + display: flex; + align-items: center; + gap: 4px; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .importButton { + background-color: white; + border-color: #d9d9d9; + color: #333; + height: 32px; + border-radius: 4px; + + &:hover { + border-color: #40a9ff; + color: #40a9ff; + } + } + } + + .rightControls { + display: flex; + align-items: center; + gap: 12px; + + .filterLabel { + color: #333; + font-size: 14px; + white-space: nowrap; + } + + .queryButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 28px; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .selectInput { + :global { + .ant-select-selector { + display: flex; + align-items: center; + height: 28px !important; + } + + .ant-select-selection-item { + display: flex; + align-items: center; + line-height: 1; + } + + .ant-select-selection-placeholder { + display: flex; + align-items: center; + line-height: 1; + } + } + } + } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + padding: 0 20px 0; + overflow: hidden; // 只设置垂直隐藏 + min-width: 0; // 确保可以收缩 + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead > tr > th { + background-color: #FAFAFA; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody > tr > td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody > tr:hover > td { + background-color: #f5f5f5; + } + + // 固定列样式 + .ant-table-thead > tr > th.ant-table-cell-fix-left, + .ant-table-tbody > tr > td.ant-table-cell-fix-left { + background-color: #FAFAFA; + z-index: 1; + } + + .ant-table-thead > tr > th.ant-table-cell-fix-right, + .ant-table-tbody > tr > td.ant-table-cell-fix-right { + background-color: #FAFAFA; + z-index: 1; + } + + // 固定列阴影效果 + .ant-table-cell-fix-left { + // box-shadow: 0px 0 4px 0px #00000040; + } + + .ant-table-cell-fix-right { + // box-shadow: 0px 0 4px 0px #00000040; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + .ant-pagination { + text-align: right; + margin-top: 25px !important; + } + } + } +} diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/WastewaterFacilityManagement.js b/src/pages/business_emergencyPlan/components/secondary_menu/WastewaterFacilityManagement.js new file mode 100644 index 0000000..b830f24 --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/WastewaterFacilityManagement.js @@ -0,0 +1,746 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, DatePicker, Space, Modal, Select } from 'antd'; +import { SearchOutlined, RedoOutlined, CloseOutlined, EyeOutlined, DeleteOutlined, PlusOutlined, UploadOutlined, EditOutlined, DownloadOutlined } from '@ant-design/icons'; +import StandardTable from '@/components/StandardTable'; +import styles from './WastewaterFacilityManagement.less'; +import licence1 from '@/assets/business_envinformation/image1.svg'; +import licence2 from '@/assets/business_envinformation/image2.svg'; +import viewicon from '@/assets/business_envinformation/viewicon.svg'; +import editicon from '@/assets/business_envinformation/editicon.svg'; +import downloadicon from '@/assets/business_envinformation/downloadicon.svg'; +import deleteicon from '@/assets/business_envinformation/deleteicon.svg'; + +const WastewaterFacilityManagement = () => { + const [form] = Form.useForm(); + const [isModalVisible, setIsModalVisible] = useState(false); + const [currentImage, setCurrentImage] = useState(null); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 12, + }); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [dataSource, setDataSource] = useState([ + { + key: 1, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 2, + recordTime: '2025-09-02', + recorder: '王嘉祺', + reviewer: '赵子峰', + facilityName: '复方水杨酸甲酯乳膏(曼秀雷敦)', + code: '65.177.48.116', + facilityModel: '3D8d4ffa-bD7e-AffF-ED68-839DAFe74c27', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '14:10', + endRunTime: '03:06', + isNormal: '异常', + pollutantOutletFlow: '2', + pollutantFactor: '烟尘2', + treatmentEfficiency: '93.81', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '59.12', + treatmentMethod: '95', + powerConsumption: '34', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-08-24 05:16', + reagentAdditionAmount: '2', + }, + { + key: 3, + recordTime: '2025-09-06', + recorder: '王嘉琪', + reviewer: '郑清予', + facilityName: '口炎清颗粒(大神)', + code: '111.161.135.125', + facilityModel: '19b89EB2-ae94-6bF7-2355-6DBC2d6a6009', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '12:26', + endRunTime: '03:26', + isNormal: '异常', + pollutantOutletFlow: '2', + pollutantFactor: '烟尘', + treatmentEfficiency: '91.40', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '59.95', + treatmentMethod: '90', + powerConsumption: '56', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-08-30 18:34', + reagentAdditionAmount: '2', + }, + { + key: 4, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 5, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 6, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 7, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 8, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 9, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 10, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 11, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + { + key: 12, + recordTime: '2025-08-29', + recorder: '赵吾行', + reviewer: '郑叶飞', + facilityName: '塞隆风湿酒(同仁堂)', + code: '35.236.217.212', + facilityModel: '6Ddb888D-3d7A-3e5E-3372-109F7154A03A', + parameterName: '重量', + designValue: '2', + unit: 't', + startRunTime: '00:46', + endRunTime: '03:55', + isNormal: '正常', + pollutantOutletFlow: '1', + pollutantFactor: '烟尘', + treatmentEfficiency: '95.32', + dataSource: '实时采集', + dischargeDestination: '2', + sludgeProduction: '50.48', + treatmentMethod: '100', + powerConsumption: '39', + reagentName: '乳酸钠葡萄糖', + reagentAdditionTime: '2025-09-01 07:53', + reagentAdditionAmount: '2', + }, + ]); + + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const start = (current - 1) * pageSize; + const end = start + pageSize; + return dataSource.slice(start, end); + }; + + const columns = [ + { + title: ( + 0} + onChange={(e) => handleSelectAll(e.target.checked)} + /> + ), + key: 'selection', + width: 60, + align: 'center', + fixed: 'left', + render: (_, record) => ( + { + if (e.target.checked) { + setSelectedRowKeys([...selectedRowKeys, record.key]); + } else { + setSelectedRowKeys(selectedRowKeys.filter(key => key !== record.key)); + } + }} + /> + ), + }, + { + title: '记录时间', + dataIndex: 'recordTime', + key: 'recordTime', + width: 120, + align: 'center', + }, + { + title: '记录人', + dataIndex: 'recorder', + key: 'recorder', + width: 100, + align: 'center', + }, + { + title: '审核人', + dataIndex: 'reviewer', + key: 'reviewer', + width: 100, + align: 'center', + }, + { + title: '设施名称', + dataIndex: 'facilityName', + key: 'facilityName', + width: 200, + }, + { + title: '编码', + dataIndex: 'code', + key: 'code', + width: 150, + }, + { + title: '设施型号', + dataIndex: 'facilityModel', + key: 'facilityModel', + width: 200, + }, + { + title: '参数名称', + dataIndex: 'parameterName', + key: 'parameterName', + width: 120, + align: 'center', + }, + { + title: '设计值', + dataIndex: 'designValue', + key: 'designValue', + width: 100, + align: 'center', + }, + { + title: '单位', + dataIndex: 'unit', + key: 'unit', + width: 80, + align: 'center', + }, + { + title: '开始运行时间', + dataIndex: 'startRunTime', + key: 'startRunTime', + width: 120, + align: 'center', + }, + { + title: '结束运行时间', + dataIndex: 'endRunTime', + key: 'endRunTime', + width: 120, + align: 'center', + }, + { + title: '是否正常', + dataIndex: 'isNormal', + key: 'isNormal', + width: 100, + align: 'center', + render: (text) => ( + + {text} + + ), + }, + { + title: '污染物出口流量(m³/h)', + dataIndex: 'pollutantOutletFlow', + key: 'pollutantOutletFlow', + width: 150, + align: 'center', + }, + { + title: '污染因子', + dataIndex: 'pollutantFactor', + key: 'pollutantFactor', + width: 120, + align: 'center', + }, + { + title: '治理效率(%)', + dataIndex: 'treatmentEfficiency', + key: 'treatmentEfficiency', + width: 120, + align: 'center', + }, + { + title: '数据来源', + dataIndex: 'dataSource', + key: 'dataSource', + width: 120, + align: 'center', + }, + { + title: '排放去向', + dataIndex: 'dischargeDestination', + key: 'dischargeDestination', + width: 120, + align: 'center', + }, + { + title: '污泥产生量(t)', + dataIndex: 'sludgeProduction', + key: 'sludgeProduction', + width: 130, + align: 'center', + }, + { + title: '处理方式', + dataIndex: 'treatmentMethod', + key: 'treatmentMethod', + width: 120, + align: 'center', + }, + { + title: '耗电量(kWh)', + dataIndex: 'powerConsumption', + key: 'powerConsumption', + width: 120, + align: 'center', + }, + { + title: '药剂名称', + dataIndex: 'reagentName', + key: 'reagentName', + width: 120, + align: 'center', + }, + { + title: '药剂添加时间', + dataIndex: 'reagentAdditionTime', + key: 'reagentAdditionTime', + width: 150, + align: 'center', + }, + { + title: '药剂添加量(t)', + dataIndex: 'reagentAdditionAmount', + key: 'reagentAdditionAmount', + width: 140, + align: 'center', + }, + { + title: '操作', + key: 'action', + width: 140, + align: 'center', + fixed: 'right', + render: (_, record) => ( + + {/* 查看 handleView(record)} + /> */} + 编辑 handleEdit(record)} + /> + 下载 handleDownload(record)} + /> + 删除 handleDelete(record)} + /> + + ), + }, + ]; + + const handleSearch = (values) => { + console.log('搜索参数:', values); + // TODO: 实现搜索功能 + }; + + const handleReset = () => { + form.resetFields(); + // TODO: 重置搜索 + }; + + const handleView = (record) => { + console.log('查看:', record); + // TODO: 实现查看功能 + }; + + const handleEdit = (record) => { + console.log('编辑:', record); + // TODO: 实现编辑功能 + }; + + const handleDownload = (record) => { + console.log('下载:', record); + // TODO: 实现下载功能 + }; + + const handleDelete = (record) => { + console.log('删除:', record); + // TODO: 实现删除功能 + }; + + const handleAdd = () => { + console.log('新增'); + // TODO: 实现新增功能 + }; + + const handleImport = () => { + console.log('导入'); + // TODO: 实现导入功能 + }; + + const handleQuery = () => { + console.log('查询'); + // TODO: 实现查询功能 + }; + + const handleTableChange = (pagination) => { + setPagination(pagination); + }; + + // 全选功能 + const handleSelectAll = (checked) => { + if (checked) { + const allKeys = getCurrentPageData().map(item => item.key); + setSelectedRowKeys(allKeys); + } else { + setSelectedRowKeys([]); + } + }; + + // 批量操作 + const handleBatchOperation = (operation) => { + console.log(`批量${operation}:`, selectedRowKeys); + // TODO: 实现批量操作功能 + }; + + return ( +
+ {/* 第一块:操作按钮和筛选条件 */} +
+
+ + + + {/* */} +
+ +
+ 筛选条件 + + + +
+
+ + {/* 第二块:表格 */} +
+ `共 ${total} 条`, + showSizeChanger: false, + } + }} + onChange={handleTableChange} + scroll={{ x: 3000 }} + /> +
+ + {/* 图片弹窗 */} + setIsModalVisible(false)} + footer={null} + closeIcon={} + width="auto" + centered + styles={{ + mask: { backgroundColor: '#10101080' }, + content: { padding: 0, background: 'transparent', boxShadow: 'none' } + }} + > + {currentImage && 许可证} + +
+ ); +}; + +export default WastewaterFacilityManagement; \ No newline at end of file diff --git a/src/pages/business_emergencyPlan/components/secondary_menu/WastewaterFacilityManagement.less b/src/pages/business_emergencyPlan/components/secondary_menu/WastewaterFacilityManagement.less new file mode 100644 index 0000000..6d2aaec --- /dev/null +++ b/src/pages/business_emergencyPlan/components/secondary_menu/WastewaterFacilityManagement.less @@ -0,0 +1,206 @@ +.wastewaterFacilityContainer { + width: 100%; + height: 100%; + // padding: 20px; + background-color: #fff; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + + .searchSection { + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; + + .leftButtons { + display: flex; + gap: 12px; + + .addButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 32px; + border-radius: 4px; + display: flex; + align-items: center; + gap: 4px; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .importButton { + background-color: white; + border-color: #d9d9d9; + color: #333; + height: 32px; + border-radius: 4px; + + &:hover { + border-color: #40a9ff; + color: #40a9ff; + } + } + } + + .rightControls { + display: flex; + align-items: center; + gap: 12px; + + .filterLabel { + color: #333; + font-size: 14px; + white-space: nowrap; + } + + .queryButton { + background-color: #52c41a; + border-color: #52c41a; + color: white; + height: 28px; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: #73d13d; + border-color: #73d13d; + } + } + + .selectInput { + :global { + .ant-select-selector { + display: flex; + align-items: center; + height: 28px !important; + } + + .ant-select-selection-item { + display: flex; + align-items: center; + line-height: 1; + } + + .ant-select-selection-placeholder { + display: flex; + align-items: center; + line-height: 1; + } + } + } + } + } + + .tableSection { + flex: 1; + display: flex; + flex-direction: column; + padding: 0 20px 0; + overflow: hidden; // 只设置垂直隐藏 + min-width: 0; // 确保可以收缩 + + + :global { + .ant-spin-nested-loading { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-spin-container { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + + .ant-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + margin: 0; + padding: 0; + } + } + } + + .ant-table { + font-size: 12px; + + .ant-table-thead > tr > th { + background-color: #fafafa; + font-weight: 400; + color: #000000D9; + border-right: none; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody > tr > td { + border-right: none; + color: #000000D9; + font-weight: 400; + text-align: center; + white-space: nowrap; // 防止换行 + overflow: hidden; + text-overflow: ellipsis; + } + + .ant-table-tbody > tr:hover > td { + background-color: #f5f5f5; + } + + // 固定列样式 + .ant-table-thead > tr > th.ant-table-cell-fix-left, + .ant-table-tbody > tr > td.ant-table-cell-fix-left { + background-color: #fafafa; + z-index: 1; + } + + .ant-table-thead > tr > th.ant-table-cell-fix-right, + .ant-table-tbody > tr > td.ant-table-cell-fix-right { + background-color: #fafafa; + z-index: 1; + } + + // 固定列阴影效果 + .ant-table-cell-fix-left { + // box-shadow: 0px 0 4px 0px #00000040; + } + + .ant-table-cell-fix-right { + // box-shadow: 0px 0 4px 0px #00000040; + } + + a { + color: #1890ff; + text-decoration: none; + + &:hover { + color: #40a9ff; + } + } + } + + .ant-pagination { + text-align: right; + margin-top: 25px !important; + } + } + } +} \ No newline at end of file diff --git a/src/pages/login/Login.js b/src/pages/login/Login.js index ce0ccbd..60579ff 100644 --- a/src/pages/login/Login.js +++ b/src/pages/login/Login.js @@ -66,6 +66,7 @@ class Login extends GlobalComponent { callback: async res => { if (res?.success && res?.datarecord) { message.success('登录成功!') + await localStorage.setItem('antd-token-authority', res.datarecord.token) await getInitialState('refresh').then(res => { diff --git a/src/pages/nav_system_content/SystemContentList.js b/src/pages/nav_system_content/SystemContentList.js index 28c82f7..602b2dc 100644 --- a/src/pages/nav_system_content/SystemContentList.js +++ b/src/pages/nav_system_content/SystemContentList.js @@ -13,6 +13,10 @@ import menuTitle1 from '@/assets/img/智能管控平台-1.svg' import fireHydrant from '@/assets/img/fireHydrant.svg' import fireHydrant1 from '@/assets/img/fireHydrant1.svg' import menuicon1 from '@/assets/img/menuicon1.svg' +import menuicon2 from '@/assets/img/menuicon2.svg' +import menuicon3 from '@/assets/img/menuicon1.svg' +import menuicon4 from '@/assets/img/menuicon1.svg' + import book from '@/assets/img/book.svg' import danger from '@/assets/img/danger.svg' import danger1 from '@/assets/img/danger1.svg' @@ -101,18 +105,34 @@ const SystemContentList = (props) => { "key": "/topnavbar00/business/emergencyResource", "label": "应急资源管理" }, + // 应急预案管理 + { + "path": "/topnavbar00/business/emergencyPlan", + icon: 应急预案管理, + "key": "/topnavbar00/business/emergencyPlan", + "label": "应急预案管理" + }, + // 应急演练管理 { - "path": "/topnavbar00/business/basicinformation", - icon: 安全管理基础信息, - "key": "/topnavbar00/business/basicinformation", - "label": "安全管理基础信息" + "path": "/topnavbar00/business/emergencyDrill", + icon: 应急演练管理, + "key": "/topnavbar00/business/emergencyDrill", + "label": "应急演练管理" }, + // 应急值班管理 { - "path": "/topnavbar00/business/hiddentrouble", - icon: 工时仪表盘, - "key": "/topnavbar00/business/hiddentrouble", - "label": "隐患排查" - } + "path": "/topnavbar00/business/emergencyDuty", + icon: 应急值班管理, + "key": "/topnavbar00/business/emergencyDuty", + "label": "应急值班管理" + }, + // 事故接警单 + { + "path": "/topnavbar00/business/emergencyAccident", + icon: 事故接警单, + "key": "/topnavbar00/business/emergencyAccident", + "label": "事故接警单" + }, ] setMenuItems(fixedMenuItems) // 初始化默认路由 @@ -340,7 +360,7 @@ const SystemContentList = (props) => { ...baseStyle, opacity: isActive ? 1 : 0.6 }; - + icon =