dev_1.2
tangjie 2026-07-31 11:58:33 +08:00
parent 107c89aaca
commit b2465721bb
4 changed files with 56 additions and 32 deletions

View File

@ -80,7 +80,12 @@ export const queryQualMonitorCondition = declareRequest(
export const queryQualMonitoringPageStatistics = declareRequest(
"qualReviewLoading",
"Get > /safetyEval/qual-filing/qualificationMonitoringPageStatistics",
"monitorStats: {} | res.data || {}",
'monitorStats: {} | res.data || {}',
);
export const queryQualFilingCheckItem = declareRequest(
"qualFilingCheckItemLoading",
"Get > /safetyEval/qual-filing/check-item",
);
// ─── 资质现场核查 ───

View File

@ -19,6 +19,7 @@ import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { tools } from "@cqsjjb/jjb-common-lib";
import { EVAL_TYPE_MAP, ROLE_DEFINITIONS_MAP } from "~/enumerate/constant";
import { PROJECT_TYPE_MAP } from "~/enumerate/constant";
import WpsEditor from "~/pages/Container/WpsEditor";
import "./index.less";
const { router } = tools;
@ -351,6 +352,7 @@ const EvalProjectMonitorDetail = (props) => {
evalSurveyList,
evalSurveyPage,
evalProjectDetail,
queryMyOrCreateDoc,
} = props;
const {
contractLoading,
@ -358,6 +360,7 @@ const EvalProjectMonitorDetail = (props) => {
evalSurveyListLoading,
evalSurveyPageLoading,
evalProjectDetailData,
wpsDoc,
} = safetyEvalBusiness || {};
const [contractData, setContractData] = useState(null);
@ -365,6 +368,7 @@ const EvalProjectMonitorDetail = (props) => {
const [surveyPersonnel, setSurveyPersonnel] = useState([]);
const [surveyAttachments, setSurveyAttachments] = useState({});
const [activeKey, setActiveKey] = useState("BUSINESS_CONTRACT");
const [wpsVisible, setWpsVisible] = useState(false);
const fetchContract = async () => {
if (!projectId) return;
@ -403,6 +407,7 @@ const EvalProjectMonitorDetail = (props) => {
useEffect(() => {
if (projectId) {
evalProjectDetail({ id: projectId });
queryMyOrCreateDoc({ docxUrl: "", projectId });
}
fetchContract();
fetchTeam();
@ -463,7 +468,13 @@ const EvalProjectMonitorDetail = (props) => {
{projectInfo}
<Tabs
activeKey={activeKey}
onChange={setActiveKey}
onChange={(key) => {
if (key === "REPORT_PREPARATION") {
setWpsVisible(true);
return;
}
setActiveKey(key);
}}
items={[
{
key: "BUSINESS_CONTRACT",
@ -489,8 +500,20 @@ const EvalProjectMonitorDetail = (props) => {
/>
),
},
{
key: "REPORT_PREPARATION",
label: renderTabLabel("报告编制", "REPORT_PREPARATION"),
children: null,
},
]}
/>
{wpsVisible && (
<WpsEditor
onCancel={() => setWpsVisible(false)}
fileId={wpsDoc?.fileId}
readOnly
/>
)}
</PageLayout>
);
};

View File

@ -14,7 +14,6 @@ import {
} from "~/enumerate/enterpriseOptions";
import {
QUAL_MONITOR_STATUS_MAP,
QUAL_MONITOR_CONDITION_ITEMS,
QUAL_MONITOR_STATUS_OPTIONS,
QUAL_MONITOR_STANDARD_ROWS,
} from "~/enumerate/constant";
@ -113,11 +112,12 @@ const QualMonitor = (props) => {
const [form] = Form.useForm();
const [detailVisible, setDetailVisible] = useState(false);
const [detailRecord, setDetailRecord] = useState(null);
const [checkItems, setCheckItems] = useState([]);
const [standardVisible, setStandardVisible] = useState(false);
const [data, setData] = useState([]);
const { qualReview, queryQualMonitorPage, queryQualMonitorCondition, queryQualMonitoringPageStatistics } = props;
const { qualMonitorList, qualMonitorTotal, qualReviewLoading, monitorStats = {} } =
const { qualReview, queryQualMonitorPage, queryQualMonitorCondition, queryQualMonitoringPageStatistics, queryQualFilingCheckItem } = props;
const { qualMonitorList, qualMonitorTotal, qualReviewLoading, qualFilingCheckItemLoading, monitorStats = {} } =
qualReview || {};
const stats = {
@ -157,21 +157,21 @@ const QualMonitor = (props) => {
queryQualMonitoringPageStatistics();
}, []);
const openDetail = (record) => {
setDetailRecord({
...record,
conditionDetails: buildConditionDetails(record),
});
const openDetail = async (record) => {
setDetailRecord(record);
setDetailVisible(true);
setCheckItems([]);
const res = await queryQualFilingCheckItem({ id: record.id });
if (res?.success !== false) {
setCheckItems(res?.data || []);
}
};
const resultTag = (result) => {
if (result === "通过") return <Tag color="success">通过</Tag>;
if (result === "预警" || result === "需核验")
return <Tag color="warning">{result}</Tag>;
if (result === "不通过" || result === "部分异常")
return <Tag color="error">{result}</Tag>;
return <Tag>{result}</Tag>;
const resultTag = (status) => {
if (status === "PASS") return <Tag color="success">通过</Tag>;
if (status === "WARN") return <Tag color="warning">预警</Tag>;
if (status === "NOT_PASS") return <Tag color="error">不通过</Tag>;
return <Tag>{status}</Tag>;
};
const columns = [
@ -423,33 +423,29 @@ const QualMonitor = (props) => {
每项展示监管字段当前值结论和来源
</div>
<Table
rowKey="key"
rowKey="title"
size="small"
pagination={false}
loading={qualFilingCheckItemLoading}
columns={[
{ title: "检查项", dataIndex: "label", width: 120 },
{ title: "资质要求", dataIndex: "require", width: 280 },
{ title: "当前值", dataIndex: "value", width: 260 },
{ title: "检查项", dataIndex: "title", width: 120 },
{ title: "资质要求", dataIndex: "description", width: 280 },
{ title: "当前值", dataIndex: "currentValue", width: 260 },
{
title: "结论",
dataIndex: "result",
dataIndex: "status",
width: 80,
render: resultTag,
},
{
title: "来源字段",
dataIndex: "source",
dataIndex: "sourceColumn",
render: (text) => (
<span className="cell-source">{text}</span>
),
},
]}
dataSource={QUAL_MONITOR_CONDITION_ITEMS.map((item) => {
const detail = detailRecord.conditionDetails[item.key];
return detail
? { key: item.key, label: item.label, ...detail }
: null;
}).filter(Boolean)}
dataSource={checkItems}
/>
</div>
)}

View File

@ -21,7 +21,7 @@ import "./index.less";
const { router } = tools;
const App = (props) => {
const { onCancel, safetyEvalBusiness } = props;
const { onCancel, safetyEvalBusiness, readOnly } = props;
const { createDocLoading } = safetyEvalBusiness;
const [expandedMap, setExpandedMap] = useState({});
const [fileId, setFileId] = useState(props.fileId);
@ -90,7 +90,7 @@ const App = (props) => {
mount: document.getElementById("app-sbsb"),
fileId: fileId,
token: sessionStorage.getItem("token"),
...(readOnly ? { commonOptions: { isBrowserViewMode: true } } : {}),
});
await instance.ready();
sdkRef.current = instance;
@ -116,7 +116,7 @@ const App = (props) => {
}
extra={
<Flex gap={12}>
<Button onClick={handleSave}>保存</Button>
{!readOnly && <Button onClick={handleSave}>保存</Button>}
<Button onClick={handleDownload}>下载报告</Button>
</Flex>