import React, { useState, useEffect } from "react"; import { Form, Table, Button, Tag, Modal, Row, Col, Card, Statistic, Space, message, } from "antd"; import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import SearchForm from "@cqsjjb/jjb-react-admin-component/SearchForm"; import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; import { RISK_LEVEL_MAP, RISK_STATUS_MAP } from "~/enumerate/constant"; import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { tools } from "@cqsjjb/jjb-common-lib"; import "./index.less"; const { router } = tools; const RiskWarning = (props) => { const [searchForm] = Form.useForm(); const [dataSource, setDataSource] = useState([]); const [total, setTotal] = useState(0); const [statData, setStatData] = useState({}); const [handleModalVisible, setHandleModalVisible] = useState(false); const [currentRecord, setCurrentRecord] = useState(null); const { riskWarningPageLoading } = props.safetyEvalBusiness; const getStat = async () => { const res = await props.evalProjectRiskWarningStat(); if (res?.success !== false) { setStatData(res?.data || {}); } }; const getData = async () => { const params = { ...router.query, current: router.query.current || 1, size: router.query.size || 10, }; const res = await props.evalProjectRiskWarningPage(params); if (res?.success !== false) { setDataSource(res?.data || []); setTotal(res?.total || 0); } }; useEffect(() => { searchForm.setFieldsValue(router.query); getStat(); getData(); }, []); const handleSearch = (values) => { router.query = { ...router.query, ...values, current: 1, size: 10 }; getData(); }; const handleReset = (values) => { searchForm.resetFields(); router.query = { ...values, current: 1, size: 10 }; getData(); }; const handlePageChange = (pagination) => { router.query = { ...router.query, current: pagination.current, size: pagination.pageSize, }; getData(); }; const handleProcess = (record) => { setCurrentRecord(record); setHandleModalVisible(true); }; const handleCloseRisk = async (record) => { Modal.confirm({ title: "确认闭环", content: `确定将"${record.projectName}"的风险标记为闭环吗?`, onOk: async () => { // TODO: 调用闭环接口 message.success("已闭环"); getData(); }, }); }; const columns = [ { title: "项目编号", dataIndex: "projectNo", width: 130 }, { title: "项目/客户", width: 240, render: (_, record) => (
{record.projectName}
{record.customerName}
), }, { title: "风险等级", dataIndex: "riskLevelCode", width: 100, render: (code) => { const cfg = RISK_LEVEL_MAP[code]; return cfg ? {cfg.text} : ""; }, }, { title: "预警类型", dataIndex: "warningTypeName", width: 100 }, { title: "触发条件", dataIndex: "triggerCondition", ellipsis: true, width: 260, }, { title: "责任人", dataIndex: "responsiblePerson", width: 90 }, { title: "预警时间", dataIndex: "warningTime", width: 120 }, { title: "状态", dataIndex: "statusCode", width: 90, render: (code) => { const cfg = RISK_STATUS_MAP[code]; return cfg ? {cfg.text} : ""; }, }, { title: "操作", width: 130, fixed: "right", render: (_, record) => ( ), }, ]; return ( 来自项目过程控制与周期规则} /> 延期、逾期、重大整改} /> 已分派但未闭环} /> 需在周例会确认} /> , , , ]} onFinish={handleSearch} onReset={handleReset} /> `共 ${total} 条`, }} onChange={handlePageChange} /> setHandleModalVisible(false)} footer={null} width={600} destroyOnHide={true} > {currentRecord && (

项目: {currentRecord.projectName}

风险等级: {currentRecord.riskLevelName}

预警类型: {currentRecord.warningTypeName}

触发条件: {currentRecord.triggerCondition}

责任人: {currentRecord.responsiblePerson}

预警时间: {currentRecord.warningTime}

)}
); }; export default Connect( [NS_SAFETY_EVAL_BUSINESS], true, )(AntdTableFuncControl(RiskWarning));