项目管理相关页面
parent
2f099ff407
commit
2c0355049d
|
|
@ -10,6 +10,7 @@ module.exports = {
|
|||
javaGitBranch: "<branch-name>",
|
||||
// 接口服务地址
|
||||
API_HOST: "http://192.168.20.100:30140",
|
||||
// API_HOST: "http://192.168.10.41:81",
|
||||
},
|
||||
production: {
|
||||
// 应用后端分支名称,部署上线需要
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
"lodash-es": "^4.17.21",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"zy-react-library": "^1.0.156"
|
||||
"zy-react-library": "^1.0.171"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^5.4.1",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,85 @@
|
|||
import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
|
||||
|
||||
export const corpInfoList = declareRequest(
|
||||
`Post > @/basicInfo/corpInfo/list`,
|
||||
);
|
||||
export const qualificationStatistics = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Get > /xgfManager/qualificationsApply/statistics`,
|
||||
);
|
||||
|
||||
export const qualificationsList = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/qualifications/listAll`,
|
||||
);
|
||||
|
||||
export const inCheckList = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/project/inCheckList`,
|
||||
);
|
||||
export const userList = declareRequest(
|
||||
`Post > @/basicInfo/user/list`,
|
||||
);
|
||||
export const projectAdd = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/project/save`,
|
||||
);
|
||||
export const projectUpdate = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Put > @/xgfManager/project/edit`,
|
||||
);
|
||||
export const userQualificationInfo = declareRequest(
|
||||
`Post > @/basicInfo/userQualificationInfo/list`,
|
||||
);
|
||||
export const projectDetail = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Get > /xgfManager/project/{id}`,
|
||||
);
|
||||
export const projectApprovalFlow = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Get > /xgfManager/projectApprovalFlow/getRejectCause/`,
|
||||
);
|
||||
export const deptListByType = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/qualifications/deptListByType`,
|
||||
);
|
||||
export const userListByDeptId = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Get > /xgfManager/qualifications/userListByDeptId/{id}`,
|
||||
);
|
||||
export const qualificationsDetails = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/qualifications/qualificationsDetails/`,
|
||||
);
|
||||
export const projectAudit = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/project/audit`,
|
||||
);
|
||||
export const projectListAll = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Get > /xgfManager/project/listAll`,
|
||||
);
|
||||
export const corpInfoInfo = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/basicInfo/corpInfo/info/{id}`,
|
||||
);
|
||||
export const projectPage = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/project/projectPage`,
|
||||
);
|
||||
export const projectUserList = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/projectUser/list`,
|
||||
);
|
||||
export const projectUserDelete = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Delete > @/xgfManager/projectUser/{id}`,
|
||||
);
|
||||
export const projectUserAdd = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/projectUser/addProjectUser`,
|
||||
);
|
||||
export const projectUserChangeRecordList = declareRequest(
|
||||
"qualificationStatisticsLoading",
|
||||
`Post > @/xgfManager/projectUserChangeRecord/list`,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Modal } from "antd";
|
||||
import { useEffect, useMemo, useRef, useState } from "react";
|
||||
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 { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
const ViewProjectReviewUserModal = (props) => {
|
||||
const eqQualificationinfoType = props.data.eqQualificationinfoType;
|
||||
const [form] = Form.useForm();
|
||||
const { loading: getFileLoading, getFile } = useGetFile();
|
||||
const { tableProps } = useTable(props["userQualificationInfo"], {
|
||||
form,
|
||||
params: {
|
||||
eqQualificationinfoType: props.data.eqQualificationinfoType,
|
||||
eqUserld: props.data.id,
|
||||
},
|
||||
});
|
||||
const [tableData, setTableData] = useState([]);
|
||||
const hasFetchedRef = useRef(false);
|
||||
useEffect(() => {
|
||||
// 只在第一次获取数据时执行,或者数据真正变化时
|
||||
if (tableProps.dataSource
|
||||
&& tableProps.dataSource.length > 0
|
||||
&& !getFileLoading
|
||||
&& !hasFetchedRef.current) {
|
||||
hasFetchedRef.current = true;
|
||||
|
||||
const fetchFiles = async () => {
|
||||
const dataWithFiles = await Promise.all(
|
||||
tableProps.dataSource.map(async (item) => {
|
||||
try {
|
||||
const files = await getFile({
|
||||
eqType: UPLOAD_FILE_TYPE_ENUM["6"],
|
||||
eqForeignKey: item.userId,
|
||||
});
|
||||
return { ...item, files: files || [] };
|
||||
}
|
||||
catch (error) {
|
||||
console.error("获取文件失败:", error);
|
||||
return { ...item, files: [] };
|
||||
}
|
||||
}),
|
||||
);
|
||||
|
||||
setTableData(dataWithFiles);
|
||||
};
|
||||
|
||||
fetchFiles();
|
||||
}
|
||||
}, [tableProps.dataSource, getFileLoading, getFile]);
|
||||
|
||||
// 使用 useMemo 避免重复计算
|
||||
const enhancedTableProps = useMemo(() => ({
|
||||
...tableProps,
|
||||
dataSource: tableData.length > 0 ? tableData : tableProps.dataSource || [],
|
||||
}), [tableProps, tableData]);
|
||||
|
||||
if (eqQualificationinfoType === 1) {
|
||||
return (
|
||||
<Modal
|
||||
title="特种作业人员证书"
|
||||
width={1200}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "姓名", dataIndex: "userName" },
|
||||
{ title: "证书名称", dataIndex: "qualificationName" },
|
||||
{ title: "证书作业类别", dataIndex: "qualificationinfoCategoryName" },
|
||||
{ title: "操作项目", dataIndex: "operatingProjectName" },
|
||||
{ title: "证书编号", dataIndex: "certificateNo" },
|
||||
{ title: "图片", dataIndex: "files", render: (_, record) => (<TooltipPreviewImg files={record.files} />) },
|
||||
|
||||
]}
|
||||
{...enhancedTableProps}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
else {
|
||||
return (
|
||||
<Modal
|
||||
title="安全人员证书列表"
|
||||
width={1200}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "姓名", dataIndex: "userName" },
|
||||
{ title: "证书名称", dataIndex: "qualificationName" },
|
||||
{ title: "证书作业类别", dataIndex: "qualificationinfoCategoryName" },
|
||||
{ title: "证书编号", dataIndex: "certificateNo" },
|
||||
{ title: "就职状态", dataIndex: "employmentFlagName" },
|
||||
{ title: "图片", dataIndex: "files", render: (_, record) => (<TooltipPreviewImg files={record.files} />) },
|
||||
|
||||
]}
|
||||
{...enhancedTableProps}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(ViewProjectReviewUserModal);
|
||||
|
|
@ -12,3 +12,13 @@ export {};
|
|||
// FIRST_PARTY_AUDITING(100, "集团单位审核"),
|
||||
// COMPANY_DEPARTMENT_AUDITING(200, "股份主管部门审核"),
|
||||
// COMPANY_SAFETY_AUDITING(300, "股份安监部门审核");
|
||||
export const PROJECT_STATUS_MAP = [
|
||||
{ name: "待提交", bianma: "0" },
|
||||
{ name: "待主管部门审核", bianma: "1" },
|
||||
{ name: "待执行属地公司审核", bianma: "2" },
|
||||
{ name: "待推荐属地公司审核", bianma: "3" },
|
||||
{ name: "运行中", bianma: "4" },
|
||||
{ name: "已完成", bianma: "5" },
|
||||
{ name: "已驳回", bianma: "6" },
|
||||
{ name: "待集团公司审核", bianma: "7" },
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "two-level",
|
||||
eqProjectStatus: 7,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "集团单位名称", dataIndex: "groupCompanyName" },
|
||||
{ title: "一级项目名称", dataIndex: "parentProjectName" },
|
||||
{ title: "二级项目名称", dataIndex: "projectName" },
|
||||
{ title: "项目负责人", dataIndex: "userName" },
|
||||
{ title: "立项时间", dataIndex: "initiationTime" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=7`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 7 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectApproval(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectApproval;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import AddView from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/Add";
|
||||
|
||||
function Add(props) {
|
||||
return (<AddView {...props} />);
|
||||
};
|
||||
|
||||
export default Add;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ListView from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/list";
|
||||
|
||||
function List(props) {
|
||||
return (<ListView {...props} />);
|
||||
};
|
||||
|
||||
export default List;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingApplication(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingApplication;
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["projectPage"], {
|
||||
form,
|
||||
params: {
|
||||
searchType: 2,
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
{ name: "eqSubcontractFlag", label: "是否存在分包", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [
|
||||
{ bianma: "1", name: "是" },
|
||||
{ bianma: "0", name: "否" },
|
||||
] },
|
||||
{
|
||||
name: "eqProjectStatus",
|
||||
label: "项目审核状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: PROJECT_STATUS_MAP,
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "是否为属地公司推荐", dataIndex: "isLocalCompany", render: (_, record) => record.isLocalCompany === 1 ? "是" : "否" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{ title: "主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "是否存在分包", dataIndex: "subcontractFlag", render: (_, record) => record.subcontractFlag === 1 ? "是" : "否" },
|
||||
{ title: "分包项目总数", dataIndex: "secondLevelTotal" },
|
||||
{
|
||||
title: "一级项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 350,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChange?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
项目人员变更
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChangeRecord?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
人员变更记录
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChange from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChange";
|
||||
|
||||
function UserChange(props) {
|
||||
return (<ViewUserChange {...props} />);
|
||||
};
|
||||
|
||||
export default UserChange;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChangeRecordPage from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChangeRecord";
|
||||
|
||||
function UserChangeRecord(props) {
|
||||
return (<ViewUserChangeRecordPage {...props} />);
|
||||
};
|
||||
|
||||
export default UserChangeRecord;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingInformation(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingInformation;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectReview(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectReview;
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "one-level",
|
||||
eqSubcontractFlag: 0,
|
||||
eqProjectStatus: 3,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=3`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 3 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "one-level",
|
||||
eqSubcontractFlag: 0,
|
||||
eqProjectStatus: 2,
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=2`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 2 ? "确认" : "查看"}
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "one-level",
|
||||
eqSubcontractFlag: 1,
|
||||
eqProjectStatus: 3,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=3`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 3 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "one-level",
|
||||
eqSubcontractFlag: 1,
|
||||
eqProjectStatus: 2,
|
||||
},
|
||||
});
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "二级项目数", dataIndex: "secondLevelTotal" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=2`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 2 ? "确认" : "查看"}
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectApproval(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectApproval;
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "two-level",
|
||||
eqProjectStatus: 3,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "一级相关方名称(集团单位)", dataIndex: "parentProjectCorpName" },
|
||||
{ title: "所属一级项目", dataIndex: "parentProjectName" },
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=3`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 3 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "two-level",
|
||||
eqProjectStatus: 2,
|
||||
},
|
||||
});
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "一级相关方名称(集团单位)", dataIndex: "parentProjectCorpName" },
|
||||
{ title: "所属一级项目", dataIndex: "parentProjectName" },
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=2`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 2 ? "确认" : "查看"}
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectApprovalTwo(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectApprovalTwo;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ListView from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/list";
|
||||
|
||||
function List(props) {
|
||||
return (<ListView searchType="4" {...props} />);
|
||||
};
|
||||
|
||||
export default List;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChange from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChange";
|
||||
|
||||
function UserChange(props) {
|
||||
return (<ViewUserChange {...props} />);
|
||||
};
|
||||
|
||||
export default UserChange;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChangeRecordPage from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChangeRecord";
|
||||
|
||||
function UserChangeRecord(props) {
|
||||
return (<ViewUserChangeRecordPage {...props} />);
|
||||
};
|
||||
|
||||
export default UserChangeRecord;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingInformation(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingInformation;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ListView from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/list";
|
||||
|
||||
function List(props) {
|
||||
return (<ListView searchType="3" {...props} />);
|
||||
};
|
||||
|
||||
export default List;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChange from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChange";
|
||||
|
||||
function UserChange(props) {
|
||||
return (<ViewUserChange {...props} />);
|
||||
};
|
||||
|
||||
export default UserChange;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChangeRecordPage from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChangeRecord";
|
||||
|
||||
function UserChangeRecord(props) {
|
||||
return (<ViewUserChangeRecordPage {...props} />);
|
||||
};
|
||||
|
||||
export default UserChangeRecord;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingInformation(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingInformation;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectReview(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectReview;
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,156 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevel: "one-level",
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
{ name: "eqSubcontractFlag", label: "是否存在分包", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [{ name: "是", bianma: "1" }, { name: "否", bianma: "0" }] },
|
||||
{
|
||||
name: "",
|
||||
label: "项目审核状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: PROJECT_STATUS_MAP,
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
toolBarRender={() => (
|
||||
<Space>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
props.history.push("./add");
|
||||
}}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
</Space>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "是否为属地公司推荐", dataIndex: "isLocalCompany", render: (_, record) => record.isLocalCompany === 1 ? "是" : "否" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{ title: "主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "是否存在分包", dataIndex: "subcontractFlag", render: (_, record) => record.subcontractFlag === 1 ? "是" : "否" },
|
||||
{
|
||||
title: "一级项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./add?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
编辑
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./add?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
编辑
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,454 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Divider, Form, Input, message, Modal, Space, Spin } from "antd";
|
||||
import { useEffect, useState } from "react";
|
||||
import FormBuilder from "zy-react-library/components/FormBuilder";
|
||||
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg";
|
||||
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 useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import ViewProjectReviewDetailsModal from "~/components/ViewProjectReviewDetailsModal";
|
||||
import ViewProjectReviewUserModal from "~/components/ViewProjectReviewUserModal";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
import "./index.less";
|
||||
|
||||
function Review(props) {
|
||||
const query = useGetUrlQuery();
|
||||
const [form] = Form.useForm();
|
||||
const [viewProjectReviewDetailsModalOpen, setViewProjectReviewDetailsModalOpen] = useState(false);
|
||||
const [viewProjectReviewDetailsModalData, setViewProjectReviewDetailsModalData] = useState({});
|
||||
const [info, setInfo] = useState({});
|
||||
const { getFile } = useGetFile();
|
||||
const [projectFileAddCmdList, setProjectFileAddCmdList] = useState([]);
|
||||
const [projectUserAddCmdList, setProjectUserAddCmdList] = useState([]);
|
||||
const [viewProjectReviewUserModalOpen, setViewProjectReviewUserModalOpen] = useState(false);
|
||||
const [viewProjectReviewUserModalData, setViewProjectReviewUserModalData] = useState({}); // 查看安全人员证书列表
|
||||
const [projectListAll, setProjectListAll] = useState([]);
|
||||
const typeList = [
|
||||
{ bianma: "0", name: "普通企业" },
|
||||
{ bianma: "1", name: "集团单位" },
|
||||
{ bianma: "2", name: "股份单位" },
|
||||
{ bianma: "3", name: "相关方企业" },
|
||||
{ bianma: "4", name: "货主单位" },
|
||||
{ bianma: "5", name: "驻港单位" },
|
||||
];
|
||||
const getData = async () => {
|
||||
const projectDetailResult = await props["projectDetail"]({ id: query.id });
|
||||
if (!projectDetailResult || !projectDetailResult.data) {
|
||||
return;
|
||||
}
|
||||
const projectData = projectDetailResult.data;
|
||||
if (projectData.agreementFileUuid) {
|
||||
const file = await getFile({
|
||||
eqType: UPLOAD_FILE_TYPE_ENUM["156"],
|
||||
eqForeignKey: projectData.agreementFileUuid,
|
||||
});
|
||||
projectData.files = file;
|
||||
}
|
||||
setProjectFileAddCmdList(projectData.projectFileAddCmdList || []);
|
||||
setProjectUserAddCmdList(projectData.projectUserAddCmdList || []);
|
||||
if (projectData.corpinfoId) {
|
||||
try {
|
||||
const corpInfoResult = await props["corpInfoInfo"]({
|
||||
id: projectData.corpinfoId,
|
||||
});
|
||||
const qiyefile = await getFile({
|
||||
eqType: UPLOAD_FILE_TYPE_ENUM["6"],
|
||||
eqForeignKey: projectData.corpinfoId,
|
||||
});
|
||||
corpInfoResult.data.qiyefile = qiyefile;
|
||||
projectData.corpInfo = corpInfoResult.data;
|
||||
}
|
||||
// eslint-disable-next-line no-unused-vars,unused-imports/no-unused-vars
|
||||
catch (error) {
|
||||
projectData.corpInfo = null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
projectData.corpInfo = null;
|
||||
}
|
||||
|
||||
setInfo(projectData);
|
||||
};
|
||||
const getProjectListAll = async () => {
|
||||
const { data } = await props["projectListAll"]({});
|
||||
setProjectListAll(data);
|
||||
};
|
||||
const auditSubmit = (result) => {
|
||||
if (result === 1) {
|
||||
if (query.projectStatusLast === "7") {
|
||||
Modal.confirm({
|
||||
title: "审核确认",
|
||||
icon: null,
|
||||
okText: "确认审核",
|
||||
cancelText: "取消",
|
||||
width: 1200,
|
||||
content: (
|
||||
<div>
|
||||
<FormBuilder
|
||||
form={form}
|
||||
showActionButtons={false}
|
||||
span={24}
|
||||
options={[
|
||||
{
|
||||
name: "id",
|
||||
label: "请选择对应的一级项目",
|
||||
labelCol: { span: 5 },
|
||||
items: projectListAll,
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
itemsField: { valueKey: "id", labelKey: "projectName" },
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
),
|
||||
onOk: async () => {
|
||||
try {
|
||||
const values = await form.validateFields();
|
||||
const { success } = await props["projectAudit"]({
|
||||
id: query.id,
|
||||
result,
|
||||
relatedProjectId: values.id,
|
||||
});
|
||||
if (success) {
|
||||
message.success("审核通过");
|
||||
getData();
|
||||
props.history.goBack();
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
// 表单验证失败,不关闭弹窗
|
||||
return Promise.reject(error);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
else {
|
||||
Modal.confirm({
|
||||
title: "审核确认",
|
||||
content: "确定要通过审核吗?",
|
||||
onOk: async () => {
|
||||
const { success } = await props["projectAudit"]({
|
||||
id: query.id,
|
||||
result,
|
||||
});
|
||||
if (success) {
|
||||
message.success("审核通过");
|
||||
getData();
|
||||
props.history.goBack();
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
Modal.confirm({
|
||||
title: "审核驳回",
|
||||
content: (
|
||||
<div>
|
||||
<div style={{ marginBottom: 8 }}>确定要驳回审核吗?</div>
|
||||
<Form
|
||||
form={form}
|
||||
layout="vertical"
|
||||
style={{ marginTop: 16 }}
|
||||
>
|
||||
<Form.Item
|
||||
name="rejectReason"
|
||||
label="驳回原因"
|
||||
rules={[{ required: true, message: "请输入驳回原因" }]}
|
||||
>
|
||||
<Input.TextArea
|
||||
placeholder="请输入驳回原因"
|
||||
rows={3}
|
||||
maxLength={200}
|
||||
showCount
|
||||
/>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</div>
|
||||
),
|
||||
icon: null,
|
||||
okText: "确认驳回",
|
||||
cancelText: "取消",
|
||||
width: 500,
|
||||
onOk: async () => {
|
||||
try {
|
||||
const values = await form.validateFields();
|
||||
const { success } = await props["projectAudit"]({
|
||||
id: query.id,
|
||||
result,
|
||||
rejectReason: values.rejectReason, // 添加拒绝原因
|
||||
});
|
||||
if (success) {
|
||||
message.success("审核驳回成功");
|
||||
getData();
|
||||
props.history.goBack();
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
// 表单验证失败,不关闭弹窗
|
||||
return Promise.reject(error);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
useEffect(() => {
|
||||
getData();
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
getProjectListAll();
|
||||
}, []);
|
||||
return (
|
||||
<div>
|
||||
<HeaderBack title="查看" />
|
||||
<div style={{ padding: "0 20px 20px 20px" }}>
|
||||
{info.relatedProjectId && (
|
||||
<div style={{ "font-size": "16px" }}>
|
||||
<Divider orientation="left">一级项目信息</Divider>
|
||||
<p>
|
||||
公司名称:
|
||||
{info.parentProjectCorpName}
|
||||
</p>
|
||||
<div style={{ display: "flex" }}>
|
||||
<p>
|
||||
项目名称:
|
||||
{info.parentProjectName}
|
||||
项目
|
||||
</p>
|
||||
<Button
|
||||
style={{ marginLeft: "20px" }}
|
||||
type="primary"
|
||||
onClick={() => {
|
||||
props.history.push(`../ProjectFilingApplication/reView?id=${info.relatedProjectId}`);
|
||||
}}
|
||||
>
|
||||
查看一级项目资料
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div>
|
||||
<Divider orientation="left">项目基础信息</Divider>
|
||||
<Spin spinning="">
|
||||
<Descriptions
|
||||
bordered
|
||||
column={4}
|
||||
items={[
|
||||
{ label: "项目名称", children: info.projectName },
|
||||
{ label: "项目负责人", children: info.userName },
|
||||
{ label: "立项时间", children: info.initiationTime },
|
||||
{ label: "计划开始时间", children: info.startProjectTime },
|
||||
{ label: "计划竣工时间", children: info.endProjectTime },
|
||||
{ label: "选取形式", children: info.chooseForm },
|
||||
{ label: "是否涉及四新工作内容", children: info.fourNewFlag === 1 ? "是" : "否" },
|
||||
{ label: "是否涉及三人及以上工作内容", children: info.threePeopleFlag === 1 ? "是" : "否" },
|
||||
{ label: "是否涉及夜间作业", children: info.nightWorkFlag === 1 ? "是" : "否" },
|
||||
{ label: "项目类别", children: info.qualificationsTypeName },
|
||||
{ label: "是否存在分包项目", children: info.subcontractFlag === 1 ? "是" : "否" },
|
||||
{ label: "是否为属地公司推荐", children: info.isLocalCompany === 1 ? "是" : "否" },
|
||||
{ label: "安全管理协议", children: <TooltipPreviewImg files={info.files} /> },
|
||||
]}
|
||||
/>
|
||||
</Spin>
|
||||
</div>
|
||||
<div>
|
||||
<Divider orientation="left">企业基础信息</Divider>
|
||||
<Spin spinning="">
|
||||
<Descriptions
|
||||
bordered
|
||||
column={4}
|
||||
items={[
|
||||
{ label: "公司名称", children: info.corpInfo?.corpName },
|
||||
{ label: "企业状态", children: info.corpInfo?.corpStateName },
|
||||
{ label: "开户人", children: info.corpInfo?.accountContactName },
|
||||
{ label: "社会统一信号代码", children: info.corpInfo?.code },
|
||||
{ label: "属地", children: info.corpInfo?.companyArea },
|
||||
{ label: "所属行业", children: [info.corpInfo?.corpType2Name, info.corpInfo?.corpType3Name, info.corpInfo?.corpType4Name, info.corpInfo?.corpTypeName].filter(Boolean).join("/") },
|
||||
{ label: "单位经营地址", children: info.corpInfo?.addressBusiness },
|
||||
{ label: "企业规模", children: info.corpInfo?.scaleName },
|
||||
{ label: "法定代表人姓名", children: info.corpInfo?.lrName },
|
||||
{ label: "打定代表人电话", children: info.corpInfo?.lrMobile },
|
||||
{ label: "主要负责人姓名", children: info.corpInfo?.contacts },
|
||||
{ label: "主要负责人电话", children: info.corpInfo?.contactsPhone },
|
||||
{ label: "成立日期", children: info.corpInfo?.createDate },
|
||||
{ label: "公司人数(人)", children: info.corpInfo?.employees },
|
||||
{ label: "资产总额(万元)", children: info.corpInfo?.totalAssets },
|
||||
{ label: "注册资金(万元)", children: info.corpInfo?.regcapital },
|
||||
{ label: "企业类型", children: getLabelName({ list: typeList, status: info.corpInfo?.type }) },
|
||||
{ label: "营业执照", children: <TooltipPreviewImg files={info.corpInfo?.files || []} /> },
|
||||
{ label: "营业执照有效期", children: `${info.corpInfo?.licenseStart}-${info.corpInfo?.licenseEnd}` },
|
||||
{ label: "", children: "" },
|
||||
]}
|
||||
/>
|
||||
</Spin>
|
||||
</div>
|
||||
<div>
|
||||
<Divider orientation="left">项目资料信息</Divider>
|
||||
<Table
|
||||
options={false}
|
||||
pagination={false}
|
||||
disabledResizer={true}
|
||||
dataSource={projectFileAddCmdList}
|
||||
columns={[
|
||||
{ title: "材料名称", dataIndex: "dataName" },
|
||||
{ title: "上传时间", dataIndex: "createTime" },
|
||||
{
|
||||
title: "时效性",
|
||||
dataIndex: "startValidityPeriod",
|
||||
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}至${record.endValidityPeriod}` : "-",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
render: (_, record) => (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewProjectReviewDetailsModalOpen(true);
|
||||
setViewProjectReviewDetailsModalData(record);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Divider orientation="left">项目人员</Divider>
|
||||
<Table
|
||||
options={false}
|
||||
disabledResizer={true}
|
||||
pagination={false}
|
||||
dataSource={projectUserAddCmdList}
|
||||
columns={[
|
||||
{ title: "姓名", dataIndex: "userName" },
|
||||
{ title: "部门", dataIndex: "deptName" },
|
||||
{
|
||||
title: "操作",
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewProjectReviewUserModalOpen(true);
|
||||
setViewProjectReviewUserModalData({
|
||||
...record,
|
||||
eqQualificationinfoType: 1,
|
||||
});
|
||||
}}
|
||||
>
|
||||
查看特种证书
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
|
||||
/>
|
||||
</div>
|
||||
{info.subcontractFlag === 1 && (
|
||||
<div>
|
||||
<Divider orientation="left">分包项目信息详情</Divider>
|
||||
<Spin spinning="">
|
||||
<Table
|
||||
options={false}
|
||||
pagination={false}
|
||||
disabledResizer={true}
|
||||
dataSource={info.subcontractProjectList || []}
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "审核状态", dataIndex: "projectStatus", render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }) },
|
||||
{
|
||||
title: "操作",
|
||||
render: (_, record) => (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`../ProjectFilingApplicationTwo/reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</Spin>
|
||||
</div>
|
||||
)}
|
||||
<div>
|
||||
<Divider orientation="left">{info.stakeholderLevel === "one-level" ? "一级项目审核信息" : "审核记录"}</Divider>
|
||||
<Spin spinning="">
|
||||
<Table
|
||||
options={false}
|
||||
pagination={false}
|
||||
disabledResizer={true}
|
||||
dataSource={info.approvalFlowCOList || []}
|
||||
columns={[
|
||||
{ title: "审核单位", dataIndex: "corpinfoName" },
|
||||
{ title: "部门", dataIndex: "departmentName" },
|
||||
{ title: "姓名", dataIndex: "userName" },
|
||||
{ title: "时间", dataIndex: "approvalTime" },
|
||||
{ title: "审核结果", dataIndex: "approvalStatus", render: (_, record) => getLabelName({ list: [{ name: "审核中", bianma: "1" }, { name: "已通过", bianma: "2" }, { name: "已驳回", bianma: "3" }], status: record.approvalStatus }) },
|
||||
]}
|
||||
/>
|
||||
</Spin>
|
||||
</div>
|
||||
{(query.projectStatusLast === "1" || query.projectStatusLast === "3" || query.projectStatusLast === "7")
|
||||
&& (
|
||||
<div className="btn_bottom">
|
||||
<Button
|
||||
onClick={() => auditSubmit(0)}
|
||||
>
|
||||
驳回
|
||||
</Button>
|
||||
<Button
|
||||
style={{ marginLeft: "20px" }}
|
||||
type="primary"
|
||||
onClick={() => auditSubmit(1)}
|
||||
>
|
||||
审核通过
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
{query.projectStatusLast === "2"
|
||||
&& (
|
||||
<div className="btn_bottom">
|
||||
<Button
|
||||
onClick={() => props.history.goBack()}
|
||||
>
|
||||
返回
|
||||
</Button>
|
||||
<Button
|
||||
style={{ marginLeft: "20px" }}
|
||||
type="primary"
|
||||
onClick={() => auditSubmit(1)}
|
||||
>
|
||||
确认信息
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
{viewProjectReviewUserModalOpen
|
||||
&& <ViewProjectReviewUserModal onCancel={() => setViewProjectReviewUserModalOpen(false)} data={viewProjectReviewUserModalData} />}
|
||||
{viewProjectReviewDetailsModalOpen
|
||||
&& (
|
||||
<ViewProjectReviewDetailsModal
|
||||
onCancel={() => setViewProjectReviewDetailsModalOpen(false)}
|
||||
data={viewProjectReviewDetailsModalData}
|
||||
/>
|
||||
)}
|
||||
{props.children}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(Review);
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
.qualification-view {
|
||||
.flows-container {
|
||||
width: 80%;
|
||||
margin: 10px auto 0;
|
||||
|
||||
.flows {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
|
||||
.flow {
|
||||
text-align: center;
|
||||
min-width: 120px;
|
||||
|
||||
.status {
|
||||
border-radius: 50%;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
padding: 10px;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
line-height: 60px;
|
||||
margin: 0 auto 10px;
|
||||
|
||||
&.blue {
|
||||
color: #1890ff;
|
||||
border-color: #1890ff;
|
||||
}
|
||||
|
||||
&.green {
|
||||
color: #52c41a;
|
||||
border-color: #52c41a;
|
||||
}
|
||||
|
||||
&.red {
|
||||
color: #ff4d4f;
|
||||
border-color: #ff4d4f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.line {
|
||||
flex: 1;
|
||||
height: 2px;
|
||||
background-color: #1890ff;
|
||||
align-self: center;
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
.btn_bottom{
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingApplication(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingApplication;
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["projectPage"], {
|
||||
form,
|
||||
params: {
|
||||
searchType: 5,
|
||||
eqStakeholderLevel: "one-level",
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
{ name: "eqSubcontractFlag", label: "是否存在分包", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [
|
||||
{ bianma: "1", name: "是" },
|
||||
{ bianma: "0", name: "否" },
|
||||
] },
|
||||
{
|
||||
name: "eqProjectStatus",
|
||||
label: "项目审核状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: PROJECT_STATUS_MAP,
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "是否为属地公司推荐", dataIndex: "isLocalCompany", render: (_, record) => record.isLocalCompany === 1 ? "是" : "否" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{ title: "主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "是否存在分包", dataIndex: "subcontractFlag", render: (_, record) => record.subcontractFlag ? "是" : "否" },
|
||||
{ title: "分包项目总数", dataIndex: "secondLevelTotal" },
|
||||
{
|
||||
title: "一级项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 350,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChange?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
项目人员变更
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChangeRecord?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
人员变更记录
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChange from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChange";
|
||||
|
||||
function UserChange(props) {
|
||||
return (<ViewUserChange {...props} />);
|
||||
};
|
||||
|
||||
export default UserChange;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChangeRecordPage from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChangeRecord";
|
||||
|
||||
function UserChangeRecord(props) {
|
||||
return (<ViewUserChangeRecordPage {...props} />);
|
||||
};
|
||||
|
||||
export default UserChangeRecord;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingInformation(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingInformation;
|
||||
|
|
@ -0,0 +1,932 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Divider, Form, message, Modal, Space, Spin } from "antd";
|
||||
import dayjs from "dayjs";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import FormBuilder from "zy-react-library/components/FormBuilder";
|
||||
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
import DepartmentLeftTree from "zy-react-library/components/LeftTree/Department/Gwj";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
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 Table from "zy-react-library/components/Table";
|
||||
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 useDeleteFile from "zy-react-library/hooks/useDeleteFile";
|
||||
import useGetFile from "zy-react-library/hooks/useGetFile";
|
||||
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import useUploadFile from "zy-react-library/hooks/useUploadFile";
|
||||
import { validatorEndTime } from "zy-react-library/utils";
|
||||
import ViewProjectReviewUserModal from "~/components/ViewProjectReviewUserModal";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function Add(props) {
|
||||
const query = useGetUrlQuery();
|
||||
const [form] = Form.useForm();
|
||||
const [currentStep, setCurrentStep] = useState(1);
|
||||
const [formValues, setFormValues] = useState({});
|
||||
const [projectFileAddCmdList, setProjectFileAddCmdList] = useState([]); // 项目资料
|
||||
const [usercontentAddCmdList, setUsercontentAddCmdList] = useState([]); // 项目审核人员
|
||||
const [projectLocalCompanyAddCmdList, setProjectLocalCompanyAddCmdList] = useState([]); // 项目执行属地公司
|
||||
const [projectApprovalUserAddCmdList, setProjectApprovalUserAddCmdList] = useState([]); // 项目审核人员
|
||||
const [projectApprovalFlowAddCmdList, setProjectApprovalFlowAddCmdList] = useState([]); // 项目审核流程
|
||||
const [corpinfoId, setCorpinfoId] = useState(); // 项目id
|
||||
const { getFile } = useGetFile();
|
||||
// 获取详情数据
|
||||
const getData = async () => {
|
||||
const { data } = await props["projectDetail"]({ id: query.id });
|
||||
if (data.agreementFileUuid) {
|
||||
const files = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["156"], eqForeignKey: data.agreementFileUuid });
|
||||
data.projectFiles = files;
|
||||
}
|
||||
setFormValues(data);
|
||||
form.setFieldsValue(data);
|
||||
let projectUserAddCmdList = [];
|
||||
if (data.projectUserAddCmdList && data.projectUserAddCmdList.length > 0) {
|
||||
const otherUsers = data.projectUserAddCmdList.map((item) => {
|
||||
return {
|
||||
...item,
|
||||
id: item.userId,
|
||||
name: item.userName,
|
||||
departmentId: item.deptId,
|
||||
departmentName: item.deptName,
|
||||
type: "normal", // 普通项目人员
|
||||
phone: item.userPhone || "",
|
||||
postName: item.userPostName || "",
|
||||
};
|
||||
});
|
||||
projectUserAddCmdList = [...projectUserAddCmdList, ...otherUsers];
|
||||
}
|
||||
setProjectFileAddCmdList(data.projectFileAddCmdList);
|
||||
setUsercontentAddCmdList(projectUserAddCmdList);
|
||||
setProjectLocalCompanyAddCmdList(data.projectLocalCompanyAddCmdList);
|
||||
setProjectApprovalUserAddCmdList(data.projectApprovalUserAddCmdList);
|
||||
setProjectApprovalFlowAddCmdList(data.projectApprovalFlowAddCmdList);
|
||||
setCorpinfoId(data.corpinfoId);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
query.id && getData();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HeaderBack title={query.id ? "编辑" : "新增"} />
|
||||
<div style={{ padding: 20 }}>
|
||||
{currentStep === 1
|
||||
&& (
|
||||
<StepOne
|
||||
setFormValues={setFormValues}
|
||||
setCurrentStep={setCurrentStep}
|
||||
formValues={formValues}
|
||||
form={form}
|
||||
usercontentAddCmdList={usercontentAddCmdList}
|
||||
setUsercontentAddCmdList={setUsercontentAddCmdList}
|
||||
/>
|
||||
)}
|
||||
{currentStep === 2
|
||||
&& (
|
||||
<StepTwo
|
||||
setCurrentStep={setCurrentStep}
|
||||
formValues={formValues}
|
||||
query={query}
|
||||
setUsercontentAddCmdList={setUsercontentAddCmdList}
|
||||
setProjectFileAddCmdList={setProjectFileAddCmdList}
|
||||
projectFileAddCmdList={projectFileAddCmdList}
|
||||
usercontentAddCmdList={usercontentAddCmdList}
|
||||
projectLocalCompanyAddCmdList={projectLocalCompanyAddCmdList}
|
||||
projectApprovalUserAddCmdList={projectApprovalUserAddCmdList}
|
||||
projectApprovalFlowAddCmdList={projectApprovalFlowAddCmdList}
|
||||
corpinfoId={corpinfoId}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const StepOneComponent = (props) => {
|
||||
const form = props.form;
|
||||
const approvalCorpId = Form.useWatch("approvalCorpId", form); // 项目审核部门公司
|
||||
const approvalDeptId = Form.useWatch("approvalDeptId", form); // 项目审核部门
|
||||
const [corpInfoList, setCorpInfoList] = useState([]); // 项目执行属地公司
|
||||
const startProjectTime = Form.useWatch("startProjectTime", form); // 项目开始时间
|
||||
// 获取项目执行属地公司数据
|
||||
const getCorpInfoList = async () => {
|
||||
const { data } = await props["corpInfoList"]({ pageIndex: 1, pageSize: 1000, inType: [0, 1, 2] });
|
||||
setCorpInfoList(data);
|
||||
};
|
||||
const handleProjectLeaderChange = (label, extraInfo) => {
|
||||
if (!extraInfo.userId)
|
||||
return;
|
||||
const existingLeaderIndex = props.usercontentAddCmdList.findIndex(
|
||||
item => item.projectLeader === 1,
|
||||
);
|
||||
const newUserList = [...props.usercontentAddCmdList];
|
||||
|
||||
// 如果已存在项目负责人,更新之
|
||||
if (existingLeaderIndex >= 0) {
|
||||
newUserList[existingLeaderIndex] = {
|
||||
...newUserList[existingLeaderIndex],
|
||||
id: extraInfo.userId,
|
||||
name: label,
|
||||
departmentId: extraInfo?.departmentId || "",
|
||||
departmentName: extraInfo?.departmentName || "",
|
||||
phone: extraInfo?.phone || "",
|
||||
postName: extraInfo?.postName || "",
|
||||
projectLeader: 1,
|
||||
};
|
||||
}
|
||||
else {
|
||||
// 如果不存在,添加新的项目负责人
|
||||
newUserList.unshift({
|
||||
id: extraInfo.userId,
|
||||
name: label,
|
||||
departmentId: extraInfo?.departmentId || "",
|
||||
departmentName: extraInfo?.departmentName || "",
|
||||
phone: extraInfo?.phone || "",
|
||||
postName: extraInfo?.postName || "",
|
||||
projectLeader: 1,
|
||||
});
|
||||
}
|
||||
|
||||
props.setUsercontentAddCmdList(newUserList);
|
||||
};
|
||||
useEffect(() => {
|
||||
getCorpInfoList();
|
||||
form.setFieldsValue(props.formValues);
|
||||
if (props.formValues.userId && props.formValues.userName) {
|
||||
const existingLeader = props.usercontentAddCmdList.find(
|
||||
item => item.projectLeader === 1,
|
||||
);
|
||||
|
||||
if (!existingLeader) {
|
||||
const newUserList = [
|
||||
{
|
||||
id: props.formValues.userId,
|
||||
name: props.formValues.userName,
|
||||
departmentId: props.formValues.deptId || "",
|
||||
departmentName: props.formValues.deptName || "",
|
||||
phone: props.formValues.userPhone || "",
|
||||
postName: props.formValues.userPostName || "",
|
||||
projectLeader: 1,
|
||||
},
|
||||
...props.usercontentAddCmdList.filter(item => item.projectLeader !== 1),
|
||||
];
|
||||
props.setUsercontentAddCmdList(newUserList);
|
||||
}
|
||||
}
|
||||
}, [props.formValues]);
|
||||
return (
|
||||
<FormBuilder
|
||||
form={form}
|
||||
span={8}
|
||||
loading={props.qualificationStatistics.qualificationStatisticsLoading}
|
||||
onFinish={(values) => {
|
||||
props.setCurrentStep(2);
|
||||
props.setFormValues(values);
|
||||
}}
|
||||
values={{ stakeholderLevel: "two-level", stakeholderLevelName: "二级相关方" }}
|
||||
submitButtonText="下一步"
|
||||
options={[
|
||||
{ label: "项目基础信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
|
||||
{ name: "projectName", label: "项目名称" },
|
||||
{ name: "userId", label: "项目负责人", render: (
|
||||
<PersonnelSelect
|
||||
isNeedDepartmentId={false}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("userName", label);
|
||||
}}
|
||||
onGetOption={(option) => {
|
||||
if (option) {
|
||||
const extraInfo = {
|
||||
name: option.name,
|
||||
phone: option.phone || "",
|
||||
postName: option.postName || "",
|
||||
departmentId: option.departmentId || "",
|
||||
departmentName: option.departmentName || "",
|
||||
userId: option.id,
|
||||
};
|
||||
handleProjectLeaderChange(option.name, extraInfo);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
), componentProps: {
|
||||
onChange: (userId) => {
|
||||
if (!userId) {
|
||||
// 如果清空了项目负责人,从项目人员列表中移除
|
||||
const newUserList = props.usercontentAddCmdList.filter(
|
||||
item => item.projectLeader !== 1,
|
||||
);
|
||||
props.setUsercontentAddCmdList(newUserList);
|
||||
}
|
||||
},
|
||||
} },
|
||||
{ name: "userName", label: "项目负责人", onlyForLabel: true },
|
||||
{ name: "initiationTime", label: "立项时间", render: FORM_ITEM_RENDER_ENUM.DATE },
|
||||
{ name: "startProjectTime", label: "计划开始时间", render: FORM_ITEM_RENDER_ENUM.DATE },
|
||||
{ name: "endProjectTime", label: "计划竣工时间", render: FORM_ITEM_RENDER_ENUM.DATE, rules: [validatorEndTime(startProjectTime)] },
|
||||
{ name: "chooseForm", label: "项目选取形式", render: <DictionarySelect dictValue="project_choose_form" onGetLabel={label => form.setFieldValue("chooseFormName", label)} /> },
|
||||
{ name: "chooseFormName", label: "项目选取形式名称", onlyForLabel: true },
|
||||
{ name: "fourNewFlag", label: "是否涉及四新工作内容", labelCol: { span: 8 }, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] },
|
||||
{ name: "threePeopleFlag", label: "是否涉及三人及以上工作内容", labelCol: { span: 8 }, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] },
|
||||
{ name: "nightWorkFlag", label: "是否涉及夜间作业", labelCol: { span: 8 }, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] },
|
||||
{ name: "specialFlag", label: "是否包含特殊作业", labelCol: { span: 8 }, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] },
|
||||
{ label: "项目审核信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
|
||||
{ name: "qualificationsTypeId", label: "项目类别", span: 24, wrapperCol: { span: 5 }, render: (
|
||||
<DictionarySelect
|
||||
dictValue="qualificationsType"
|
||||
onGetLabel={label => form.setFieldValue("qualificationsTypeName", label)}
|
||||
onChange={() => {
|
||||
|
||||
}}
|
||||
/>
|
||||
) },
|
||||
{ name: "qualificationsTypeName", label: "项目类别名称", onlyForLabel: true },
|
||||
{
|
||||
name: "approvalCorpId",
|
||||
label: "集团公司审核",
|
||||
labelCol: { span: 5 },
|
||||
items: corpInfoList,
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
itemsField: { valueKey: "id", labelKey: "corpName" },
|
||||
componentProps: {
|
||||
onChange: (event) => {
|
||||
const label = corpInfoList.find(item => item.id === event)?.corpName;
|
||||
form.setFieldValue("approvalCorpName", label);
|
||||
form.setFieldsValue({
|
||||
approvalDeptId: "",
|
||||
approvalDeptName: "",
|
||||
approvalUserIds: [],
|
||||
approvalUserNames: "",
|
||||
});
|
||||
},
|
||||
},
|
||||
},
|
||||
{ name: "approvalCorpName", label: "集团公司审核名称", onlyForLabel: true },
|
||||
{
|
||||
name: "approvalDeptId",
|
||||
labelCol: { span: 5 },
|
||||
label: "集团公司部门审核",
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
params={{ eqCorpinfoId: approvalCorpId }}
|
||||
isNeedCorpInfoId
|
||||
onGetLabel={label => form.setFieldValue("approvalDeptName", label)}
|
||||
onChange={() => {
|
||||
form.setFieldsValue({
|
||||
approvalUserIds: [],
|
||||
approvalUserNames: "",
|
||||
});
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "approvalDeptName", label: "集团公司部门审核名称", onlyForLabel: true },
|
||||
{
|
||||
name: "approvalUserIds",
|
||||
label: "集团公司人员审核",
|
||||
labelCol: { span: 5 },
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: approvalDeptId }}
|
||||
onGetLabel={label => form.setFieldValue("approvalUserNames", label)}
|
||||
mode="multiple"
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "approvalUserNames", label: "集团公司人员审核名称", onlyForLabel: true },
|
||||
{ name: "projectFiles", label: "安全管理协议", span: 24, render: (
|
||||
<Upload
|
||||
fileType="image"
|
||||
maxCount={5}
|
||||
accept=".pdf,.jpg,.jpeg,.png"
|
||||
size={40}
|
||||
onGetRemoveFile={(file) => {
|
||||
form.setFieldValue("deleteProjectFileAddCmdList", [...(form.getFieldValue("deleteProjectFileAddCmdList") || []), file]);
|
||||
}}
|
||||
/>
|
||||
) },
|
||||
{ name: "deleteProjectFileAddCmdList", label: "删除的安全管理协议", onlyForLabel: true },
|
||||
{ name: "agreementFileUuid", label: "安全协议uuid", onlyForLabel: true },
|
||||
{ name: "stakeholderLevel", onlyForLabel: true },
|
||||
{ name: "stakeholderLevelName", onlyForLabel: true },
|
||||
]}
|
||||
/>
|
||||
);
|
||||
};
|
||||
const StepTwoComponent = (props) => {
|
||||
const query = props.query;
|
||||
const projectFileList = props.projectFileAddCmdList || []; // 项目资料
|
||||
const usercontentList = props.usercontentAddCmdList || []; // 项目审核人员
|
||||
const setProjectFileList = props.setProjectFileAddCmdList || []; // 项目资料赋值
|
||||
const setUsercontentList = props.setUsercontentAddCmdList || []; // 项目审核人员赋值
|
||||
const projectLocalCompanyAddCmdList = props.projectLocalCompanyAddCmdList || []; // 项目所属属地公司
|
||||
const projectApprovalUserAddCmdList = props.projectApprovalUserAddCmdList || []; // 项目审核人员
|
||||
const projectApprovalFlowAddCmdList = props.projectApprovalFlowAddCmdList || []; // 项目审核流程
|
||||
const corpinfoId = props.corpinfoId; // 公司id
|
||||
|
||||
const [uploadFileModalOpen, setUploadFileModalOpen] = useState(false); // 上传文件弹窗显示
|
||||
const [usercontentOpen, setUsercontentOpen] = useState(false); // 选择项目审核人员弹窗显示
|
||||
const [uploadFileModalData, setUploadFileModalData] = useState({ // 上传文件弹窗数据
|
||||
index: -1,
|
||||
files: [],
|
||||
});
|
||||
const [fetchUserList, setFetchUserList] = useState({ // 选择项目审核人员弹窗数据
|
||||
index: -1,
|
||||
});
|
||||
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
|
||||
const { loading: deleteFileLoading, deleteFile } = useDeleteFile();
|
||||
const [viewProjectReviewUserModalOpen, setViewProjectReviewUserModalOpen] = useState(false); // 查看特种作业人员证书弹窗
|
||||
const [viewProjectReviewUserModalData, setViewProjectReviewUserModalData] = useState({}); // 查看安全人员证书列表
|
||||
const { loading: getFileLoading, getFile } = useGetFile();
|
||||
const [chooseFilsListModalOpen, setChooseFilsListModalOpen] = useState(false);
|
||||
const getData = async () => {
|
||||
for (let i = 0; i < projectFileList.length; i++) {
|
||||
const files = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["151"], eqForeignKey: projectFileList[i].projectFileId });
|
||||
projectFileList[i].files = files;
|
||||
}
|
||||
};
|
||||
useEffect(() => {
|
||||
getData();
|
||||
}, []);
|
||||
// 点击新增项目相关资料
|
||||
const onUploadFileOpen = () => {
|
||||
// 初始化项目相关资料弹窗数据
|
||||
setUploadFileModalData({
|
||||
type: "add",
|
||||
index: -1,
|
||||
files: [],
|
||||
deleteFiles: [],
|
||||
});
|
||||
setUploadFileModalOpen(true);
|
||||
};
|
||||
// 项目相关资料提交
|
||||
const onUploadFileConfirm = (values) => {
|
||||
const newItem = {
|
||||
dataName: values.dataName,
|
||||
files: values.files || [],
|
||||
deleteFiles: values.deleteFiles || [],
|
||||
startValidityPeriod: values.startValidityPeriod,
|
||||
endValidityPeriod: values.endValidityPeriod,
|
||||
createTime: dayjs().format("YYYY-MM-DD hh:mm:ss"),
|
||||
};
|
||||
if (values.type === "add") {
|
||||
setProjectFileList(prev => [...prev, newItem]);
|
||||
}
|
||||
else {
|
||||
setProjectFileList((prev) => {
|
||||
const newList = [...prev];
|
||||
if (values.index >= 0 && values.index < newList.length) {
|
||||
newList[values.index] = { ...newList[values.index], ...newItem };
|
||||
}
|
||||
return newList;
|
||||
});
|
||||
}
|
||||
setUploadFileModalOpen(false);
|
||||
};
|
||||
// 点击修改项目相关资料
|
||||
const handleEdit = (index) => {
|
||||
const item = projectFileList[index];
|
||||
setUploadFileModalData({
|
||||
type: "update",
|
||||
index,
|
||||
files: item.files || [],
|
||||
deleteFiles: item.deleteFiles || [],
|
||||
dataName: item.dataName,
|
||||
startValidityPeriod: item.startValidityPeriod,
|
||||
endValidityPeriod: item.endValidityPeriod,
|
||||
});
|
||||
setUploadFileModalOpen(true);
|
||||
};
|
||||
// 点击删除项目相关资料
|
||||
const handleDelete = (index) => {
|
||||
Modal.confirm({
|
||||
title: "确认删除",
|
||||
content: "确定要删除这条资料吗?",
|
||||
onOk: () => {
|
||||
setProjectFileList((prev) => {
|
||||
const newList = [...prev];
|
||||
newList.splice(index, 1);
|
||||
return newList;
|
||||
});
|
||||
message.success("删除成功");
|
||||
},
|
||||
});
|
||||
};
|
||||
// 点击新增项目人员
|
||||
const OnUsercontentOpen = () => {
|
||||
setUsercontentOpen(true);
|
||||
setFetchUserList(usercontentList);
|
||||
};
|
||||
// 项目人员确认提交
|
||||
const handleConfirmAdd = (selectedData) => {
|
||||
setUsercontentList(selectedData);
|
||||
setFetchUserList(selectedData);
|
||||
// 关闭弹窗
|
||||
setUsercontentOpen(false);
|
||||
};
|
||||
// 提交审核
|
||||
const onSubmit = async () => {
|
||||
if (props.formValues.length === 0) {
|
||||
message.error(`请新增项目相关资料`);
|
||||
return;
|
||||
}
|
||||
if (usercontentList.length === 0) {
|
||||
message.error(`请新增项目人员`);
|
||||
return;
|
||||
}
|
||||
|
||||
await deleteFile({ single: false, files: props.formValues.deleteProjectFileAddCmdList });
|
||||
const { id: agreementFileUuid } = await uploadFile({
|
||||
single: false,
|
||||
files: props.formValues.projectFiles,
|
||||
params: { type: UPLOAD_FILE_TYPE_ENUM["156"], foreignKey: props.formValues.agreementFileUuid },
|
||||
});
|
||||
props.formValues.agreementFileUuid = agreementFileUuid;
|
||||
|
||||
for (let i = 0; i < projectFileList.length; i++) {
|
||||
await deleteFile({ single: false, files: projectFileList[i].deleteFiles });
|
||||
const { id } = await uploadFile({
|
||||
single: false,
|
||||
files: projectFileList[i].files,
|
||||
params: { type: UPLOAD_FILE_TYPE_ENUM["151"], foreignKey: projectFileList[i].projectFileId },
|
||||
});
|
||||
projectFileList[i].projectFileId = id;
|
||||
}
|
||||
console.log("usercontentList", usercontentList);
|
||||
const userList = usercontentList.map(item => ({
|
||||
userId: item.id,
|
||||
userName: item.name,
|
||||
deptId: item.departmentId,
|
||||
deptName: item.departmentName,
|
||||
userPhone: item.phone,
|
||||
userPostName: item.postName,
|
||||
projectLeader: item.projectLeader,
|
||||
}));
|
||||
console.log("userList", userList);
|
||||
const data = { ...props.formValues, projectUserAddCmdList: [...userList], projectFileAddCmdList: [...projectFileList], projectLocalCompanyAddCmdList: [...projectLocalCompanyAddCmdList], projectApprovalUserAddCmdList: [...projectApprovalUserAddCmdList], projectApprovalFlowAddCmdList: [...projectApprovalFlowAddCmdList], corpinfoId };
|
||||
const { success } = await props[!query.id ? "projectAdd" : "projectUpdate"]({
|
||||
...data,
|
||||
id: query.id,
|
||||
});
|
||||
if (success) {
|
||||
message.success("提交成功,请等待审核");
|
||||
window.history.back();
|
||||
}
|
||||
};
|
||||
const handleChooseFilsSubmit = (selectedRows) => {
|
||||
const existingIds = projectFileList
|
||||
.filter(item => item.detailId)
|
||||
.map(item => item.detailId);
|
||||
const newRows = selectedRows.filter(row =>
|
||||
row.detailId && !existingIds.includes(row.detailId),
|
||||
);
|
||||
const formattedRows = newRows.map(row => ({
|
||||
...row,
|
||||
}));
|
||||
|
||||
// 合并到现有列表中
|
||||
setProjectFileList(prev => [...prev, ...formattedRows]);
|
||||
setChooseFilsListModalOpen(false);
|
||||
};
|
||||
return (
|
||||
<div>
|
||||
<Spin
|
||||
spinning={props.qualificationStatistics.qualificationStatisticsLoading || uploadFileLoading || deleteFileLoading || getFileLoading}
|
||||
>
|
||||
<div>
|
||||
<Divider orientation="left">项目相关资料</Divider>
|
||||
<Table
|
||||
toolBarRender={() => (
|
||||
<>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
setChooseFilsListModalOpen(true);
|
||||
}}
|
||||
>
|
||||
添加已审核资质资料
|
||||
</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
onUploadFileOpen();
|
||||
}}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
dataSource={projectFileList}
|
||||
pagination={false}
|
||||
options={false}
|
||||
disabledResizer={true}
|
||||
rowKey={record => record.id || record.dataName}
|
||||
columns={[
|
||||
{ title: "材料名称", key: "dataName", dataIndex: "dataName" },
|
||||
{ title: "上传时间", key: "createTime", dataIndex: "createTime", render: (_, record) => record.createTime || "-" },
|
||||
{
|
||||
title: "时效性",
|
||||
key: "validityPeriod",
|
||||
dataIndex: "startValidityPeriod",
|
||||
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}至${record.endValidityPeriod}` : "-",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
render: (_, record, index) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => handleEdit(index)}
|
||||
>
|
||||
修改
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => handleDelete(index)}
|
||||
>
|
||||
删除
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Divider orientation="left">项目人员</Divider>
|
||||
<Table
|
||||
toolBarRender={() => (
|
||||
<>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
OnUsercontentOpen();
|
||||
}}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
dataSource={usercontentList}
|
||||
pagination={false}
|
||||
options={false}
|
||||
disabledResizer={true}
|
||||
rowKey="id"
|
||||
columns={[
|
||||
{ title: "姓名", dataIndex: "name" },
|
||||
{ title: "部门", dataIndex: "departmentName" },
|
||||
{
|
||||
title: "操作",
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewProjectReviewUserModalOpen(true);
|
||||
setViewProjectReviewUserModalData({
|
||||
...record,
|
||||
eqQualificationinfoType: 1,
|
||||
});
|
||||
}}
|
||||
>
|
||||
特种作业人员证书
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewProjectReviewUserModalOpen(true);
|
||||
setViewProjectReviewUserModalData({
|
||||
...record,
|
||||
eqQualificationinfoType: 2,
|
||||
});
|
||||
}}
|
||||
>
|
||||
安全人员证书列表
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ textAlign: "center", marginTop: 20 }}>
|
||||
<Space>
|
||||
<Button onClick={() => {
|
||||
Modal.confirm({
|
||||
title: "提示",
|
||||
content: "填写的信息将被清除,确定要返回吗?",
|
||||
onOk: () => props.setCurrentStep(1),
|
||||
});
|
||||
}}
|
||||
>
|
||||
上一步
|
||||
</Button>
|
||||
<Button type="primary" onClick={onSubmit}>提交审核</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</Spin>
|
||||
{uploadFileModalOpen && (
|
||||
<FileUpload
|
||||
data={uploadFileModalData}
|
||||
onCancel={() => {
|
||||
setUploadFileModalOpen(false);
|
||||
}}
|
||||
onSubmit={(values) => {
|
||||
setUploadFileModalOpen(false);
|
||||
onUploadFileConfirm(values);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{usercontentOpen && (
|
||||
<Usercontent
|
||||
data={fetchUserList}
|
||||
onCancel={() => {
|
||||
setUsercontentOpen(false);
|
||||
}}
|
||||
onConfirm={handleConfirmAdd}
|
||||
/>
|
||||
)}
|
||||
{viewProjectReviewUserModalOpen
|
||||
&& <ViewProjectReviewUserModal onCancel={() => setViewProjectReviewUserModalOpen(false)} data={viewProjectReviewUserModalData} />}
|
||||
{chooseFilsListModalOpen && (
|
||||
<ChooseFilsList
|
||||
data={projectFileList}
|
||||
onSubmit={handleChooseFilsSubmit} // 使用新的处理函数
|
||||
onCancel={() => {
|
||||
setChooseFilsListModalOpen(false);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
const ChooseFilsComponent = (props) => {
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState([]); // 存储选中的行键
|
||||
const [selectedRows, setSelectedRows] = useState([]); // 存储选中行的完整数据
|
||||
const { tableProps } = useTable(props["qualificationsDetails"], {
|
||||
params: {
|
||||
qualificationsTypeId: "",
|
||||
},
|
||||
});
|
||||
const submit = () => {
|
||||
if (props.onSubmit) {
|
||||
props.onSubmit(selectedRows);
|
||||
}
|
||||
};
|
||||
useEffect(() => {
|
||||
if (props.data && Array.isArray(props.data)) {
|
||||
const keys = props.data
|
||||
.filter(item => item && item.detailId)
|
||||
.map(item => item.detailId);
|
||||
setSelectedRowKeys(keys);
|
||||
setSelectedRows(props.data);
|
||||
}
|
||||
}, [props.data]);
|
||||
const handleRowSelectionChange = (selectedRowKeys, selectedRows) => {
|
||||
setSelectedRowKeys(selectedRowKeys);
|
||||
setSelectedRows(selectedRows);
|
||||
};
|
||||
return (
|
||||
<Modal
|
||||
title="项目备案申请"
|
||||
width={1200}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
onOk={submit}
|
||||
>
|
||||
<Table
|
||||
rowSelection={{
|
||||
selectedRowKeys,
|
||||
preserveSelectedRowKeys: true,
|
||||
onChange: handleRowSelectionChange,
|
||||
}}
|
||||
rowKey="detailId"
|
||||
columns={[
|
||||
{ title: "材料名称", dataIndex: "dataName" },
|
||||
{ title: "上传时间", key: "createTime", dataIndex: "createTime", render: (_, record) => record.createTime || "-" },
|
||||
{
|
||||
title: "时效性",
|
||||
key: "validityPeriod",
|
||||
dataIndex: "startValidityPeriod",
|
||||
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}至${record.endValidityPeriod}` : "-",
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
// 选择项目人员的组件
|
||||
const UsercontentComponent = (props) => {
|
||||
const [form] = Form.useForm();
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState([]); // 存储选中的行键
|
||||
const [selectedRows, setSelectedRows] = useState([]); // 存储选中行的完整数据
|
||||
const [inDepartmentId, setInDepartmentId] = useState([]); // 存储已选择的部门id
|
||||
const { tableProps, getData } = useTable(props["userList"], {
|
||||
form,
|
||||
params: {
|
||||
likeName: "",
|
||||
likeUserIdCard: "",
|
||||
inDepartmentId,
|
||||
eqEmploymentFlag: 1, // 在职
|
||||
},
|
||||
});
|
||||
const projectLeader = useMemo(() => {
|
||||
if (props.data && Array.isArray(props.data)) {
|
||||
return props.data.find(item => item.projectLeader === 1);
|
||||
}
|
||||
return null;
|
||||
}, [props.data]);
|
||||
// 初始化选中的数据
|
||||
useEffect(() => {
|
||||
const initialSelectedRows = [...(props.data || [])];
|
||||
const initialSelectedKeys = initialSelectedRows
|
||||
.filter(item => item && item.id)
|
||||
.map(item => item.id);
|
||||
const processedRows = initialSelectedRows.map(item => ({
|
||||
...item,
|
||||
projectLeader: item.projectLeader || (projectLeader && item.id === projectLeader.id ? 1 : 0),
|
||||
}));
|
||||
setSelectedRowKeys(initialSelectedKeys);
|
||||
setSelectedRows(processedRows);
|
||||
}, [props.data, projectLeader]);
|
||||
const handleConfirmAdd = () => {
|
||||
if (props.onConfirm) {
|
||||
// 确保项目负责人始终在选中列表中
|
||||
const finalSelectedRows = [...selectedRows];
|
||||
if (projectLeader && !selectedRows.find(item => item.id === projectLeader.id)) {
|
||||
finalSelectedRows.unshift(projectLeader);
|
||||
}
|
||||
|
||||
// 为选中的用户数据添加 projectLeader 字段
|
||||
const processedRows = finalSelectedRows.map(item => ({
|
||||
...item,
|
||||
projectLeader: projectLeader && item.id === projectLeader.id ? 1 : 0,
|
||||
}));
|
||||
|
||||
props.onConfirm(processedRows);
|
||||
}
|
||||
};
|
||||
const handleRowSelectionChange = (selectedRowKeys, selectedRows) => {
|
||||
// 如果项目负责人已存在,确保不会被取消选择
|
||||
if (projectLeader) {
|
||||
const leaderKey = projectLeader.id;
|
||||
if (!selectedRowKeys.includes(leaderKey)) {
|
||||
selectedRowKeys.push(leaderKey);
|
||||
selectedRows.push({
|
||||
...projectLeader,
|
||||
projectLeader: 1,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
setSelectedRowKeys([...selectedRowKeys]);
|
||||
setSelectedRows([...selectedRows]);
|
||||
};
|
||||
return (
|
||||
<Modal
|
||||
title="相关方企业人员列表"
|
||||
width={1200}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={null}
|
||||
>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeName", label: "姓名" },
|
||||
{ name: "likeUserIdCard", label: "身份证" },
|
||||
]}
|
||||
form={form}
|
||||
onFinish={(values) => {
|
||||
getData(values);
|
||||
}}
|
||||
/>
|
||||
<div style={{ display: "flex", gap: 20 }}>
|
||||
<div style={{ width: 300 }}>
|
||||
<DepartmentLeftTree
|
||||
checkable
|
||||
onCheck={(checkedKeys) => {
|
||||
setInDepartmentId(checkedKeys);
|
||||
getData();
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ flex: 1 }}>
|
||||
<Table
|
||||
rowSelection={{
|
||||
selectedRowKeys,
|
||||
preserveSelectedRowKeys: true,
|
||||
onChange: handleRowSelectionChange,
|
||||
getCheckboxProps: record => ({
|
||||
// 如果是项目负责人,禁用取消选择
|
||||
disabled: projectLeader && record.id === projectLeader.id,
|
||||
}),
|
||||
}}
|
||||
rowKey="id"
|
||||
toolBarRender={() => (
|
||||
<>
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={handleConfirmAdd}
|
||||
>
|
||||
确认添加
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "手机号", dataIndex: "phone" },
|
||||
{ title: "姓名", dataIndex: "name" },
|
||||
{ title: "所属部门", dataIndex: "departmentName" },
|
||||
{ title: "所属岗位", dataIndex: "postName" },
|
||||
{ title: "是否存在人资系统", dataIndex: "rzFlag", render: (_, record) => record.rzFlag === 1 ? "是" : "否" },
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
// 项目资料信息的组件
|
||||
const FileUpload = (props) => {
|
||||
const [form] = Form.useForm();
|
||||
const startValidityPeriod = Form.useWatch("startValidityPeriod", form);
|
||||
useEffect(() => {
|
||||
form.setFieldsValue({
|
||||
type: props.data.type,
|
||||
index: props.data.index,
|
||||
dataName: props.data.dataName,
|
||||
files: props.data.files,
|
||||
startValidityPeriod: props.data.startValidityPeriod,
|
||||
endValidityPeriod: props.data.endValidityPeriod,
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title="项目相关资料"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
onOk={form.submit}
|
||||
>
|
||||
<FormBuilder
|
||||
form={form}
|
||||
showActionButtons={false}
|
||||
onFinish={values => props.onSubmit(values)}
|
||||
span={24}
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "dataName", label: "资料名称" },
|
||||
{
|
||||
name: "startValidityPeriod",
|
||||
label: "有效期开始时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
},
|
||||
{ name: "type", label: "新增或修改", onlyForLabel: true },
|
||||
{ name: "index", label: "索引", onlyForLabel: true },
|
||||
{
|
||||
name: "endValidityPeriod",
|
||||
label: "有效期结束时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
rules: [validatorEndTime(startValidityPeriod)],
|
||||
},
|
||||
{
|
||||
name: "files",
|
||||
label: "资料",
|
||||
render: (
|
||||
<Upload
|
||||
fileType="image"
|
||||
maxCount={10}
|
||||
accept=".pdf,.jpg,.jpeg,.png"
|
||||
onGetRemoveFile={(files) => {
|
||||
form.setFieldValue("deleteFiles", [...(form.getFieldValue("deleteFiles") || []), files]);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "deleteFiles", label: "删除的资料", onlyForLabel: true },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
const StepOne = Connect([NS_QUALIFICATION_STATISTICS], true)(StepOneComponent);
|
||||
const StepTwo = Connect([NS_QUALIFICATION_STATISTICS], true)(StepTwoComponent);
|
||||
const Usercontent = Connect([NS_QUALIFICATION_STATISTICS], true)(UsercontentComponent);
|
||||
const ChooseFilsList = Connect([NS_QUALIFICATION_STATISTICS], true)(ChooseFilsComponent);
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(Add);
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevel: "two-level",
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
{
|
||||
name: "",
|
||||
label: "项目审核状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: PROJECT_STATUS_MAP,
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
toolBarRender={() => (
|
||||
<Space>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
props.history.push("./add");
|
||||
}}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
</Space>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "集团单位名称", dataIndex: "corpinfoName" },
|
||||
{ title: "一级项目名称", dataIndex: "parentProjectName" },
|
||||
{ title: "二级项目名称", dataIndex: "projectName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{ title: "上级审核主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./add?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
编辑
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingApplication(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingApplication;
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["projectPage"], {
|
||||
form,
|
||||
params: {
|
||||
searchType: 5,
|
||||
eqStakeholderLevel: "two-level",
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "集团单位名称", dataIndex: "groupCompanyName" },
|
||||
{ title: "一级项目名称", dataIndex: "parentProjectName" },
|
||||
{ title: "二级项目名称", dataIndex: "projectName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{ title: "上级审核主管部门", dataIndex: "parentManageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{
|
||||
title: "项目审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 350,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChange?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
项目人员变更
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChangeRecord?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
人员变更记录
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChange from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChange";
|
||||
|
||||
function UserChange(props) {
|
||||
return (<ViewUserChange {...props} />);
|
||||
};
|
||||
|
||||
export default UserChange;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewUserChangeRecordPage from "~/pages/Container/Supervision/ProjectReview/ProjectFilingInformation/UserChangeRecord";
|
||||
|
||||
function UserChangeRecord(props) {
|
||||
return (<ViewUserChangeRecordPage {...props} />);
|
||||
};
|
||||
|
||||
export default UserChangeRecord;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingInformation(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingInformation;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectReview(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectReview;
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "one-level",
|
||||
eqSubcontractFlag: 0,
|
||||
eqProjectStatus: 1,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=1`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 1 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "one-level",
|
||||
eqSubcontractFlag: 1,
|
||||
eqProjectStatus: 1,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=1`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 1 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function Subcontract(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default Subcontract;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectApproval(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectApproval;
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["inCheckList"], {
|
||||
form,
|
||||
params: {
|
||||
eqStakeholderLevelL: "two-level",
|
||||
eqProjectStatus: 1,
|
||||
},
|
||||
});
|
||||
const [rejectReasonModalOpen, setRejectReasonModalOpen] = useState(false); // 驳回原因弹窗
|
||||
const [rejectReason, setRejectReason] = useState(false); // 驳回原因
|
||||
// 点击查看驳回原因
|
||||
const onViewRejectReason = async (id) => {
|
||||
const { data } = await props["projectApprovalFlow"]({ id });
|
||||
setRejectReason(data);
|
||||
setRejectReasonModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "集团单位名称", dataIndex: "groupCompanyName" },
|
||||
{ title: "一级项目名称", dataIndex: "parentProjectName" },
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 150,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}&projectStatusLast=1`);
|
||||
}}
|
||||
>
|
||||
{record.projectStatus === 1 ? "审核" : "查看"}
|
||||
</Button>
|
||||
{record.projectStatus === 6 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
onViewRejectReason(record.id);
|
||||
}}
|
||||
danger
|
||||
>
|
||||
查看驳回原因
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{rejectReasonModalOpen && <RejectReason rejectReason={rejectReason} onCancel={() => setRejectReasonModalOpen(false)} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const RejectReason = (props) => {
|
||||
return (
|
||||
<Modal
|
||||
title="查看驳回原因"
|
||||
width={800}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={[
|
||||
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||||
]}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
styles={{ label: { width: 200 } }}
|
||||
items={[
|
||||
{ label: "驳回原因", children: props.rejectReason },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectApprovalTwo(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectApprovalTwo;
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["projectPage"], {
|
||||
form,
|
||||
params: {
|
||||
searchType: props.searchType || 1,
|
||||
eqStakeholderLevel: props.eqStakeholderLevel || "",
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeProjectName", label: "项目名称" },
|
||||
{ name: "likeCorpInfoName", label: "相关方名称" },
|
||||
{
|
||||
name: "eqQualificationsTypeId",
|
||||
label: "项目类别",
|
||||
render: (<DictionarySelect dictValue="qualificationsType" />),
|
||||
},
|
||||
]}
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "相关方名称", dataIndex: "corpinfoName" },
|
||||
{ title: "项目名称", dataIndex: "projectName" },
|
||||
{ title: "股份主管部门", dataIndex: "manageDeptName" },
|
||||
{ title: "项目类别", dataIndex: "qualificationsTypeName" },
|
||||
{ title: "是否存在分包", dataIndex: "subcontractFlag", render: (_, record) => record.subcontractFlag ? "是" : "否" },
|
||||
{ title: "二级项目数", dataIndex: "secondLevelTotal" },
|
||||
{ title: "项目执行属地公司", dataIndex: "companyName" },
|
||||
{
|
||||
title: "项目备案审核状态",
|
||||
dataIndex: "projectStatus",
|
||||
render: (_, record) => getLabelName({ list: PROJECT_STATUS_MAP, status: record.projectStatus }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
width: 350,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./reView?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChange?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
项目人员变更
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./UserChangeRecord?id=${record.id}`);
|
||||
}}
|
||||
>
|
||||
人员变更记录
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(List);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import ViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplication/ReView";
|
||||
|
||||
function ReView(props) {
|
||||
return (<ViewPage {...props} />);
|
||||
};
|
||||
|
||||
export default ReView;
|
||||
|
|
@ -0,0 +1,343 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, message, Modal, Space } from "antd";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
import DepartmentLeftTree from "zy-react-library/components/LeftTree/Department/Gwj";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function UserChange(props) {
|
||||
const query = useGetUrlQuery();
|
||||
const { tableProps, getData } = useTable(props["projectUserList"], { params: { eqProjectId: query.id } });
|
||||
const { tableProps: allData } = useTable(props["projectUserList"], { params: { eqProjectId: query.id, pageIndex: 1, pageSize: 999999 } });
|
||||
const [usercontentOpen, setUsercontentOpen] = useState(false); // 选择项目审核人员弹窗显示
|
||||
const [fetchUserList, setFetchUserList] = useState([]); // 已存在的项目人员数据
|
||||
|
||||
const onDelete = (record) => {
|
||||
Modal.confirm({
|
||||
title: "删除确认",
|
||||
content: "确定要删除吗?",
|
||||
onOk: async () => {
|
||||
const { success } = await props["projectUserDelete"]({ id: record.id });
|
||||
if (success) {
|
||||
message.success("删除成功");
|
||||
getData();
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// 点击新增项目人员
|
||||
const OnUsercontentOpen = () => {
|
||||
setUsercontentOpen(true);
|
||||
// 保存已存在的项目人员数据,用于弹窗回显
|
||||
if (allData.dataSource && Array.isArray(allData.dataSource)) {
|
||||
setFetchUserList(allData.dataSource.map(item => ({
|
||||
id: item.userId || item.id,
|
||||
name: item.userName || item.name,
|
||||
departmentId: item.deptId || item.departmentId,
|
||||
departmentName: item.deptName || item.departmentName,
|
||||
phone: item.userPhone || item.phone,
|
||||
postName: item.userPostName || item.postName,
|
||||
projectLeader: item.projectLeader || 0,
|
||||
})));
|
||||
}
|
||||
};
|
||||
|
||||
// 项目人员确认提交
|
||||
const handleConfirmAdd = async (selectedData) => {
|
||||
const userList = selectedData.map(item => ({
|
||||
userId: item.id,
|
||||
userName: item.name,
|
||||
deptId: item.departmentId,
|
||||
deptName: item.departmentName,
|
||||
userPhone: item.phone,
|
||||
userPostName: item.postName,
|
||||
projectLeader: item.projectLeader,
|
||||
}));
|
||||
const { success } = await props["projectUserAdd"]({
|
||||
id: query.id,
|
||||
projectUserAddCmdList: userList,
|
||||
});
|
||||
if (success) {
|
||||
message.success("新增成功");
|
||||
setUsercontentOpen(false);
|
||||
getData();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HeaderBack title="项目人员变更" />
|
||||
<div style={{ padding: "0 20px 20px 20px" }}>
|
||||
<Table
|
||||
toolBarRender={() => (
|
||||
<Space>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
OnUsercontentOpen();
|
||||
}}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
</Space>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "姓名", dataIndex: "userName" },
|
||||
{ title: "部门", dataIndex: "deptName" },
|
||||
{
|
||||
title: "是否为项目负责人",
|
||||
dataIndex: "projectLeader",
|
||||
render: value => value === 1 ? "是" : "否",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
// 查看特种证书逻辑
|
||||
}}
|
||||
>
|
||||
查看特种证书
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
danger
|
||||
onClick={() => onDelete(record)}
|
||||
>
|
||||
删除
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
{usercontentOpen && (
|
||||
<Usercontent
|
||||
data={fetchUserList}
|
||||
projectId={query.id}
|
||||
onCancel={() => {
|
||||
setUsercontentOpen(false);
|
||||
}}
|
||||
onConfirm={handleConfirmAdd}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// 选择项目人员的组件
|
||||
const UsercontentComponent = (props) => {
|
||||
const [form] = Form.useForm();
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState([]); // 存储选中的行键
|
||||
const [selectedRows, setSelectedRows] = useState([]); // 存储选中行的完整数据
|
||||
const [inDepartmentId, setInDepartmentId] = useState([]); // 存储已选择的部门id
|
||||
const [tableDataSource, setTableDataSource] = useState([]); // 表格数据源
|
||||
|
||||
const { tableProps, getData } = useTable(props["userList"], {
|
||||
form,
|
||||
params: {
|
||||
likeName: "",
|
||||
likeUserIdCard: "",
|
||||
inDepartmentId,
|
||||
eqEmploymentFlag: 1, // 在职
|
||||
},
|
||||
});
|
||||
|
||||
// 合并表格数据:接口返回的数据 + 已存在但可能不在接口数据中的人员
|
||||
useEffect(() => {
|
||||
if (tableProps.dataSource) {
|
||||
// 创建已存在用户的ID映射,用于去重
|
||||
const existingUserIds = new Set();
|
||||
const mergedData = [];
|
||||
|
||||
// 1. 添加接口返回的数据
|
||||
tableProps.dataSource.forEach((item) => {
|
||||
mergedData.push({
|
||||
...item,
|
||||
// 统一字段名
|
||||
id: item.id,
|
||||
name: item.username || item.name,
|
||||
});
|
||||
existingUserIds.add(item.id);
|
||||
});
|
||||
|
||||
// 2. 添加已存在但不在接口数据中的用户
|
||||
if (props.data && Array.isArray(props.data)) {
|
||||
props.data.forEach((user) => {
|
||||
if (!existingUserIds.has(user.id)) {
|
||||
mergedData.push({
|
||||
...user,
|
||||
id: user.id,
|
||||
name: user.name,
|
||||
// 确保有必要的字段
|
||||
username: user.name,
|
||||
departmentName: user.departmentName,
|
||||
postName: user.postName,
|
||||
phone: user.phone,
|
||||
rzFlag: user.rzFlag,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setTableDataSource(mergedData);
|
||||
}
|
||||
}, [tableProps.dataSource, props.data]);
|
||||
|
||||
const projectLeader = useMemo(() => {
|
||||
if (props.data && Array.isArray(props.data)) {
|
||||
return props.data.find(item => item.projectLeader === 1);
|
||||
}
|
||||
return null;
|
||||
}, [props.data]);
|
||||
|
||||
// 初始化选中的数据
|
||||
useEffect(() => {
|
||||
if (props.data && Array.isArray(props.data)) {
|
||||
const initialSelectedRows = [];
|
||||
const initialSelectedKeys = [];
|
||||
|
||||
props.data.forEach((item) => {
|
||||
if (item && item.id) {
|
||||
initialSelectedKeys.push(item.id);
|
||||
initialSelectedRows.push({
|
||||
...item,
|
||||
name: item.name,
|
||||
projectLeader: item.projectLeader || 0,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
setSelectedRowKeys(initialSelectedKeys);
|
||||
setSelectedRows(initialSelectedRows);
|
||||
}
|
||||
}, [props.data]);
|
||||
|
||||
const handleConfirmAdd = () => {
|
||||
if (props.onConfirm) {
|
||||
// 获取所有选中的行
|
||||
const selectedUsers = selectedRows;
|
||||
|
||||
// 确保项目负责人在列表中
|
||||
if (projectLeader && !selectedUsers.find(item => item.id === projectLeader.id)) {
|
||||
selectedUsers.unshift({
|
||||
...projectLeader,
|
||||
projectLeader: 1,
|
||||
});
|
||||
}
|
||||
|
||||
// 为选中的用户数据添加 projectLeader 字段
|
||||
const processedRows = selectedUsers.map(item => ({
|
||||
...item,
|
||||
projectLeader: projectLeader && item.id === projectLeader.id ? 1 : 0,
|
||||
}));
|
||||
|
||||
props.onConfirm(processedRows);
|
||||
}
|
||||
};
|
||||
|
||||
const handleRowSelectionChange = (selectedRowKeys, selectedRows) => {
|
||||
// 处理选中的行
|
||||
const processedSelectedRows = selectedRows.map(row => ({
|
||||
...row,
|
||||
projectLeader: projectLeader && row.id === projectLeader.id ? 1 : 0,
|
||||
}));
|
||||
|
||||
setSelectedRowKeys(selectedRowKeys);
|
||||
setSelectedRows(processedSelectedRows);
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title="相关方企业人员列表"
|
||||
width={1200}
|
||||
open
|
||||
maskClosable={false}
|
||||
onCancel={props.onCancel}
|
||||
footer={null}
|
||||
>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
options={[
|
||||
{ name: "likeName", label: "姓名" },
|
||||
{ name: "likeUserIdCard", label: "身份证" },
|
||||
]}
|
||||
form={form}
|
||||
onFinish={(values) => {
|
||||
getData(values);
|
||||
}}
|
||||
/>
|
||||
<div style={{ display: "flex", gap: 20 }}>
|
||||
<div style={{ width: 300 }}>
|
||||
<DepartmentLeftTree
|
||||
checkable
|
||||
onCheck={(checkedKeys) => {
|
||||
setInDepartmentId(checkedKeys);
|
||||
getData();
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ flex: 1 }}>
|
||||
<Table
|
||||
rowSelection={{
|
||||
selectedRowKeys,
|
||||
preserveSelectedRowKeys: true,
|
||||
onChange: handleRowSelectionChange,
|
||||
getCheckboxProps: record => ({
|
||||
// 如果是项目负责人,禁用取消选择
|
||||
disabled: projectLeader && record.id === projectLeader.id,
|
||||
}),
|
||||
}}
|
||||
rowKey="id"
|
||||
toolBarRender={() => (
|
||||
<>
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={handleConfirmAdd}
|
||||
>
|
||||
确认添加
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "手机号", dataIndex: "phone" },
|
||||
{
|
||||
title: "姓名",
|
||||
dataIndex: "name",
|
||||
render: (text, record) => (
|
||||
<div>
|
||||
{text}
|
||||
{projectLeader && record.id === projectLeader.id && (
|
||||
<span style={{ color: "#1890ff", marginLeft: 8 }}>(项目负责人)</span>
|
||||
)}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{ title: "所属部门", dataIndex: "departmentName" },
|
||||
{ title: "所属岗位", dataIndex: "postName" },
|
||||
{ title: "是否存在人资系统", dataIndex: "rzFlag", render: (_, record) => record.rzFlag === 1 ? "是" : "否" },
|
||||
]}
|
||||
dataSource={tableDataSource}
|
||||
pagination={tableProps.pagination}
|
||||
loading={tableProps.loading}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
const Usercontent = Connect([NS_QUALIFICATION_STATISTICS], true)(UsercontentComponent);
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(UserChange);
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||||
|
||||
function UserChange(props) {
|
||||
const query = useGetUrlQuery();
|
||||
const { tableProps } = useTable(props["projectUserChangeRecordList"], { params: { eqProjectId: query.id } });
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HeaderBack title="项目人员变更记录" />
|
||||
<div style={{ padding: "0 20px 20px 20px" }}>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "姓名", dataIndex: "userName" },
|
||||
{ title: "部门", dataIndex: "deptName" },
|
||||
{ title: "操作", dataIndex: "changeType", render: (text) => { return text === 1 ? "删除" : "新增"; } },
|
||||
{ title: "记录时间", dataIndex: "createTime" },
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
export default Connect([NS_QUALIFICATION_STATISTICS], true)(UserChange);
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectFilingInformation(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectFilingInformation;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
function ProjectReview(props) {
|
||||
return (<div>{props.children}</div>);
|
||||
}
|
||||
|
||||
export default ProjectReview;
|
||||
Loading…
Reference in New Issue