feat
parent
286cbb496c
commit
a5b7d7302a
|
|
@ -12,8 +12,8 @@ module.exports = {
|
||||||
// 可通过环境变量覆盖: SAFETY_EVAL_API_HOST=http://192.168.x.x:8095
|
// 可通过环境变量覆盖: SAFETY_EVAL_API_HOST=http://192.168.x.x:8095
|
||||||
//API_HOST: "https://gbs-gateway.qhdsafety.com",
|
//API_HOST: "https://gbs-gateway.qhdsafety.com",
|
||||||
|
|
||||||
API_HOST: "http://192.168.0.152",
|
//API_HOST: "http://192.168.0.152",
|
||||||
//API_HOST: "http://192.168.0.150", //太浅
|
API_HOST: "http://192.168.0.150", //太浅
|
||||||
// API_HOST: "http://192.168.0.152",
|
// API_HOST: "http://192.168.0.152",
|
||||||
//API_HOST: "http://192.168.0.103", //huwei
|
//API_HOST: "http://192.168.0.103", //huwei
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,12 @@ import {
|
||||||
Popover,
|
Popover,
|
||||||
Image,
|
Image,
|
||||||
Collapse,
|
Collapse,
|
||||||
|
Row,
|
||||||
|
Col,
|
||||||
|
DatePicker,
|
||||||
|
Form,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
|
import dayjs from "dayjs";
|
||||||
import { CheckCircleFilled } from "@ant-design/icons";
|
import { CheckCircleFilled } from "@ant-design/icons";
|
||||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
|
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
|
||||||
|
|
@ -23,7 +28,7 @@ const { router } = tools;
|
||||||
|
|
||||||
const ControlContent = (props) => {
|
const ControlContent = (props) => {
|
||||||
const projectId = router.query?.id;
|
const projectId = router.query?.id;
|
||||||
const { processControlDetail, processControlFiles } =
|
const { processControlDetail, processControlFiles, evalProjectDetailData } =
|
||||||
props.safetyEvalBusiness || {};
|
props.safetyEvalBusiness || {};
|
||||||
const { processControl, controllers, reviewItems } =
|
const { processControl, controllers, reviewItems } =
|
||||||
processControlDetail || {};
|
processControlDetail || {};
|
||||||
|
|
@ -38,6 +43,7 @@ const ControlContent = (props) => {
|
||||||
|
|
||||||
// 项目归档
|
// 项目归档
|
||||||
const [files, setFiles] = useState([]);
|
const [files, setFiles] = useState([]);
|
||||||
|
const [archiveForm] = Form.useForm();
|
||||||
|
|
||||||
// 机构负责人签发
|
// 机构负责人签发
|
||||||
const [approvalOpinion, setApprovalOpinion] = useState("");
|
const [approvalOpinion, setApprovalOpinion] = useState("");
|
||||||
|
|
@ -79,6 +85,17 @@ const ControlContent = (props) => {
|
||||||
if (processControl?.opinionContent) {
|
if (processControl?.opinionContent) {
|
||||||
setApprovalOpinion(processControl.opinionContent);
|
setApprovalOpinion(processControl.opinionContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (processControl) {
|
||||||
|
archiveForm.setFieldsValue({
|
||||||
|
projectNo: evalProjectDetailData.projectNo,
|
||||||
|
archiveTransferorName: processControlDetail.archiveTransferorName || "",
|
||||||
|
archiveArchivistName: processControlDetail.archiveArchivistName || "",
|
||||||
|
archiveDate: processControlDetail.archiveDate
|
||||||
|
? dayjs(processControlDetail.archiveDate)
|
||||||
|
: null,
|
||||||
|
});
|
||||||
|
}
|
||||||
}, [processControlDetail]);
|
}, [processControlDetail]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -151,7 +168,8 @@ const ControlContent = (props) => {
|
||||||
// 归档项目并入库
|
// 归档项目并入库
|
||||||
const handleArchive = async () => {
|
const handleArchive = async () => {
|
||||||
if (!projectId) return;
|
if (!projectId) return;
|
||||||
const res = await props.evalProcessControlArchive({ projectId });
|
const values = await archiveForm.validateFields();
|
||||||
|
const res = await props.evalProcessControlArchive({ projectId, ...values });
|
||||||
if (res?.success !== false) {
|
if (res?.success !== false) {
|
||||||
message.success("项目已归档入库");
|
message.success("项目已归档入库");
|
||||||
fetchDetail();
|
fetchDetail();
|
||||||
|
|
@ -474,6 +492,31 @@ const ControlContent = (props) => {
|
||||||
size="small"
|
size="small"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Form form={archiveForm} layout="vertical">
|
||||||
|
<Row gutter={16} style={{ marginTop: 16, marginBottom: 16 }}>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item label="项目编号" name="projectNo">
|
||||||
|
<Input placeholder="请输入项目编号" disabled />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item label="移交人" name="archiveTransferorName" rules={[{ required: true, message: "请输入移交人" }]}>
|
||||||
|
<Input placeholder="请输入移交人" allowClear maxLength={10} />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item label="档案管理员" name="archiveArchivistName" rules={[{ required: true, message: "请输入档案管理员" }]}>
|
||||||
|
<Input placeholder="请输入档案管理员" allowClear maxLength={10} />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
<Col span={6}>
|
||||||
|
<Form.Item label="入库日期" name="archiveDate">
|
||||||
|
<DatePicker style={{ width: "100%" }} disabled />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Form>
|
||||||
|
|
||||||
<Flex
|
<Flex
|
||||||
justify="space-between"
|
justify="space-between"
|
||||||
align="center"
|
align="center"
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import {
|
||||||
Col,
|
Col,
|
||||||
message,
|
message,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
|
Collapse,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
|
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
|
||||||
|
|
@ -79,8 +80,8 @@ const InternalReviewContent = (props) => {
|
||||||
|
|
||||||
const handleAssign = async () => {
|
const handleAssign = async () => {
|
||||||
if (!projectId) return;
|
if (!projectId) return;
|
||||||
const result= await handleConfirm("not_passed");
|
const result = await handleConfirm("not_passed");
|
||||||
if(!result) return;
|
if (!result) return;
|
||||||
const res = await props.evalInternalReviewAssign({
|
const res = await props.evalInternalReviewAssign({
|
||||||
projectId,
|
projectId,
|
||||||
signTaskPersonCmd: {
|
signTaskPersonCmd: {
|
||||||
|
|
@ -92,12 +93,12 @@ const InternalReviewContent = (props) => {
|
||||||
});
|
});
|
||||||
if (res?.success !== false) {
|
if (res?.success !== false) {
|
||||||
message.success("已下发签字任务");
|
message.success("已下发签字任务");
|
||||||
fetchDetail()
|
fetchDetail();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleConfirm = async (resultCode) => {
|
const handleConfirm = async (resultCode) => {
|
||||||
if(!rows.every((r) => r.reviewConclusion)){
|
if (!rows.every((r) => r.reviewConclusion)) {
|
||||||
message.error("请填写审核结论");
|
message.error("请填写审核结论");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -125,8 +126,7 @@ const InternalReviewContent = (props) => {
|
||||||
if (resultCode === "passed") {
|
if (resultCode === "passed") {
|
||||||
props.getDetail?.();
|
props.getDetail?.();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -266,14 +266,47 @@ const InternalReviewContent = (props) => {
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
onClick={handleAssign}
|
onClick={handleAssign}
|
||||||
loading={internalReviewAssignLoading}
|
loading={internalReviewAssignLoading || props.safetyEvalBusiness?.internalReviewConfirmLoading}
|
||||||
disabled={isDispatched || !selectedReviewer}
|
disabled={isDispatched || !selectedReviewer}
|
||||||
>
|
>
|
||||||
{isDispatched ? "已下发APP签字" : "下发APP签字"}
|
{isDispatched ? "已下发APP签字" : "下发APP签字"}
|
||||||
</Button>
|
</Button>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
<Collapse
|
||||||
|
style={{marginTop: '12px'}}
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
key: "checklist",
|
||||||
|
label: "内部审核完整核查清单(13项)",
|
||||||
|
children: (
|
||||||
|
<ol
|
||||||
|
style={{
|
||||||
|
margin: 0,
|
||||||
|
paddingLeft: 20,
|
||||||
|
fontSize: 13,
|
||||||
|
color: "#475569",
|
||||||
|
lineHeight: 1.8,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<li>评价依据是否充分、有效。</li>
|
||||||
|
<li>危险有害因素识别是否全面。</li>
|
||||||
|
<li>评价单元划分是否合理。</li>
|
||||||
|
<li>评价方法选择是否适当。</li>
|
||||||
|
<li>对策措施与建议是否可行。</li>
|
||||||
|
<li>报告编制格式是否符合要求。</li>
|
||||||
|
<li>报告文字、数据及其他内容是否准确。</li>
|
||||||
|
<li>评价范围是否与项目任务通知书一致。</li>
|
||||||
|
<li>是否保留现场影像记录。</li>
|
||||||
|
<li>评价结论是否正确。</li>
|
||||||
|
<li>评价对象情况描述是否存在重大遗漏或严重失实。</li>
|
||||||
|
<li>生产工艺、设备、参数、危险源、控制点是否阐述清楚。</li>
|
||||||
|
<li>重大危险源、重大隐患辨识是否准确。</li>
|
||||||
|
</ol>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
<Flex justify="flex-end" gap={8} style={{ marginTop: 16 }}>
|
<Flex justify="flex-end" gap={8} style={{ marginTop: 16 }}>
|
||||||
<Button
|
<Button
|
||||||
loading={props.safetyEvalBusiness?.internalReviewConfirmLoading}
|
loading={props.safetyEvalBusiness?.internalReviewConfirmLoading}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import {
|
||||||
Typography,
|
Typography,
|
||||||
message,
|
message,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
|
Collapse,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
|
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
|
||||||
|
|
@ -76,8 +77,8 @@ const TechnicalReviewContent = (props) => {
|
||||||
|
|
||||||
const handleAssign = async () => {
|
const handleAssign = async () => {
|
||||||
if (!projectId) return;
|
if (!projectId) return;
|
||||||
const result= await handleConfirm("not_passed");
|
const result = await handleConfirm("not_passed");
|
||||||
if(!result) return;
|
if (!result) return;
|
||||||
const res = await props.evalTechReviewAssign({
|
const res = await props.evalTechReviewAssign({
|
||||||
projectId,
|
projectId,
|
||||||
signTaskPersonCmd: {
|
signTaskPersonCmd: {
|
||||||
|
|
@ -89,7 +90,7 @@ const TechnicalReviewContent = (props) => {
|
||||||
});
|
});
|
||||||
if (res?.success !== false) {
|
if (res?.success !== false) {
|
||||||
message.success("已下发签字任务");
|
message.success("已下发签字任务");
|
||||||
fetchDetail()
|
fetchDetail();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -267,14 +268,47 @@ const TechnicalReviewContent = (props) => {
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
onClick={handleAssign}
|
onClick={handleAssign}
|
||||||
loading={props.safetyEvalBusiness?.techReviewAssignLoading}
|
loading={props.safetyEvalBusiness?.techReviewAssignLoading || props.safetyEvalBusiness?.techReviewConfirmLoading}
|
||||||
disabled={isDispatched || !selectedReviewer}
|
disabled={isDispatched || !selectedReviewer}
|
||||||
>
|
>
|
||||||
{isDispatched ? "已下发APP签字" : "下发APP签字"}
|
{isDispatched ? "已下发APP签字" : "下发APP签字"}
|
||||||
</Button>
|
</Button>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
<Collapse
|
||||||
|
style={{ marginTop: "12px" }}
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
key: "checklist",
|
||||||
|
label: "技术审核完整核查清单(13项)",
|
||||||
|
children: (
|
||||||
|
<ol
|
||||||
|
style={{
|
||||||
|
margin: 0,
|
||||||
|
paddingLeft: 20,
|
||||||
|
fontSize: 13,
|
||||||
|
color: "#475569",
|
||||||
|
lineHeight: 1.8,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<li>评价依据是否得到引用和验证。</li>
|
||||||
|
<li>现场收集资料是否齐全、有效。</li>
|
||||||
|
<li>危险有害因素识别是否充分。</li>
|
||||||
|
<li>评价单元划分是否合理。</li>
|
||||||
|
<li>评价方法是否适用。</li>
|
||||||
|
<li>对策措施及建议是否具有针对性、可行性。</li>
|
||||||
|
<li>评价结论是否准确。</li>
|
||||||
|
<li>报告是否存在重大遗漏。</li>
|
||||||
|
<li>整改照片是否符合要求。</li>
|
||||||
|
<li>内审修改是否得到验证。</li>
|
||||||
|
<li>报告是否代表机构总体控制水平。</li>
|
||||||
|
<li>报告附件资料是否有效。</li>
|
||||||
|
<li>报告是否符合安全生产监督管理部门最新要求。</li>
|
||||||
|
</ol>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
<Flex justify="flex-end" gap={8} style={{ marginTop: 16 }}>
|
<Flex justify="flex-end" gap={8} style={{ marginTop: 16 }}>
|
||||||
<Button
|
<Button
|
||||||
loading={props.safetyEvalBusiness?.techReviewConfirmLoading}
|
loading={props.safetyEvalBusiness?.techReviewConfirmLoading}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue