From 90c6ad16862bc5f8452868d6a1a7545d93a3fc57 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Fri, 6 Feb 2026 16:12:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E9=97=AD=E5=8C=BA=E5=9F=9F=E7=9B=91?= =?UTF-8?q?=E7=AE=A1=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router.md | 101 ++--- src/api/enclosedArea/index.js | 34 ++ src/api/enclosedAreaPersonnelApply/index.js | 30 ++ src/api/enclosedAreaVehicleApply/index.js | 30 ++ .../index.js | 14 + src/components/ElectronicFenceModal/index.js | 360 ++++++++++++++++++ src/components/NeedToKnowModal/index.js | 48 +++ src/enumerate/namespace/index.js | 4 + .../PersonnelApplication/Add/index.js | 52 +-- .../VehicleApplication/Add/index.js | 48 +-- .../EnclosedArea/Apply/Personnel/Add/index.js | 239 ++++++++++++ .../Apply/Personnel/List/index.js | 68 ++++ .../Apply/Personnel/View/index.js | 74 ++++ .../EnclosedArea/Apply/Personnel/index.js | 5 + .../EnclosedArea/Apply/Vehicle/Add/index.js | 299 +++++++++++++++ .../EnclosedArea/Apply/Vehicle/List/index.js | 71 ++++ .../EnclosedArea/Apply/Vehicle/View/index.js | 52 +++ .../EnclosedArea/Apply/Vehicle/index.js | 5 + .../Apply/VehicleRecords/List/index.js | 122 ++++++ .../Apply/VehicleRecords/View/index.js | 41 ++ .../Apply/VehicleRecords/index.js | 5 + .../Supervision/EnclosedArea/Apply/index.js | 5 + .../Apply/personnelRecords/List/index.js | 120 ++++++ .../Apply/personnelRecords/View/index.js | 44 +++ .../Apply/personnelRecords/index.js | 5 + .../EnclosedArea/DetailList/index.js | 257 +++++++++++++ .../EnclosedArea/EnclosedArea/List/index.js | 42 ++ .../EnclosedArea/EnclosedArea/index.js | 5 + .../EnclosedAreaDoor/Camera/List/index.js | 7 + .../EnclosedAreaDoor/Camera/index.js | 5 + .../EnclosedAreaDoor/Channel/Camera/index.js | 7 + .../Channel/FareGate/index.js | 7 + .../EnclosedAreaDoor/Channel/List/index.js | 7 + .../EnclosedAreaDoor/Channel/index.js | 5 + .../EnclosedAreaDoor/List/index.js | 322 ++++++++++++++++ .../EnclosedArea/EnclosedAreaDoor/index.js | 5 + .../EnclosedArea/EnclosedArea/index.js | 5 + .../Supervision/EnclosedArea/index.js | 5 + .../List/index.js | 115 ++++++ .../PersonnelEntryAndExitRecords/index.js | 52 +++ .../VehicleEntryAndExitRecords/index.js | 60 +++ .../personnelAndVehicleStatistics/index.js | 5 + 42 files changed, 2651 insertions(+), 136 deletions(-) create mode 100644 src/api/enclosedArea/index.js create mode 100644 src/api/enclosedAreaPersonnelApply/index.js create mode 100644 src/api/enclosedAreaVehicleApply/index.js create mode 100644 src/api/enclosedPersonnelAndVehicleStatistics/index.js create mode 100644 src/components/ElectronicFenceModal/index.js create mode 100644 src/components/NeedToKnowModal/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/Add/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/View/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/Add/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/View/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/View/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/View/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/DetailList/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/Camera/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/FareGate/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/EnclosedArea/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/List/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/PersonnelEntryAndExitRecords/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/VehicleEntryAndExitRecords/index.js create mode 100644 src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/index.js diff --git a/router.md b/router.md index 25836ec..3c5b943 100644 --- a/router.md +++ b/router.md @@ -1,50 +1,65 @@ ### 监管端 -- `/primeport/container/supervision/firstLevelDoor/approverUser` 一级口门管理/门禁审批人管理 -- `/primeport/container/supervision/firstLevelDoor/basicInfo/firstLevelDoorInfo/list` 一级口门管理/基本信息管理/一级口门信息管理 -- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel` 一级口门管理/进港审批管理/人员审批管理/相关方人员进港审批 -- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 一级口门管理/进港审批管理/长期车辆审批管理/股份车辆审批 -- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles` 一级口门管理/进港审批管理/长期车辆审批管理/相关方车辆审批 -- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 一级口门管理/进港审批管理/临时访客管理/临时人员管理 -- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 一级口门管理/进港审批管理/临时访客管理/临时车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/股份人员及车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 一级口门管理/进出港信息管理/个人车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stockVehicles/list` 一级口门管理/进出港信息管理/股份单位车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/branchPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/分公司人员及车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stakeholderPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/相关方人员及车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/portBasedUnitsPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/驻港单位人员及车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/inspectDepartmentVehicles/list` 一级口门管理/进出港信息管理/检查部门车辆管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 一级口门管理/进出港信息管理/车辆违规管理/车辆违规管理 -- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 一级口门管理/进出港信息管理/车辆违规管理/车辆黑名单管理 +#### 一级口门管理 +- `/primeport/container/supervision/firstLevelDoor/approverUser` 门禁审批人管理 +- `/primeport/container/supervision/firstLevelDoor/basicInfo/firstLevelDoorInfo/list` 基本信息管理/一级口门信息管理 +- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel` 进港审批管理/人员审批管理/相关方人员进港审批 +- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 进港审批管理/长期车辆审批管理/股份车辆审批 +- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles` 进港审批管理/长期车辆审批管理/相关方车辆审批 +- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 进港审批管理/临时访客管理/临时人员管理 +- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 进港审批管理/临时访客管理/临时车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 进出港信息管理/股份人员及车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 进出港信息管理/个人车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stockVehicles/list` 进出港信息管理/股份单位车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/branchPersonnelAndVehicles/list` 进出港信息管理/分公司人员及车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stakeholderPersonnelAndVehicles/list` 进出港信息管理/相关方人员及车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/portBasedUnitsPersonnelAndVehicles/list` 进出港信息管理/驻港单位人员及车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/inspectDepartmentVehicles/list` 进出港信息管理/检查部门车辆管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 进出港信息管理/车辆违规管理/车辆违规管理 +- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 进出港信息管理/车辆违规管理/车辆黑名单管理 + +#### 封闭区域管理 +- `/primeport/container/supervision/enclosedArea/enclosedArea/enclosedArea/list` 封闭区域管理/封闭区域管理 +- `/primeport/container/supervision/enclosedArea/enclosedArea/enclosedAreaDoor/list` 封闭区域管理/封闭区域口门管理 +- `/primeport/container/supervision/enclosedArea/apply/personnel/list` 封闭区域申请/人员封闭区域申请 +- `/primeport/container/supervision/enclosedArea/apply/vehicle/list` 封闭区域申请/车辆封闭区域申请 +- `/primeport/container/supervision/enclosedArea/apply/personnelRecords/list` 封闭区域申请/人员封闭区域申请记录 +- `/primeport/container/supervision/enclosedArea/apply/vehicleRecords/list` 封闭区域申请/车辆封闭区域申请记录 +- `/primeport/container/supervision/enclosedArea/personnelAndVehicleStatistics/list` 区域人员及车辆统计 + ### 企业端 -- `/primeport/container/enterprise/firstLevelDoor/approverUser` 一级口门管理/门禁审批人管理 -- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel` 一级口门管理/进港审批管理/人员审批管理/相关方人员进港审批 -- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 一级口门管理/进港审批管理/长期车辆审批管理/车辆审批 -- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles` 一级口门管理/进港审批管理/长期车辆审批管理/相关方车辆审批 -- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 一级口门管理/进港审批管理/临时访客管理/临时人员管理 -- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 一级口门管理/进港审批管理/临时访客管理/临时车辆管理 -- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/人员及车辆管理 -- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 一级口门管理/进出港信息管理/个人车辆管理 -- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stockVehicles/list` 一级口门管理/进出港信息管理/单位车辆管理 -- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stakeholderPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/相关方人员及车辆管理 -- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 一级口门管理/进出港信息管理/车辆违规管理/车辆违规管理 -- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 一级口门管理/进出港信息管理/车辆违规管理/车辆黑名单管理 +#### 一级口门管理 +- `/primeport/container/enterprise/firstLevelDoor/approverUser` 门禁审批人管理 +- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel` 进港审批管理/人员审批管理/相关方人员进港审批 +- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 进港审批管理/长期车辆审批管理/车辆审批 +- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles` 进港审批管理/长期车辆审批管理/相关方车辆审批 +- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 进港审批管理/临时访客管理/临时人员管理 +- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 进港审批管理/临时访客管理/临时车辆管理 +- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 进出港信息管理/人员及车辆管理 +- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 进出港信息管理/个人车辆管理 +- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stockVehicles/list` 进出港信息管理/单位车辆管理 +- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stakeholderPersonnelAndVehicles/list` 进出港信息管理/相关方人员及车辆管理 +- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 进出港信息管理/车辆违规管理/车辆违规管理 +- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 进出港信息管理/车辆违规管理/车辆黑名单管理 + ### 相关方端 -- `/primeport/container/stakeholder/firstLevelDoor/approverUser` 一级口门管理/门禁审批人管理 -- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 一级口门管理/进港审批管理/长期车辆审批管理/车辆审批 -- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 一级口门管理/进港审批管理/临时访客管理/临时人员管理 -- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 一级口门管理/进港审批管理/临时访客管理/临时车辆管理 -- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 一级口门管理/进出港信息管理/人员及车辆管理 -- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 一级口门管理/进出港信息管理/个人车辆管理 -- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 一级口门管理/进出港信息管理/车辆违规管理/车辆违规管理 -- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 一级口门管理/进出港信息管理/车辆违规管理/车辆黑名单管理 -- `/primeport/container/stakeholder/firstLevelDoor/personnelPermissionRecords/list` 一级口门管理/人员权限记录 -- `/primeport/container/stakeholder/firstLevelDoor/personnelApplication/list` 一级口门管理/人员申请 -- `/primeport/container/stakeholder/firstLevelDoor/vehicleApplication/list` 一级口门管理/车辆申请 -- `/primeport/container/stakeholder/firstLevelDoor/personnelApplicationRecords/list` 一级口门管理/人员申请记录 -- `/primeport/container/stakeholder/firstLevelDoor/vehicleApplicationRecords/list` 一级口门管理/车辆申请记录 +#### 一级口门管理 +- `/primeport/container/stakeholder/firstLevelDoor/approverUser` 门禁审批人管理 +- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 进港审批管理/长期车辆审批管理/车辆审批 +- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 进港审批管理/临时访客管理/临时人员管理 +- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 进港审批管理/临时访客管理/临时车辆管理 +- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 进出港信息管理/人员及车辆管理 +- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 进出港信息管理/个人车辆管理 +- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 进出港信息管理/车辆违规管理/车辆违规管理 +- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 进出港信息管理/车辆违规管理/车辆黑名单管理 +- `/primeport/container/stakeholder/firstLevelDoor/personnelPermissionRecords/list` 人员权限记录 +- `/primeport/container/stakeholder/firstLevelDoor/personnelApplication/list` 人员申请 +- `/primeport/container/stakeholder/firstLevelDoor/vehicleApplication/list` 车辆申请 +- `/primeport/container/stakeholder/firstLevelDoor/personnelApplicationRecords/list` 人员申请记录 +- `/primeport/container/stakeholder/firstLevelDoor/vehicleApplicationRecords/list` 车辆申请记录 + ### H5端 -- `/primeport/container/mobile/firstLevelDoor/personnelApplication/apply` 一级口门管理/人员申请/申请 -- `/primeport/container/mobile/firstLevelDoor/personnelApplication/applyList` 一级口门管理/人员申请/申请记录 +- `/primeport/container/mobile/firstLevelDoor/personnelApplication/apply` 人员申请/申请 +- `/primeport/container/mobile/firstLevelDoor/personnelApplication/applyList` 人员申请/申请记录 diff --git a/src/api/enclosedArea/index.js b/src/api/enclosedArea/index.js new file mode 100644 index 0000000..bf9292f --- /dev/null +++ b/src/api/enclosedArea/index.js @@ -0,0 +1,34 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const enclosedAreaList = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailList = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailListTree = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailDelete = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailAdd = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailUpdate = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailInfo = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); +export const enclosedAreaDetailSaveElectronicFence = declareRequest( + "enclosedAreaLoading", + `Post > @/primeport/`, +); diff --git a/src/api/enclosedAreaPersonnelApply/index.js b/src/api/enclosedAreaPersonnelApply/index.js new file mode 100644 index 0000000..d744abe --- /dev/null +++ b/src/api/enclosedAreaPersonnelApply/index.js @@ -0,0 +1,30 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const enclosedAreaPersonnelApplyList = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaPersonnelApplyInfo = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaPersonnelApplyEntourageList = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaPersonnelApplySave = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaPersonnelApplyRecordsList = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaPersonnelApplyRecordsAccessRecordsList = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaPersonnelApplyRecordsRejectReason = declareRequest( + "enclosedAreaPersonnelApplyLoading", + `Post > @/primeport/`, +); diff --git a/src/api/enclosedAreaVehicleApply/index.js b/src/api/enclosedAreaVehicleApply/index.js new file mode 100644 index 0000000..e0b0bc0 --- /dev/null +++ b/src/api/enclosedAreaVehicleApply/index.js @@ -0,0 +1,30 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const enclosedAreaVehicleApplyList = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaVehicleApplyInfo = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaVehicleApplyVehicleList = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaVehicleApplySave = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaVehicleApplyRecordsList = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaVehicleApplyRecordsAccessRecordsList = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); +export const enclosedAreaVehicleApplyRecordsRejectReason = declareRequest( + "enclosedAreaVehicleApplyLoading", + `Post > @/primeport/`, +); diff --git a/src/api/enclosedPersonnelAndVehicleStatistics/index.js b/src/api/enclosedPersonnelAndVehicleStatistics/index.js new file mode 100644 index 0000000..f82a176 --- /dev/null +++ b/src/api/enclosedPersonnelAndVehicleStatistics/index.js @@ -0,0 +1,14 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const enclosedPersonnelAndVehicleStatisticsList = declareRequest( + "enclosedPersonnelAndVehicleStatisticsLoading", + `Post > @/primeport/`, +); +export const enclosedPersonnelAndVehicleStatisticsVehicleEntryAndExitRecordsList = declareRequest( + "enclosedPersonnelAndVehicleStatisticsLoading", + `Post > @/primeport/`, +); +export const enclosedPersonnelAndVehicleStatisticsPersonnelEntryAndExitRecordsList = declareRequest( + "enclosedPersonnelAndVehicleStatisticsLoading", + `Post > @/primeport/`, +); diff --git a/src/components/ElectronicFenceModal/index.js b/src/components/ElectronicFenceModal/index.js new file mode 100644 index 0000000..1d385a9 --- /dev/null +++ b/src/components/ElectronicFenceModal/index.js @@ -0,0 +1,360 @@ +import { CheckOutlined, DeleteOutlined } from "@ant-design/icons"; +import { useMount } from "ahooks"; +import { Input, message, Modal } from "antd"; +import { useEffect, useRef, useState } from "react"; +import CesiumMap from "zy-react-library/components/Map/CesiumMap"; +import { dynamicLoadCss, dynamicLoadJs } from "zy-react-library/utils"; + +const ElectronicFenceModal = (props) => { + const { position } = props; + const [latitudeAndLongitudeSet, setLatitudeAndLongitudeSet] = useState(""); + const [isDrawing, setIsDrawing] = useState(true); // 是否正在绘制 + const [isCompleted, setIsCompleted] = useState(false); // 是否已完成绘制 + + const mapContainerRef = useRef(null); // 存储地图容器引用 + const mapInstanceRef = useRef(null); // 存储地图实例 + const pointsRef = useRef([]); // 存储所有点击的点位 + const entitiesRef = useRef([]); // 存储所有绘制的实体(点位和线条) + const handlerRef = useRef(null); // 存储鼠标点击事件处理器 + const isDrawingRef = useRef(isDrawing); // 使用ref存储isDrawing + const isCompletedRef = useRef(isCompleted); // 使用ref存储isCompleted + + // 同步状态到ref + useEffect(() => { + isDrawingRef.current = isDrawing; + }, [isDrawing]); + + useEffect(() => { + isCompletedRef.current = isCompleted; + }, [isCompleted]); + + // 从position字符串解析点位数组 + const parsePositionString = (positionStr) => { + if (!positionStr) + return []; + return positionStr.split(";").map((coord) => { + const [longitude, latitude] = coord.split(","); + return { longitude: Number(longitude), latitude: Number(latitude) }; + }); + }; + + // 将笛卡尔坐标转换为经纬度点位 + const convertCartesianToPoint = (cartesian) => { + const cartographic = window.Cesium.Cartographic.fromCartesian(cartesian); + const longitude = window.Cesium.Math.toDegrees(cartographic.longitude); + const latitude = window.Cesium.Math.toDegrees(cartographic.latitude); + return { longitude, latitude }; + }; + + // 在地图上添加点位 + const addPoint = (point) => { + const viewer = mapInstanceRef.current; + if (!viewer) + return; + + pointsRef.current.push(point); + + const pointEntity = viewer.entities.add({ + position: window.Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude), + point: { + pixelSize: 10, + color: window.Cesium.Color.RED, + outlineColor: window.Cesium.Color.WHITE, + outlineWidth: 2, + verticalOrigin: window.Cesium.VerticalOrigin.BOTTOM, + horizontalOrigin: window.Cesium.HorizontalOrigin.CENTER, + heightReference: window.Cesium.HeightReference.CLAMP_TO_GROUND, + disableDepthTestDistance: Number.POSITIVE_INFINITY, + clampToGround: true, + }, + }); + entitiesRef.current.push(pointEntity); + }; + + // 在两点之间绘制连线 + const drawLineBetweenPoints = (startPoint, endPoint) => { + const viewer = mapInstanceRef.current; + if (!viewer) + return; + + const lineEntity = viewer.entities.add({ + polyline: { + positions: window.Cesium.Cartesian3.fromDegreesArray([ + startPoint.longitude, + startPoint.latitude, + endPoint.longitude, + endPoint.latitude, + ]), + width: 3, + material: window.Cesium.Color.RED, + verticalOrigin: window.Cesium.VerticalOrigin.BOTTOM, + horizontalOrigin: window.Cesium.HorizontalOrigin.CENTER, + heightReference: window.Cesium.HeightReference.CLAMP_TO_GROUND, + disableDepthTestDistance: Number.POSITIVE_INFINITY, + clampToGround: true, + }, + }); + entitiesRef.current.push(lineEntity); + }; + + // 绘制多边形填充 + const drawPolygonFill = (points) => { + const viewer = mapInstanceRef.current; + if (!viewer) + return; + + const positions = points.flatMap(point => [point.longitude, point.latitude]); + const polygonEntity = viewer.entities.add({ + polygon: { + hierarchy: window.Cesium.Cartesian3.fromDegreesArray(positions), + material: window.Cesium.Color.RED.withAlpha(0.2), + }, + }); + entitiesRef.current.push(polygonEntity); + }; + + // 更新经纬度显示 + const updateLatitudeAndLongitudeDisplay = () => { + const points = pointsRef.current; + if (points.length === 0) { + setLatitudeAndLongitudeSet(""); + return; + } + + const coordinateString = points + .map(point => `${point.longitude},${point.latitude}`) + .join(";"); + setLatitudeAndLongitudeSet(coordinateString); + }; + + // 清除绘制 + const handleClearDrawing = () => { + const viewer = mapInstanceRef.current; + if (!viewer) + return; + + // 清除所有绘制的实体 + entitiesRef.current.forEach((entity) => { + viewer.entities.remove(entity); + }); + + // 清空数组和状态 + pointsRef.current = []; + entitiesRef.current = []; + setLatitudeAndLongitudeSet(""); + setIsCompleted(false); + setIsDrawing(true); + }; + + // 根据position绘制已存在的围栏 + const drawExistingFence = (positionStr) => { + const viewer = mapInstanceRef.current; + if (!viewer || !positionStr) + return; + + const points = parsePositionString(positionStr); + if (points.length === 0) + return; + + // 绘制所有点位 + points.forEach(point => addPoint(point)); + + // 绘制连线 + for (let i = 0; i < points.length - 1; i++) { + drawLineBetweenPoints(points[i], points[i + 1]); + } + + // 将最后一个点和第一个点相连 + drawLineBetweenPoints(points[points.length - 1], points[0]); + + // 绘制多边形填充 + drawPolygonFill(points); + + // 更新状态 + setIsCompleted(true); + setIsDrawing(false); + setLatitudeAndLongitudeSet(positionStr); + }; + + // 监听position变化 + useEffect(() => { + if (position && mapInstanceRef.current) { + // 清除现有绘制 + handleClearDrawing(); + // 绘制传入的围栏 + drawExistingFence(position); + } + }, [position]); + + // 处理地图点击事件 + const handleMapClick = (movement) => { + const viewer = mapInstanceRef.current; + if (!viewer || !isDrawingRef.current || isCompletedRef.current) + return; + + // 获取点击位置的三维坐标 + const cartesian = viewer.camera.pickEllipsoid( + movement.position, + viewer.scene.globe.ellipsoid, + ); + + if (window.Cesium.defined(cartesian)) { + const point = convertCartesianToPoint(cartesian); + addPoint(point); + if (pointsRef.current.length > 1) { + drawLineBetweenPoints(pointsRef.current[pointsRef.current.length - 2], point); + } + updateLatitudeAndLongitudeDisplay(); + } + }; + + // 初始化地图 + const initMap = () => { + if (mapContainerRef.current) { + if (!mapInstanceRef.current) { + const { init, flyTo } = new CesiumMap(); + const { viewer } = init(); + mapInstanceRef.current = viewer; + flyTo({ longitude: window.mapLongitude, latitude: window.mapLatitude, height: 900000 }); + + // 设置鼠标点击事件 + const handler = new window.Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); + handler.setInputAction(handleMapClick, window.Cesium.ScreenSpaceEventType.LEFT_CLICK); + handlerRef.current = handler; + + // 如果传入了position参数,则绘制已存在的围栏 + if (position) { + drawExistingFence(position); + } + } + } + }; + + // 加载Cesium地图 + const loadCesiumMap = async () => { + if (!window.Cesium) { + if (window?.base?.loadDynamicResource) { + await window.base.loadDynamicResource({ + url: "https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js", + type: "script", + attr: { type: "text/javascript" }, + }); + await window.base.loadDynamicResource({ + url: "https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css", + type: "link", + attr: { rel: "stylesheet", type: "text/css" }, + }); + initMap(); + } + else { + await dynamicLoadJs("https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js"); + await dynamicLoadCss("https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css"); + initMap(); + } + } + else { + initMap(); + } + }; + + // 完成绘制 + const handleCompleteDrawing = () => { + // 如果已经完成绘制,提示需要先清除 + if (isCompleted) { + message.warning("若已完成绘制,请先点击清除绘制按钮。"); + return; + } + + if (pointsRef.current.length < 3) { + // 至少需要3个点才能形成闭合区域 + message.warning("至少需要3个点才能完成绘制"); + return; + } + + const points = pointsRef.current; + const firstPoint = points[0]; + const lastPoint = points[points.length - 1]; + + // 将最后一个点和第一个点相连 + drawLineBetweenPoints(lastPoint, firstPoint); + + // 绘制多边形填充 + drawPolygonFill(points); + + setIsCompleted(true); + setIsDrawing(false); + }; + + useMount(() => { + loadCesiumMap(); + return () => { + if (mapInstanceRef.current) { + try { + mapInstanceRef.current.destroy(); + mapInstanceRef.current = null; + } + catch (e) { + console.warn("Error destroying map on unmount:", e); + } + mapInstanceRef.current = null; + } + }; + }); + + return ( + { + if (!isCompleted) { + message.warning("若已完成绘制,请先点击完成绘制按钮。"); + return; + } + props?.onOk(latitudeAndLongitudeSet); + }} + confirmLoading={props?.confirmLoading} + width={800} + > +
+
+
+ + 完成绘制 +
+
+ + 清除绘制 +
+
+
区域经纬度:
+ +
+
+ + ); +}; + +export default ElectronicFenceModal; diff --git a/src/components/NeedToKnowModal/index.js b/src/components/NeedToKnowModal/index.js new file mode 100644 index 0000000..300f2ec --- /dev/null +++ b/src/components/NeedToKnowModal/index.js @@ -0,0 +1,48 @@ +import { message, Modal } from "antd"; +import { useRef } from "react"; +import Signature from "zy-react-library/components/Signature"; + +const NeedToKnowModal = (props) => { + const signatureUrl = useRef(""); + const signatureFile = useRef({}); + + return ( + { + if (!signatureUrl.current) { + message.warning("请签名"); + return; + } + props.onOk({ + base64: signatureUrl.current, + file: signatureFile.current, + }); + }} + > +
+

欢迎您到访秦皇岛港。为保障您的人身安全及港口生产作业秩序,请注意港口属于重点安全监管区域,存在大型机械作业、货物装卸、车辆往来等生产场景,可能面临机械伤害、物体打击、车辆碰撞等安全风险。请您认真阅读以下须知内容,确认遵守后签字:

+

1. 入港时请主动出示有效身份证件,配合安保人员进行身份核验与信息登记,凭港口核发的《临时访客证》入港,自觉接受出港查验;不转借、冒用访客凭证,不将无关人员带入港口。

+

2. 入港后请严格在指定区域活动,未经陪同人员及港口负责人许可,绝不擅自进入标有“禁止入内”“危险区域”等标识的场所,不靠近起重机械、输送设备、危险品存储点等高危部位,不跨越安全护栏、警戒线,不在作业区域逗留围观。

+

3. 遵守港口生产秩序,不干扰装卸、运输、检修等正常工作;不随意触摸、操作生产设备、仪器仪表及安全设施,不移动、遮挡安全警示标识;如需拍摄港口场景,须提前征得港口方同意,不拍摄涉及安全、商业秘密的内容。

+

4. 严格遵守消防安全规定,不在港口内吸烟,不携带火种、易燃易爆物品、管制器具等违禁物品入港;发现火灾、设备故障等隐患或突发情况,第一时间告知陪同人员或港口工作人员,配合应急处置,不擅自行动引发次生风险。

+

5. 注意自身安全防护,行走时主动避让作业车辆与机械,不擅自横穿作业通道;雨天、雾天等恶劣天气下,听从陪同人员安排,加强安全防范。

+

6. 已知晓港口所去区域应急逃生路线,遇紧急情况按港口指引有序疏散。

+

本人确认已完整阅读并理解以上须知,承诺严格遵守。如因违反本须知及港口安全规定导致自身人身伤害或港口、他人财产损失,自愿承担全部责任。

+
+ { + signatureUrl.current = value.base64; + signatureFile.current = value.file; + }} + url={props.signatureUrl} + /> +
+ ); +}; + +export default NeedToKnowModal; diff --git a/src/enumerate/namespace/index.js b/src/enumerate/namespace/index.js index 4698b02..867e248 100644 --- a/src/enumerate/namespace/index.js +++ b/src/enumerate/namespace/index.js @@ -24,3 +24,7 @@ export const NS_VEHICLE_BLACKLIST = defineNamespace("vehicleBlacklist"); export const NS_PERSONNEL_PERMISSION_RECORDS = defineNamespace("personnelPermissionRecords"); export const NS_PERSONNEL_APPLICATION = defineNamespace("personnelApplication"); export const NS_VEHICLE_APPLICATION = defineNamespace("vehicleApplication"); +export const NS_ENCLOSED_AREA = defineNamespace("enclosedArea"); +export const NS_ENCLOSED_AREA_PERSONNEL_APPLY = defineNamespace("enclosedAreaPersonnelApply"); +export const NS_ENCLOSED_AREA_VEHICLE_APPLY = defineNamespace("enclosedAreaVehicleApply"); +export const NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS = defineNamespace("enclosedPersonnelAndVehicleStatistics"); diff --git a/src/pages/Container/Stakeholder/FirstLevelDoor/PersonnelApplication/Add/index.js b/src/pages/Container/Stakeholder/FirstLevelDoor/PersonnelApplication/Add/index.js index 25b4521..dce21c8 100644 --- a/src/pages/Container/Stakeholder/FirstLevelDoor/PersonnelApplication/Add/index.js +++ b/src/pages/Container/Stakeholder/FirstLevelDoor/PersonnelApplication/Add/index.js @@ -4,9 +4,9 @@ import { useRef, useState } from "react"; import FormBuilder from "zy-react-library/components/FormBuilder"; import Page from "zy-react-library/components/Page"; import DictionarySelect from "zy-react-library/components/Select/Dictionary"; -import Signature from "zy-react-library/components/Signature"; import Table from "zy-react-library/components/Table"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import NeedToKnowModal from "~/components/NeedToKnowModal"; import { NS_PERSONNEL_APPLICATION } from "~/enumerate/namespace"; function Add(props) { @@ -130,7 +130,7 @@ function Add(props) { setAddPersonnelModalVisible(false); }} onOk={(values) => { - setPersonnelList([...personnelList, values]); + setPersonnelList(values); setAddPersonnelModalVisible(false); }} /> @@ -156,8 +156,9 @@ function Add(props) { } const AddPersonnelModalComponent = (props) => { - const [selectedRowKeys, setSelectedRowKeys] = useState([]); - const selectedRowsRef = useRef([]); + const [selectedRowKeys, setSelectedRowKeys] = useState(props.personnelList.map(item => item.id)); + + const selectedRowsRef = useRef(props.personnelList || []); return ( { ); }; -const NeedToKnowModal = (props) => { - const signatureUrl = useRef(""); - const signatureFile = useRef({}); - - return ( - { - if (!signatureUrl.current) { - message.warning("请签名"); - return; - } - props.onOk({ - base64: signatureUrl.current, - file: signatureFile.current, - }); - }} - > -
-

欢迎您到访秦皇岛港。为保障您的人身安全及港口生产作业秩序,请注意港口属于重点安全监管区域,存在大型机械作业、货物装卸、车辆往来等生产场景,可能面临机械伤害、物体打击、车辆碰撞等安全风险。请您认真阅读以下须知内容,确认遵守后签字:

-

1. 入港时请主动出示有效身份证件,配合安保人员进行身份核验与信息登记,凭港口核发的《临时访客证》入港,自觉接受出港查验;不转借、冒用访客凭证,不将无关人员带入港口。

-

2. 入港后请严格在指定区域活动,未经陪同人员及港口负责人许可,绝不擅自进入标有“禁止入内”“危险区域”等标识的场所,不靠近起重机械、输送设备、危险品存储点等高危部位,不跨越安全护栏、警戒线,不在作业区域逗留围观。

-

3. 遵守港口生产秩序,不干扰装卸、运输、检修等正常工作;不随意触摸、操作生产设备、仪器仪表及安全设施,不移动、遮挡安全警示标识;如需拍摄港口场景,须提前征得港口方同意,不拍摄涉及安全、商业秘密的内容。

-

4. 严格遵守消防安全规定,不在港口内吸烟,不携带火种、易燃易爆物品、管制器具等违禁物品入港;发现火灾、设备故障等隐患或突发情况,第一时间告知陪同人员或港口工作人员,配合应急处置,不擅自行动引发次生风险。

-

5. 注意自身安全防护,行走时主动避让作业车辆与机械,不擅自横穿作业通道;雨天、雾天等恶劣天气下,听从陪同人员安排,加强安全防范。

-

6. 已知晓港口所去区域应急逃生路线,遇紧急情况按港口指引有序疏散。

-

本人确认已完整阅读并理解以上须知,承诺严格遵守。如因违反本须知及港口安全规定导致自身人身伤害或港口、他人财产损失,自愿承担全部责任。

-
- { - signatureUrl.current = value.base64; - signatureFile.current = value.file; - }} - url={props.signatureUrl} - /> -
- ); -}; - const AddPersonnelModal = Connect([NS_PERSONNEL_APPLICATION], true)(AddPersonnelModalComponent); export default Connect([NS_PERSONNEL_APPLICATION], true)(Add); diff --git a/src/pages/Container/Stakeholder/FirstLevelDoor/VehicleApplication/Add/index.js b/src/pages/Container/Stakeholder/FirstLevelDoor/VehicleApplication/Add/index.js index 04ad3da..83a0cd9 100644 --- a/src/pages/Container/Stakeholder/FirstLevelDoor/VehicleApplication/Add/index.js +++ b/src/pages/Container/Stakeholder/FirstLevelDoor/VehicleApplication/Add/index.js @@ -1,15 +1,15 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime"; -import { Button, Form, message, Modal } from "antd"; +import { Button, Form, message } from "antd"; import { useRef, useState } from "react"; import FormBuilder from "zy-react-library/components/FormBuilder"; import Page from "zy-react-library/components/Page"; import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj"; import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj"; -import Signature from "zy-react-library/components/Signature"; import Upload from "zy-react-library/components/Upload"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { LICENSE_PLATE_NUMBER } from "zy-react-library/regular"; +import NeedToKnowModal from "~/components/NeedToKnowModal"; import { NS_VEHICLE_APPLICATION } from "~/enumerate/namespace"; function Add(props) { @@ -51,7 +51,6 @@ function Add(props) { { name: "todo11", label: "车牌号", rules: [{ pattern: LICENSE_PLATE_NUMBER, message: "请输入正确的车牌号" }] }, { name: "todo12", label: "车辆照片", span: 24, render: () }, { name: "todo13", label: "行驶证照片", span: 24, render: () }, - { name: "todo14", label: "机动车登记证书", span: 24, render: () }, { name: "todo15", label: " ", @@ -100,47 +99,4 @@ function Add(props) { ); } -const NeedToKnowModal = (props) => { - const signatureUrl = useRef(""); - const signatureFile = useRef({}); - - return ( - { - if (!signatureUrl.current) { - message.warning("请签名"); - return; - } - props.onOk({ - base64: signatureUrl.current, - file: signatureFile.current, - }); - }} - > -
-

