临时人员管理、临时车辆管理

master
LiuJiaNan 2026-03-16 15:55:47 +08:00
parent d8af77fa14
commit 8ee9ee55a7
24 changed files with 950 additions and 596 deletions

View File

@ -34,7 +34,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-signature-canvas": "^1.1.0-alpha.2", "react-signature-canvas": "^1.1.0-alpha.2",
"zy-react-library": "^1.2.5" "zy-react-library": "^1.2.6"
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^5.4.1", "@antfu/eslint-config": "^5.4.1",

222
router.md
View File

@ -1,89 +1,169 @@
### 监管端 ### 监管端
#### 一级口门管理 #### 一级口门管理
- `/primeport/container/supervision/firstLevelDoor/approverUser` 门禁审批人管理 - 门禁审批人管理 #
- `/primeport/container/supervision/firstLevelDoor/basicInfo/firstLevelDoorInfo/list` 基本信息管理/一级口门信息管理 `/primeport/container/supervision/firstLevelDoor/approverUser`
- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel` 进港审批管理/人员审批管理/相关方人员进港审批 - 基本信息管理/一级口门信息管理 #
- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 进港审批管理/长期车辆审批管理/股份车辆审批 `/primeport/container/supervision/firstLevelDoor/basicInfo/firstLevelDoorInfo/list`
- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles` 进港审批管理/长期车辆审批管理/相关方车辆审批 - 进港审批管理/人员审批管理/相关方人员进港审批 #
- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 进港审批管理/临时访客管理/临时人员管理 `/primeport/container/supervision/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel`
- `/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 进港审批管理/临时访客管理/临时车辆管理 - 进港审批管理/人员审批管理/相关方人员进港审批记录
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 进出港信息管理/股份人员及车辆管理 `/primeport/container/supervision/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnelRecords`
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 进出港信息管理/个人车辆管理 - 进港审批管理/长期车辆审批管理/股份车辆审批 #
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stockVehicles/list` 进出港信息管理/股份单位车辆管理 `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles`
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/branchPersonnelAndVehicles/list` 进出港信息管理/分公司人员及车辆管理 - 进港审批管理/长期车辆审批管理/股份车辆审批记录 #
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/stakeholderPersonnelAndVehicles/list` 进出港信息管理/相关方人员及车辆管理 `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehiclesRecords`
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/portBasedUnitsPersonnelAndVehicles/list` 进出港信息管理/驻港单位人员及车辆管理 - 进港审批管理/长期车辆审批管理/相关方车辆审批 #
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/inspectDepartmentVehicles/list` 进出港信息管理/检查部门车辆管理 `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles`
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 进出港信息管理/车辆违规管理/车辆违规管理 - 进港审批管理/长期车辆审批管理/相关方车辆审批记录 #
- `/primeport/container/supervision/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 进出港信息管理/车辆违规管理/车辆黑名单管理 `/primeport/container/supervision/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehiclesRecords`
- 进港审批管理/临时访客管理/临时人员管理 #
`/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list`
- 进港审批管理/临时访客管理/临时人员管理记录 #
`/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnelRecords/list`
- 进港审批管理/临时访客管理/临时车辆管理 #
`/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list`
- 进港审批管理/临时访客管理/临时车辆管理记录 #
`/primeport/container/supervision/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicleRecords/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/areaAndEntrance/enclosedArea/list` 封闭区域管理/封闭区域管理 - 封闭区域管理/封闭区域管理
- `/primeport/container/supervision/enclosedArea/areaAndEntrance/enclosedAreaDoor/list` 封闭区域管理/封闭区域口门管理 `/primeport/container/supervision/enclosedArea/areaAndEntrance/enclosedArea/list`
- `/primeport/container/supervision/enclosedArea/apply/personnel/list` 封闭区域申请/人员封闭区域申请 - 封闭区域管理/封闭区域口门管理
- `/primeport/container/supervision/enclosedArea/apply/vehicle/list` 封闭区域申请/车辆封闭区域申请 `/primeport/container/supervision/enclosedArea/areaAndEntrance/enclosedAreaDoor/list`
- `/primeport/container/supervision/enclosedArea/apply/personnelRecords/list` 封闭区域申请/人员封闭区域申请记录 - 封闭区域申请/人员封闭区域申请
- `/primeport/container/supervision/enclosedArea/apply/vehicleRecords/list` 封闭区域申请/车辆封闭区域申请记录 `/primeport/container/supervision/enclosedArea/apply/personnel/list`
- `/primeport/container/supervision/enclosedArea/personnelAndVehicleStatistics/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/approverUser`
- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 进港审批管理/长期车辆审批管理/车辆审批 - 进港审批管理/人员审批管理/相关方人员进港审批
- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles` 进港审批管理/长期车辆审批管理/相关方车辆审批 `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/personnelApproval/relatedPersonnel`
- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 进港审批管理/临时访客管理/临时人员管理 - 进港审批管理/长期车辆审批管理/车辆审批
- `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 进港审批管理/临时访客管理/临时车辆管理 `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles`
- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 进出港信息管理/人员及车辆管理 - 进港审批管理/长期车辆审批管理/相关方车辆审批
- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 进出港信息管理/个人车辆管理 `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/longTermVehicleApproval/relatedVehicles`
- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stockVehicles/list` 进出港信息管理/单位车辆管理 - 进港审批管理/临时访客管理/临时人员管理
- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/stakeholderPersonnelAndVehicles/list` 进出港信息管理/相关方人员及车辆管理 `/primeport/container/enterprise/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list`
- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 进出港信息管理/车辆违规管理/车辆违规管理 - 进港审批管理/临时访客管理/临时车辆管理
- `/primeport/container/enterprise/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/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/enclosedArea/areaAndEntrance/enclosedArea/list` 封闭区域管理/封闭区域管理 - 封闭区域管理/封闭区域管理
- `/primeport/container/enterprise/enclosedArea/areaAndEntrance/enclosedAreaDoor/list` 封闭区域管理/封闭区域口门管理 `/primeport/container/enterprise/enclosedArea/areaAndEntrance/enclosedArea/list`
- `/primeport/container/enterprise/enclosedArea/apply/personnel/list` 封闭区域申请/人员封闭区域申请 - 封闭区域管理/封闭区域口门管理
- `/primeport/container/enterprise/enclosedArea/apply/vehicle/list` 封闭区域申请/车辆封闭区域申请 `/primeport/container/enterprise/enclosedArea/areaAndEntrance/enclosedAreaDoor/list`
- `/primeport/container/enterprise/enclosedArea/apply/personnelRecords/list` 封闭区域申请/人员封闭区域申请记录 - 封闭区域申请/人员封闭区域申请
- `/primeport/container/enterprise/enclosedArea/apply/vehicleRecords/list` 封闭区域申请/车辆封闭区域申请记录 `/primeport/container/enterprise/enclosedArea/apply/personnel/list`
- `/primeport/container/enterprise/enclosedArea/personnelAndVehicleStatistics/list` 区域人员及车辆统计 - 封闭区域申请/车辆封闭区域申请
- `/primeport/container/enterprise/enclosedArea/enterprisePersonnelPermissions/list` 企业人员权限 `/primeport/container/enterprise/enclosedArea/apply/vehicle/list`
- `/primeport/container/enterprise/enclosedArea/personnelReview/longTermPersonnelReview/list` 人员审核/长期人员审核 - 封闭区域申请/人员封闭区域申请记录
- `/primeport/container/enterprise/enclosedArea/personnelReview/temporaryPersonnelReview/list` 人员审核/临时人员审核 `/primeport/container/enterprise/enclosedArea/apply/personnelRecords/list`
- `/primeport/container/enterprise/enclosedArea/personnelReview/longTermPersonnelReviewRecords/list` 人员审核/长期人员审核记录 - 封闭区域申请/车辆封闭区域申请记录
- `/primeport/container/enterprise/enclosedArea/personnelReview/temporaryPersonnelReviewRecords/list` 人员审核/临时访客人员记录 `/primeport/container/enterprise/enclosedArea/apply/vehicleRecords/list`
- `/primeport/container/enterprise/enclosedArea/vehicleReview/longTermVehicleReview/list` 车辆审核/长期车辆审核 - 区域人员及车辆统计
- `/primeport/container/enterprise/enclosedArea/vehicleReview/temporaryVehicleReview/list` 车辆审核/临时车辆审核 `/primeport/container/enterprise/enclosedArea/personnelAndVehicleStatistics/list`
- `/primeport/container/enterprise/enclosedArea/vehicleReview/longTermVehicleReviewRecords/list` 车辆审核/长期车辆审核记录 - 企业人员权限
- `/primeport/container/enterprise/enclosedArea/vehicleReview/temporaryVehicleReviewRecords/list` 车辆审核/临时车辆审核记录 `/primeport/container/enterprise/enclosedArea/enterprisePersonnelPermissions/list`
- 人员审核/长期人员审核
`/primeport/container/enterprise/enclosedArea/personnelReview/longTermPersonnelReview/list`
- 人员审核/临时人员审核
`/primeport/container/enterprise/enclosedArea/personnelReview/temporaryPersonnelReview/list`
- 人员审核/长期人员审核记录
`/primeport/container/enterprise/enclosedArea/personnelReview/longTermPersonnelReviewRecords/list`
- 人员审核/临时访客人员记录
`/primeport/container/enterprise/enclosedArea/personnelReview/temporaryPersonnelReviewRecords/list`
- 车辆审核/长期车辆审核
`/primeport/container/enterprise/enclosedArea/vehicleReview/longTermVehicleReview/list`
- 车辆审核/临时车辆审核
`/primeport/container/enterprise/enclosedArea/vehicleReview/temporaryVehicleReview/list`
- 车辆审核/长期车辆审核记录
`/primeport/container/enterprise/enclosedArea/vehicleReview/longTermVehicleReviewRecords/list`
- 车辆审核/临时车辆审核记录
`/primeport/container/enterprise/enclosedArea/vehicleReview/temporaryVehicleReviewRecords/list`
### 相关方端 ### 相关方端
#### 一级口门管理 #### 一级口门管理
- `/primeport/container/stakeholder/firstLevelDoor/approverUser` 门禁审批人管理 - 门禁审批人管理
- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles` 进港审批管理/长期车辆审批管理/车辆审批 `/primeport/container/stakeholder/firstLevelDoor/approverUser`
- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list` 进港审批管理/临时访客管理/临时人员管理 - 进港审批管理/长期车辆审批管理/车辆审批
- `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list` 进港审批管理/临时访客管理/临时车辆管理 `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/longTermVehicleApproval/shareVehicles`
- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list` 进出港信息管理/人员及车辆管理 - 进港审批管理/临时访客管理/临时人员管理
- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/personalVehicle/list` 进出港信息管理/个人车辆管理 `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryPersonnel/list`
- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehiclesViolation/list` 进出港信息管理/车辆违规管理/车辆违规管理 - 进港审批管理/临时访客管理/临时车辆管理
- `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/vehiclesViolation/vehicleBlacklist/list` 进出港信息管理/车辆违规管理/车辆黑名单管理 `/primeport/container/stakeholder/firstLevelDoor/portEntryApproval/temporaryVisitor/temporaryVehicle/list`
- `/primeport/container/stakeholder/firstLevelDoor/personnelPermissionRecords/list` 人员权限记录 - 进出港信息管理/人员及车辆管理
- `/primeport/container/stakeholder/firstLevelDoor/personnelApplication/list` 人员申请 `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/stockPersonnelAndVehicles/list`
- `/primeport/container/stakeholder/firstLevelDoor/vehicleApplication/list` 车辆申请 - 进出港信息管理/个人车辆管理
- `/primeport/container/stakeholder/firstLevelDoor/personnelApplicationRecords/list` 人员申请记录 `/primeport/container/stakeholder/firstLevelDoor/importAndExportPortInfo/personalVehicle/list`
- `/primeport/container/stakeholder/firstLevelDoor/vehicleApplicationRecords/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/enclosedArea/apply/personnel/list` 封闭区域申请/人员封闭区域申请 - 封闭区域申请/人员封闭区域申请
- `/primeport/container/stakeholder/enclosedArea/apply/vehicle/list` 封闭区域申请/车辆封闭区域申请 `/primeport/container/stakeholder/enclosedArea/apply/personnel/list`
- `/primeport/container/stakeholder/enclosedArea/apply/personnelRecords/list` 封闭区域申请/人员封闭区域申请记录 - 封闭区域申请/车辆封闭区域申请
- `/primeport/container/stakeholder/enclosedArea/apply/vehicleRecords/list` 封闭区域申请/车辆封闭区域申请记录 `/primeport/container/stakeholder/enclosedArea/apply/vehicle/list`
- 封闭区域申请/人员封闭区域申请记录
`/primeport/container/stakeholder/enclosedArea/apply/personnelRecords/list`
- 封闭区域申请/车辆封闭区域申请记录
`/primeport/container/stakeholder/enclosedArea/apply/vehicleRecords/list`
### H5端 ### 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`

