dev_1.2
tangjie 2026-07-28 18:12:06 +08:00
parent 286cbb496c
commit a5b7d7302a
4 changed files with 127 additions and 17 deletions

View File

@ -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
}, },

View File

@ -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"

View File

@ -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}

View File

@ -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}