欢迎您到访秦皇岛港。为保障您的人身安全及港口生产作业秩序,请注意港口属于重点安全监管区域,存在大型机械作业、货物装卸、车辆往来等生产场景,可能面临机械伤害、物体打击、车辆碰撞等安全风险。请您认真阅读以下须知内容,确认遵守后签字:

-

1. 入港时请主动出示有效身份证件,配合安保人员进行身份核验与信息登记,凭港口核发的《临时访客证》入港,自觉接受出港查验;不转借、冒用访客凭证,不将无关人员带入港口。

-

2. 入港后请严格在指定区域活动,未经陪同人员及港口负责人许可,绝不擅自进入标有“禁止入内”“危险区域”等标识的场所,不靠近起重机械、输送设备、危险品存储点等高危部位,不跨越安全护栏、警戒线,不在作业区域逗留围观。

-

3. 遵守港口生产秩序,不干扰装卸、运输、检修等正常工作;不随意触摸、操作生产设备、仪器仪表及安全设施,不移动、遮挡安全警示标识;如需拍摄港口场景,须提前征得港口方同意,不拍摄涉及安全、商业秘密的内容。

-

4. 严格遵守消防安全规定,不在港口内吸烟,不携带火种、易燃易爆物品、管制器具等违禁物品入港;发现火灾、设备故障等隐患或突发情况,第一时间告知陪同人员或港口工作人员,配合应急处置,不擅自行动引发次生风险。