View File

@ -2,19 +2,19 @@ import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
export const temporaryPersonnelList = declareRequest( export const temporaryPersonnelList = declareRequest(
"temporaryPersonnelLoading", "temporaryPersonnelLoading",
`Post > @/primeport/`, `Post > @/primeport/personApply/xgfPersonAuditList`,
); );
export const temporaryPersonnelAdd = declareRequest( export const temporaryPersonnelAdd = declareRequest(
"temporaryPersonnelLoading", "temporaryPersonnelLoading",
`Post > @/primeport/`, `Post > @/primeport/vehicleApply/saveTemporaryVisitors`,
); );
export const temporaryPersonnelInfo = declareRequest( export const temporaryPersonnelInfo = declareRequest(
"temporaryPersonnelLoading", "temporaryPersonnelLoading",
`Post > @/primeport/`, `Post > @/primeport/personApply/xgfPersonApplyInfoById`,
); );
export const temporaryPersonnelReview = declareRequest( export const temporaryPersonnelReview = declareRequest(
"temporaryPersonnelLoading", "temporaryPersonnelLoading",
`Post > @/primeport/`, `Post > @/primeport/personApply/xgfPersonAudit`,
); );
export const temporaryPersonnelReviewList = declareRequest( export const temporaryPersonnelReviewList = declareRequest(
"temporaryPersonnelLoading", "temporaryPersonnelLoading",

View File

@ -1,20 +1,8 @@
import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
export const temporaryVehicleList = declareRequest(
"temporaryVehicleLoading",
`Post > @/primeport/`,
);
export const temporaryVehicleAdd = declareRequest( export const temporaryVehicleAdd = declareRequest(
"temporaryVehicleLoading", "temporaryVehicleLoading",
`Post > @/primeport/`, `Post > @/primeport/vehicleApply/saveTemporaryVisitors`,
);
export const temporaryVehicleInfo = declareRequest(
"temporaryVehicleLoading",
`Post > @/primeport/`,
);
export const temporaryVehicleReview = declareRequest(
"temporaryVehicleLoading",
`Post > @/primeport/`,
); );
export const temporaryVehicleReviewList = declareRequest( export const temporaryVehicleReviewList = declareRequest(
"temporaryVehicleLoading", "temporaryVehicleLoading",

View File

@ -223,7 +223,7 @@ function Add(props) {
label: "审批人", label: "审批人",
render: FORM_ITEM_RENDER_ENUM.SELECT, render: FORM_ITEM_RENDER_ENUM.SELECT,
items: approvalUserListAll, items: approvalUserListAll,
itemsField: { labelKey: "userName", valueKey: "userId" }, itemsField: { labelKey: item => `${item.userName}${item.corpName}${item.deptName}`, valueKey: "userId" },
span: 24, span: 24,
componentProps: { componentProps: {
onChange: (value) => { onChange: (value) => {

View File

@ -126,7 +126,7 @@ const AddModalComponent = (props) => {
const { id: illegalImagesId } = await uploadFile({ const { id: illegalImagesId } = await uploadFile({
single: false, single: false,
files: values.illegalImages, files: values.illegalImages,
params: { foreignKey: "", type: UPLOAD_FILE_TYPE_ENUM[607] }, params: { type: UPLOAD_FILE_TYPE_ENUM[607] },
}); });
const { success } = await props["vehiclesViolationAdd"]({ ...values, illegalImagesId }); const { success } = await props["vehiclesViolationAdd"]({ ...values, illegalImagesId });
if (success) { if (success) {

View File

@ -1,5 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider, message, Modal, Space } from "antd"; import { Button, Descriptions, Divider, message, Modal, Space, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
@ -19,11 +19,12 @@ function RelatedVehicles(props) {
const [reviewModalVisible, setReviewModalVisible] = useState(false); const [reviewModalVisible, setReviewModalVisible] = useState(false);
const [infoModalVisible, setInfoModalVisible] = useState(false); const [infoModalVisible, setInfoModalVisible] = useState(false);
const [viewRejectReasonModalVisible, setViewRejectReasonModalVisible] = useState(false); const [viewRejectReasonModalVisible, setViewRejectReasonModalVisible] = useState(false);
const [remarks, setRemarks] = useState("");
const [form] = Search.useForm(); const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["vehicleAuditList"], { const { tableProps, getData } = useTable(props["vehicleAuditList"], {
form, form,
params: { vehicleBelongTypeArr: "5" }, params: { vehicleBelongTypeArr: "5", processOrRecord: !props.isRecords ? 1 : 2 },
}); });
return ( return (
@ -62,15 +63,17 @@ function RelatedVehicles(props) {
width: 150, width: 150,
render: (_, record) => ( render: (_, record) => (
<Space> <Space>
<Button {(!props.isRecords && record.currentUserCanAudit === 1) && (
type="link" <Button
onClick={() => { type="link"
setReviewModalVisible(true); onClick={() => {
setCurrentId(record.id); setReviewModalVisible(true);
}} setCurrentId(record.id);
> }}
审核 >
</Button> 审核
</Button>
)}
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
@ -85,7 +88,7 @@ function RelatedVehicles(props) {
type="link" type="link"
onClick={() => { onClick={() => {
setViewRejectReasonModalVisible(true); setViewRejectReasonModalVisible(true);
setCurrentId(record.id); setRemarks(record.remarks);
}} }}
> >
查看原因 查看原因
@ -138,10 +141,10 @@ function RelatedVehicles(props) {
{ {
viewRejectReasonModalVisible && ( viewRejectReasonModalVisible && (
<ViewRejectReasonModal <ViewRejectReasonModal
id={currentId} remarks={remarks}
onCancel={() => { onCancel={() => {
setViewRejectReasonModalVisible(false); setViewRejectReasonModalVisible(false);
setCurrentId(""); setRemarks("");
}} }}
/> />
) )
@ -175,48 +178,39 @@ const ReviewModalComponent = (props) => {
width={800} width={800}
confirmLoading={props.vehicleAudit.vehicleAuditLoading} confirmLoading={props.vehicleAudit.vehicleAuditLoading}
> >
<InfoModal id={props.id} /> <Spin spinning={props.vehicleAudit.vehicleAuditLoading}>
<FormBuilder <InfoModal id={props.id} />
form={form} <FormBuilder
onFinish={onSubmit} form={form}
labelCol={{ span: 8 }} onFinish={onSubmit}
span={24} labelCol={{ span: 8 }}
values={{ span={24}
auditStatus: "2", values={{
}} auditStatus: "2",
showActionButtons={false} }}
options={[ showActionButtons={false}
{ options={[
name: "auditStatus", {
label: "是否通过审核", name: "auditStatus",
render: FORM_ITEM_RENDER_ENUM.RADIO, label: "是否通过审核",
items: VEHICLE_AUDIT_STATUS_ENUM, render: FORM_ITEM_RENDER_ENUM.RADIO,
}, items: VEHICLE_AUDIT_STATUS_ENUM,
{ },
name: "remarks", {
label: "驳回原因", name: "remarks",
render: FORM_ITEM_RENDER_ENUM.TEXTAREA, label: "驳回原因",
dependencies: ["auditStatus"], render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
hidden: formValues => !(formValues.auditStatus === "3"), dependencies: ["auditStatus"],
}, hidden: formValues => !(formValues.auditStatus === "3"),
]} },
/> ]}
/>
</Spin>
</Modal> </Modal>
); );
}; };
const ViewRejectReasonModalComponent = (props) => { const ViewRejectReasonModalComponent = (props) => {
const [info, setInfo] = useState({});
const getData = async () => {
// TODO
const { data } = await props["vehicleAuditRejectReason"]({ id: props.id });
setInfo(data);
};
useEffect(() => {
getData();
}, []);
return ( return (
<Modal <Modal
open open
@ -234,7 +228,7 @@ const ViewRejectReasonModalComponent = (props) => {
bordered bordered
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 } }}
items={[ items={[
{ label: "驳回原因", children: info.todo1 }, { label: "驳回原因", children: props.remarks },
]} ]}
/> />
</Modal> </Modal>

View File

@ -0,0 +1,7 @@
import RelatedVehiclesPage from "../RelatedVehicles";
function RelatedVehiclesRecords(props) {
return (<RelatedVehiclesPage isRecords={true} {...props} />);
}
export default RelatedVehiclesRecords;

View File

@ -1,5 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider, message, Modal, Spin } from "antd"; import { Button, Descriptions, Divider, message, Modal, Space, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
@ -18,12 +18,13 @@ import { NS_VEHICLE_AUDIT } from "~/enumerate/namespace";
function ShareVehicles(props) { function ShareVehicles(props) {
const [reviewModalVisible, setReviewModalVisible] = useState(false); const [reviewModalVisible, setReviewModalVisible] = useState(false);
const [infoModalVisible, setInfoModalVisible] = useState(false);
const [currentId, setCurrentId] = useState(""); const [currentId, setCurrentId] = useState("");
const [form] = Search.useForm(); const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["vehicleAuditList"], { const { tableProps, getData } = useTable(props["vehicleAuditList"], {
form, form,
params: { vehicleBelongTypeArr: "1,2" }, params: { vehicleBelongTypeArr: "1,2", processOrRecord: !props.isRecords ? 1 : 2 },
}); });
return ( return (
@ -63,15 +64,28 @@ function ShareVehicles(props) {
title: "操作", title: "操作",
width: 100, width: 100,
render: (_, record) => ( render: (_, record) => (
<Button <Space>
type="link" {(!props.isRecords && record.currentUserCanAudit === 1) && (
onClick={() => { <Button
setReviewModalVisible(true); type="link"
setCurrentId(record.id); onClick={() => {
}} setReviewModalVisible(true);
> setCurrentId(record.id);
审核 }}
</Button> >
审核
</Button>
)}
<Button
type="link"
onClick={() => {
setInfoModalVisible(true);
setCurrentId(record.id);
}}
>
查看
</Button>
</Space>
), ),
}, },
]} ]}
@ -89,13 +103,95 @@ function ShareVehicles(props) {
/> />
) )
} }
{
infoModalVisible && (
<Modal
open
title="查看"
maskClosable={false}
onCancel={() => {
setInfoModalVisible(false);
}}
width={600}
footer={[
<Button
key="cancel"
onClick={() => {
setInfoModalVisible(false);
}}
>
取消
</Button>,
]}
loading={props.vehicleAudit.vehicleAuditLoading}
>
<InfoModal id={currentId} />
</Modal>
)
}
</Page> </Page>
); );
} }
function ReviewModalComponent(props) { function ReviewModalComponent(props) {
const [form] = FormBuilder.useForm(); const [form] = FormBuilder.useForm();
const { loading: getFileLoading, getFile } = useGetFile();
const onSubmit = async (values) => {
const { success } = await props["vehicleAuditApproval"]({
...values,
id: props.id,
});
if (success) {
message.success("操作成功");
props.onCancel();
props.getData();
}
};
return (
<Modal
open
title="审批"
maskClosable={false}
onCancel={props.onCancel}
onOk={form.submit}
width={800}
confirmLoading={props.vehicleAudit.vehicleAuditLoading}
>
<Spin spinning={props.vehicleAudit.vehicleAuditLoading}>
<InfoModal id={props.id} />
<FormBuilder
form={form}
showActionButtons={false}
span={24}
onFinish={onSubmit}
labelCol={{ span: 8 }}
values={{
auditStatus: "2",
}}
options={[
{
name: "auditStatus",
label: "是否通过",
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: VEHICLE_AUDIT_STATUS_ENUM,
},
{
name: "remarks",
label: "打回意见",
render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
dependencies: ["auditStatus"],
hidden: formValues => !(formValues.auditStatus === "3"),
},
]}
/>
</Spin>
</Modal>
);
}
function InfoModalComponent(props) {
const { getFile } = useGetFile();
const [changeAfter, setChangeAfter] = useState({}); const [changeAfter, setChangeAfter] = useState({});
const [changeBefore, setChangeBefore] = useState({}); const [changeBefore, setChangeBefore] = useState({});
@ -139,57 +235,36 @@ function ReviewModalComponent(props) {
getRecordsList(); getRecordsList();
}, []); }, []);
const onSubmit = async (values) => {
const { success } = await props["vehicleAuditApproval"]({
...values,
id: props.id,
});
if (success) {
message.success("操作成功");
props.onCancel();
props.getData();
}
};
return ( return (
<Modal <div>
open <Divider orientation="left">申请信息</Divider>
title="审批" {
maskClosable={false} batchState === 1
onCancel={props.onCancel} ? (
onOk={form.submit} <Descriptions
width={800} column={1}
confirmLoading={props.vehicleAudit.vehicleAuditLoading || getFileLoading} bordered
> styles={{ label: { width: 200 } }}
<Spin spinning={props.vehicleAudit.vehicleAuditLoading || getFileLoading}> items={[
<Divider orientation="left">申请信息</Divider> { label: "车辆所属类型", children: getLabelName({ list: VEHICLE_TYPE_ENUM, status: changeAfter.vehicleBelongType }) },
{ { label: "车辆所属部门", children: changeAfter.vehicleDepartmentName },
batchState === 1 ...(changeAfter.vehicleBelongType === 1 ? [{ label: "车辆归属人", children: changeAfter.employeeVehicleUserName }] : []),
? ( { label: "车牌号", children: changeAfter.licenceNo },
<Descriptions { label: "车牌类型", children: changeAfter.licenceTypeName },
column={1} { label: "车辆类型", children: changeAfter.vehicleTypeName },
bordered { label: "访问港区范围", children: JSON.parse(changeAfter.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、") },
styles={{ label: { width: 200 } }} { label: "访问开始时间", children: changeAfter.visitStartTime },
items={[ { label: "访问结束时间", children: changeAfter.visitEndTime },
{ label: "车辆所属类型", children: getLabelName({ list: VEHICLE_TYPE_ENUM, status: changeAfter.vehicleBelongType }) }, { label: "行驶证照片", children: (<PreviewImg files={changeAfter.drivingLicenseFile} />) },
{ label: "车辆所属部门", children: changeAfter.vehicleDepartmentName }, { label: "车辆照片", children: (<PreviewImg files={changeAfter.attachmentFile} />) },
...(changeAfter.vehicleBelongType === 1 ? [{ label: "车辆归属人", children: changeAfter.employeeVehicleUserName }] : []), { label: "审批人", children: changeAfter.auditUserName },
{ label: "车牌号", children: changeAfter.licenceNo }, ]}
{ label: "车牌类型", children: changeAfter.licenceTypeName }, />
{ label: "车辆类型", children: changeAfter.vehicleTypeName }, )
{ label: "访问港区范围", children: JSON.parse(changeAfter.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、") }, : (
{ label: "访问开始时间", children: changeAfter.visitStartTime }, <div>
{ label: "访问结束时间", children: changeAfter.visitEndTime }, <style>
{ label: "行驶证照片", children: (<PreviewImg files={changeAfter.drivingLicenseFile} />) }, {`
{ label: "车辆照片", children: (<PreviewImg files={changeAfter.attachmentFile} />) },
{ label: "审批人", children: changeAfter.auditUserName },
]}
/>
)
: (
<div>
<style>
{`
.comparison-table { .comparison-table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
@ -213,127 +288,102 @@ function ReviewModalComponent(props) {
width: 40%; width: 40%;
} }
`} `}
</style> </style>
<table className="comparison-table"> <table className="comparison-table">
<thead> <thead>
<tr>
<th className="name-col">名称</th>
<th className="before-col">变更前</th>
<th className="after-col">变更后</th>
</tr>
</thead>
<tbody>
<tr>
<th>车辆所属类型</th>
<td>{getLabelName({ list: VEHICLE_TYPE_ENUM, status: changeBefore.vehicleBelongType })}</td>
<td>{getLabelName({ list: VEHICLE_TYPE_ENUM, status: changeAfter.vehicleBelongType })}</td>
</tr>
<tr>
<th>车辆所属部门</th>
<td>{changeBefore.vehicleDepartmentName}</td>
<td>{changeAfter.vehicleDepartmentName}</td>
</tr>
{changeBefore.vehicleBelongType === 1 && (
<tr> <tr>
<th className="name-col">名称</th> <th>车辆归属人</th>
<th className="before-col">变更前</th> <td>{changeBefore.employeeVehicleUserName}</td>
<th className="after-col">变更后</th> <td>{changeAfter.employeeVehicleUserName}</td>
</tr> </tr>
</thead> )}
<tbody> <tr>
<tr> <th>车牌号</th>
<th>车辆所属类型</th> <td>{changeBefore.licenceNo}</td>
<td>{getLabelName({ list: VEHICLE_TYPE_ENUM, status: changeBefore.vehicleBelongType })}</td> <td>{changeAfter.licenceNo}</td>
<td>{getLabelName({ list: VEHICLE_TYPE_ENUM, status: changeAfter.vehicleBelongType })}</td> </tr>
</tr> <tr>
<tr> <th>车牌类型</th>
<th>车辆所属部门</th> <td>{changeBefore.licenceTypeName}</td>
<td>{changeBefore.vehicleDepartmentName}</td> <td>{changeAfter.licenceTypeName}</td>
<td>{changeAfter.vehicleDepartmentName}</td> </tr>
</tr> <tr>
{changeBefore.vehicleBelongType === 1 && ( <th>车辆类型</th>
<tr> <td>{changeBefore.vehicleTypeName}</td>
<th>车辆归属人</th> <td>{changeAfter.vehicleTypeName}</td>
<td>{changeBefore.employeeVehicleUserName}</td> </tr>
<td>{changeAfter.employeeVehicleUserName}</td> <tr>
</tr> <th>访问港区范围</th>
)} <td>{JSON.parse(changeBefore.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、")}</td>
<tr> <td>{JSON.parse(changeAfter.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、")}</td>
<th>车牌号</th> </tr>
<td>{changeBefore.licenceNo}</td> <tr>
<td>{changeAfter.licenceNo}</td> <th>访问开始时间</th>
</tr> <td>{changeBefore.visitStartTime}</td>
<tr> <td>{changeAfter.visitStartTime}</td>
<th>车牌类型</th> </tr>
<td>{changeBefore.licenceTypeName}</td> <tr>
<td>{changeAfter.licenceTypeName}</td> <th>访问结束时间</th>
</tr> <td>{changeBefore.visitEndTime}</td>
<tr> <td>{changeAfter.visitEndTime}</td>
<th>车辆类型</th> </tr>
<td>{changeBefore.vehicleTypeName}</td> <tr>
<td>{changeAfter.vehicleTypeName}</td> <th>行驶证照片</th>
</tr> <td><PreviewImg files={changeBefore.drivingLicenseFile} /></td>
<tr> <td><PreviewImg files={changeAfter.drivingLicenseFile} /></td>
<th>访问港区范围</th> </tr>
<td>{JSON.parse(changeBefore.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、")}</td> <tr>
<td>{JSON.parse(changeAfter.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、")}</td> <th>车辆照片</th>
</tr> <td><PreviewImg files={changeBefore.attachmentFile} /></td>
<tr> <td><PreviewImg files={changeAfter.attachmentFile} /></td>
<th>访问开始时间</th> </tr>
<td>{changeBefore.visitStartTime}</td> <tr>
<td>{changeAfter.visitStartTime}</td> <th>审批人</th>
</tr> <td>{changeBefore.auditUserName}</td>
<tr> <td>{changeAfter.auditUserName}</td>
<th>访问结束时间</th> </tr>
<td>{changeBefore.visitEndTime}</td> </tbody>
<td>{changeAfter.visitEndTime}</td> </table>
</tr> </div>
<tr> )
<th>行驶证照片</th> }
<td><PreviewImg files={changeBefore.drivingLicenseFile} /></td> <Divider orientation="left">审批信息</Divider>
<td><PreviewImg files={changeAfter.drivingLicenseFile} /></td> {recordsList.map((record, index) => (
</tr> <Descriptions
<tr> key={index}
<th>车辆照片</th> column={1}
<td><PreviewImg files={changeBefore.attachmentFile} /></td> bordered
<td><PreviewImg files={changeAfter.attachmentFile} /></td> styles={{ label: { width: 200 } }}
</tr> items={[
<tr> { label: "审批人", children: record.auditUserName },
<th>审批人</th> { label: "审批时间", children: record.todo },
<td>{changeBefore.auditUserName}</td> { label: "审批状态", children: getLabelName({ list: VEHICLE_AUDIT_STATUS_ENUM, status: record.auditStatus }) },
<td>{changeAfter.auditUserName}</td> ...(record.auditStatus === 3 ? [{ label: "打回意见", children: record.remarks }] : []),
</tr>
</tbody>
</table>
</div>
)
}
<Divider orientation="left">审批信息</Divider>
{recordsList.map((record, index) => (
<Descriptions
key={index}
column={1}
bordered
styles={{ label: { width: 200 } }}
items={[
{ label: "审批人", children: record.auditUserName },
{ label: "审批时间", children: record.todo },
{ label: "审批状态", children: getLabelName({ list: VEHICLE_AUDIT_STATUS_ENUM, status: record.auditStatus }) },
...(record.auditStatus === 3 ? [{ label: "打回意见", children: record.remarks }] : []),
]}
/>
))}
<FormBuilder
form={form}
showActionButtons={false}
span={24}
onFinish={onSubmit}
labelCol={{ span: 8 }}
values={{
auditStatus: "2",
}}
options={[
{
name: "auditStatus",
label: "是否通过",
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: VEHICLE_AUDIT_STATUS_ENUM,
},
{
name: "remarks",
label: "打回意见",
render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
dependencies: ["auditStatus"],
hidden: formValues => !(formValues.auditStatus === "3"),
},
]} ]}
/> />
</Spin> ))}
</Modal> </div>
); );
} }
const ReviewModal = Connect([NS_VEHICLE_AUDIT], true)(ReviewModalComponent); const ReviewModal = Connect([NS_VEHICLE_AUDIT], true)(ReviewModalComponent);
const InfoModal = Connect([NS_VEHICLE_AUDIT], true)(InfoModalComponent);
export default Connect([NS_VEHICLE_AUDIT], true)(ShareVehicles); export default Connect([NS_VEHICLE_AUDIT], true)(ShareVehicles);

View File

@ -0,0 +1,7 @@
import ShareVehiclesPage from "../ShareVehicles";
function ShareVehiclesRecords(props) {
return (<ShareVehiclesPage isRecords={true} {...props} />);
}
export default ShareVehiclesRecords;

View File

@ -45,15 +45,17 @@ function RelatedPersonnel(props) {
width: 150, width: 150,
render: (_, record) => ( render: (_, record) => (
<Space> <Space>
<Button {!props.isRecords && (
type="link" <Button
onClick={() => { type="link"
setReviewModalVisible(true); onClick={() => {
setCurrentId(record.id); setReviewModalVisible(true);
}} setCurrentId(record.id);
> }}
审核 >
</Button> 审核
</Button>
)}
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {

View File

@ -0,0 +1,7 @@
import RelatedPersonnelPage from "../RelatedPersonnel";
function RelatedPersonnelRecords(props) {
return (<RelatedPersonnelPage isRecords={true} {...props} />);
}
export default RelatedPersonnelRecords;

View File

@ -1,20 +1,46 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message } from "antd"; import { Button, message } from "antd";
import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; 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 Upload from "zy-react-library/components/Upload"; import Upload from "zy-react-library/components/Upload";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useUploadFile from "zy-react-library/hooks/useUploadFile";
import { ID_NUMBER, PHONE } from "zy-react-library/regular"; import { ID_NUMBER, PHONE } from "zy-react-library/regular";
import { NS_TEMPORARY_PERSONNEL } from "~/enumerate/namespace"; import { NS_APPROVER_USER, NS_TEMPORARY_PERSONNEL } from "~/enumerate/namespace";
function Add(props) { function Add(props) {
const [form] = Form.useForm(); const [form] = FormBuilder.useForm();
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
const [approvalUserListAll, setApprovalUserListAll] = useState([]);
const getApprovalUserListAll = async () => {
const { data } = await props["approvalUserListAll"]();
setApprovalUserListAll(data);
};
useEffect(() => {
getApprovalUserListAll();
}, []);
const onSubmit = async (values) => { const onSubmit = async (values) => {
const { success } = await props["temporaryPersonnelAdd"](values); const { filePath: userFaceUrl } = await uploadFile({
files: values.userFace,
params: { type: UPLOAD_FILE_TYPE_ENUM[608] },
});
const { success } = await props["temporaryPersonnelAdd"]({
...values,
personBelongType: 4,
personApplyList: [
{ userFaceUrl },
{ employeePersonUserName: values.employeePersonUserName },
{ userPhone: values.userPhone },
{ userCard: values.userCard },
],
});
if (success) { if (success) {
message.success("新增成功"); message.success("新增成功");
props.history.goBack(); props.history.goBack();
@ -26,19 +52,20 @@ function Add(props) {
<FormBuilder <FormBuilder
form={form} form={form}
onFinish={onSubmit} onFinish={onSubmit}
loading={props.temporaryPersonnel.temporaryPersonnelLoading} loading={props.temporaryPersonnel.temporaryPersonnelLoading || uploadFileLoading}
options={[ options={[
{ label: "申请信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { label: "申请信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ name: "todo1", label: "访问人姓名", span: 24 }, { name: "employeePersonUserName", label: "访问人姓名", span: 24 },
{ name: "todo2", label: "手机号", rules: [{ pattern: PHONE, message: "请输入正确的手机号" }] }, { name: "userPhone", label: "手机号", rules: [{ pattern: PHONE, message: "请输入正确的手机号" }] },
{ name: "todo3", label: "身份证号", rules: [{ pattern: ID_NUMBER, message: "请输入正确的身份证号" }] }, { name: "userCard", label: "身份证号", rules: [{ pattern: ID_NUMBER, message: "请输入正确的身份证号" }] },
{ name: "todo4", label: "访问开始时间", render: FORM_ITEM_RENDER_ENUM.DATE }, { name: "visitStartTime", label: "访问开始时间", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "todo5", label: "访问结束时间", render: FORM_ITEM_RENDER_ENUM.DATE }, { name: "visitEndTime", label: "访问结束时间", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "todo6", label: "访问港区", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> }, { name: "gateLevelAuthArea", label: "访问港区", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> },
{ name: "todo7", label: "访问口门名称" }, { name: "mkmjId", label: "访问口门名称", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] }, // todo
{ name: "todo8", label: "来访事由", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA }, { name: "mkmjName", label: "访问口门名称", onlyForLabel: true },
{ name: "reasonVisit", label: "来访事由", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{ {
name: "todo9", name: "userFace",
label: "人脸照片", label: "人脸照片",
span: 24, span: 24,
render: ( render: (
@ -59,18 +86,41 @@ function Add(props) {
}, },
{ label: "审批信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { label: "审批信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ {
name: "todo10", name: "auditUserId",
label: "审批企业", label: "审批人",
render: (<DepartmentSelectTree searchType="inType" params={{ enterpriseType: [1, 2] }} />), render: FORM_ITEM_RENDER_ENUM.SELECT,
items: approvalUserListAll,
itemsField: { labelKey: item => `${item.userName}${item.corpName}${item.deptName}`, valueKey: "userId" },
span: 24,
componentProps: {
onChange: (value) => {
const item = approvalUserListAll.find(item => item.userId === value);
form.setFieldValue("auditUserName", item.userName);
form.setFieldValue("auditCorpId", item.corpId);
form.setFieldValue("auditCorpName", item.corpName);
form.setFieldValue("auditDeptId", item.deptId);
form.setFieldValue("auditDeptName", item.deptName);
},
},
}, },
{ name: "todo11", label: "审批人", render: (<PersonnelSelect params={{ departmentId: "" }} />) }, { name: "auditUserName", label: "审批人名称", onlyForLabel: true },
{ name: "auditDeptId", label: "审批企业ID", onlyForLabel: true },
{ name: "auditDeptName", label: "审批企业名称", onlyForLabel: true },
{ name: "auditCorpId", label: "审批企业ID", onlyForLabel: true },
{ name: "auditCorpName", label: "审批企业名称", onlyForLabel: true },
{ {
name: "todo12", name: "securityProtocol",
label: " ", label: " ",
span: 24, span: 24,
required: false, required: false,
rules: [{ required: true, message: "请勾选" }], rules: [{ required: true, message: "请勾选" }],
formItemProps: { colon: false, required: false, style: { textAlign: "center" }, labelCol: { span: 0 }, wrapperCol: { span: 24 } }, formItemProps: {
colon: false,
required: false,
style: { textAlign: "center" },
labelCol: { span: 0 },
wrapperCol: { span: 24 },
},
render: FORM_ITEM_RENDER_ENUM.CHECKBOX, render: FORM_ITEM_RENDER_ENUM.CHECKBOX,
items: [{ items: [{
bianma: "1", bianma: "1",
@ -88,4 +138,4 @@ function Add(props) {
); );
} }
export default Connect([NS_TEMPORARY_PERSONNEL], true)(Add); export default Connect([NS_TEMPORARY_PERSONNEL, NS_APPROVER_USER], true)(Add);

View File

@ -1,6 +1,6 @@
import { CameraOutlined } from "@ant-design/icons"; import { CameraOutlined } from "@ant-design/icons";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider, Form, message, Modal, QRCode, Space } from "antd"; import { Button, Descriptions, Divider, message, Modal, QRCode, Space, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
@ -9,14 +9,16 @@ import PreviewImg from "zy-react-library/components/PreviewImg";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useGetFile from "zy-react-library/hooks/useGetFile";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import { getLabelName } from "zy-react-library/utils"; import { getLabelName } from "zy-react-library/utils";
import { NS_TEMPORARY_PERSONNEL } from "~/enumerate/namespace"; import { NS_TEMPORARY_PERSONNEL } from "~/enumerate/namespace";
const STATUS_ENUM = [ const STATUS_ENUM = [
{ bianma: "1", name: "通过" }, { bianma: "1", name: "审核中" },
{ bianma: "2", name: "通过" }, { bianma: "2", name: "通过" },
{ bianma: "3", name: "审核中" }, { bianma: "3", name: "不通过" },
]; ];
function List(props) { function List(props) {
@ -25,9 +27,10 @@ function List(props) {
const [approvalDetailsModalVisible, setApprovalDetailsModalVisible] = useState(false); const [approvalDetailsModalVisible, setApprovalDetailsModalVisible] = useState(false);
const [currentId, setCurrentId] = useState(""); const [currentId, setCurrentId] = useState("");
const [form] = Form.useForm(); const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["temporaryPersonnelList"], { const { tableProps, getData } = useTable(props["temporaryPersonnelList"], {
form, form,
params: { processOrRecord: !props.isRecords ? 1 : 2 },
}); });
return ( return (
@ -39,45 +42,49 @@ function List(props) {
{ name: "todo1", label: "访问人姓名" }, { name: "todo1", label: "访问人姓名" },
{ name: "todo2", label: "访问开始时间" }, { name: "todo2", label: "访问开始时间" },
{ name: "todo3", label: "访问结束时间" }, { name: "todo3", label: "访问结束时间" },
{ name: "todo4", label: "审批状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: STATUS_ENUM }, { name: "auditFlag", label: "审批状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: STATUS_ENUM },
{ name: "todo5", label: "访问口门名称" }, { name: "todo5", label: "访问口门名称", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] },
]} ]}
/> />
<Table <Table
toolBarRender={() => ( toolBarRender={() => (
<Space> <Space>
<Button {!props.isRecords && (
type="primary" <Button
icon={(<AddIcon />)} type="primary"
onClick={() => { icon={(<AddIcon />)}
props.history.push("./add"); onClick={() => {
}} props.history.push("./add");
> }}
新增 >
</Button> 新增
<Button </Button>
type="primary" )}
icon={(<CameraOutlined />)} {!props.isRecords && (
onClick={() => { <Button
setQrCodeModalVisible(true); type="primary"
}} icon={(<CameraOutlined />)}
> onClick={() => {
访客二维码 setQrCodeModalVisible(true);
</Button> }}
>
访客二维码
</Button>
)}
</Space> </Space>
)} )}
columns={[ columns={[
{ title: "访问人姓名", dataIndex: "todo1" }, { title: "访问人姓名", dataIndex: "todo1" },
{ title: "手机号", dataIndex: "todo2" }, { title: "手机号", dataIndex: "todo2" },
{ title: "身份证号", dataIndex: "todo3" }, { title: "身份证号", dataIndex: "todo3" },
{ title: "来访事由", dataIndex: "todo4" }, { title: "来访事由", dataIndex: "reasonVisit" },
{ title: "访问开始时间", dataIndex: "todo5" }, { title: "访问开始时间", dataIndex: "visitStartTime" },
{ title: "访问结束时间", dataIndex: "todo6" }, { title: "访问结束时间", dataIndex: "visitEndTime" },
{ title: "访问口门名称", dataIndex: "todo7" }, { title: "访问口门名称", dataIndex: "mkmjName" },
{ {
title: "审批状态", title: "审批状态",
dataIndex: "todo8", dataIndex: "auditFlag",
render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.todo8 }), render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.auditFlag }),
}, },
{ {
title: "操作", title: "操作",
@ -101,15 +108,17 @@ function List(props) {
> >
审批详情 审批详情
</Button> </Button>
<Button {(!props.isRecords && record.currentUserCanAudit === 1) && (
type="link" <Button
onClick={() => { type="link"
setReviewModalVisible(true); onClick={() => {
setCurrentId(record.id); setReviewModalVisible(true);
}} setCurrentId(record.id);
> }}
审核 >
</Button> 审核
</Button>
)}
</Space> </Space>
), ),
}, },
@ -166,7 +175,7 @@ const QrCodeModal = (props) => {
]} ]}
> >
<div style={{ textAlign: "center" }}> <div style={{ textAlign: "center" }}>
<QRCode value="-" style={{ margin: "0 auto", marginBottom: 10 }} /> <QRCode value="todo" style={{ margin: "0 auto", marginBottom: 10 }} />
<div>温馨提示此二维码支持临时入港申请预约及预约结果查询</div> <div>温馨提示此二维码支持临时入港申请预约及预约结果查询</div>
</div> </div>
</Modal> </Modal>
@ -174,12 +183,18 @@ const QrCodeModal = (props) => {
}; };
const ReviewModalComponent = (props) => { const ReviewModalComponent = (props) => {
const [form] = Form.useForm(); const [form] = FormBuilder.useForm();
const [info, setInfo] = useState({}); const [info, setInfo] = useState({});
const { loading: getFileLoading, getFile } = useGetFile();
const getData = async () => { const getData = async () => {
const { data } = await props["temporaryPersonnelInfo"]({ id: props.id }); const { data } = await props["temporaryPersonnelInfo"]({ id: props.id });
setInfo(data); const informSignFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[606], eqForeignKey: data.informSignId });
setInfo({
...data,
informSignFile,
});
}; };
useEffect(() => { useEffect(() => {
@ -206,51 +221,54 @@ const ReviewModalComponent = (props) => {
maskClosable={false} maskClosable={false}
onCancel={props.onCancel} onCancel={props.onCancel}
onOk={form.submit} onOk={form.submit}
confirmLoading={props.temporaryPersonnel.temporaryPersonnelLoading} confirmLoading={props.temporaryPersonnel.temporaryPersonnelLoading || getFileLoading}
> >
<Divider orientation="left">申请信息</Divider> <Spin spinning={props.temporaryPersonnel.temporaryPersonnelLoading || getFileLoading}>
<Descriptions <Divider orientation="left">申请信息</Divider>
column={1} <Descriptions
bordered column={1}
styles={{ label: { width: 200 } }} bordered
items={[ styles={{ label: { width: 200 } }}
{ label: "访问人姓名", children: info.todo1 }, items={[
{ label: "手机号", children: info.todo2 }, { label: "访问人姓名", children: info.personApplyList[0].employeePersonUserName },
{ label: "身份证号", children: info.todo3 }, { label: "手机号", children: info.personApplyList[0].userPhone },
{ label: "访问开始时间", children: info.todo4 }, { label: "身份证号", children: info.personApplyList[0].userCard },
{ label: "访问结束时间", children: info.todo5 }, { label: "访问开始时间", children: info.visitStartTime },
{ label: "访问口门名称", children: info.todo6 }, { label: "访问结束时间", children: info.visitEndTime },
{ label: "人脸照片", children: (<PreviewImg files={[info.todo7]} />) }, { label: "访问港区", children: JSON.parse(info.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、") },
{ label: "申请人安全告知签字", children: (<PreviewImg files={[info.todo8]} />) }, { label: "访问口门名称", children: info.mkmjName },
]} { label: "来访事由", children: info.reasonVisit },
/> { label: "人脸照片", children: (<PreviewImg files={[info.personApplyList[0].userFaceUrl]} />) },
<Divider orientation="left">审批信息</Divider> { label: "申请人安全告知签字", children: (<PreviewImg files={info.informSignFile} />) },
<FormBuilder ]}
form={form} />
onFinish={onSubmit} <Divider orientation="left">审批信息</Divider>
showActionButtons={false} <FormBuilder
labelCol={{ span: 10 }} form={form}
span={24} onFinish={onSubmit}
values={{ showActionButtons={false}
todo1: "1", labelCol={{ span: 10 }}
}} span={24}
loading={props.temporaryPersonnel.temporaryPersonnelLoading} values={{
options={[ auditFlag: "2",
{ }}
name: "todo1", options={[
label: "是否通过", {
render: FORM_ITEM_RENDER_ENUM.RADIO, name: "auditFlag",
items: [{ bianma: "1", name: "通过" }, { bianma: "2", name: "不通过" }], label: "是否通过",
}, render: FORM_ITEM_RENDER_ENUM.RADIO,
{ items: [{ bianma: "2", name: "通过" }, { bianma: "3", name: "不通过" }],
name: "todo2", },
label: "不通过原因", {
render: FORM_ITEM_RENDER_ENUM.TEXTAREA, name: "reasonsRefusal",
dependencies: ["todo1"], label: "不通过原因",
hidden: formValues => !(formValues.todo1 === "2"), render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
}, dependencies: ["auditFlag"],
]} hidden: formValues => !(formValues.auditFlag === "3"),
/> },
]}
/>
</Spin>
</Modal> </Modal>
); );
}; };
@ -259,6 +277,7 @@ const ApprovalDetailsModalComponent = (props) => {
const [list, setList] = useState([]); const [list, setList] = useState([]);
const getData = async () => { const getData = async () => {
// TODO
const { data } = await props["temporaryPersonnelReviewList"]({ id: props.id }); const { data } = await props["temporaryPersonnelReviewList"]({ id: props.id });
setList(data); setList(data);
}; };

View File

@ -3,17 +3,24 @@ import { Descriptions, Divider, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
import PreviewImg from "zy-react-library/components/PreviewImg"; import PreviewImg from "zy-react-library/components/PreviewImg";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useGetFile from "zy-react-library/hooks/useGetFile";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { NS_TEMPORARY_PERSONNEL } from "~/enumerate/namespace"; import { NS_TEMPORARY_PERSONNEL } from "~/enumerate/namespace";
function View(props) { function View(props) {
const query = useGetUrlQuery(); const query = useGetUrlQuery();
const { loading: getFileLoading, getFile } = useGetFile();
const { info, setInfo } = useState({}); const { info, setInfo } = useState({});
const getData = async () => { const getData = async () => {
const { data } = await props["temporaryPersonnelInfo"]({ id: query.id }); const { data } = await props["temporaryPersonnelInfo"]({ id: query.id });
setInfo(data); const informSignFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[606], eqForeignKey: data.informSignId });
setInfo({
...data,
informSignFile,
});
}; };
useEffect(() => { useEffect(() => {
@ -22,22 +29,23 @@ function View(props) {
return ( return (
<Page headerTitle="查看" contentPadding="0 20px 20px 20px"> <Page headerTitle="查看" contentPadding="0 20px 20px 20px">
<Spin spinning={props.temporaryPersonnel.temporaryPersonnelLoading}> <Spin spinning={props.temporaryPersonnel.temporaryPersonnelLoading || getFileLoading}>
<Divider orientation="left">申请信息</Divider> <Divider orientation="left">申请信息</Divider>
<Descriptions <Descriptions
column={2} column={2}
bordered bordered
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 } }}
items={[ items={[
{ label: "访问人姓名", children: info.todo1, span: 2 }, { label: "访问人姓名", children: info.personApplyList[0].employeePersonUserName, span: 2 },
{ label: "手机号", children: info.todo2 }, { label: "手机号", children: info.personApplyList[0].userPhone },
{ label: "身份证号", children: info.todo3 }, { label: "身份证号", children: info.personApplyList[0].userCard },
{ label: "访问开始时间", children: info.todo4 }, { label: "访问开始时间", children: info.visitStartTime },
{ label: "访问结束时间", children: info.todo5 }, { label: "访问结束时间", children: info.visitEndTime },
{ label: "访问港区", children: info.todo6 }, { label: "访问港区", children: JSON.parse(info.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、") },
{ label: "访问口门名称", children: info.todo7 }, { label: "访问口门名称", children: info.mkmjName },
{ label: "来访事由", children: info.todo8, span: 2 }, { label: "来访事由", children: info.reasonVisit, span: 2 },
{ label: "人脸照片", children: (<PreviewImg files={[info.todo9]} />), span: 2 }, { label: "人脸照片", children: (<PreviewImg files={[info.personApplyList[0].userFaceUrl]} />), span: 2 },
{ label: "申请人安全告知签字", children: (<PreviewImg files={info.informSignFile} />) },
]} ]}
/> />
<Divider orientation="left">审批信息</Divider> <Divider orientation="left">审批信息</Divider>
@ -46,8 +54,9 @@ function View(props) {
bordered bordered
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 } }}
items={[ items={[
{ label: "审批企业", children: info.todo10 }, { label: "审批企业", children: info.auditCorpName },
{ label: "审批人", children: info.todo11 }, { label: "审批部门", children: info.auditDeptName },
{ label: "审批人", children: info.auditUserName },
]} ]}
/> />
</Spin> </Spin>

View File

@ -0,0 +1,6 @@
import ListPage from "../../TemporaryPersonnel/List";
function List(props) {
return (<ListPage isRecords={true} {...props} />);
}
export default List;

View File

@ -0,0 +1,6 @@
import ViewPage from "../../TemporaryPersonnel/View";
function View(props) {
return (<ViewPage {...props} />);
}
export default View;

View File

@ -0,0 +1,5 @@
function TemporaryPersonnelRecords(props) {
return props.children;
}
export default TemporaryPersonnelRecords;

View File

@ -1,20 +1,47 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message } from "antd"; import { Button, message } from "antd";
import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; 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 Upload from "zy-react-library/components/Upload"; import Upload from "zy-react-library/components/Upload";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useUploadFile from "zy-react-library/hooks/useUploadFile";
import { ID_NUMBER, LICENSE_PLATE_NUMBER, PHONE } from "zy-react-library/regular"; import { ID_NUMBER, LICENSE_PLATE_NUMBER, PHONE } from "zy-react-library/regular";
import { NS_TEMPORARY_VEHICLE } from "~/enumerate/namespace"; import { NS_APPROVER_USER, NS_TEMPORARY_VEHICLE } from "~/enumerate/namespace";
function Add(props) { function Add(props) {
const [form] = Form.useForm(); const [form] = FormBuilder.useForm();
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
const [approvalUserListAll, setApprovalUserListAll] = useState([]);
const getApprovalUserListAll = async () => {
const { data } = await props["approvalUserListAll"]();
setApprovalUserListAll(data);
};
useEffect(() => {
getApprovalUserListAll();
}, []);
const onSubmit = async (values) => { const onSubmit = async (values) => {
const { success } = await props["temporaryVehicleAdd"](values); const { id: drivingLicenseId } = await uploadFile({
single: false,
files: values.drivingLicenseFile,
params: { type: UPLOAD_FILE_TYPE_ENUM[601] },
});
const { id: attachmentId } = await uploadFile({
single: false,
files: values.attachmentFile,
params: { type: UPLOAD_FILE_TYPE_ENUM[602] },
});
const { success } = await props["temporaryVehicleAdd"]({
...values,
drivingLicenseId,
attachmentId,
});
if (success) { if (success) {
message.success("新增成功"); message.success("新增成功");
props.history.goBack(); props.history.goBack();
@ -26,22 +53,43 @@ function Add(props) {
<FormBuilder <FormBuilder
form={form} form={form}
onFinish={onSubmit} onFinish={onSubmit}
loading={props.temporaryVehicle.temporaryVehicleLoading} loading={props.temporaryVehicle.temporaryVehicleLoading || uploadFileLoading}
options={[ options={[
{ label: "申请信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { label: "申请信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ name: "todo1", label: "访问人姓名" }, { name: "employeeVehicleUserName", label: "访问人姓名" },
{ name: "todo2", label: "手机号", rules: [{ pattern: PHONE, message: "请输入正确的手机号" }] }, { name: "todo2", label: "手机号", rules: [{ pattern: PHONE, message: "请输入正确的手机号" }] },
{ name: "todo3", label: "身份证号", rules: [{ pattern: ID_NUMBER, message: "请输入正确的身份证号" }] }, { name: "todo3", label: "身份证号", rules: [{ pattern: ID_NUMBER, message: "请输入正确的身份证号" }] },
{ name: "todo4", label: "车牌号", rules: [{ pattern: LICENSE_PLATE_NUMBER, message: "请输入正确的车牌号" }] }, { name: "licenceNo", label: "车牌号", rules: [{ pattern: LICENSE_PLATE_NUMBER, message: "请输入正确的车牌号" }] },
{ name: "todo5", label: "车牌类型", render: (<DictionarySelect dictValue="LICENSE_PLATE_TYPE" />) },
{ name: "todo6", label: "车辆类型", render: (<DictionarySelect dictValue="VEHICLE_TYPE" />) },
{ name: "todo7", label: "访问开始时间", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "todo8", label: "访问结束时间", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "todo9", label: "访问港区", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> },
{ name: "todo10", label: "访问口门名称" },
{ name: "todo11", label: "来访事由", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{ {
name: "todo12", name: "licenceType",
label: "车牌类型",
render: (
<DictionarySelect
dictValue="LICENSE_PLATE_TYPE"
onGetLabel={label => form.setFieldValue("licenceTypeName", label)}
/>
),
},
{ name: "licenceTypeName", label: "车牌类型名称", onlyForLabel: true },
{
name: "vehicleType",
label: "车辆类型",
render: (
<DictionarySelect
dictValue="VEHICLE_TYPE"
onGetLabel={label => form.setFieldValue("vehicleTypeName", label)}
/>
),
},
{ name: "vehicleTypeName", label: "车辆类型", onlyForLabel: true },
{ name: "visitStartTime", label: "访问开始时间", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "visitEndTime", label: "访问结束时间", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "gateLevelAuthArea", label: "访问港区", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> },
{ name: "mkmjId", label: "访问口门名称", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] }, // todo
{ name: "mkmjName", label: "访问口门名称", onlyForLabel: true },
{ name: "reasonVisit", label: "来访事由", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{
name: "drivingLicenseFile",
label: "行驶证照片", label: "行驶证照片",
span: 24, span: 24,
render: ( render: (
@ -59,7 +107,7 @@ function Add(props) {
), ),
}, },
{ {
name: "todo13", name: "attachmentFile",
label: "车辆图片", label: "车辆图片",
span: 24, span: 24,
render: ( render: (
@ -79,13 +127,30 @@ function Add(props) {
}, },
{ label: "审批信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { label: "审批信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ {
name: "todo14", name: "auditUserId",
label: "审批企业", label: "审批人",
render: (<DepartmentSelectTree searchType="inType" params={{ enterpriseType: [1, 2] }} />), render: FORM_ITEM_RENDER_ENUM.SELECT,
items: approvalUserListAll,
itemsField: { labelKey: item => `${item.userName}${item.corpName}${item.deptName}`, valueKey: "userId" },
span: 24,
componentProps: {
onChange: (value) => {
const item = approvalUserListAll.find(item => item.userId === value);
form.setFieldValue("auditUserName", item.userName);
form.setFieldValue("auditCorpId", item.corpId);
form.setFieldValue("auditCorpName", item.corpName);
form.setFieldValue("auditDeptId", item.deptId);
form.setFieldValue("auditDeptName", item.deptName);
},
},
}, },
{ name: "todo15", label: "审批人", render: (<PersonnelSelect params={{ departmentId: "" }} />) }, { name: "auditUserName", label: "审批人名称", onlyForLabel: true },
{ name: "auditDeptId", label: "审批企业ID", onlyForLabel: true },
{ name: "auditDeptName", label: "审批企业名称", onlyForLabel: true },
{ name: "auditCorpId", label: "审批企业ID", onlyForLabel: true },
{ name: "auditCorpName", label: "审批企业名称", onlyForLabel: true },
{ {
name: "todo16", name: "securityProtocol",
label: " ", label: " ",
span: 24, span: 24,
required: false, required: false,
@ -108,4 +173,4 @@ function Add(props) {
); );
} }
export default Connect([NS_TEMPORARY_VEHICLE], true)(Add); export default Connect([NS_TEMPORARY_VEHICLE, NS_APPROVER_USER], true)(Add);

View File

@ -1,6 +1,6 @@
import { CameraOutlined } from "@ant-design/icons"; import { CameraOutlined } from "@ant-design/icons";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider, Form, message, Modal, QRCode, Space } from "antd"; import { Button, Descriptions, Divider, message, Modal, QRCode, Space, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
@ -9,14 +9,16 @@ import PreviewImg from "zy-react-library/components/PreviewImg";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useGetFile from "zy-react-library/hooks/useGetFile";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import { getLabelName } from "zy-react-library/utils"; import { getLabelName } from "zy-react-library/utils";
import { NS_TEMPORARY_VEHICLE } from "~/enumerate/namespace"; import { NS_TEMPORARY_VEHICLE, NS_VEHICLE_AUDIT } from "~/enumerate/namespace";
const STATUS_ENUM = [ const STATUS_ENUM = [
{ bianma: "1", name: "通过" }, { bianma: "1", name: "审核中" },
{ bianma: "2", name: "通过" }, { bianma: "2", name: "通过" },
{ bianma: "3", name: "审核中" }, { bianma: "3", name: "不通过" },
]; ];
function List(props) { function List(props) {
@ -25,9 +27,10 @@ function List(props) {
const [approvalDetailsModalVisible, setApprovalDetailsModalVisible] = useState(false); const [approvalDetailsModalVisible, setApprovalDetailsModalVisible] = useState(false);
const [currentId, setCurrentId] = useState(""); const [currentId, setCurrentId] = useState("");
const [form] = Form.useForm(); const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["temporaryVehicleList"], { const { tableProps, getData } = useTable(props["vehicleAuditList"], {
form, form,
params: { vehicleBelongTypeArr: "6", processOrRecord: !props.isRecords ? 1 : 2 },
}); });
return ( return (
@ -36,52 +39,56 @@ function List(props) {
form={form} form={form}
onFinish={getData} onFinish={getData}
options={[ options={[
{ name: "todo1", label: "访问人姓名" }, { name: "employeeVehicleUserName", label: "访问人姓名" },
{ name: "todo2", label: "车牌号" }, { name: "licenceNo", label: "车牌号" },
{ name: "todo3", label: "访问开始时间" }, { name: "visitStartTime", label: "访问开始时间" },
{ name: "todo4", label: "访问结束时间" }, { name: "visitEndTime", label: "访问结束时间" },
{ name: "todo5", label: "审批状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: STATUS_ENUM }, { name: "auditStatus", label: "审批状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: STATUS_ENUM },
{ name: "todo6", label: "访问口门名称" }, { name: "todo6", label: "访问口门名称" },
]} ]}
/> />
<Table <Table
toolBarRender={() => ( toolBarRender={() => (
<Space> <Space>
<Button {!props.isRecords && (
type="primary" <Button
icon={(<AddIcon />)} type="primary"
onClick={() => { icon={(<AddIcon />)}
props.history.push("./add"); onClick={() => {
}} props.history.push("./add");
> }}
新增 >
</Button> 新增
<Button </Button>
type="primary" )}
icon={(<CameraOutlined />)} {!props.isRecords && (
onClick={() => { <Button
setQrCodeModalVisible(true); type="primary"
}} icon={(<CameraOutlined />)}
> onClick={() => {
访客二维码 setQrCodeModalVisible(true);
</Button> }}
>
访客二维码
</Button>
)}
</Space> </Space>
)} )}
columns={[ columns={[
{ title: "访问人姓名", dataIndex: "todo1" }, { title: "访问人姓名", dataIndex: "employeeVehicleUserName" },
{ title: "手机号", dataIndex: "todo2" }, { title: "手机号", dataIndex: "todo2" },
{ title: "身份证号", dataIndex: "todo3" }, { title: "身份证号", dataIndex: "todo3" },
{ title: "车牌号", dataIndex: "todo4" }, { title: "车牌号", dataIndex: "licenceNo" },
{ title: "车牌类型", dataIndex: "todo5" }, { title: "车牌类型", dataIndex: "licenceTypeName" },
{ title: "车辆类型", dataIndex: "todo6" }, { title: "车辆类型", dataIndex: "vehicleTypeName" },
{ title: "来访事由", dataIndex: "todo7" }, { title: "来访事由", dataIndex: "todo7" },
{ title: "访问起始时间", dataIndex: "todo8" }, { title: "访问起始时间", dataIndex: "visitStartTime" },
{ title: "访问结束时间", dataIndex: "todo9" }, { title: "访问结束时间", dataIndex: "visitEndTime" },
{ title: "访问口门名称", dataIndex: "todo10" }, { title: "访问口门名称", dataIndex: "todo10" },
{ {
title: "审批状态", title: "审批状态",
dataIndex: "todo11", dataIndex: "auditStatus",
render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.todo11 }), render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.auditStatus }),
}, },
{ {
title: "操作", title: "操作",
@ -105,15 +112,17 @@ function List(props) {
> >
审批详情 审批详情
</Button> </Button>
<Button {(!props.isRecords && record.currentUserCanAudit === 1) && (
type="link" <Button
onClick={() => { type="link"
setReviewModalVisible(true); onClick={() => {
setCurrentId(record.id); setReviewModalVisible(true);
}} setCurrentId(record.id);
> }}
审核 >
</Button> 审核
</Button>
)}
</Space> </Space>
), ),
}, },
@ -170,7 +179,7 @@ const QrCodeModal = (props) => {
]} ]}
> >
<div style={{ textAlign: "center" }}> <div style={{ textAlign: "center" }}>
<QRCode value="-" style={{ margin: "0 auto", marginBottom: 10 }} /> <QRCode value="todo" style={{ margin: "0 auto", marginBottom: 10 }} />
<div>温馨提示此二维码支持临时入港申请预约及预约结果查询</div> <div>温馨提示此二维码支持临时入港申请预约及预约结果查询</div>
</div> </div>
</Modal> </Modal>
@ -178,12 +187,25 @@ const QrCodeModal = (props) => {
}; };
const ReviewModalComponent = (props) => { const ReviewModalComponent = (props) => {
const [form] = Form.useForm(); const [form] = FormBuilder.useForm();
const { loading: getFileLoading, getFile } = useGetFile();
const [info, setInfo] = useState({}); const [info, setInfo] = useState({});
const getData = async () => { const getData = async () => {
const { data } = await props["temporaryVehicleInfo"]({ id: props.id }); const { data } = await props["vehicleApplyInfo"]({ id: props.id });
setInfo(data); const drivingLicenseFile = await getFile({
eqType: UPLOAD_FILE_TYPE_ENUM[601],
eqForeignKey: data.drivingLicenseId,
});
const attachmentFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[602], eqForeignKey: data.attachmentId });
const informSignFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[606], eqForeignKey: data.informSignId });
setInfo({
...data,
drivingLicenseFile,
attachmentFile,
informSignFile,
});
}; };
useEffect(() => { useEffect(() => {
@ -191,7 +213,7 @@ const ReviewModalComponent = (props) => {
}, []); }, []);
const onSubmit = async (values) => { const onSubmit = async (values) => {
const { success } = await props["temporaryVehicleReview"]({ const { success } = await props["vehicleAuditApproval"]({
...values, ...values,
id: props.id, id: props.id,
}); });
@ -210,55 +232,58 @@ const ReviewModalComponent = (props) => {
maskClosable={false} maskClosable={false}
onCancel={props.onCancel} onCancel={props.onCancel}
onOk={form.submit} onOk={form.submit}
confirmLoading={props.temporaryVehicle.temporaryVehicleLoading} confirmLoading={props.vehicleAudit.vehicleAuditLoading || getFileLoading}
> >
<Divider orientation="left">申请信息</Divider> <Spin spinning={props.vehicleAudit.vehicleAuditLoading || getFileLoading}>
<Descriptions <Divider orientation="left">申请信息</Divider>
column={1} <Descriptions
bordered column={1}
styles={{ label: { width: 200 } }} bordered
items={[ styles={{ label: { width: 200 } }}
{ label: "访问人姓名", children: info.todo1 }, items={[
{ label: "手机号", children: info.todo2 }, { label: "访问人姓名", children: info.employeeVehicleUserName },
{ label: "身份证号", children: info.todo3 }, { label: "手机号", children: info.todo2 },
{ label: "车牌号", children: info.todo4 }, { label: "身份证号", children: info.todo3 },
{ label: "车牌类型", children: info.todo5 }, { label: "车牌号", children: info.licenceNo },
{ label: "车辆类型", children: info.todo6 }, { label: "车牌类型", children: info.licenceTypeName },
{ label: "访问开始时间", children: info.todo7 }, { label: "车辆类型", children: info.vehicleTypeName },
{ label: "访问结束时间", children: info.todo8 }, { label: "访问开始时间", children: info.visitStartTime },
{ label: "访问口门名称", children: info.todo9 }, { label: "访问结束时间", children: info.visitEndTime },
{ label: "行驶证照片", children: (<PreviewImg files={[info.todo10]} />) }, { label: "访问港区", children: JSON.parse(info.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、") },
{ label: "车辆照片", children: (<PreviewImg files={[info.todo11]} />) }, { label: "访问口门名称", children: info.mkmjName },
{ label: "申请人安全告知签字", children: (<PreviewImg files={[info.todo12]} />) }, { label: "来访事由", children: info.reasonVisit },
]} { label: "行驶证照片", children: (<PreviewImg files={info.drivingLicenseFile} />) },
/> { label: "车辆照片", children: (<PreviewImg files={info.attachmentFile} />) },
<Divider orientation="left">审批信息</Divider> { label: "申请人安全告知签字", children: (<PreviewImg files={info.informSignFile} />) },
<FormBuilder ]}
form={form} />
onFinish={onSubmit} <Divider orientation="left">审批信息</Divider>
showActionButtons={false} <FormBuilder
labelCol={{ span: 10 }} form={form}
span={24} onFinish={onSubmit}
values={{ showActionButtons={false}
todo1: "1", labelCol={{ span: 10 }}
}} span={24}
loading={props.temporaryVehicle.temporaryVehicleLoading} values={{
options={[ auditStatus: "2",
{ }}
name: "todo1", options={[
label: "是否通过", {
render: FORM_ITEM_RENDER_ENUM.RADIO, name: "auditStatus",
items: [{ bianma: "1", name: "通过" }, { bianma: "2", name: "不通过" }], label: "是否通过",
}, render: FORM_ITEM_RENDER_ENUM.RADIO,
{ items: [{ bianma: "2", name: "通过" }, { bianma: "3", name: "不通过" }],
name: "todo2", },
label: "不通过原因", {
render: FORM_ITEM_RENDER_ENUM.TEXTAREA, name: "remarks",
dependencies: ["todo1"], label: "不通过原因",
hidden: formValues => !(formValues.todo1 === "2"), render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
}, dependencies: ["auditStatus"],
]} hidden: formValues => !(formValues.auditStatus === "3"),
/> },
]}
/>
</Spin>
</Modal> </Modal>
); );
}; };
@ -267,6 +292,7 @@ const ApprovalDetailsModalComponent = (props) => {
const [list, setList] = useState([]); const [list, setList] = useState([]);
const getData = async () => { const getData = async () => {
// TODO
const { data } = await props["temporaryVehicleReviewList"]({ id: props.id }); const { data } = await props["temporaryVehicleReviewList"]({ id: props.id });
setList(data); setList(data);
}; };
@ -342,7 +368,7 @@ const ApprovalDetailsModalComponent = (props) => {
); );
}; };
const ReviewModal = Connect([NS_TEMPORARY_VEHICLE], true)(ReviewModalComponent); const ReviewModal = Connect([NS_VEHICLE_AUDIT], true)(ReviewModalComponent);
const ApprovalDetailsModal = Connect([NS_TEMPORARY_VEHICLE], true)(ApprovalDetailsModalComponent); const ApprovalDetailsModal = Connect([NS_TEMPORARY_VEHICLE], true)(ApprovalDetailsModalComponent);
export default Connect([NS_TEMPORARY_VEHICLE], true)(List); export default Connect([NS_VEHICLE_AUDIT], true)(List);

View File

@ -3,17 +3,31 @@ import { Descriptions, Divider, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
import PreviewImg from "zy-react-library/components/PreviewImg"; import PreviewImg from "zy-react-library/components/PreviewImg";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useGetFile from "zy-react-library/hooks/useGetFile";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { NS_TEMPORARY_VEHICLE } from "~/enumerate/namespace"; import { NS_VEHICLE_AUDIT } from "~/enumerate/namespace";
function View(props) { function View(props) {
const query = useGetUrlQuery(); const query = useGetUrlQuery();
const { loading: getFileLoading, getFile } = useGetFile();
const { info, setInfo } = useState({}); const { info, setInfo } = useState({});
const getData = async () => { const getData = async () => {
const { data } = await props["temporaryVehicleInfo"]({ id: query.id }); const { data } = await props["vehicleApplyInfo"]({ id: query.id });
setInfo(data); const drivingLicenseFile = await getFile({
eqType: UPLOAD_FILE_TYPE_ENUM[601],
eqForeignKey: data.drivingLicenseId,
});
const attachmentFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[602], eqForeignKey: data.attachmentId });
const informSignFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[606], eqForeignKey: data.informSignId });
setInfo({
...data,
drivingLicenseFile,
attachmentFile,
informSignFile,
});
}; };
useEffect(() => { useEffect(() => {
@ -22,26 +36,27 @@ function View(props) {
return ( return (
<Page headerTitle="查看" contentPadding="0 20px 20px 20px"> <Page headerTitle="查看" contentPadding="0 20px 20px 20px">
<Spin spinning={props.temporaryVehicle.temporaryVehicleLoading}> <Spin spinning={props.vehicleAudit.vehicleAuditLoading || getFileLoading}>
<Divider orientation="left">申请信息</Divider> <Divider orientation="left">申请信息</Divider>
<Descriptions <Descriptions
column={2} column={2}
bordered bordered
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 } }}
items={[ items={[
{ label: "访问人姓名", children: info.todo1 }, { label: "访问人姓名", children: info.employeeVehicleUserName },
{ label: "手机号", children: info.todo2 }, { label: "手机号", children: info.todo2 },
{ label: "身份证号", children: info.todo3 }, { label: "身份证号", children: info.todo3 },
{ label: "车牌号", children: info.todo4 }, { label: "车牌号", children: info.licenceNo },
{ label: "车牌类型", children: info.todo5 }, { label: "车牌类型", children: info.licenceTypeName },
{ label: "车辆类型", children: info.todo6 }, { label: "车辆类型", children: info.vehicleTypeName },
{ label: "访问开始时间", children: info.todo7 }, { label: "访问开始时间", children: info.visitStartTime },
{ label: "访问结束时间", children: info.todo8 }, { label: "访问结束时间", children: info.visitEndTime },
{ label: "访问港区", children: info.todo9 }, { label: "访问港区", children: JSON.parse(info.gateLevelAuthArea)?.area?.map(item => item.value)?.join("、") },
{ label: "访问口门名称", children: info.todo10 }, { label: "访问口门名称", children: info.mkmjName },
{ label: "来访事由", children: info.todo11, span: 2 }, { label: "来访事由", children: info.reasonVisit, span: 2 },
{ label: "行驶证照片", children: (<PreviewImg files={[info.todo12]} />), span: 2 }, { label: "行驶证照片", children: (<PreviewImg files={info.drivingLicenseFile} />), span: 2 },
{ label: "车辆图片", children: (<PreviewImg files={[info.todo13]} />), span: 2 }, { label: "车辆图片", children: (<PreviewImg files={info.attachmentFile} />), span: 2 },
{ label: "申请人安全告知签字", children: (<PreviewImg files={info.informSignFile} />), span: 2 },
]} ]}
/> />
<Divider orientation="left">审批信息</Divider> <Divider orientation="left">审批信息</Divider>
@ -50,8 +65,9 @@ function View(props) {
bordered bordered
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 } }}
items={[ items={[
{ label: "审批企业", children: info.todo14 }, { label: "审批企业", children: info.auditCorpName },
{ label: "审批人", children: info.todo15 }, { label: "审批部门", children: info.auditDeptName },
{ label: "审批人", children: info.auditUserName },
]} ]}
/> />
</Spin> </Spin>
@ -59,4 +75,4 @@ function View(props) {
); );
} }
export default Connect([NS_TEMPORARY_VEHICLE], true)(View); export default Connect([NS_VEHICLE_AUDIT], true)(View);

View File

@ -0,0 +1,6 @@
import ListPage from "../../TemporaryVehicle/List";
function List(props) {
return (<ListPage isRecords={true} {...props} />);
}
export default List;

View File

@ -0,0 +1,6 @@
import ViewPage from "../../TemporaryVehicle/View";
function View(props) {
return (<ViewPage isRecords={true} {...props} />);
}
export default View;

View File

@ -0,0 +1,5 @@
function TemporaryVehicleRecords(props) {
return props.children;
}
export default TemporaryVehicleRecords;