封闭区域管理:封闭区域管理、封闭区域口门管理、人员封闭区域申请、车辆封闭区域申请、人员封闭区域申请记录、车辆封闭区域申请记录

master
LiuJiaNan 2026-03-23 17:31:29 +08:00
parent 990964f067
commit 8de6f12667
23 changed files with 810 additions and 335 deletions

View File

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

View File

@ -46,15 +46,15 @@
#### 封闭区域管理
- 封闭区域管理/封闭区域管理 ##
`/primeport/container/supervision/enclosedArea/areaAndEntrance/enclosedArea/list`
- 封闭区域管理/封闭区域口门管理
- 封闭区域管理/封闭区域口门管理 ##
`/primeport/container/supervision/enclosedArea/areaAndEntrance/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`
@ -88,17 +88,17 @@
`/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/apply/personnel/list`
- 封闭区域申请/车辆封闭区域申请
- 封闭区域申请/车辆封闭区域申请 ##
`/primeport/container/enterprise/enclosedArea/apply/vehicle/list`
- 封闭区域申请/人员封闭区域申请记录
- 封闭区域申请/人员封闭区域申请记录 ##
`/primeport/container/enterprise/enclosedArea/apply/personnelRecords/list`
- 封闭区域申请/车辆封闭区域申请记录
- 封闭区域申请/车辆封闭区域申请记录 ##
`/primeport/container/enterprise/enclosedArea/apply/vehicleRecords/list`
- 区域人员及车辆统计
`/primeport/container/enterprise/enclosedArea/personnelAndVehicleStatistics/list`
@ -152,13 +152,13 @@
`/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/personnelRecords/list`
- 封闭区域申请/车辆封闭区域申请记录
- 封闭区域申请/车辆封闭区域申请记录 ##
`/primeport/container/stakeholder/enclosedArea/apply/vehicleRecords/list`

View File

