import React, { useState, useEffect } from "react";
import dayjs from "dayjs";
import { Button, Form, Table, Tag, Modal, Select, DatePicker, Input, Space, message } from "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 { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { tools } from "@cqsjjb/jjb-common-lib";
import AttachmentUpload from "~/components/AttachmentUpload";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_RISK_CENTER } from "~/enumerate/namespace";
import {
RISK_TYPE_MAP,
STAGE_MAP,
ORG_STATUS_MAP,
RISK_SUBTYPE_OPTIONS,
} from "~/enumerate/constant";
import "./index.less";
const { router } = tools;
/** 项目预警规则提示 */
const PROJ_RULES = [
"项目启动超期",
"关键节点超期",
"项目人员异常",
"从业告知异常",
"现场勘查异常",
"过程控制/归档异常",
];
/** 统计卡片样式主题 */
const CARD_THEMES = [
{ bg: "#fee2e2", color: "#dc2626" },
{ bg: "#fef3c7", color: "#d97706" },
{ bg: "#dbeafe", color: "#2563eb" },
{ bg: "#d1fae5", color: "#059669" },
];
const RiskCenter = (props) => {
const [form] = Form.useForm();
const [processForm] = Form.useForm();
const [processRecord, setProcessRecord] = useState(null);
const [processModalOpen, setProcessModalOpen] = useState(false);
const { riskCenter, queryRiskOverviewAction, queryRiskPageAction } = props;
const { overviewStats = [], riskPageList = [], riskPageTotal = 0, riskPageLoading } = riskCenter || {};
useEffect(() => {
queryRiskOverviewAction();
handleSearch();
}, []);
const handleSearch = () => {
queryRiskPageAction(router.query);
};
const handleReset = (values) => {
form.resetFields();
router.query = { ...values, current: 1, size: 10 };
handleSearch();
};
const handlePageChange = (page, size) => {
router.query = { ...router.query, current: page, size };
handleSearch()
};
/** 处理按钮 — 打开对应阶段的处理弹窗 */
const handleProcess = (record) => {
setProcessRecord(record);
if (record.stage === "未处理" || record.stage === "已发机构") {
processForm.setFieldsValue({
relatedId: record.id,
institution: record.riskObject,
deadline: dayjs().add(15, "day"),
opinion: "请核查来源字段与上传材料,形成监管处置记录。",
});
}
setProcessModalOpen(true);
};
/** 提交预警处置 */
const handleProcessSubmit = () => {
message.success("处理结果已提交");
setProcessModalOpen(false);
setProcessRecord(null);
processForm.resetFields();
};
/** 退回补正 */
const handleReturn = () => {
message.success("已退回机构补正");
setProcessModalOpen(false);
setProcessRecord(null);
};
/** 复核通过并闭环 */
const handleClose = () => {
message.success("预警已复核闭环");
setProcessModalOpen(false);
setProcessRecord(null);
};
const columns = [
{
title: "预警编号",
dataIndex: "id",
width: 160,
},
{
title: "预警大类",
dataIndex: "category",
width: 100,
render: (val) => {
const cfg = RISK_TYPE_MAP[val];
return cfg ?