-

5. 注意自身安全防护,行走时主动避让作业车辆与机械,不擅自横穿作业通道;雨天、雾天等恶劣天气下,听从陪同人员安排,加强安全防范。

-

6. 已知晓港口所去区域应急逃生路线,遇紧急情况按港口指引有序疏散。

-

本人确认已完整阅读并理解以上须知,承诺严格遵守。如因违反本须知及港口安全规定导致自身人身伤害或港口、他人财产损失,自愿承担全部责任。

-
- { - signatureUrl.current = value.base64; - signatureFile.current = value.file; - }} - url={props.signatureUrl} - /> -
- ); -}; - export default Connect([NS_VEHICLE_APPLICATION], true)(Add); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/Add/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/Add/index.js new file mode 100644 index 0000000..4254a8c --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/Add/index.js @@ -0,0 +1,239 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, message, Modal } from "antd"; +import { useRef, useState } from "react"; +import FormBuilder from "zy-react-library/components/FormBuilder"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import BasicSelectTree from "zy-react-library/components/SelectTree/Basic"; +import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj"; +import Table from "zy-react-library/components/Table"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useTable from "zy-react-library/hooks/useTable"; +import NeedToKnowModal from "~/components/NeedToKnowModal"; +import { NS_ENCLOSED_AREA, NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace"; + +function Add(props) { + const [enclosedAreaList, setEnclosedAreaList] = useState([]); + const [entourageList, setEntourageList] = useState([]); + const [selectEntourageModalVisible, setSelectEntourageModalVisible] = useState(false); + const [needToKnowModalVisible, setNeedToKnowModalVisible] = useState(false); + + const signatureUrl = useRef(""); + + const [form] = Form.useForm(); + + const getEnclosedAreaList = async (id) => { + const { data } = await props["enclosedAreaDetailListTree"]({ id }); + setEnclosedAreaList(data); + }; + + const onSubmit = async (values) => { + if (!values.todo8) { + message.warning("请勾选《安全进港须知》并签字"); + return; + } + const { success } = await props["enclosedAreaPersonnelApplySave"]({ ...values }); + if (success) { + message.success("操作成功"); + props.history.goBack(); + } + }; + + return ( + + { + getEnclosedAreaList(value); + }} + /> + ), + }, + { name: "todo2", label: "封闭区域", render: () }, + { name: "todo4", label: "审核人员", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] }, + { name: "todo5", label: "申请时间范围", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE }, + { + label: "随行人员", + span: 24, + customizeRender: true, + render: ( + + 如需选择的人员无法添加或查询不到,请确认该人员在集团人资系统入职状态是否正常或人脸照片是否上传。 + + )} + toolBarRender={() => ( + + )} + options={false} + disabledResizer={true} + pagination={false} + columns={[ + { title: "姓名", dataIndex: "todo1" }, + { title: "部门", dataIndex: "todo2" }, + { + title: "操作", + render: (_, record) => ( + + ), + }, + ]} + dataSource={entourageList} + /> + ), + }, + { name: "todo6", label: "申请原因", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA }, + { + name: "todo7", + label: " ", + span: 24, + required: false, + rules: [{ required: true, message: "请勾选" }], + formItemProps: { + colon: false, + required: false, + style: { textAlign: "center" }, + labelCol: { span: 0 }, + wrapperCol: { span: 24 }, + }, + render: FORM_ITEM_RENDER_ENUM.CHECKBOX, + items: [{ + bianma: "1", + name: ( + <> + 我已阅读并同意 + + + ), + }], + }, + { name: "todo8", label: "签字", onlyForLabel: true }, + ]} + form={form} + /> + { + selectEntourageModalVisible && ( + { + setSelectEntourageModalVisible(false); + }} + onOk={(values) => { + setEntourageList(values); + setSelectEntourageModalVisible(false); + }} + /> + ) + } + { + needToKnowModalVisible && ( + { + setNeedToKnowModalVisible(false); + }} + onOk={(values) => { + form.setFieldValue("todo8", values); + signatureUrl.current = values.base64; + setNeedToKnowModalVisible(false); + }} + /> + ) + } + + ); +} + +const SelectEntourageModalComponent = (props) => { + const [selectedRowKeys, setSelectedRowKeys] = useState(props.entourageList.map(item => item.id)); + + const selectedRowsRef = useRef(props.entourageList || []); + + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyEntourageList"], { + form, + useStorageQueryCriteria: false, + }); + + return ( + { + props.onOk(selectedRowsRef.current); + }} + > + +
{ + setSelectedRowKeys(selectedRowKeys); + selectedRowsRef.current = selectedRows; + }, + }} + options={false} + disabledResizer={true} + columns={[ + { title: "部门", dataIndex: "todo1" }, + { title: "姓名", dataIndex: "todo2" }, + { title: "手机号", dataIndex: "todo3" }, + { title: "是否录入人脸", dataIndex: "todo4", render: (_, record) => record.todo4 === 1 ? "是" : "否" }, + ]} + {...tableProps} + /> + + ); +}; + +const SelectEntourageModal = Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY, NS_ENCLOSED_AREA], true)(SelectEntourageModalComponent); + +export default Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY, NS_ENCLOSED_AREA], true)(Add); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/List/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/List/index.js new file mode 100644 index 0000000..960bf74 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/List/index.js @@ -0,0 +1,68 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form } from "antd"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg"; +import useTable from "zy-react-library/hooks/useTable"; +import { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace"; + +function List(props) { + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyList"], { + form, + }); + + return ( + + +
( + + )} + columns={[ + { title: "姓名", dataIndex: "todo1" }, + { title: "部门", dataIndex: "todo2" }, + { title: "手机号", dataIndex: "todo3" }, + { title: "申请区域", dataIndex: "todo4" }, + { title: "申请时间范围", dataIndex: "todo5", render: (_, record) => `${record.todo5} - ${record.todo6}` }, + { title: "个人照片", dataIndex: "todo7", render: (_, record) => }, + { title: "申请状态", dataIndex: "todo8" }, + { + title: "操作", + width: 80, + fixed: "right", + render: (_, record) => ( + + ), + }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/View/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/View/index.js new file mode 100644 index 0000000..bf1c02e --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/View/index.js @@ -0,0 +1,74 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Descriptions, Divider, Spin } from "antd"; +import { useEffect, useState } from "react"; +import Page from "zy-react-library/components/Page"; +import PreviewImg from "zy-react-library/components/PreviewImg"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace"; + +function View(props) { + const [info, setInfo] = useState({}); + + const query = useGetUrlQuery(); + + const getData = async () => { + const { data } = await props["enclosedAreaPersonnelApplyInfo"]({ id: query.id }); + setInfo(data); + props.onGetData?.(data); + }; + + useEffect(() => { + getData(); + }, []); + + return ( + + + 人员信息 + ) }, + { label: "申请原因", children: info.todo9 }, + { label: "申请人员签字", children: () }, + ]} + /> + { + info.todo11.length > 0 + && ( + <> + 更多人员信息 + { + info.todo11.map((item, index) => ( + + )) + } + + ) + } + {props.children} + + + ); +} + +export default Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY], true)(View); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/index.js new file mode 100644 index 0000000..1e0eca9 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Personnel/index.js @@ -0,0 +1,5 @@ +function Personnel(props) { + return props.children; +} + +export default Personnel; diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/Add/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/Add/index.js new file mode 100644 index 0000000..4e4b503 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/Add/index.js @@ -0,0 +1,299 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, message, Modal, Tabs } from "antd"; +import { useRef, useState } from "react"; +import FormBuilder from "zy-react-library/components/FormBuilder"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import DictionarySelect from "zy-react-library/components/Select/Dictionary"; +import BasicSelectTree from "zy-react-library/components/SelectTree/Basic"; +import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj"; +import Table from "zy-react-library/components/Table"; +import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg"; +import Upload from "zy-react-library/components/Upload"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useTable from "zy-react-library/hooks/useTable"; +import { LICENSE_PLATE_NUMBER } from "zy-react-library/regular"; +import NeedToKnowModal from "~/components/NeedToKnowModal"; +import { + NS_ENCLOSED_AREA, + NS_ENCLOSED_AREA_VEHICLE_APPLY, +} from "~/enumerate/namespace"; + +function Add(props) { + const [enclosedAreaList, setEnclosedAreaList] = useState([]); + const [vehicleList, setVehicleList] = useState([]); + const [selectVehicleModalVisible, setSelectVehicleModalVisible] = useState(false); + const [needToKnowModalVisible, setNeedToKnowModalVisible] = useState(false); + + const signatureUrl = useRef(""); + + const [form] = Form.useForm(); + const todo6 = Form.useWatch("todo6", form); + + const getEnclosedAreaList = async (id) => { + const { data } = await props["enclosedAreaDetailListTree"]({ id }); + setEnclosedAreaList(data); + }; + + const onSubmit = async (values) => { + if (values.todo6 === 1 && vehicleList.length === 0) { + message.warning("请选择车辆"); + return; + } + if (!values.todo14) { + message.warning("请勾选《安全进港须知》并签字"); + return; + } + const { success } = await props["enclosedAreaVehicleApplySave"]({ ...values }); + if (success) { + message.success("操作成功"); + props.history.goBack(); + } + }; + + return ( + + { + getEnclosedAreaList(value); + }} + /> + ), + }, + { name: "todo2", label: "封闭区域", render: () }, + { name: "todo4", label: "审核人员", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] }, + { name: "todo5", label: "申请时间范围", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE }, + { + name: "todo6", + label: "车辆类型", + render: FORM_ITEM_RENDER_ENUM.RADIO, + items: [ + { bianma: 1, name: "选择现有车辆" }, + { bianma: 2, name: "新增车辆" }, + ], + componentProps: { + onChange: () => { + setVehicleList([]); + }, + }, + }, + ...(todo6 === 1 + ? [ + { + label: "选择现有车辆", + span: 24, + customizeRender: true, + render: ( +
( + + )} + options={false} + disabledResizer={true} + pagination={false} + columns={[ + { title: "车牌类型", dataIndex: "todo1" }, + { title: "车辆类型", dataIndex: "todo2" }, + { title: "车牌号", dataIndex: "todo3" }, + { + title: "车辆照片", + dataIndex: "todo4", + render: (_, record) => , + }, + { + title: "操作", + render: (_, record) => ( + + ), + }, + ]} + dataSource={vehicleList} + /> + ), + }, + ] + : []), + ...(todo6 === 2 + ? [ + { name: "todo7", label: "车牌类型", render: () }, + { name: "todo8", label: "车辆类型", render: () }, + { name: "todo9", label: "车牌号", rules: [{ pattern: LICENSE_PLATE_NUMBER, message: "请输入正确的车牌号" }] }, + { name: "todo10", label: "车辆照片", span: 24, render: () }, + { name: "todo11", label: "行驶证照片", span: 24, render: () }, + ] + : []), + { name: "todo12", label: "申请原因", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA }, + { + name: "todo13", + label: " ", + span: 24, + required: false, + rules: [{ required: true, message: "请勾选" }], + formItemProps: { + colon: false, + required: false, + style: { textAlign: "center" }, + labelCol: { span: 0 }, + wrapperCol: { span: 24 }, + }, + render: FORM_ITEM_RENDER_ENUM.CHECKBOX, + items: [{ + bianma: "1", + name: ( + <> + 我已阅读并同意 + + + ), + }], + }, + { name: "todo14", label: "签字", onlyForLabel: true }, + ]} + form={form} + /> + { + selectVehicleModalVisible && ( + { + setSelectVehicleModalVisible(false); + }} + onOk={(values) => { + setVehicleList(values); + setSelectVehicleModalVisible(false); + }} + /> + ) + } + { + needToKnowModalVisible && ( + { + setNeedToKnowModalVisible(false); + }} + onOk={(values) => { + form.setFieldValue("todo14", values); + signatureUrl.current = values.base64; + setNeedToKnowModalVisible(false); + }} + /> + ) + } + + ); +} + +const SelectVehicleModalComponent = (props) => { + const [tabActiveKey, setTabActiveKey] = useState("1"); + const [selectedRowKeys, setSelectedRowKeys] = useState(props.vehicleList.map(item => item.id)); + + const selectedRowsRef = useRef(props.vehicleList || []); + + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyVehicleList"], { + form, + useStorageQueryCriteria: false, + params: { tabActiveKey }, + }); + + return ( + { + props.onOk(selectedRowsRef.current); + }} + > + +
{ + setTabActiveKey(event); + getData(); + }} + /> + )} + rowSelection={{ + selectedRowKeys, + type: "radio", + preserveSelectedRowKeys: true, + onChange: (selectedRowKeys, selectedRows) => { + setSelectedRowKeys(selectedRowKeys); + selectedRowsRef.current = selectedRows; + }, + }} + options={false} + disabledResizer={true} + columns={[ + { title: "车牌类型", dataIndex: "todo1" }, + { title: "车辆类型", dataIndex: "todo2" }, + { title: "车牌号", dataIndex: "todo3" }, + { + title: "车辆照片", + dataIndex: "todo4", + render: (_, record) => , + }, + ]} + {...tableProps} + dataSource={[ + { id: "1", todo1: "1", todo2: "1", todo3: "1" }, + { id: "2", todo1: "2", todo2: "2", todo3: "2" }, + { id: "3", todo1: "3", todo2: "3", todo3: "3" }, + { id: "4", todo1: "4", todo2: "4", todo3: "4" }, + { id: "5", todo1: "5", todo2: "5", todo3: "5" }, + ]} + /> + + ); +}; + +const SelectVehicleModal = Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(SelectVehicleModalComponent); + +export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY, NS_ENCLOSED_AREA], true)(Add); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/List/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/List/index.js new file mode 100644 index 0000000..c5bce74 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/List/index.js @@ -0,0 +1,71 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form } from "antd"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg"; +import useTable from "zy-react-library/hooks/useTable"; +import { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace"; + +function List(props) { + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyList"], { + form, + }); + + return ( + + +
( + + )} + columns={[ + { title: "车辆类型", dataIndex: "todo1" }, + { title: "驾驶人", dataIndex: "todo2" }, + { title: "职务", dataIndex: "todo3" }, + { title: "手机号", dataIndex: "todo4" }, + { title: "申请区域", dataIndex: "todo5" }, + { title: "申请时间范围", dataIndex: "todo6", render: (_, record) => `${record.todo6} - ${record.todo7}` }, + { title: "申请原因", dataIndex: "todo7" }, + { title: "车牌号", dataIndex: "todo8" }, + { title: "车辆照片", dataIndex: "todo9", render: (_, record) => }, + { title: "申请状态", dataIndex: "todo10" }, + { + title: "操作", + width: 80, + fixed: "right", + render: (_, record) => ( + + ), + }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/View/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/View/index.js new file mode 100644 index 0000000..6103a9d --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/View/index.js @@ -0,0 +1,52 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Descriptions, Divider, Spin } from "antd"; +import { useEffect, useState } from "react"; +import Page from "zy-react-library/components/Page"; +import PreviewImg from "zy-react-library/components/PreviewImg"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace"; + +function View(props) { + const [info, setInfo] = useState({}); + + const query = useGetUrlQuery(); + + const getData = async () => { + const { data } = await props["enclosedAreaVehicleApplyInfo"]({ id: query.id }); + setInfo(data); + props.onGetData?.(data); + }; + + useEffect(() => { + getData(); + }, []); + + return ( + + + 车辆信息 + ) }, + { label: "行驶证照片", children: () }, + { label: "申请原因", children: info.todo11 }, + { label: "申请人员签字", children: () }, + ]} + /> + {props.children} + + + ); +} + +export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(View); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/index.js new file mode 100644 index 0000000..7c12ef9 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/index.js @@ -0,0 +1,5 @@ +function Vehicle(props) { + return props.children; +} + +export default Vehicle; diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/List/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/List/index.js new file mode 100644 index 0000000..bd2945f --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/List/index.js @@ -0,0 +1,122 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Descriptions, Form, Modal, Space } from "antd"; +import { useEffect, useState } from "react"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg"; +import useTable from "zy-react-library/hooks/useTable"; +import { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace"; + +function List(props) { + const [currentId, setCurrentId] = useState(""); + const [viewRejectReasonModalVisible, setViewRejectReasonModalVisible] = useState(false); + + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyRecordsList"], { + form, + }); + + return ( + + +
`${record.todo6} - ${record.todo7}` }, + { title: "申请原因", dataIndex: "todo7" }, + { title: "车牌号", dataIndex: "todo8" }, + { title: "车辆照片", dataIndex: "todo9", render: (_, record) => }, + { title: "申请状态", dataIndex: "todo10" }, + { + title: "操作", + width: 80, + fixed: "right", + render: (_, record) => ( + + + + + ), + }, + ]} + {...tableProps} + /> + { + viewRejectReasonModalVisible && ( + { + setViewRejectReasonModalVisible(false); + setCurrentId(""); + }} + /> + ) + } + + ); +} + +const ViewRejectReasonModalComponent = (props) => { + const [info, setInfo] = useState({}); + const getData = async () => { + const { data } = await props["enclosedAreaVehicleApplyRecordsRejectReason"]({ id: props.id }); + setInfo(data); + }; + + useEffect(() => { + getData(); + }, []); + + return ( + 取消, + ]} + loading={props.enclosedAreaVehicleApply.enclosedAreaVehicleApplyLoading} + > + + + ); +}; + +const ViewRejectReasonModal = Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(ViewRejectReasonModalComponent); + +export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/View/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/View/index.js new file mode 100644 index 0000000..5ece514 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/View/index.js @@ -0,0 +1,41 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Divider } from "antd"; +import { useEffect, useState } from "react"; +import Table from "zy-react-library/components/Table"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace"; +import ViewPage from "../../Personnel/View"; + +function View(props) { + const [accessRecordsList, setAccessRecordsList] = useState([]); + + const query = useGetUrlQuery(); + + const getData = async () => { + const { data } = await props["enclosedAreaVehicleApplyRecordsAccessRecordsList"]({ id: query.id }); + setAccessRecordsList(data); + }; + + useEffect(() => { + getData(); + }, []); + + return ( + + 进出记录 +
+ + ); +} + +export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(View); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/index.js new file mode 100644 index 0000000..ea072ea --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/index.js @@ -0,0 +1,5 @@ +function VehicleRecords(props) { + return props.children; +} + +export default VehicleRecords; diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/index.js new file mode 100644 index 0000000..e006dfa --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/index.js @@ -0,0 +1,5 @@ +function Apply(props) { + return props.children; +} + +export default Apply; diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/List/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/List/index.js new file mode 100644 index 0000000..a6d8c4b --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/List/index.js @@ -0,0 +1,120 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Descriptions, Form, Modal, Space } from "antd"; +import { useEffect, useState } from "react"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg"; +import useTable from "zy-react-library/hooks/useTable"; +import { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace"; + +function List(props) { + const [currentId, setCurrentId] = useState(""); + const [viewRejectReasonModalVisible, setViewRejectReasonModalVisible] = useState(false); + + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyRecordsList"], { + form, + }); + + return ( + + +
`${record.todo5} - ${record.todo6}` }, + { title: "个人照片", dataIndex: "todo7", render: (_, record) => }, + { title: "申请状态", dataIndex: "todo8" }, + { + title: "操作", + width: 150, + fixed: "right", + render: (_, record) => ( + + + + + ), + }, + ]} + {...tableProps} + /> + { + viewRejectReasonModalVisible && ( + { + setViewRejectReasonModalVisible(false); + setCurrentId(""); + }} + /> + ) + } + + ); +} + +const ViewRejectReasonModalComponent = (props) => { + const [info, setInfo] = useState({}); + const getData = async () => { + const { data } = await props["enclosedAreaPersonnelApplyRecordsRejectReason"]({ id: props.id }); + setInfo(data); + }; + + useEffect(() => { + getData(); + }, []); + + return ( + 取消, + ]} + loading={props.enclosedAreaPersonnelApply.enclosedAreaPersonnelApplyLoading} + > + + + ); +}; + +const ViewRejectReasonModal = Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY], true)(ViewRejectReasonModalComponent); + +export default Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/View/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/View/index.js new file mode 100644 index 0000000..ce75800 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/View/index.js @@ -0,0 +1,44 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Divider } from "antd"; +import { useEffect, useState } from "react"; +import Table from "zy-react-library/components/Table"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace"; +import ViewPage from "../../Personnel/View"; + +function View(props) { + const [accessRecordsList, setAccessRecordsList] = useState([]); + + const query = useGetUrlQuery(); + + const getData = async () => { + const { data } = await props["enclosedAreaPersonnelApplyRecordsAccessRecordsList"]({ id: query.id }); + setAccessRecordsList(data); + }; + + useEffect(() => { + getData(); + }, []); + + return ( + + 进出记录 +
+ + ); +} + +export default Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY], true)(View); diff --git a/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/index.js b/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/index.js new file mode 100644 index 0000000..04e92b6 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/Apply/personnelRecords/index.js @@ -0,0 +1,5 @@ +function personnelRecords(props) { + return props.children; +} + +export default personnelRecords; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/DetailList/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/DetailList/index.js new file mode 100644 index 0000000..d36946b --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/DetailList/index.js @@ -0,0 +1,257 @@ +import useUrlState from "@ahooksjs/use-url-state"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, message, Modal, Space, Tag } from "antd"; +import { useEffect, useState } from "react"; +import FormBuilder from "zy-react-library/components/FormBuilder"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +import BackIcon from "zy-react-library/components/Icon/BackIcon"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj"; +import DictionarySelectTree from "zy-react-library/components/SelectTree/Dictionary"; +import Table from "zy-react-library/components/Table"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import useTable from "zy-react-library/hooks/useTable"; +import ElectronicFenceModal from "~/components/ElectronicFenceModal"; +import { NS_ENCLOSED_AREA } from "~/enumerate/namespace"; + +function DetailList(props) { + const [addModalVisible, setAddModalVisible] = useState(false); + const [electronicFenceModalVisible, setElectronicFenceModalVisible] = useState(false); + const [currentId, setCurrentId] = useState(""); + + const query = useGetUrlQuery(); + const [urlState, setUrlState] = useUrlState({ + parentId: query.id, + parentName: query.name, + backParentIds: [], + backParentNames: [], + }, { + navigateMode: "replace", + parseOptions: { + arrayFormat: "index", + }, + stringifyOptions: { + arrayFormat: "index", + }, + }); + + const [form] = Form.useForm(); + + const { tableProps, getData } = useTable(props["enclosedAreaDetailList"], { + form, + params: { parentId: urlState.parentId }, + manual: true, + }); + + useEffect(() => { + getData(); + }, [urlState.parentId]); + + const onDelete = (id) => { + Modal.confirm({ + title: "删除确认", + content: "确定要删除吗?", + onOk: async () => { + const { success } = await props["enclosedAreaDetailDelete"]({ id }); + if (success) { + message.success("删除成功"); + getData(); + } + }, + }); + }; + + const onSaveElectronicFence = async (value) => { + const { success } = await props["enclosedAreaDetailSaveElectronicFence"]({ id: currentId, value }); + if (success) { + message.success("保存成功"); + setElectronicFenceModalVisible(false); + setCurrentId(""); + getData(); + } + }; + + return ( + + +
( + + + { + urlState.parentId !== query.id && ( + + ) + } + + )} + columns={[ + { title: "区域名称", dataIndex: "todo1", render: (_, record) => ( + + ) }, + { title: "管辖公司", dataIndex: "todo2" }, + { title: "区域类型", dataIndex: "todo3" }, + { + title: "操作", + width: 200, + fixed: "right", + render: (_, record) => ( + + + + + + ), + }, + ]} + {...tableProps} + /> + { + addModalVisible && ( + { + setAddModalVisible(false); + setCurrentId(""); + }} + getData={getData} + /> + ) + } + { + electronicFenceModalVisible && ( + { + setElectronicFenceModalVisible(false); + setCurrentId(""); + }} + onOk={onSaveElectronicFence} + /> + ) + } + + ); +} + +const AddModalComponent = (props) => { + const [form] = Form.useForm(); + + const getData = async () => { + const { data } = await props["enclosedAreaDetailInfo"]({ id: props.id }); + form.setFieldsValue(data); + }; + + useEffect(() => { + props.id && getData(); + }, []); + + const onSubmit = async (values) => { + const { success } = await props[props.id ? "enclosedAreaDetailUpdate" : "enclosedAreaDetailAdd"]({ + ...values, + id: props.id, + parentId: props.parentId, + }); + if (success) { + message.success("操作成功"); + props.onCancel(); + props.getData(); + } + }; + + return ( + + {props.parentName || "无"} }, + { name: "todo1", label: "区域名称" }, + { name: "todo2", label: "区域类型", render: () }, + { name: "todo3", label: "管辖公司", render: () }, + ]} + form={form} + /> + + ); +}; + +const AddModal = Connect([NS_ENCLOSED_AREA], true)(AddModalComponent); + +export default Connect([NS_ENCLOSED_AREA], true)(DetailList); diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/List/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/List/index.js new file mode 100644 index 0000000..301aed8 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/List/index.js @@ -0,0 +1,42 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Space } from "antd"; +import Page from "zy-react-library/components/Page"; +import Table from "zy-react-library/components/Table"; +import useTable from "zy-react-library/hooks/useTable"; +import { NS_ENCLOSED_AREA } from "~/enumerate/namespace"; + +function List(props) { + const { tableProps } = useTable(props["enclosedAreaList"]); + + return ( + +
( + + + + ), + }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_ENCLOSED_AREA], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/index.js new file mode 100644 index 0000000..caaef56 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedArea/index.js @@ -0,0 +1,5 @@ +function EnclosedArea(props) { + return props.children; +} + +export default EnclosedArea; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/List/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/List/index.js new file mode 100644 index 0000000..8252e7e --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/List/index.js @@ -0,0 +1,7 @@ +import ListPage from "~/pages/Container/Supervision/FirstLevelDoor/BasicInfo/FirstLevelDoorInfo/Camera/List"; + +function List(props) { + return (); +} + +export default List; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/index.js new file mode 100644 index 0000000..812f930 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Camera/index.js @@ -0,0 +1,5 @@ +function Camera(props) { + return props.children; +} + +export default Camera; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/Camera/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/Camera/index.js new file mode 100644 index 0000000..21447dc --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/Camera/index.js @@ -0,0 +1,7 @@ +import CameraList from "../../Camera/List"; + +function Camera() { + return (); +} + +export default Camera; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/FareGate/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/FareGate/index.js new file mode 100644 index 0000000..36421b7 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/FareGate/index.js @@ -0,0 +1,7 @@ +import FareGatePage from "~/pages/Container/Supervision/FirstLevelDoor/BasicInfo/FirstLevelDoorInfo/Channel/FareGate"; + +function FareGate(props) { + return (); +} + +export default FareGate; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/List/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/List/index.js new file mode 100644 index 0000000..6c1a9ec --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/List/index.js @@ -0,0 +1,7 @@ +import ListPage from "~/pages/Container/Supervision/FirstLevelDoor/BasicInfo/FirstLevelDoorInfo/Channel/List"; + +function List(props) { + return (); +} + +export default List; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/index.js new file mode 100644 index 0000000..c9cc1ca --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/Channel/index.js @@ -0,0 +1,5 @@ +function Channel(props) { + return props.children; +} + +export default Channel; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/List/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/List/index.js new file mode 100644 index 0000000..4db9398 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/List/index.js @@ -0,0 +1,322 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Descriptions, Form, message, Modal, Space } from "antd"; +import { useEffect, useState } from "react"; +import FormBuilder from "zy-react-library/components/FormBuilder"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +import LocationIcon from "zy-react-library/components/Icon/LocationIcon"; +import Map from "zy-react-library/components/Map"; +import MapSelector from "zy-react-library/components/Map/MapSelector"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import DictionarySelect from "zy-react-library/components/Select/Dictionary"; +import BasicSelectTree from "zy-react-library/components/SelectTree/Basic"; +import Table from "zy-react-library/components/Table"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useTable from "zy-react-library/hooks/useTable"; +import { getLabelName } from "zy-react-library/utils"; +import { AREA_STATUS_ENUM, AREA_TYPE_ENUM } from "~/enumerate/constant"; +import { NS_ENCLOSED_AREA, NS_FIRST_LEVEL_DOOR_INFO } from "~/enumerate/namespace"; + +const areaLevel = 2; + +function List(props) { + const [addModalVisible, setAddModalVisible] = useState(false); + const [viewModalVisible, setViewModalVisible] = useState(false); + const [currentId, setCurrentId] = useState(null); + + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["firstLevelDoorInfoList"], { + form, + params: { + eqAreaLevel: areaLevel, + }, + }); + + const onUpdateStatus = (record) => { + if (record.status === 1 && (record.videoNum > 0 || record.passageNum > 0)) + return message.warning("正在使用中的口门不能停用"); + + const msg = record.status === 1 ? "停用" : "开启"; + Modal.confirm({ + title: `${msg}确认`, + content: `确定要${msg}吗?`, + onOk: async () => { + const { success } = await props["firstLevelDoorInfoDelete"]({ id: record.id, status: record.status === 1 ? 0 : 1 }); + if (success) { + message.success(`${msg}成功`); + getData(); + } + }, + }); + }; + + return ( + + }, + ]} + form={form} + onFinish={getData} + /> +
( + + )} + columns={[ + { title: "所属区域", dataIndex: "areaParentName" }, + { + title: "口门类型", + dataIndex: "areaType", + render: (_, record) => getLabelName({ list: AREA_TYPE_ENUM, status: record.areaType }), + }, + { title: "管辖公司", dataIndex: "todo3" }, + { title: "口门名称", dataIndex: "areaName" }, + { + title: "口门位置", + dataIndex: "location", + render: (_, record) => `${record.latitude || ""}--${record.longitude || ""}`, + }, + { title: "摄像头个数", dataIndex: "videoNum", render: (_, record) => record.videoNum || 0 }, + { + title: "口门状态", + dataIndex: "areaStatus", + render: (_, record) => getLabelName({ list: AREA_STATUS_ENUM, status: record.areaStatus }), + }, + { + title: "操作", + width: 300, + fixed: "right", + render: (_, record) => ( + + + + + + + + ), + }, + ]} + {...tableProps} + /> + { + addModalVisible && ( + { + setAddModalVisible(false); + setCurrentId(null); + }} + getData={getData} + /> + ) + } + { + viewModalVisible && ( + { + setViewModalVisible(false); + setCurrentId(null); + }} + /> + ) + } + + ); +} + +const AddModalComponent = (props) => { + const [enclosedAreaList, setEnclosedAreaList] = useState([]); + + const [form] = Form.useForm(); + + const getEnclosedAreaList = async () => { + const { data } = await props["enclosedAreaDetailListTree"](); + setEnclosedAreaList(data); + }; + + const getData = async () => { + const { data } = await props["firstLevelDoorInfoInfo"]({ id: props.id }); + form.setFieldsValue({ + ...data, + areaType: data.areaType.toString(), + areaStatus: data.areaStatus.toString(), + }); + }; + + useEffect(() => { + getEnclosedAreaList(); + props.id && getData(); + }, []); + + const onSubmit = async (values) => { + const { success } = await props[!props.id ? "firstLevelDoorInfoAdd" : "firstLevelDoorInfoEdit"]({ + ...values, + areaLevel, + id: props.id, + }); + if (success) { + message.success("操作成功"); + props.onClose(); + props.getData(); + } + }; + + return ( + + }, + { name: "areaParentName", label: "所属区域名称", onlyForLabel: true }, + { name: "areaName", label: "口门名称" }, + { name: "areaType", label: "口门类型", render: FORM_ITEM_RENDER_ENUM.SELECT, items: AREA_TYPE_ENUM }, + { name: "areaRange", label: "口门位置" }, + { customizeRender: true, span: 24, render: }, + { name: "areaStatus", label: "口门状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: AREA_STATUS_ENUM }, + { name: "todo6", label: "口门进入区域", render: () }, + { + name: "todo7", + label: "口门离开区域", + span: 12, + render: FORM_ITEM_RENDER_ENUM.RADIO, + items: [{ bianma: 1, name: "离场" }, { bianma: 2, name: "进入其他区域" }], + }, + { + name: "todo8", + label: "", + span: 12, + wrapperCol: { span: 24 }, + dependencies: ["todo7"], + hidden: formValues => !(formValues.todo7 === 2), + render: (), + }, + ]} + form={form} + /> + + ); +}; + +const ViewModalComponent = (props) => { + const [info, setInfo] = useState({}); + const [mapVisible, setMapVisible] = useState(false); + + const getData = async () => { + const { data } = await props["firstLevelDoorInfoInfo"]({ id: props.id }); + setInfo(data); + }; + + useEffect(() => { + props.id && getData(); + }, []); + + return ( + 取消, + ]} + loading={props.firstLevelDoorInfo.firstLevelDoorInfoLoading} + > + { setMapVisible(true); }} />), + }, + { label: "口门进入区域", children: info.todo6 }, + { label: "口门离开区域", children: info.todo7 === 1 ? "离场" : `进入其他区域(${info.todo8})` }, + ]} + /> + + setMapVisible(false)} + longitude={info.longitude} + latitude={info.latitude} + disable={true} + type="cesium" + /> + + ); +}; + +const AddModal = Connect([NS_FIRST_LEVEL_DOOR_INFO, NS_ENCLOSED_AREA], true)(AddModalComponent); +const ViewModal = Connect([NS_FIRST_LEVEL_DOOR_INFO], true)(ViewModalComponent); + +export default Connect([NS_FIRST_LEVEL_DOOR_INFO], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/index.js new file mode 100644 index 0000000..44c0edb --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/EnclosedAreaDoor/index.js @@ -0,0 +1,5 @@ +function EnclosedAreaDoor(props) { + return props.children; +} + +export default EnclosedAreaDoor; diff --git a/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/index.js b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/index.js new file mode 100644 index 0000000..caaef56 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/EnclosedArea/index.js @@ -0,0 +1,5 @@ +function EnclosedArea(props) { + return props.children; +} + +export default EnclosedArea; diff --git a/src/pages/Container/Supervision/EnclosedArea/index.js b/src/pages/Container/Supervision/EnclosedArea/index.js new file mode 100644 index 0000000..caaef56 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/index.js @@ -0,0 +1,5 @@ +function EnclosedArea(props) { + return props.children; +} + +export default EnclosedArea; diff --git a/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/List/index.js b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/List/index.js new file mode 100644 index 0000000..6e7e863 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/List/index.js @@ -0,0 +1,115 @@ +import useUrlState from "@ahooksjs/use-url-state"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, Space } from "antd"; +import { useEffect } from "react"; +import BackIcon from "zy-react-library/components/Icon/BackIcon"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import useTable from "zy-react-library/hooks/useTable"; +import { NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS } from "~/enumerate/namespace"; + +function List(props) { + const [urlState, setUrlState] = useUrlState({ + parentId: "0", + backParentIds: [], + }, { + navigateMode: "replace", + parseOptions: { + arrayFormat: "index", + }, + stringifyOptions: { + arrayFormat: "index", + }, + }); + + const [form] = Form.useForm(); + + const { tableProps, getData } = useTable(props["enclosedPersonnelAndVehicleStatisticsList"], { + form, + params: { parentId: urlState.parentId }, + manual: true, + }); + + useEffect(() => { + getData(); + }, [urlState.parentId]); + + return ( + + +
( + + { + urlState.parentId !== "0" && ( + + ) + } + + )} + columns={[ + { title: "区域名称", dataIndex: "todo1", render: (_, record) => ( + + ) }, + { title: "人员现存数", dataIndex: "todo2" }, + { title: "车辆现存数", dataIndex: "todo3" }, + { + title: "操作", + width: 200, + fixed: "right", + render: (_, record) => ( + + + + + ), + }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS], true)(List); diff --git a/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/PersonnelEntryAndExitRecords/index.js b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/PersonnelEntryAndExitRecords/index.js new file mode 100644 index 0000000..c7c4152 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/PersonnelEntryAndExitRecords/index.js @@ -0,0 +1,52 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Form } from "antd"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import useTable from "zy-react-library/hooks/useTable"; +import { getLabelName } from "zy-react-library/utils"; +import { NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS } from "~/enumerate/namespace"; +import { CATEGORY_ENUM } from "../VehicleEntryAndExitRecords"; + +function PersonnelEntryAndExitRecords(props) { + const [form] = Form.useForm(); + const query = useGetUrlQuery(); + + const { tableProps, getData } = useTable(props["enclosedPersonnelAndVehicleStatisticsPersonnelEntryAndExitRecordsList"], { + form, + params: { id: query.id }, + }); + + return ( + + +
getLabelName({ list: CATEGORY_ENUM, status: record.todo3 }), + }, + { title: "口门名称", dataIndex: "todo4" }, + { title: "记录时间", dataIndex: "todo5" }, + { title: "出入动作", dataIndex: "todo6" }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS], true)(PersonnelEntryAndExitRecords); diff --git a/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/VehicleEntryAndExitRecords/index.js b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/VehicleEntryAndExitRecords/index.js new file mode 100644 index 0000000..3742461 --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/VehicleEntryAndExitRecords/index.js @@ -0,0 +1,60 @@ +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Form } from "antd"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import useTable from "zy-react-library/hooks/useTable"; +import { getLabelName } from "zy-react-library/utils"; +import { NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS } from "~/enumerate/namespace"; + +export const CATEGORY_ENUM = [ + { bianma: "1", name: "内部人员" }, + { bianma: "2", name: "股份公司" }, + { bianma: "3", name: "相关方" }, + { bianma: "4", name: "临时访客" }, +]; + +function VehicleEntryAndExitRecords(props) { + const [form] = Form.useForm(); + const query = useGetUrlQuery(); + + const { tableProps, getData } = useTable(props["enclosedPersonnelAndVehicleStatisticsVehicleEntryAndExitRecordsList"], { + form, + params: { id: query.id }, + }); + + return ( + + +
getLabelName({ list: CATEGORY_ENUM, status: record.todo3 }), + }, + { title: "姓名", dataIndex: "todo4" }, + { title: "手机号", dataIndex: "todo5" }, + { title: "口门名称", dataIndex: "todo6" }, + { title: "记录时间", dataIndex: "todo7" }, + { title: "出入动作", dataIndex: "todo8" }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS], true)(VehicleEntryAndExitRecords); diff --git a/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/index.js b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/index.js new file mode 100644 index 0000000..760a6cb --- /dev/null +++ b/src/pages/Container/Supervision/EnclosedArea/personnelAndVehicleStatistics/index.js @@ -0,0 +1,5 @@ +function personnelAndVehicleStatistics(props) { + return props.children; +} + +export default personnelAndVehicleStatistics;