@ -10,7 +10,7 @@ export const enclosedAreaDetailList = declareRequest(
);
export const enclosedAreaDetailListTree = declareRequest(
"enclosedAreaLoading",
`Post > @/primeport/`,
`Get > /primeport/closedArea/listTree`,
);
export const enclosedAreaDetailDelete = declareRequest(
"enclosedAreaLoading",

View File

@ -2,29 +2,29 @@ import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
export const enclosedAreaPersonnelApplyList = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
`Post > @/primeport/closedAreaPersonApply/pendingApprovalRecordList`,
);
export const enclosedAreaPersonnelApplyInfo = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
`Get > /primeport/closedAreaPersonApply/{id}`,
);
export const enclosedAreaPersonnelApplyEntourageList = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
`Post > @/primeport/closedAreaPersonApply/getCorpUserList`,
);
export const enclosedAreaPersonnelApplySave = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
);
export const enclosedAreaPersonnelApplyRecordsList = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
`Post > @/primeport/closedAreaPersonApply/save`,
);
export const enclosedAreaPersonnelApplyRecordsAccessRecordsList = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
);
export const enclosedAreaPersonnelApplyRecordsRejectReason = declareRequest(
export const xgfProjectListAll = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Post > @/primeport/`,
`Get > /xgfManager/project/listAllPassedBySelfCorp`,
);
export const xgfProjectUserGetPeopleProject = declareRequest(
"enclosedAreaPersonnelApplyLoading",
`Get > /xgfManager/projectUser/getPeopleinProject/{id}`,
);

View File

@ -2,29 +2,21 @@ import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
export const enclosedAreaVehicleApplyList = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
`Post > @/primeport/closedAreaCarApply/list`,
);
export const enclosedAreaVehicleApplyInfo = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
`Get > /primeport/closedAreaCarApply/{id}`,
);
export const enclosedAreaVehicleApplyVehicleList = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
`Get > /primeport/vehicleApply/getCarByVehicleBelongType`,
);
export const enclosedAreaVehicleApplySave = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
);
export const enclosedAreaVehicleApplyRecordsList = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
`Post > @/primeport/closedAreaCarApply/save`,
);
export const enclosedAreaVehicleApplyRecordsAccessRecordsList = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
);
export const enclosedAreaVehicleApplyRecordsRejectReason = declareRequest(
"enclosedAreaVehicleApplyLoading",
`Post > @/primeport/`,
);

View File

@ -20,6 +20,10 @@ export const firstLevelDoorInfoDelete = declareRequest(
"firstLevelDoorInfoLoading",
`Delete > @/primeport/mkmj/{id}`,
);
export const firstLevelDoorInfoEditStatus = declareRequest(
"firstLevelDoorInfoLoading",
`Put > @/primeport/mkmj/editStatus`,
);
export const firstLevelDoorInfoInfo = declareRequest(
"firstLevelDoorInfoLoading",
`Get > /primeport/mkmj/{id}`,

View File

@ -1,7 +1,7 @@
import AddPage from "~/pages/Container/Supervision/EnclosedArea/Apply/Personnel/Add";
function Add(props) {
return (<AddPage {...props} />);
return (<AddPage entrance="enterprise" {...props} />);
}
export default Add;

View File

@ -1,7 +1,7 @@
import ListPage from "~/pages/Container/Supervision/EnclosedArea/Apply/Personnel/List";
function List(props) {
return (<ListPage {...props} />);
return (<ListPage entrance="enterprise" {...props} />);
}
export default List;

View File

@ -1,7 +1,7 @@
import ListPage from "~/pages/Container/Supervision/EnclosedArea/Apply/PersonnelRecords/List";
function List(props) {
return (<ListPage {...props} />);
return (<ListPage entrance="enterprise" {...props} />);
}
export default List;

View File

@ -1,7 +1,7 @@
import ListPage from "~/pages/Container/Supervision/EnclosedArea/Apply/Vehicle/List";
function List(props) {
return (<ListPage {...props} />);
return (<ListPage entrance="enterprise" {...props} />);
}
export default List;

View File

@ -1,7 +1,7 @@
import ListPage from "~/pages/Container/Supervision/EnclosedArea/Apply/VehicleRecords/List";
function List(props) {
return (<ListPage {...props} />);
return (<ListPage entrance="enterprise" {...props} />);
}
export default List;

View File

@ -1,6 +1,6 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal } from "antd";
import { useRef, useState } from "react";
import { Button, message, Modal } from "antd";
import { useEffect, 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";
@ -8,31 +8,69 @@ 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 { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useTable from "zy-react-library/hooks/useTable";
import useUploadFile from "zy-react-library/hooks/useUploadFile";
import { getLabelName } from "zy-react-library/utils";
import NeedToKnowModal from "~/components/NeedToKnowModal";
import { NS_ENCLOSED_AREA, NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace";
import { NS_APPROVER_USER, 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 [approvalUserListAll, setApprovalUserListAll] = useState([]);
const [xgfProjectListAll, setXgfProjectListAll] = useState([]);
const signatureUrl = useRef("");
const [form] = Form.useForm();
const [form] = FormBuilder.useForm();
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
const getEnclosedAreaList = async (id) => {
const { data } = await props["enclosedAreaDetailListTree"]({ id });
const getApprovalUserListAll = async () => {
const { data } = await props["approvalUserListAll"]({ personnelPermissionFlag: 1 });
setApprovalUserListAll(data);
};
const getEnclosedAreaList = async (jurisdictionalCorpId) => {
const { data } = await props["enclosedAreaDetailListTree"]({ jurisdictionalCorpId });
setEnclosedAreaList(data);
};
const getXgfProjectListAll = async () => {
const { data } = await props["xgfProjectListAll"]();
setXgfProjectListAll(data);
};
useEffect(() => {
getApprovalUserListAll();
props.entrance === "stakeholder" && getXgfProjectListAll();
}, []);
const onSubmit = async (values) => {
if (!values.todo8) {
if (!values.informSignFile) {
message.warning("请勾选《安全进港须知》并签字");
return;
}
const { success } = await props["enclosedAreaPersonnelApplySave"]({ ...values });
let personBelongType = 1;
if (props.entrance === "enterprise")
personBelongType = 2;
if (props.entrance === "stakeholder")
personBelongType = 3;
const { id: informSignId } = await uploadFile({
files: [{ originFileObj: values.informSignFile }],
single: false,
params: { foreignKey: "", type: UPLOAD_FILE_TYPE_ENUM[609] },
});
const { success } = await props["enclosedAreaPersonnelApplySave"]({
...values,
visitStartTime: values.visitTime[0],
visitEndTime: values.visitTime[1],
personBelongType,
informSignId,
entourage: JSON.stringify(entourageList),
});
if (success) {
message.success("操作成功");
props.history.goBack();
@ -44,18 +82,27 @@ function Add(props) {
<FormBuilder
submitButtonText="提交申请"
onFinish={onSubmit}
loading={props.enclosedAreaPersonnelApply.enclosedAreaPersonnelApplyLoading || uploadFileLoading}
options={[
{
name: "todo0",
name: "projectId",
label: "项目",
tip: "如果无法找到相应的项目,请在“项目审核管理”栏目中查看,项目是否备案审核成功。",
span: 24,
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: [],
items: xgfProjectListAll,
itemsField: { labelKey: "projectName", valueKey: "id" },
hidden: !(props.entrance === "stakeholder"),
componentProps: {
onChange: (value) => {
form.setFieldValue("projectName", getLabelName({ list: xgfProjectListAll, status: value, idKey: "id", nameKey: "projectName" }));
setEntourageList([]);
},
},
},
{ name: "projectName", label: "项目名称", onlyForLabel: true },
{
name: "todo1",
name: "jurisdictionalCorpId",
label: "区域管辖单位",
render: (
<DepartmentSelectTree
@ -63,18 +110,50 @@ function Add(props) {
params={{ enterpriseType: [2] }}
onChange={(value) => {
getEnclosedAreaList(value);
form.setFieldValue("closedAreaName", "");
}}
onGetLabel={label => form.setFieldValue("jurisdictionalCorpName", label)}
/>
),
},
{ name: "jurisdictionalCorpName", label: "区域管辖单位名称", onlyForLabel: true },
{
name: "todo2",
name: "closedAreaId",
label: "封闭区域",
render: (<BasicSelectTree treeData={enclosedAreaList} placeholder="封闭区域" />),
render: (
<BasicSelectTree
treeData={enclosedAreaList}
placeholder="封闭区域"
onGetLabel={label => form.setFieldValue("closedAreaName", label)}
nameKey="closedAreaName"
/>
),
},
{ name: "todo4", label: "审核人员", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] },
{ name: "closedAreaName", label: "封闭区域名称", onlyForLabel: true },
{
name: "todo5",
name: "auditPersonUserId",
label: "审核人员",
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: approvalUserListAll,
itemsField: { labelKey: item => `${item.userName}${item.corpName}${item.deptName}`, valueKey: "userId" },
componentProps: {
onChange: (value) => {
const item = approvalUserListAll.find(item => item.userId === value);
form.setFieldValue("auditPersonUserName", item.userName);
form.setFieldValue("auditPersonCorpId", item.corpId);
form.setFieldValue("auditPersonCorpName", item.corpName);
form.setFieldValue("auditPersonDepartmentId", item.deptId);
form.setFieldValue("auditPersonDepartmentName", item.deptName);
},
},
},
{ name: "auditPersonUserName", label: "审核人员名称", onlyForLabel: true },
{ name: "auditPersonCorpId", label: "审核企业ID", onlyForLabel: true },
{ name: "auditPersonCorpName", label: "审核企业名称", onlyForLabel: true },
{ name: "auditPersonDepartmentId", label: "审核部门ID", onlyForLabel: true },
{ name: "auditPersonDepartmentName", label: "审核部门名称", onlyForLabel: true },
{
name: "visitTime",
label: "申请时间范围",
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
componentProps: { disabled: props.entrance === "stakeholder" },
@ -99,6 +178,10 @@ function Add(props) {
<Button
type="primary"
onClick={() => {
if (props.entrance === "stakeholder" && !form.getFieldValue("projectId")) {
message.warning("请先选择项目");
return;
}
setSelectEntourageModalVisible(true);
}}
>
@ -109,8 +192,8 @@ function Add(props) {
disabledResizer={true}
pagination={false}
columns={[
{ title: "姓名", dataIndex: "todo1" },
{ title: "部门", dataIndex: "todo2" },
{ title: "姓名", dataIndex: "name", render: (_, record) => record.name || record.userName },
{ title: "部门", dataIndex: "deptName" },
{
title: "操作",
render: (_, record) => (
@ -118,7 +201,7 @@ function Add(props) {
type="link"
danger
onClick={() => {
setEntourageList(entourageList.filter(item => item.id !== record.id));
setEntourageList(entourageList.filter(item => item.userId !== record.userId));
}}
>
删除
@ -130,9 +213,9 @@ function Add(props) {
/>
),
},
{ name: "todo6", label: "申请原因", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{ name: "applyReason", label: "申请原因", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{
name: "todo7",
name: "securityProtocol",
label: " ",
span: 24,
required: false,
@ -163,7 +246,7 @@ function Add(props) {
),
}],
},
{ name: "todo8", label: "签字", onlyForLabel: true },
{ name: "informSignFile", label: "签字", onlyForLabel: true },
]}
form={form}
/>
@ -171,6 +254,8 @@ function Add(props) {
selectEntourageModalVisible && (
<SelectEntourageModal
entourageList={entourageList}
entrance={props.entrance}
projectId={form.getFieldValue("projectId")}
onClose={() => {
setSelectEntourageModalVisible(false);
}}
@ -189,7 +274,7 @@ function Add(props) {
setNeedToKnowModalVisible(false);
}}
onOk={(values) => {
form.setFieldValue("todo8", values);
form.setFieldValue("informSignFile", values.file);
signatureUrl.current = values.base64;
setNeedToKnowModalVisible(false);
}}
@ -201,14 +286,28 @@ function Add(props) {
}
const SelectEntourageModalComponent = (props) => {
const [selectedRowKeys, setSelectedRowKeys] = useState(props.entourageList.map(item => item.id));
const [selectedRowKeys, setSelectedRowKeys] = useState(props.entourageList.map(item => item.userId));
const selectedRowsRef = useRef(props.entourageList || []);
const [form] = Form.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyEntourageList"], {
const [form] = Search.useForm();
const {
tableProps,
getData,
} = useTable(props[props.entrance === "stakeholder" ? "xgfProjectUserGetPeopleProject" : "enclosedAreaPersonnelApplyEntourageList"], {
form,
useStorageQueryCriteria: false,
params: () => {
if (props.entrance === "stakeholder") {
return { id: props.projectId };
}
else {
let personBelongType = 1;
if (props.entrance === "enterprise")
personBelongType = 2;
return { personBelongType };
}
},
});
return (
@ -224,12 +323,13 @@ const SelectEntourageModalComponent = (props) => {
>
<Search
options={[
{ name: "todo1", label: "姓名" },
{ name: "name", label: "姓名" },
]}
form={form}
onFinish={getData}
/>
<Table
rowKey="userId"
rowSelection={{
selectedRowKeys,
preserveSelectedRowKeys: true,
@ -241,10 +341,10 @@ const SelectEntourageModalComponent = (props) => {
options={false}
disabledResizer={true}
columns={[
{ title: "部门", dataIndex: "todo1" },
{ title: "姓名", dataIndex: "todo2" },
{ title: "手机号", dataIndex: "todo3" },
{ title: "是否录入人脸", dataIndex: "todo4", render: (_, record) => record.todo4 === 1 ? "是" : "否" },
{ title: "部门", dataIndex: "deptName" },
{ title: "姓名", dataIndex: "name", render: (_, record) => record.name || record.userName },
{ title: "手机号", dataIndex: "phone" },
{ title: "是否录入人脸", dataIndex: "userFaceUrl", render: (_, record) => record.userFaceUrl ? "是" : "否" },
]}
{...tableProps}
/>
@ -254,4 +354,4 @@ const SelectEntourageModalComponent = (props) => {
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);
export default Connect([NS_ENCLOSED_AREA_PERSONNEL_APPLY, NS_ENCLOSED_AREA, NS_APPROVER_USER], true)(Add);

View File

@ -1,24 +1,39 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form } from "antd";
import { Button } 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 { getLabelName } from "zy-react-library/utils";
import { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace";
const STATUS_ENUM = [
{ name: "审核中", bianma: "1" },
{ name: "审核通过", bianma: "2" },
{ name: "审核驳回", bianma: "3" },
];
function List(props) {
const [form] = Form.useForm();
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyList"], {
form,
params: () => {
let personBelongType = 1;
if (props.entrance === "enterprise")
personBelongType = 2;
if (props.entrance === "stakeholder")
personBelongType = 3;
return { processOrRecord: 1, personBelongType };
},
});
return (
<Page isShowAllAction={false}>
<Search
options={[
{ name: "todo1", label: "人员姓名" },
{ name: "name", label: "人员姓名" },
]}
form={form}
onFinish={getData}
@ -36,14 +51,26 @@ function List(props) {
</Button>
)}
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) => <TooltipPreviewImg files={record.todo7} /> },
{ title: "所属项目", dataIndex: "todo9", hidden: !(props.entrance === "stakeholder") },
{ title: "申请状态", dataIndex: "todo8" },
{ title: "姓名", dataIndex: "applyPersonUserName" },
{ title: "部门", dataIndex: "applyPersonDepartmentName" },
{ title: "手机号", dataIndex: "userPhone" },
{ title: "申请区域", dataIndex: "closedAreaName" },
{
title: "申请时间范围",
dataIndex: "visitStartTime",
render: (_, record) => `${record.visitStartTime} - ${record.visitEndTime}`,
},
{
title: "个人照片",
dataIndex: "userFaceUrl",
render: (_, record) => <TooltipPreviewImg files={[record.userFaceUrl]} />,
},
{ title: "所属项目", dataIndex: "projectName", hidden: !(props.entrance === "stakeholder") },
{
title: "申请状态",
dataIndex: "auditFlag",
render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.auditFlag }),
},
{
title: "操作",
width: 80,

View File

@ -3,6 +3,10 @@ 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 Table from "zy-react-library/components/Table";
import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg";
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 { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace";
@ -10,10 +14,15 @@ function View(props) {
const [info, setInfo] = useState({});
const query = useGetUrlQuery();
const { loading: getFileLoading, getFile } = useGetFile();
const getData = async () => {
const { data } = await props["enclosedAreaPersonnelApplyInfo"]({ id: query.id });
setInfo(data);
const informSignFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[609], eqForeignKey: data.informSignId });
setInfo({
...data,
informSignFile,
});
props.onGetData?.(data);
};
@ -23,7 +32,7 @@ function View(props) {
return (
<Page headerTitle={props.headerTitle || "查看"} contentPadding="0 20px 20px 20px" isShowFooter={props.isShowFooter}>
<Spin spinning={props.enclosedAreaPersonnelApply.enclosedAreaPersonnelApplyLoading}>
<Spin spinning={props.enclosedAreaPersonnelApply.enclosedAreaPersonnelApplyLoading || getFileLoading}>
<Divider orientation="left">人员信息</Divider>
<Descriptions
bordered
@ -34,48 +43,47 @@ function View(props) {
props.entrance === "stakeholder"
? [
{ label: "相关方名称", children: info.todo1 },
{ label: "所属项目", children: info.todo1 },
{ label: "所属项目", children: info.projectName },
]
: []
),
...(
props.entrance === "enterprise" || props.entrance === "supervision" || !props.entrance
? [
{ label: "所属企业", children: info.todo1 },
{ label: "所属企业", children: info.applyPersonCorpName },
]
: []
),
{ label: "姓名", children: info.todo2 },
{ label: "部门", children: info.todo3 },
{ label: "手机号", children: info.todo4 },
{ label: "申请区域", children: info.todo5 },
{ label: "申请时间范围", children: `${info.todo6} - ${info.todo7}` },
{ label: "个人照片", children: (<PreviewImg files={info.todo8} />) },
{ label: "申请原因", children: info.todo9 },
{ label: "申请人员签字", children: (<PreviewImg files={info.todo10} />) },
{ label: "姓名", children: info.applyPersonUserName },
{ label: "部门", children: info.applyPersonDepartmentName },
{ label: "手机号", children: info.userPhone },
{ label: "申请区域", children: info.closedAreaName },
{ label: "申请时间范围", children: `${info.visitStartTime} - ${info.visitEndTime}` },
{ label: "个人照片", children: (<PreviewImg files={[info.userFaceUrl]} />) },
{ label: "申请原因", children: info.applyReason },
{ label: "申请人员签字", children: (<PreviewImg files={info.informSignFile} />) },
]}
/>
{
info.todo11?.length > 0
&& (
info.entourage && (
<>
<Divider orientation="left">更多人员信息</Divider>
{
info.todo11.map((item, index) => (
<Descriptions
key={index}
bordered
column={2}
styles={{ label: { width: 200 } }}
items={[
{ label: "姓名", children: item.todo1 },
{ label: "部门", children: item.todo2 },
{ label: "手机号", children: item.todo3 },
{ label: "个人照片", children: item.todo4 },
]}
/>
))
}
<Table
dataSource={JSON.parse(info.entourage)}
pagination={false}
options={false}
disabledResizer={true}
columns={[
{ title: "姓名", dataIndex: "name", render: (_, record) => record.name || record.userName },
{ title: "部门", dataIndex: "deptName" },
{ title: "手机号", dataIndex: "phone" },
{
title: "个人照片",
dataIndex: "userFaceUrl",
render: (_, record) => <TooltipPreviewImg files={[record.userFaceUrl]} />,
},
]}
/>
</>
)
}

View File

@ -1,42 +1,68 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Form, Modal, Space } from "antd";
import { useEffect, useState } from "react";
import { Button, Descriptions, Modal, Space } from "antd";
import { 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 { getLabelName } from "zy-react-library/utils";
import { NS_ENCLOSED_AREA_PERSONNEL_APPLY } from "~/enumerate/namespace";
const STATUS_ENUM = [
{ name: "审核中", bianma: "1" },
{ name: "审核通过", bianma: "2" },
{ name: "审核驳回", bianma: "3" },
];
function List(props) {
const [currentId, setCurrentId] = useState("");
const [refusalReason, setCurrentRefusalReason] = useState("");
const [viewRejectReasonModalVisible, setViewRejectReasonModalVisible] = useState(false);
const [form] = Form.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyRecordsList"], {
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaPersonnelApplyList"], {
form,
params: () => {
let personBelongType = 1;
if (props.entrance === "enterprise")
personBelongType = 2;
if (props.entrance === "stakeholder")
personBelongType = 3;
return { processOrRecord: 2, personBelongType };
},
});
return (
<Page isShowAllAction={false}>
<Search
options={[
{ name: "todo1", label: "人员姓名" },
{ name: "name", label: "人员姓名" },
]}
form={form}
onFinish={getData}
/>
<Table
columns={[
{ title: "所属企业", dataIndex: "todo0" },
{ 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) => <TooltipPreviewImg files={record.todo7} /> },
{ title: "所属项目", dataIndex: "todo9", hidden: !(props.entrance === "stakeholder") },
{ title: "申请状态", dataIndex: "todo8" },
{ title: "所属企业", dataIndex: "applyPersonCorpName" },
{ title: "姓名", dataIndex: "applyPersonUserName" },
{ title: "部门", dataIndex: "applyPersonDepartmentName" },
{ title: "手机号", dataIndex: "userPhone" },
{ title: "申请区域", dataIndex: "closedAreaName" },
{
title: "申请时间范围",
dataIndex: "visitStartTime",
render: (_, record) => `${record.visitStartTime} - ${record.visitEndTime}`,
},
{
title: "个人照片",
dataIndex: "userFaceUrl",
render: (_, record) => <TooltipPreviewImg files={[record.userFaceUrl]} />,
},
{ title: "所属项目", dataIndex: "projectName", hidden: !(props.entrance === "stakeholder") },
{
title: "申请状态",
dataIndex: "auditFlag",
render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.auditFlag }),
},
{
title: "操作",
width: 150,
@ -51,15 +77,17 @@ function List(props) {
>
查看
</Button>
<Button
type="link"
onClick={() => {
setViewRejectReasonModalVisible(true);
setCurrentId(record.id);
}}
>
驳回原因
</Button>
{record.auditFlag === 3 && (
<Button
type="link"
onClick={() => {
setViewRejectReasonModalVisible(true);
setCurrentRefusalReason(record.refusalReason);
}}
>
驳回原因
</Button>
)}
</Space>
),
},
@ -69,10 +97,10 @@ function List(props) {
{
viewRejectReasonModalVisible && (
<ViewRejectReasonModal
id={currentId}
refusalReason={refusalReason}
onCancel={() => {
setViewRejectReasonModalVisible(false);
setCurrentId("");
setCurrentRefusalReason("");
}}
/>
)
@ -82,16 +110,6 @@ function List(props) {
}
const ViewRejectReasonModalComponent = (props) => {
const [info, setInfo] = useState({});
const getData = async () => {
const { data } = await props["enclosedAreaPersonnelApplyRecordsRejectReason"]({ id: props.id });
setInfo(data);
};
useEffect(() => {
getData();
}, []);
return (
<Modal
open
@ -102,14 +120,13 @@ const ViewRejectReasonModalComponent = (props) => {
footer={[
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
]}
loading={props.enclosedAreaPersonnelApply.enclosedAreaPersonnelApplyLoading}
>
<Descriptions
column={1}
bordered
styles={{ label: { width: 200 } }}
items={[
{ label: "驳回原因", children: info.todo1 },
{ label: "驳回原因", children: props.refusalReason },
]}
/>
</Modal>

View File

@ -1,6 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Tabs } from "antd";
import { useRef, useState } from "react";
import { Button, message, Modal, Tabs } from "antd";
import dayjs from "dayjs";
import { useEffect, 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";
@ -11,12 +12,19 @@ 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 { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useGetFile from "zy-react-library/hooks/useGetFile";
import useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
import useTable from "zy-react-library/hooks/useTable";
import useUploadFile from "zy-react-library/hooks/useUploadFile";
import { LICENSE_PLATE_NUMBER } from "zy-react-library/regular";
import NeedToKnowModal from "~/components/NeedToKnowModal";
import {
NS_APPROVER_USER,
NS_ENCLOSED_AREA,
NS_ENCLOSED_AREA_PERSONNEL_APPLY,
NS_ENCLOSED_AREA_VEHICLE_APPLY,
NS_VEHICLE_APPLY,
} from "~/enumerate/namespace";
function Add(props) {
@ -24,27 +32,85 @@ function Add(props) {
const [vehicleList, setVehicleList] = useState([]);
const [selectVehicleModalVisible, setSelectVehicleModalVisible] = useState(false);
const [needToKnowModalVisible, setNeedToKnowModalVisible] = useState(false);
const [approvalUserListAll, setApprovalUserListAll] = useState([]);
const [xgfProjectListAll, setXgfProjectListAll] = useState([]);
const [xgfProjectUser, setXgfProjectUser] = useState([]);
const signatureUrl = useRef("");
const [form] = Form.useForm();
const todo6 = Form.useWatch("todo6", form);
const [form] = FormBuilder.useForm();
const isSelectVehicle = FormBuilder.useWatch("isSelectVehicle", form);
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
const { getUserInfo } = useGetUserInfo();
const getEnclosedAreaList = async (id) => {
const { data } = await props["enclosedAreaDetailListTree"]({ id });
const getApprovalUserListAll = async () => {
const { data } = await props["approvalUserListAll"]({ vehiclePermissionFlag: 1 });
setApprovalUserListAll(data);
};
const getEnclosedAreaList = async (jurisdictionalCorpId) => {
const { data } = await props["enclosedAreaDetailListTree"]({ jurisdictionalCorpId });
setEnclosedAreaList(data);
};
const getXgfProjectListAll = async () => {
const { data } = await props["xgfProjectListAll"]();
setXgfProjectListAll(data);
};
const getXgfProjectUserGetPeopleProject = async (id) => {
const { data } = await props["xgfProjectUserGetPeopleProject"]({ id });
setXgfProjectUser(data);
};
useEffect(() => {
getApprovalUserListAll();
props.entrance === "stakeholder" && getXgfProjectListAll();
}, []);
const onSubmit = async (values) => {
if (values.todo6 === 1 && vehicleList.length === 0) {
if (values.isSelectVehicle === 1 && vehicleList.length === 0) {
message.warning("请选择车辆");
return;
}
if (!values.todo14) {
if (!values.informSignFile) {
message.warning("请勾选《安全进港须知》并签字");
return;
}
const { success } = await props["enclosedAreaVehicleApplySave"]({ ...values });
let carBelongType = 1;
if (props.entrance === "enterprise")
carBelongType = 2;
if (props.entrance === "stakeholder")
carBelongType = 3;
const { id: informSignId } = await uploadFile({
files: [{ originFileObj: values.informSignFile }],
single: false,
params: { foreignKey: "", type: UPLOAD_FILE_TYPE_ENUM[609] },
});
const { id: drivingLicenseId } = await uploadFile({
files: values.drivingLicenseFile,
single: false,
params: { foreignKey: "", type: UPLOAD_FILE_TYPE_ENUM[601] },
});
const { id: attachmentId } = await uploadFile({
files: values.attachmentFile,
single: false,
params: { foreignKey: "", type: UPLOAD_FILE_TYPE_ENUM[602] },
});
const { success } = await props["enclosedAreaVehicleApplySave"]({
...values,
visitStartTime: values.visitTime[0],
visitEndTime: values.visitTime[1],
carBelongType,
informSignId,
licenceType: values.isSelectVehicle === 1 ? vehicleList[0].licenceType : values.licenceType,
licenceTypeName: values.isSelectVehicle === 1 ? vehicleList[0].licenceTypeName : values.licenceTypeName,
vehicleType: values.isSelectVehicle === 1 ? vehicleList[0].vehicleType : values.vehicleType,
vehicleTypeName: values.isSelectVehicle === 1 ? vehicleList[0].vehicleTypeName : values.vehicleTypeName,
licenceNo: values.isSelectVehicle === 1 ? vehicleList[0].licenceNo : values.licenceNo,
drivingLicenseId: values.isSelectVehicle === 1 ? vehicleList[0].drivingLicenseId : drivingLicenseId,
attachmentId: values.isSelectVehicle === 1 ? vehicleList[0].attachmentId : attachmentId,
});
if (success) {
message.success("操作成功");
props.history.goBack();
@ -56,26 +122,61 @@ function Add(props) {
<FormBuilder
submitButtonText="提交申请"
onFinish={onSubmit}
loading={props.enclosedAreaVehicleApply.enclosedAreaVehicleApplyLoading || uploadFileLoading}
options={[
{
name: "todo0",
name: "projectId",
label: "项目",
tip: "如果无法找到相应的项目,请在“项目审核管理”栏目中查看,项目是否备案审核成功。",
span: 24,
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: [],
items: xgfProjectListAll,
itemsField: { labelKey: "projectName", valueKey: "id" },
hidden: !(props.entrance === "stakeholder"),
componentProps: {
onChange: (value) => {
const item = xgfProjectListAll.find(i => i.id === value) || {};
form.setFieldValue("projectName", item.projectName);
if (value) {
getXgfProjectUserGetPeopleProject(value);
form.setFieldValue("visitTime", [dayjs(item.startProjectTime).format("YYYY-MM-DD"), dayjs(item.endProjectTime).format("YYYY-MM-DD")]);
}
else {
setXgfProjectUser([]);
form.setFieldValue("visitTime", []);
}
},
},
},
{ name: "projectName", label: "项目名称", onlyForLabel: true },
{
name: "todo00",
name: "isApplyCompanyArea",
label: "是否申请本公司区域",
span: 24,
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: [{ bianma: 1, name: "是" }, { bianma: 2, name: "否" }],
hidden: !(props.entrance === "enterprise"),
componentProps: {
onChange: async (event) => {
if (event.target.value === 1) {
const userInfo = await getUserInfo();
form.setFieldValue("jurisdictionalCorpId", userInfo.corpinfoId);
form.setFieldValue("jurisdictionalCorpName", userInfo.corpinfoName);
form.setFieldValue("closedAreaId", "");
form.setFieldValue("closedAreaName", "");
getEnclosedAreaList(userInfo.corpinfoId);
}
else {
form.setFieldValue("jurisdictionalCorpId", "");
form.setFieldValue("jurisdictionalCorpName", "");
form.setFieldValue("closedAreaId", "");
form.setFieldValue("closedAreaName", "");
}
},
},
},
{
name: "todo1",
name: "jurisdictionalCorpId",
label: "区域管辖单位",
render: (
<DepartmentSelectTree
@ -83,37 +184,67 @@ function Add(props) {
params={{ enterpriseType: [2] }}
onChange={(value) => {
getEnclosedAreaList(value);
form.setFieldValue("closedAreaName", "");
}}
onGetLabel={label => form.setFieldValue("jurisdictionalCorpName", label)}
/>
),
dependencies: ["todo00"],
dependencies: ["isApplyCompanyArea"],
hidden: (formValues) => {
if (props.entrance !== "enterprise")
return false;
return !(formValues.todo00 === 2 || formValues.todo00 === null);
return !(formValues.isApplyCompanyArea === 2 || formValues.isApplyCompanyArea === null);
},
formItemProps: { preserve: true },
},
{ name: "jurisdictionalCorpName", label: "区域管辖单位名称", onlyForLabel: true },
{
name: "closedAreaId",
label: "封闭区域",
render: (
<BasicSelectTree
treeData={enclosedAreaList}
placeholder="封闭区域"
onGetLabel={label => form.setFieldValue("closedAreaName", label)}
nameKey="closedAreaName"
/>
),
},
{ name: "closedAreaName", label: "封闭区域名称", onlyForLabel: true },
{
name: "auditPersonUserId",
label: "审核人员",
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: approvalUserListAll,
itemsField: { labelKey: item => `${item.userName}${item.corpName}${item.deptName}`, valueKey: "userId" },
componentProps: {
onChange: (value) => {
const item = approvalUserListAll.find(item => item.userId === value);
form.setFieldValue("auditPersonUserName", item.userName);
form.setFieldValue("auditPersonCorpId", item.corpId);
form.setFieldValue("auditPersonCorpName", item.corpName);
form.setFieldValue("auditPersonDepartmentId", item.deptId);
form.setFieldValue("auditPersonDepartmentName", item.deptName);
},
},
},
{ name: "auditPersonUserName", label: "审核人员名称", onlyForLabel: true },
{ name: "auditPersonCorpId", label: "审核企业ID", onlyForLabel: true },
{ name: "auditPersonCorpName", label: "审核企业名称", onlyForLabel: true },
{ name: "auditPersonDepartmentId", label: "审核部门ID", onlyForLabel: true },
{ name: "auditPersonDepartmentName", label: "审核部门名称", onlyForLabel: true },
{
name: "todo2",
label: "封闭区域",
render: (<BasicSelectTree treeData={enclosedAreaList} placeholder="封闭区域" />),
},
{ name: "todo4", label: "审核人员", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] },
{
name: "todo5",
name: "visitTime",
label: "申请时间范围",
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
componentProps: { disabled: props.entrance === "stakeholder" },
},
{
name: "todo6",
name: "isSelectVehicle",
label: "车辆类型",
span: 24,
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: [
{ bianma: 1, name: "选择现有车辆" },
{ bianma: 2, name: "新增车辆" },
],
items: [{ bianma: 1, name: "选择现有车辆" }, { bianma: 2, name: "新增车辆" }],
componentProps: {
onChange: () => {
setVehicleList([]);
@ -121,7 +252,7 @@ function Add(props) {
},
hidden: props.entrance === "stakeholder",
},
...(todo6 === 1
...(isSelectVehicle === 1
? [
{
label: "选择现有车辆",
@ -144,13 +275,13 @@ function Add(props) {
disabledResizer={true}
pagination={false}
columns={[
{ title: "车牌类型", dataIndex: "todo1" },
{ title: "车辆类型", dataIndex: "todo2" },
{ title: "车牌号", dataIndex: "todo3" },
{ title: "车牌类型", dataIndex: "licenceTypeName" },
{ title: "车辆类型", dataIndex: "vehicleTypeName" },
{ title: "车牌号", dataIndex: "licenceNo" },
{
title: "车辆照片",
dataIndex: "todo4",
render: (_, record) => <TooltipPreviewImg files={record.todo4} />,
dataIndex: "files",
render: (_, record) => <TooltipPreviewImg files={record.files} />,
},
{
title: "操作",
@ -175,21 +306,62 @@ function Add(props) {
: []),
...(props.entrance === "stakeholder"
? [
{ name: "todo92", label: "驾驶人员", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [] },
{ name: "todo92", label: "驾驶人员", render: FORM_ITEM_RENDER_ENUM.SELECT, items: xgfProjectUser, itemsField: { labelKey: "userName", valueKey: "userId" } },
]
: []),
...(todo6 === 2 || props.entrance === "stakeholder"
...(isSelectVehicle === 2 || props.entrance === "stakeholder"
? [
{ name: "todo7", label: "车牌类型", render: (<DictionarySelect dictValue="LICENSE_PLATE_TYPE" />) },
{ name: "todo8", label: "车辆类型", render: (<DictionarySelect dictValue="VEHICLE_TYPE" />) },
{ name: "todo9", label: "车牌号", rules: [{ pattern: LICENSE_PLATE_NUMBER, message: "请输入正确的车牌号" }] },
{ name: "todo10", label: "车辆照片", span: 24, render: (<Upload />) },
{ name: "todo11", label: "行驶证照片", span: 24, render: (<Upload />) },
{
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: "licenceNo",
label: "车牌号",
rules: [
{ pattern: LICENSE_PLATE_NUMBER, message: "请输入正确的车牌号" },
{
validator: async (_, value) => {
if (value) {
const { data } = await props["vehicleApplyCheckLicenceNo"]({
licenceNo: value,
});
return data.available ? Promise.resolve() : Promise.reject(new Error("车牌号已存在"));
}
else {
Promise.resolve();
}
},
validateTrigger: "onBlur",
},
],
formItemProps: { validateTrigger: ["onChange", "onBlur"] },
},
{ name: "attachmentFile", label: "车辆照片", span: 24, render: (<Upload />) },
{ name: "drivingLicenseFile", label: "行驶证照片", span: 24, render: (<Upload />) },
]
: []),
{ name: "todo12", label: "申请原因", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{ name: "applyReason", label: "申请原因", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{
name: "todo13",
name: "securityProtocol",
label: " ",
span: 24,
required: false,
@ -220,7 +392,7 @@ function Add(props) {
),
}],
},
{ name: "todo14", label: "签字", onlyForLabel: true },
{ name: "informSignFile", label: "签字", onlyForLabel: true },
]}
form={form}
/>
@ -228,6 +400,7 @@ function Add(props) {
selectVehicleModalVisible && (
<SelectVehicleModal
vehicleList={vehicleList}
entrance={props.entrance}
onClose={() => {
setSelectVehicleModalVisible(false);
}}
@ -246,7 +419,7 @@ function Add(props) {
setNeedToKnowModalVisible(false);
}}
onOk={(values) => {
form.setFieldValue("todo14", values);
form.setFieldValue("informSignFile", values.file);
signatureUrl.current = values.base64;
setNeedToKnowModalVisible(false);
}}
@ -260,14 +433,36 @@ function Add(props) {
const SelectVehicleModalComponent = (props) => {
const [tabActiveKey, setTabActiveKey] = useState("1");
const [selectedRowKeys, setSelectedRowKeys] = useState(props.vehicleList.map(item => item.id));
const [list, setList] = useState([]);
const selectedRowsRef = useRef(props.vehicleList || []);
const [form] = Form.useForm();
const { loading: getFileLoading, getFile } = useGetFile();
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyVehicleList"], {
form,
useStorageQueryCriteria: false,
params: { tabActiveKey },
params: () => {
let vehicleBelongType;
if (!props.entrance) {
if (tabActiveKey === "1")
vehicleBelongType = 1;
else if (tabActiveKey === "2")
vehicleBelongType = 2;
}
else if (props.entrance === "enterprise") {
if (tabActiveKey === "1")
vehicleBelongType = 3;
else if (tabActiveKey === "2")
vehicleBelongType = 4;
}
return { vehicleBelongType };
},
onSuccess: async (data) => {
const list = await getFile({ single: false, dataSource: data.list, eqType: UPLOAD_FILE_TYPE_ENUM[602], foreignKey: "attachmentId" });
setList(list);
},
});
return (
@ -283,7 +478,7 @@ const SelectVehicleModalComponent = (props) => {
>
<Search
options={[
{ name: "todo1", label: "车牌号" },
{ name: "licenceNo", label: "车牌号" },
]}
form={form}
onFinish={getData}
@ -311,23 +506,18 @@ const SelectVehicleModalComponent = (props) => {
options={false}
disabledResizer={true}
columns={[
{ title: "车牌类型", dataIndex: "todo1" },
{ title: "车辆类型", dataIndex: "todo2" },
{ title: "车牌号", dataIndex: "todo3" },
{ title: "车牌类型", dataIndex: "licenceTypeName" },
{ title: "车辆类型", dataIndex: "vehicleTypeName" },
{ title: "车牌号", dataIndex: "licenceNo" },
{
title: "车辆照片",
dataIndex: "todo4",
render: (_, record) => <TooltipPreviewImg files={record.todo4} />,
dataIndex: "files",
render: (_, record) => <TooltipPreviewImg files={record.files} />,
},
]}
{...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" },
]}
loading={tableProps.loading || getFileLoading}
dataSource={list}
/>
</Modal>
);
@ -335,4 +525,4 @@ const SelectVehicleModalComponent = (props) => {
const SelectVehicleModal = Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY], true)(SelectVehicleModalComponent);
export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY, NS_ENCLOSED_AREA], true)(Add);
export default Connect([NS_ENCLOSED_AREA_VEHICLE_APPLY, NS_ENCLOSED_AREA, NS_APPROVER_USER, NS_VEHICLE_APPLY, NS_ENCLOSED_AREA_PERSONNEL_APPLY], true)(Add);

View File

@ -1,24 +1,50 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form } from "antd";
import { Button } from "antd";
import { useState } from "react";
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 { 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 { getLabelName } from "zy-react-library/utils";
import { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace";
const STATUS_ENUM = [
{ name: "审核中", bianma: "1" },
{ name: "审核通过", bianma: "2" },
{ name: "审核驳回", bianma: "3" },
];
function List(props) {
const [form] = Form.useForm();
const [list, setList] = useState([]);
const { loading: getFileLoading, getFile } = useGetFile();
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyList"], {
form,
params: () => {
let carBelongType = 1;
if (props.entrance === "enterprise")
carBelongType = 2;
if (props.entrance === "stakeholder")
carBelongType = 3;
return { processOrRecord: 1, carBelongType };
},
onSuccess: async (data) => {
const list = await getFile({ single: false, dataSource: data.list, eqType: UPLOAD_FILE_TYPE_ENUM[602], foreignKey: "attachmentId" });
setList(list);
},
});
return (
<Page isShowAllAction={false}>
<Search
options={[
{ name: "todo1", label: "车牌号" },
{ name: "licenceLo", label: "车牌号" },
]}
form={form}
onFinish={getData}
@ -36,17 +62,25 @@ function List(props) {
</Button>
)}
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) => <TooltipPreviewImg files={record.todo9} /> },
{ title: "所属项目", dataIndex: "todo9", hidden: !(props.entrance === "stakeholder") },
{ title: "申请状态", dataIndex: "todo10" },
{ title: "车辆类型", dataIndex: "vehicleTypeName" },
{ title: "驾驶人", dataIndex: "applyPersonUserName" },
{ title: "部门", dataIndex: "applyPersonDepartmentName" },
{ title: "手机号", dataIndex: "userPhone" },
{ title: "申请区域", dataIndex: "closedAreaName" },
{
title: "申请时间范围",
dataIndex: "visitStartTime",
render: (_, record) => `${record.visitStartTime} - ${record.visitEndTime}`,
},
{ title: "申请原因", dataIndex: "applyReason" },
{ title: "车牌号", dataIndex: "licenceLo" },
{ title: "车辆照片", dataIndex: "files", render: (_, record) => <TooltipPreviewImg files={record.files} /> },
{ title: "所属项目", dataIndex: "projectName", hidden: !(props.entrance === "stakeholder") },
{
title: "申请状态",
dataIndex: "auditFlag",
render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.auditFlag }),
},
{
title: "操作",
width: 80,
@ -64,6 +98,8 @@ function List(props) {
},
]}
{...tableProps}
loading={tableProps.loading || getFileLoading}
dataSource={list}
/>
</Page>
);

View File

@ -3,6 +3,8 @@ 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 { 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 { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace";
@ -10,10 +12,19 @@ function View(props) {
const [info, setInfo] = useState({});
const query = useGetUrlQuery();
const { loading: getFileLoading, getFile } = useGetFile();
const getData = async () => {
const { data } = await props["enclosedAreaVehicleApplyInfo"]({ id: query.id });
setInfo(data);
const informSignFile = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM[609], eqForeignKey: data.informSignId });
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 });
setInfo({
...data,
informSignFile,
drivingLicenseFile,
attachmentFile,
});
props.onGetData?.(data);
};
@ -23,7 +34,7 @@ function View(props) {
return (
<Page headerTitle={props.headerTitle || "查看"} contentPadding="0 20px 20px 20px" isShowFooter={props.isShowFooter}>
<Spin spinning={props.enclosedAreaVehicleApply.enclosedAreaVehicleApplyLoading}>
<Spin spinning={props.enclosedAreaVehicleApply.enclosedAreaVehicleApplyLoading || getFileLoading}>
<Divider orientation="left">车辆信息</Divider>
<Descriptions
bordered
@ -34,29 +45,29 @@ function View(props) {
props.entrance === "stakeholder"
? [
{ label: "相关方名称", children: info.todo1 },
{ label: "所属项目", children: info.todo1 },
{ label: "所属项目", children: info.projectName },
]
: []
),
...(
props.entrance === "enterprise" || props.entrance === "supervision" || !props.entrance
? [
{ label: "所属企业", children: info.todo1 },
{ label: "所属企业", children: info.applyPersonCorpName },
]
: []
),
{ label: "姓名", children: info.todo2 },
{ label: "部门", children: info.todo3 },
{ label: "手机号", children: info.todo4 },
{ label: "申请区域", children: info.todo5 },
{ label: "申请时间范围", children: `${info.todo6} - ${info.todo7}` },
{ label: "车牌号", children: info.todo8 },
{ label: "车牌类型", children: info.todo9 },
{ label: "车辆类型", children: info.todo10 },
{ label: "车辆照片", children: (<PreviewImg files={info.todo11} />) },
{ label: "行驶证照片", children: (<PreviewImg files={info.todo12} />) },
{ label: "申请原因", children: info.todo13 },
{ label: "申请人员签字", children: (<PreviewImg files={info.todo14} />) },
{ label: "姓名", children: info.applyPersonUserName },
{ label: "部门", children: info.applyPersonDepartmentName },
{ label: "手机号", children: info.userPhone },
{ label: "申请区域", children: info.closedAreaName },
{ label: "申请时间范围", children: `${info.visitStartTime} - ${info.visitEndTime}` },
{ label: "车牌号", children: info.licenceNo },
{ label: "车牌类型", children: info.licenceTypeName },
{ label: "车辆类型", children: info.vehicleTypeName },
{ label: "车辆照片", children: (<PreviewImg files={info.attachmentFile} />) },
{ label: "行驶证照片", children: (<PreviewImg files={info.drivingLicenseFile} />) },
{ label: "申请原因", children: info.applyReason },
{ label: "申请人员签字", children: (<PreviewImg files={info.informSignFile} />) },
]}
/>
{props.children}

View File

@ -1,44 +1,75 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Form, Modal, Space } from "antd";
import { useEffect, useState } from "react";
import { Button, Descriptions, Modal, Space } from "antd";
import { 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 { 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 { getLabelName } from "zy-react-library/utils";
import { NS_ENCLOSED_AREA_VEHICLE_APPLY } from "~/enumerate/namespace";
const STATUS_ENUM = [
{ name: "审核中", bianma: "1" },
{ name: "审核通过", bianma: "2" },
{ name: "审核驳回", bianma: "3" },
];
function List(props) {
const [currentId, setCurrentId] = useState("");
const [list, setList] = useState([]);
const [refusalReason, setCurrentRefusalReason] = useState("");
const [viewRejectReasonModalVisible, setViewRejectReasonModalVisible] = useState(false);
const [form] = Form.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyRecordsList"], {
const { loading: getFileLoading, getFile } = useGetFile();
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["enclosedAreaVehicleApplyList"], {
form,
params: () => {
let carBelongType = 1;
if (props.entrance === "enterprise")
carBelongType = 2;
if (props.entrance === "stakeholder")
carBelongType = 3;
return { processOrRecord: 2, carBelongType };
},
onSuccess: async (data) => {
const list = await getFile({ single: false, dataSource: data.list, eqType: UPLOAD_FILE_TYPE_ENUM[602], foreignKey: "attachmentId" });
setList(list);
},
});
return (
<Page isShowAllAction={false}>
<Search
options={[
{ name: "todo1", label: "车牌号" },
{ name: "licenceLo", label: "车牌号" },
]}
form={form}
onFinish={getData}
/>
<Table
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) => <TooltipPreviewImg files={record.todo9} /> },
{ title: "所属项目", dataIndex: "todo9", hidden: !(props.entrance === "stakeholder") },
{ title: "申请状态", dataIndex: "todo10" },
{ title: "车辆类型", dataIndex: "vehicleTypeName" },
{ title: "驾驶人", dataIndex: "applyPersonUserName" },
{ title: "部门", dataIndex: "applyPersonDepartmentName" },
{ title: "手机号", dataIndex: "userPhone" },
{ title: "申请区域", dataIndex: "closedAreaName" },
{
title: "申请时间范围",
dataIndex: "visitStartTime",
render: (_, record) => `${record.visitStartTime} - ${record.visitEndTime}`,
},
{ title: "申请原因", dataIndex: "applyReason" },
{ title: "车牌号", dataIndex: "licenceLo" },
{ title: "车辆照片", dataIndex: "files", render: (_, record) => <TooltipPreviewImg files={record.files} /> },
{ title: "所属项目", dataIndex: "projectName", hidden: !(props.entrance === "stakeholder") },
{
title: "申请状态",
dataIndex: "auditFlag",
render: (_, record) => getLabelName({ list: STATUS_ENUM, status: record.auditFlag }),
},
{
title: "操作",
width: 80,
@ -57,7 +88,7 @@ function List(props) {
type="link"
onClick={() => {
setViewRejectReasonModalVisible(true);
setCurrentId(record.id);
setCurrentRefusalReason(record.refusalReason);
}}
>
驳回原因
@ -67,14 +98,16 @@ function List(props) {
},
]}
{...tableProps}
dataSource={list}
loading={tableProps.loading || getFileLoading}
/>
{
viewRejectReasonModalVisible && (
<ViewRejectReasonModal
id={currentId}
refusalReason={refusalReason}
onCancel={() => {
setViewRejectReasonModalVisible(false);
setCurrentId("");
setCurrentRefusalReason("");
}}
/>
)
@ -84,16 +117,6 @@ function List(props) {
}
const ViewRejectReasonModalComponent = (props) => {
const [info, setInfo] = useState({});
const getData = async () => {
const { data } = await props["enclosedAreaVehicleApplyRecordsRejectReason"]({ id: props.id });
setInfo(data);
};
useEffect(() => {
getData();
}, []);
return (
<Modal
open
@ -104,14 +127,13 @@ const ViewRejectReasonModalComponent = (props) => {
footer={[
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
]}
loading={props.enclosedAreaVehicleApply.enclosedAreaVehicleApplyLoading}
>
<Descriptions
column={1}
bordered
styles={{ label: { width: 200 } }}
items={[
{ label: "驳回原因", children: info.todo1 },
{ label: "驳回原因", children: props.refusalReason },
]}
/>
</Modal>

View File

@ -1,5 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Form, message, Modal, Space } from "antd";
import { Button, Descriptions, 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";
@ -17,31 +17,31 @@ import { getLabelName } from "zy-react-library/utils";
import { AREA_STATUS_ENUM } from "~/enumerate/constant";
import { NS_ENCLOSED_AREA, NS_FIRST_LEVEL_DOOR_INFO } from "~/enumerate/namespace";
const areaLevel = 2;
const mkmjLevel = 2;
function List(props) {
const [addModalVisible, setAddModalVisible] = useState(false);
const [viewModalVisible, setViewModalVisible] = useState(false);
const [currentId, setCurrentId] = useState(null);
const [currentId, setCurrentId] = useState("");
const [form] = Form.useForm();
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["firstLevelDoorInfoList"], {
form,
params: {
eqAreaLevel: areaLevel,
mkmjLevel,
},
});
const onUpdateStatus = (record) => {
if (record.status === 1 && (record.videoNum > 0 || record.passageNum > 0))
if (record.mkmjStatus === 2 && (record.videoNum > 0 || record.passageNum > 0))
return message.warning("正在使用中的口门不能停用");
const msg = record.status === 1 ? "停用" : "开启";
const msg = record.mkmjStatus === 2 ? "停用" : "开启";
Modal.confirm({
title: `${msg}确认`,
content: `确定要${msg}吗?`,
onOk: async () => {
const { success } = await props["firstLevelDoorInfoDelete"]({ id: record.id, status: record.status === 1 ? 0 : 1 });
const { success } = await props["firstLevelDoorInfoEditStatus"]({ id: record.id, mkmjStatus: record.mkmjStatus === 2 ? 1 : 2 });
if (success) {
message.success(`${msg}成功`);
getData();
@ -54,10 +54,10 @@ function List(props) {
<Page isShowAllAction={false}>
<Search
options={[
{ name: "likeAreaName", label: "口门名称" },
{ name: "eqAreaStatus", label: "口门状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: AREA_STATUS_ENUM },
{ name: "eqAreaType", label: "口门类型", render: (<DictionarySelect dictValue="HGKM_MKMJ_TYPE" />) },
{ name: "eqAreaParentId", label: "所属区域", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> },
{ name: "likeMkmjName", label: "口门名称" },
{ name: "mkmjStatus", label: "口门状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: AREA_STATUS_ENUM },
{ name: "mkmjType", label: "口门类型", render: (<DictionarySelect dictValue="HGKM_MKMJ_TYPE" />) },
{ name: "hgAuthArea", label: "所属区域", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> },
]}
form={form}
onFinish={getData}
@ -79,20 +79,20 @@ function List(props) {
</Space>
)}
columns={[
{ title: "所属区域", dataIndex: "areaParentName" },
{ title: "口门类型", dataIndex: "areaType" },
{ title: "管辖公司", dataIndex: "todo3" },
{ title: "口门名称", dataIndex: "areaName" },
{ title: "所属区域", dataIndex: "hgAuthAreaName" },
{ title: "口门类型", dataIndex: "mkmjTypeName" },
{ title: "管辖公司", dataIndex: "jurisdictionalCorpName" },
{ title: "口门名称", dataIndex: "mkmjName" },
{
title: "口门位置",
dataIndex: "location",
render: (_, record) => `${record.latitude || ""}--${record.longitude || ""}`,
},
{ title: "摄像头个数", dataIndex: "videoNum", render: (_, record) => record.videoNum || 0 },
{ title: "摄像头个数", dataIndex: "videoCount", render: (_, record) => record.videoNum || 0 },
{
title: "口门状态",
dataIndex: "areaStatus",
render: (_, record) => getLabelName({ list: AREA_STATUS_ENUM, status: record.areaStatus }),
dataIndex: "mkmjStatus",
render: (_, record) => getLabelName({ list: AREA_STATUS_ENUM, status: record.mkmjStatus }),
},
{
title: "操作",
@ -127,13 +127,13 @@ function List(props) {
onUpdateStatus(record);
}}
>
{record.status === 1 ? "停用" : "开启"}
{record.mkmjStatus === 2 ? "停用" : "开启"}
</Button>
)}
<Button
type="link"
onClick={() => {
props.history.push(`./channel/list?areaId=${record.id}`);
props.history.push(`./channel/list?id=${record.id}`);
}}
>
{props.entrance !== "enterprise" ? "添加通道" : "查看通道"}
@ -141,7 +141,7 @@ function List(props) {
<Button
type="link"
onClick={() => {
props.history.push(`./camera/list?areaId=${record.id}`);
props.history.push(`./camera/list?id=${record.id}`);
}}
>
{props.entrance !== "enterprise" ? "添加摄像头" : "查看摄像头"}
@ -158,7 +158,7 @@ function List(props) {
id={currentId}
onClose={() => {
setAddModalVisible(false);
setCurrentId(null);
setCurrentId("");
}}
getData={getData}
/>
@ -170,7 +170,7 @@ function List(props) {
id={currentId}
onClose={() => {
setViewModalVisible(false);
setCurrentId(null);
setCurrentId("");
}}
/>
)
@ -180,33 +180,38 @@ function List(props) {
}
const AddModalComponent = (props) => {
const [enclosedAreaList, setEnclosedAreaList] = useState([]);
const [enclosedAreaListTree, setEnclosedAreaListTree] = useState([]);
const [form] = Form.useForm();
const [form] = FormBuilder.useForm();
const hgAuthArea = FormBuilder.useWatch("hgAuthArea", form);
const getEnclosedAreaList = async () => {
const { data } = await props["enclosedAreaDetailListTree"]();
setEnclosedAreaList(data);
const { data } = await props["enclosedAreaDetailListTree"]({ hgAuthArea });
setEnclosedAreaListTree(data);
};
const getData = async () => {
const { data } = await props["firstLevelDoorInfoInfo"]({ id: props.id });
form.setFieldsValue({
...data,
areaType: data.areaType.toString(),
areaStatus: data.areaStatus.toString(),
mkmjStatus: data.mkmjStatus.toString(),
});
};
useEffect(() => {
getEnclosedAreaList();
props.id && getData();
}, []);
useEffect(() => {
if (hgAuthArea)
getEnclosedAreaList();
else setEnclosedAreaListTree([]);
}, [hgAuthArea]);
const onSubmit = async (values) => {
const { success } = await props[!props.id ? "firstLevelDoorInfoAdd" : "firstLevelDoorInfoEdit"]({
...values,
areaLevel,
mkmjLevel,
id: props.id,
});
if (success) {
@ -233,30 +238,90 @@ const AddModalComponent = (props) => {
labelCol={{ span: 8 }}
span={24}
options={[
{ name: "areaParentId", label: "所属区域", render: <DictionarySelect dictValue="HG_AUTH_AREA" /> },
{ name: "areaParentName", label: "所属区域名称", onlyForLabel: true },
{ name: "areaName", label: "口门名称" },
{ name: "areaType", label: "口门类型", render: <DictionarySelect dictValue="HGKM_MKMJ_TYPE" /> },
{ name: "areaRange", label: "口门位置" },
{ customizeRender: true, span: 24, render: <Map type="cesium" /> },
{ name: "areaStatus", label: "口门状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: AREA_STATUS_ENUM },
{ name: "todo6", label: "口门进入区域", render: (<BasicSelectTree treeData={enclosedAreaList} placeholder="口门进入区域" />) },
{
name: "todo7",
name: "hgAuthArea",
label: "所属区域",
render: (
<DictionarySelect
dictValue="HG_AUTH_AREA"
onGetLabel={label => form.setFieldValue("hgAuthAreaName", label)}
/>
),
},
{ name: "hgAuthAreaName", label: "所属区域名称", onlyForLabel: true },
{
name: "mkmjName",
label: "口门名称",
rules: [{
validator: async (_, value) => {
if (value) {
const { data } = await props["firstLevelDoorInfoCheckName"]({ mkmjName: value, id: props.id });
return data.available ? Promise.resolve() : Promise.reject(new Error("口门名称已存在"));
}
else {
Promise.resolve();
}
},
validateTrigger: "onBlur",
}],
formItemProps: { validateTrigger: ["onChange", "onBlur"] },
},
{
name: "mkmjType",
label: "口门类型",
render: (
<DictionarySelect
dictValue="HGKM_MKMJ_TYPE"
onGetLabel={label => form.setFieldValue("mkmjTypeName", label)}
/>
),
},
{ name: "mkmjTypeName", label: "口门类型名称", onlyForLabel: true },
{ name: "remarks", label: "口门位置" },
{ customizeRender: true, span: 24, render: <Map type="cesium" /> },
{ name: "mkmjStatus", label: "口门状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: AREA_STATUS_ENUM },
{
name: "inDirectionArea",
label: "口门进入区域",
render: (
<BasicSelectTree
treeData={enclosedAreaListTree}
placeholder="口门进入区域"
onGetLabel={label => form.setFieldValue("inDirectionAreaName", label)}
nameKey="closedAreaName"
/>
),
},
{ name: "inDirectionAreaName", label: "口门进入区域名称", onlyForLabel: true },
{
name: "outDirectionType",
label: "口门离开区域",
span: 12,
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: [{ bianma: 1, name: "离场" }, { bianma: 2, name: "进入其他区域" }],
componentProps: {
onChange: () => {
form.setFieldValue("outDirectionAreaName", "");
},
},
},
{
name: "todo8",
name: "outDirectionArea",
label: "",
span: 12,
wrapperCol: { span: 24 },
dependencies: ["todo7"],
hidden: formValues => !(formValues.todo7 === 2),
render: (<BasicSelectTree treeData={enclosedAreaList} placeholder="口门进入区域" />),
dependencies: ["outDirectionType"],
hidden: formValues => !(formValues.outDirectionType === 2),
render: (
<BasicSelectTree
treeData={enclosedAreaListTree}
placeholder="口门离开区域"
onGetLabel={label => form.setFieldValue("outDirectionAreaName", label)}
nameKey="closedAreaName"
/>
),
},
{ name: "outDirectionAreaName", label: "口门离开区域名称", onlyForLabel: true },
]}
form={form}
/>
@ -294,17 +359,22 @@ const ViewModalComponent = (props) => {
bordered
styles={{ label: { width: 200 } }}
items={[
{ label: "所属区域", children: info.areaParentName },
{ label: "口门名称", children: info.areaName },
{ label: "口门类型", children: info.areaType },
{ label: "口门位置", children: info.areaRange },
{ label: "口门状态", children: getLabelName({ list: AREA_STATUS_ENUM, status: info.areaStatus }) },
{ label: "所属区域", children: info.hgAuthAreaName },
{ label: "口门名称", children: info.mkmjName },
{ label: "口门类型", children: info.mkmjTypeName },
{ label: "口门位置", children: info.remarks },
{ label: "口门状态", children: getLabelName({ list: AREA_STATUS_ENUM, status: info.mkmjStatus }) },
{
label: "位置",
children: (<LocationIcon onClick={() => { setMapVisible(true); }} />),
children: (
<LocationIcon onClick={() => {
setMapVisible(true);
}}
/>
),
},
{ label: "口门进入区域", children: info.todo6 },
{ label: "口门离开区域", children: info.todo7 === 1 ? "离场" : `进入其他区域(${info.todo8}` },
{ label: "口门进入区域", children: info.inDirectionAreaName },
{ label: "口门离开区域", children: info.outDirectionType === 1 ? "离场" : `进入其他区域(${info.outDirectionAreaName}` },
]}
/>

View File

@ -1,6 +1,6 @@
import useUrlState from "@ahooksjs/use-url-state";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd";
import { Button, Space } from "antd";
import { useEffect } from "react";
import BackIcon from "zy-react-library/components/Icon/BackIcon";
import Page from "zy-react-library/components/Page";
@ -23,7 +23,7 @@ function List(props) {
},
});
const [form] = Form.useForm();
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["enclosedPersonnelAndVehicleStatisticsList"], {
form,

View File

@ -1,5 +1,4 @@
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";
@ -11,7 +10,7 @@ import { NS_ENCLOSED_PERSONNEL_AND_VEHICLE_STATISTICS } from "~/enumerate/namesp
import { CATEGORY_ENUM } from "../VehicleEntryAndExitRecords";
function PersonnelEntryAndExitRecords(props) {
const [form] = Form.useForm();
const [form] = Search.useForm();
const query = useGetUrlQuery();
const { tableProps, getData } = useTable(props["enclosedPersonnelAndVehicleStatisticsPersonnelEntryAndExitRecordsList"], {

View File

@ -1,5 +1,4 @@
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";
@ -17,7 +16,7 @@ export const CATEGORY_ENUM = [
];
function VehicleEntryAndExitRecords(props) {
const [form] = Form.useForm();
const [form] = Search.useForm();
const query = useGetUrlQuery();
const { tableProps, getData } = useTable(props["enclosedPersonnelAndVehicleStatisticsVehicleEntryAndExitRecordsList"], {