From ff0fbb20931c30cabf512339eeee7a4991dc8b65 Mon Sep 17 00:00:00 2001 From: tangjie <122778500@qq.com> Date: Wed, 22 Jul 2026 16:06:26 +0800 Subject: [PATCH] feat --- src/api/safetyEvalBusiness/index.js | 26 + .../SiteReviewNotice/index.js | 4 +- .../SafetyEvalBusiness/MyProject/index.js | 139 ++-- .../ProjectFlow/ContractContent.js | 603 ++++++-------- .../ProjectFlow/RiskAnalysisContent.js | 764 ++++++++++-------- .../SafetyEvalBusiness/ProjectFlow/index.js | 10 +- 6 files changed, 815 insertions(+), 731 deletions(-) diff --git a/src/api/safetyEvalBusiness/index.js b/src/api/safetyEvalBusiness/index.js index 66659a7..6251ce7 100644 --- a/src/api/safetyEvalBusiness/index.js +++ b/src/api/safetyEvalBusiness/index.js @@ -62,6 +62,7 @@ export const evalProjectSave = declareRequest( export const evalProjectDetail = declareRequest( "evalProjectDetailLoading", "Get > /safetyEval/institution/eval-project/get", + 'evalProjectDetail: {} | res.data || {}', ); export const evalProjectDelete = declareRequest( @@ -97,4 +98,29 @@ export const evalProjectRiskWarningStat = declareRequest( export const evalProjectRiskWarningPage = declareRequest( "riskWarningPageLoading", "Get > /safetyEval/institution/eval-project/risk-warning-page", +); + +export const evalRiskAnalysisGet = declareRequest( + "riskAnalysisLoading", + "Get > /safetyEval/institution/eval-risk-analysis/get", +); + +export const evalRiskAnalysisSave = declareRequest( + "riskAnalysisSaveLoading", + "Post > @/safetyEval/institution/eval-risk-analysis/save", +); + +export const evalContractGet = declareRequest( + "contractLoading", + "Get > /safetyEval/institution/eval-contract/get", +); + +export const evalContractSave = declareRequest( + "contractSaveLoading", + "Post > @/safetyEval/institution/eval-contract/save", +); + +export const evalRiskAnalysisPeopleSave = declareRequest( + "riskAnalysisSaveLoading", + "Post > @/safetyEval/institution/eval-risk-analysis/participant/save", ); \ No newline at end of file diff --git a/src/pages/Container/QualificationReview/SiteReviewNotice/index.js b/src/pages/Container/QualificationReview/SiteReviewNotice/index.js index be05398..f329081 100644 --- a/src/pages/Container/QualificationReview/SiteReviewNotice/index.js +++ b/src/pages/Container/QualificationReview/SiteReviewNotice/index.js @@ -184,7 +184,7 @@ const SiteReviewNotice = (props) => { { title: "机构名称", dataIndex: "unitName", ellipsis: true }, { title: "现场审查时间", dataIndex: "reviewDateStart", - render: (val) => val ? dayjs(val).format("YYYY-MM-DD HH:mm") : "-", + }, { title: "审查地点", dataIndex: "reviewLocation", ellipsis: true }, { title: "审查组成员", dataIndex: "reviewMembers", ellipsis: true }, @@ -384,7 +384,7 @@ const SiteReviewNotice = (props) => { diff --git a/src/pages/Container/SafetyEvalBusiness/MyProject/index.js b/src/pages/Container/SafetyEvalBusiness/MyProject/index.js index 4bbc853..b71e076 100644 --- a/src/pages/Container/SafetyEvalBusiness/MyProject/index.js +++ b/src/pages/Container/SafetyEvalBusiness/MyProject/index.js @@ -1,38 +1,69 @@ -import React from "react"; -import { Form, Table, Tag, Button, Card, Row, Col, Statistic, Select } from "antd"; +import React, { useState, useEffect } from "react"; +import { + Form, Table, Tag, Button, Card, Row, Col, Statistic, Select, Modal, 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 TableAction from "@cqsjjb/jjb-react-admin-component/TableAction"; import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; - import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { tools } from "@cqsjjb/jjb-common-lib"; -const MOCK_LIST = [ - { - id: 1, projectName: "华安化工园区安全预评价", projectCode: "XP-2026-001", - myRole: "项目负责人", leader: "张建国", - startDate: "2026-03-01", endDate: "2026-09-30", phase: "正常", - }, - { - id: 2, projectName: "鼎信建设安全验收评价", projectCode: "XP-2026-002", - myRole: "报告编制人", leader: "李明华", - startDate: "2026-05-15", endDate: "2026-11-15", phase: "正常", - }, - { - id: 3, projectName: "安环检测年度安全现状评价", projectCode: "XP-2025-045", - myRole: "过程控制负责人", leader: "陈志强", - startDate: "2025-08-01", endDate: "2026-05-30", phase: "延期", - }, -]; +const { router } = tools; const MyProject = (props) => { - const [form] = Form.useForm(); + const [searchForm] = Form.useForm(); + const [dataSource, setDataSource] = useState([]); + const [total, setTotal] = useState(0); + + const { evalProjectLoading } = props.safetyEvalBusiness; + + const getData = async (pagination) => { + const params = { + ...router.query, + myProject: true, + current: pagination?.current || router.query.current || 1, + size: pagination?.size || router.query.size || 10, + }; + const res = await props.evalProjectPage(params); + if (res?.success !== false) { + setDataSource(res?.data || []); + setTotal(res?.total || 0); + } + }; + + useEffect(() => { + searchForm.setFieldsValue(router.query); + 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(pagination); + }; + + const columns = [ { - title: "序号", dataIndex: "id", width: 60, fixed: "left", + title: "序号", width: 60, fixed: "left", render: (_, __, index) => index + 1, }, { @@ -40,26 +71,30 @@ const MyProject = (props) => { render: (text, record) => (
{text}
-
{record.projectCode}
+
+ {record.projectNo} · {record.evalTypeName} +
), }, - { title: "我的角色", dataIndex: "myRole", width: 130 }, - { title: "项目负责人", dataIndex: "leader", width: 100 }, - { title: "项目开始时间", dataIndex: "startDate", width: 120 }, - { title: "项目结束时间", dataIndex: "endDate", width: 120 }, + + { title: "项目负责人", dataIndex: "projectLeaderName", width: 100 }, + { title: "项目开始时间", dataIndex: "planStartDate", width: 120 }, + { title: "项目结束时间", dataIndex: "planEndDate", width: 120 }, { - title: "项目阶段", dataIndex: "phase", width: 100, - render: (phase) => ( - {phase} - ), + title: "项目阶段", dataIndex: "projectPhaseName", width: 100, + render: (phase) => { + const color = phase === "延期" ? "error" : phase === "正常" ? "success" : undefined; + return phase ? {phase} : ""; + }, }, { title: "操作", width: 140, fixed: "right", render: (_, record) => ( - - + + ), }, @@ -70,7 +105,7 @@ const MyProject = (props) => { - +
负责人/编制人/审核人
@@ -95,52 +130,40 @@ const MyProject = (props) => {
, - - - 项目负责人 - 报告编制人 - 技术负责人 - 过程控制负责人 - - , - - - 正常 - 延期 - 作废 - - , + + ]} - onFinish={() => {}} - onReset={() => form.resetFields()} + onFinish={handleSearch} + onReset={handleReset} style={{ marginBottom: 24 }} /> `共 ${total} 条`, - pageSize: 10, }} + onChange={handlePageChange} /> ); }; - export default Connect( [NS_SAFETY_EVAL_BUSINESS], true, diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js index c9c4602..53c5c6e 100644 --- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js +++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import { Tag, Button, @@ -10,348 +10,283 @@ import { Row, Col, Flex, + message, + Spin, } from "antd"; - +import dayjs from "dayjs"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; +import { tools } from "@cqsjjb/jjb-common-lib"; import AttachmentUpload from "~/components/AttachmentUpload"; +const { router } = tools; const { TextArea } = Input; -const ContractContent = () => { +const PROJECT_TYPE_OPTIONS = [ + { label: "新建项目", value: "NEW" }, + { label: "续评项目", value: "RENEW" }, + { label: "变更项目", value: "CHANGE" }, +]; + +const EVAL_TYPE_OPTIONS = [ + { label: "安全预评价", value: "PRE" }, + { label: "安全验收评价", value: "ACCEPT" }, + { label: "安全现状评价", value: "STATUS" }, +]; + +const YES_NO_OPTIONS = [ + { label: "是", value: 1 }, + { label: "否", value: 2 }, +]; + +const ContractContent = (props) => { const [form] = Form.useForm(); + const [loading, setLoading] = useState(false); + const [saving, setSaving] = useState(false); + + const projectId = router.query?.id; + + const { safetyEvalBusiness, evalContractGet, evalContractSave } = props; + const { contractLoading } = safetyEvalBusiness || {}; + + const fetchData = async () => { + if (!projectId) return; + setLoading(true); + try { + const res = await evalContractGet({ projectId }); + if (res?.success !== false && res?.data) { + form.setFieldsValue({ + ...res.data, + contractStartDate: res.data.contractStartDate ? dayjs(res.data.contractStartDate) : undefined, + contractEndDate: res.data.contractEndDate ? dayjs(res.data.contractEndDate) : undefined, + }); + } + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchData(); + }, [projectId]); + + const handleSave = async () => { + try { + const values = await form.validateFields(); + setSaving(true); + const { contractStartDate, contractEndDate, ...rest } = values; + const res = await evalContractSave({ + ...rest, + projectId, + contractStartDate: contractStartDate ? contractStartDate.format("YYYY-MM-DD") : undefined, + contractEndDate: contractEndDate ? contractEndDate.format("YYYY-MM-DD") : undefined, + }); + if (res?.success !== false) { + message.success("合同保存成功"); + } + } finally { + setSaving(false); + } + }; return ( -
-
- - 机构管理员 / 项目负责人 - - - 按照已批准的风险分析结论录入项目合同和被评价企业信息,上传PDF格式的正式合同扫描件。 - + +
+
+ + 机构管理员 / 项目负责人 + + + 按照已批准的风险分析结论录入项目合同和被评价企业信息,上传PDF格式的正式合同扫描件。 + +
+ +
+ 合同基本信息} className="pf-section"> + +
+ + + + + + + + + + + + + + + + +