diff --git a/src/enumerate/constant/index.js b/src/enumerate/constant/index.js index c7d783b..132bff7 100644 --- a/src/enumerate/constant/index.js +++ b/src/enumerate/constant/index.js @@ -125,6 +125,18 @@ export const QUAL_MONITOR_STATUS_OPTIONS = [ { value: "person_rate", label: "人员比例预警" }, ]; +/** 资质保持监控-业务范围专业能力配备标准 */ +export const QUAL_MONITOR_STANDARD_ROWS = [ + { scope: "煤炭开采业", standard: "安全、机械、电气、采矿、通风、地质、矿建各 1 名及以上" }, + { scope: "金属、非金属矿及其他矿采选业", standard: "安全、机械、电气、采矿、通风、地质、水工结构各 1 名及以上" }, + { scope: "陆地石油和天然气开采业", standard: "安全、机械、电气、采油、储运各 1 名及以上" }, + { scope: "陆上油气管道运输业", standard: "油气储运 2 名及以上,设备、仪表、电气、防腐、安全各 1 名及以上" }, + { scope: "石油加工业,化学原料、化学品及医药制造业", standard: "化工工艺、化工机械、仪表自动化、电气、安全各 2 名及以上" }, + { scope: "烟花爆竹制造业和仓储业", standard: "火炸药(爆炸技术)、机械、电气、安全各 1 名及以上" }, + { scope: "金属冶炼", standard: "安全、机械、电气、冶金、有色金属各 1 名及以上" }, + { scope: "民用爆炸物品行业", standard: "火炸药(爆炸技术)10 名,机械、电气、安全各 2 名及以上" }, +]; + /** 证书类型选项 */ export const CERT_TYPE_OPTIONS = [ { value: "registered_safety_engineer", label: "注册安全工程师" }, diff --git a/src/pages/Container/MonitorManage/QualMonitor/index.js b/src/pages/Container/MonitorManage/QualMonitor/index.js index 01d81eb..7965d60 100644 --- a/src/pages/Container/MonitorManage/QualMonitor/index.js +++ b/src/pages/Container/MonitorManage/QualMonitor/index.js @@ -16,6 +16,7 @@ import { QUAL_MONITOR_STATUS_MAP, QUAL_MONITOR_CONDITION_ITEMS, QUAL_MONITOR_STATUS_OPTIONS, + QUAL_MONITOR_STANDARD_ROWS, } from "~/enumerate/constant"; import "./index.less"; @@ -112,6 +113,7 @@ const QualMonitor = (props) => { const [form] = Form.useForm(); const [detailVisible, setDetailVisible] = useState(false); const [detailRecord, setDetailRecord] = useState(null); + const [standardVisible, setStandardVisible] = useState(false); const [data, setData] = useState([]); const { qualReview, queryQualMonitorPage, queryQualMonitorCondition, queryQualMonitoringPageStatistics } = props; @@ -326,11 +328,7 @@ const QualMonitor = (props) => { ))} - {/* 资质条件来源说明 */} -
- 页面定位: - 资质保持监控是监管信息看板,展示机构具备哪些资质、资质条件是否保持、每个结论来自哪些字段。系统命中异常后自动生成风险消息,发函、整改、机构反馈、复核闭环等办理流程全部在“风险预警中心”完成。 -
+ {/* 搜索表单 */} { onFinish={onFinish} /> +
+ + 机构列表:先看机构具备哪些资质/业务范围,再看各保持条件和来源字段。 + + +
+ {/* 数据表格 */} { )} + + {/* 检查口径弹窗 */} + setStandardVisible(false)} + width={760} + footer={ + + } + > +
+ 资质保持条件: + 监管端按独立法人、资产场所、人员数量及比例、负责人、制度、承诺书、网站、失信记录、属地要求和专业能力标准建立检查项。 +
+
+ ); diff --git a/src/pages/Container/MonitorManage/QualMonitor/index.less b/src/pages/Container/MonitorManage/QualMonitor/index.less index bb7ea76..e8aef5c 100644 --- a/src/pages/Container/MonitorManage/QualMonitor/index.less +++ b/src/pages/Container/MonitorManage/QualMonitor/index.less @@ -125,6 +125,19 @@ white-space: nowrap; } + // 工具栏 + .qm-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; + + .qm-toolbar-hint { + font-size: 0.85rem; + color: #64748b; + } + } + // 核查口径说明 .check-note { margin-bottom: 12px; diff --git a/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js b/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js index f1bfb21..f255cff 100644 --- a/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js +++ b/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js @@ -323,8 +323,8 @@ const EvalProjectCreate = (props) => { rules={[{ required: true, message: "请选择是否法定项目" }]} > - - + 是,纳入监管端监管 + 否,仅机构内部管理 diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js index 31b2b0c..7f935c2 100644 --- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js +++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js @@ -1,5 +1,18 @@ import React, { useState, useEffect } from "react"; -import { Tag, Button, Card, Table, Select, Input, Flex, Typography, message, Popover, Image } from "antd"; +import { + Tag, + Button, + Card, + Table, + Select, + Input, + Flex, + Typography, + message, + Popover, + Image, + Collapse, +} from "antd"; import { CheckCircleFilled } from "@ant-design/icons"; import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; @@ -16,17 +29,15 @@ const ControlContent = (props) => { processControlDetail || {}; const [selectPeople, setSelectPeople] = useState(null); - + // 当前步骤:1-过程控制审核 2-机构负责人签发 3-项目归档 const [step, setStep] = useState(1); // 过程控制审核 const [rows, setRows] = useState([]); - // 项目归档 const [files, setFiles] = useState([]); - // 机构负责人签发 const [approvalOpinion, setApprovalOpinion] = useState(""); @@ -34,7 +45,6 @@ const ControlContent = (props) => { const fetchDetail = () => { props.evalProcessControlDetail({ projectId }).then((res) => { if (res?.success) { - if (res?.data?.signTaskPersonCo) { setSelectPeople({ value: res?.data?.signTaskPersonCo?.signerPersonnelId, @@ -65,10 +75,9 @@ const ControlContent = (props) => { })), ); } - + if (processControl?.opinionContent) { setApprovalOpinion(processControl.opinionContent); - } }, [processControlDetail]); @@ -89,13 +98,12 @@ const ControlContent = (props) => { const isSignatureCompleted = processControl?.reviewerSignatureTaskStatus === "completed"; - - const canArchive = isSignatureCompleted ; + const canArchive = isSignatureCompleted; // 过程控制签字提交(confirm) const handleConfirm = async (resultCode) => { if (!projectId) return; - if(!rows.every((r) => r.reviewConclusion)){ + if (!rows.every((r) => r.reviewConclusion)) { message.error("请填写所有核查项的结果"); return; } @@ -119,7 +127,7 @@ const ControlContent = (props) => { message.success( resultCode === "passed" ? "已提交通过审核" : "已提交退回修改", ); - fetchDetail(); + fetchDetail(); } }; @@ -194,63 +202,61 @@ const ControlContent = (props) => { const fileColumns = [ { title: "流程名称", dataIndex: "processName", ellipsis: true }, { title: "条目名称", dataIndex: "itemName", ellipsis: true }, - + { title: "文件", dataIndex: "projectDocUrl", - + render: (val) => { let files = []; if (typeof val === "string") { - try { files = JSON.parse(val); } catch { files = []; } + try { + files = JSON.parse(val); + } catch { + files = []; + } } else if (Array.isArray(val)) { files = val; } if (!files.length) return "-"; return ( - - {files.map((f, i) => { - const url = f.url || f.response?.url; - return isImage(f.name) ? ( - - {( - - )} - - ) : ( - window.open(url)} - > + + {files.map((f, i) => { + const url = f.url || f.response?.url; + return isImage(f.name) ? ( + + {} + + ) : ( + window.open(url)} + > {f.name || "查看文件"} - - ); - })} - - } - trigger="hover" - placement="topLeft" + + ); + })} + + } + trigger="hover" + placement="topLeft" + > + e.preventDefault()} + style={{ cursor: "pointer" }} > - e.preventDefault()} - style={{ cursor: "pointer" }} - > - {files.length}个附件 - - + {files.length}个附件 + + ); }, }, - ]; const STEP_ITEMS = [ @@ -300,7 +306,45 @@ const ControlContent = (props) => { pagination={false} size="small" /> - + +
  • 合同签订前是否进行项目风险分析。
  • +
  • 是否签订技术服务合同。
  • +
  • 是否下达项目任务通知单。
  • +
  • 是否有项目组成立和项目负责人任命记录。
  • +
  • 是否编制项目实施计划。
  • +
  • 现场检查记录是否完整、有效。
  • +
  • 是否有书面整改通知单并由被评价单位盖章或签字确认。
  • +
  • + 是否进行现场复查,复查单是否双方签名或盖章并注明日期。 +
  • +
  • 是否有现场勘查、整改复查影像资料。
  • +
  • 是否完成内审、技审并保留审核记录、签字和日期。
  • +
  • 委托方提供资料是否齐全并由被评价单位盖章。
  • +
  • + 委托方资料、评价过程资料和评价报告存档是否符合要求。 +
  • +
  • 存档资料是否完整且具有可追溯性。
  • + + ), + }, + ]} + />