Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/main.js
dev
huwei 2026-07-08 18:16:51 +08:00
commit 080691d675
13 changed files with 93 additions and 41 deletions

View File

@ -362,6 +362,11 @@ export const qualFilingChangeSubmit = declareRequest("qualFilingLoading", safeAc
return apiPost("/safetyEval/qual-filing-change/submit", { draftFilingId: asId(draftFilingId) }); return apiPost("/safetyEval/qual-filing-change/submit", { draftFilingId: asId(draftFilingId) });
})); }));
export const qualFilingReviewGet = declareRequest(
"qualFilingLoading",
"Get > /safetyEval/qual-filing-review/page",
);
export const submitQualFiling = declareRequest( export const submitQualFiling = declareRequest(
"qualFilingSubmitLoading", "qualFilingSubmitLoading",
"Post > @/safetyEval/qual-filing/aggregationSaveOrEdit", "Post > @/safetyEval/qual-filing/aggregationSaveOrEdit",

View File

@ -33,7 +33,7 @@ export const FILING_TYPE_OPTIONS = [
/** 监管端已备案机构 - 备案类型搜索 */ /** 监管端已备案机构 - 备案类型搜索 */
export const REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS = [ export const REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS = [
{ label: "全部", value: "" },
{ label: "审核备案", value: "1" }, { label: "审核备案", value: "1" },
{ label: "确认备案", value: "2" }, { label: "确认备案", value: "2" },
]; ];

View File

@ -99,10 +99,4 @@ export function canStartFilingChange(statusCode) {
return Number(statusCode) === 1; return Number(statusCode) === 1;
} }
/** 已备案资质管理:周期性填报审核中可修改 */
export function isFiledManageEditable(statusCode, mode) {
if (mode !== FILING_FORM_MODE.FILED) {
return isQualFilingEditable(statusCode);
}
return Number(statusCode) === 2;
}

View File

@ -28,10 +28,7 @@ if (!window.__POWERED_BY_QIANKUN__) {
window.__coreLib.ReactDOM = require("react-dom"); window.__coreLib.ReactDOM = require("react-dom");
window.__coreLib.jjbCommonLib = require("@cqsjjb/jjb-common-lib"); window.__coreLib.jjbCommonLib = require("@cqsjjb/jjb-common-lib");
// 本地开发时注入 Token使 API 请求可携带认证信息
const tokenValue = "jjb-saas-auth:oauth:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJjbGllbnRJZFwiOlwiNzJjZjRmNjU5ZGM1NGRjZmFlZWNkMzJlYWJmNDgzYjVcIixcImFjY291bnRJZFwiOjEsXCJ1c2VyVHlwZUVudW1cIjpcIlBMQVRGT1JNXCIsXCJ1c2VySWRcIjoxLFwibmFtZVwiOlwi6LaF57qn566h55CG5ZGYXCIsXCJhY2Nlc3NUaWNrZXRcIjpcIkc5Z3hoNkZYWUNpRThORFlWUlM2aW1pMGJ3WURZeHlXaUdnRDBRbVl2SFE1NEk3Ym5YeHlFaGRxdkNHclwiLFwicmVmcmVzaFRpY2tldFwiOlwiaDM4U3doemhVM0hIdk5pREI2dnU1NG0zaGRIZE1FRGhLZ2VSdTJsbzhwb3g3RlJHUFA4elF4WE5VWXJPXCIsXCJleHBpcmVJblwiOjkwMDAwMCxcInJlZnJlc2hFeHBpcmVzSW5cIjo5MDAwMDAsXCJvcmdJZFwiOjEsXCJvcmdOYW1lXCI6XCLlubPlj7BcIixcIm9yZ0lkc1wiOlsxXSxcInJvbGVzVHlwZXNcIjpbXCJTVVBFUl9BRE1JTlwiXSxcInJvbGVJZHNcIjpbMTAwXSxcInNjb3Blc1wiOltdLFwicnBjVHlwZUVudW1cIjpcIkhUVFBcIixcImJpbmRNb2JpbGVTaWduXCI6XCJUUlVFXCJ9IiwiaXNzIjoicHJvLXNlcnZlciIsImV4cCI6MTc4NDQwMjM3OH0.misilejhwf1sJBpZJSanAKkwbMXIZqeSn7pKIMlMOYs";
localStorage.setItem("token", tokenValue);
sessionStorage.setItem("token", tokenValue);
} }
/** /**

View File

@ -22,7 +22,7 @@ import {
ENTERPRISE_SCALE_OPTIONS, ENTERPRISE_SCALE_OPTIONS,
ENTERPRISE_STATUS_OPTIONS, ENTERPRISE_STATUS_OPTIONS,
FILING_RECORD_STATUS_OPTIONS, FILING_RECORD_STATUS_OPTIONS,
FILING_TYPE_OPTIONS, REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS,
} from "~/enumerate/enterpriseOptions"; } from "~/enumerate/enterpriseOptions";
import { NS_ORG_INFO } from "~/enumerate/namespace"; import { NS_ORG_INFO } from "~/enumerate/namespace";
import { mockUploadFileList } from "~/utils/mockUpload"; import { mockUploadFileList } from "~/utils/mockUpload";
@ -428,7 +428,7 @@ function OrgInfoPage(props) {
<Col span={12}> <Col span={12}>
<Form.Item name="filingTypeName" label="备案类型"> <Form.Item name="filingTypeName" label="备案类型">
<Select <Select
options={FILING_TYPE_OPTIONS} options={REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS}
placeholder="请选择备案类型" placeholder="请选择备案类型"
allowClear allowClear
/> />

View File

@ -1,5 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Form, message } from "antd"; import { Button, Empty, Form, Modal, Table } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { tools } from "@cqsjjb/jjb-common-lib"; import { tools } from "@cqsjjb/jjb-common-lib";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
@ -12,6 +12,8 @@ import { goFilingForm } from "../../filingPaths";
const { router } = tools; const { router } = tools;
function FiledManageListPage(props) { function FiledManageListPage(props) {
const { qualFiling } = props;
const {qualFilingLoading}= qualFiling;
const [searchForm] = Form.useForm(); const [searchForm] = Form.useForm();
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [dataSource, setDataSource] = useState([]); const [dataSource, setDataSource] = useState([]);
@ -57,22 +59,76 @@ function FiledManageListPage(props) {
goFilingForm({ mode: FILING_FORM_MODE.FILED }); goFilingForm({ mode: FILING_FORM_MODE.FILED });
}; };
const [reviewModalOpen, setReviewModalOpen] = useState(false);
const [reviewList, setReviewList] = useState([]);
const handleShowReview = async (record) => {
setReviewModalOpen(true);
setReviewList([]);
try {
const res = await props.qualFilingReviewGet({ filingId: record.filingId || record.id, current: 1, size: 999 });
setReviewList(res?.data || []);
} catch {
setReviewList([]);
}
};
const handleCloseReview = () => {
setReviewModalOpen(false);
setReviewList([]);
};
const REVIEW_RESULT_MAP = { 1: "通过", 2: "待定", 3: "不通过" };
const reviewColumns = [
{ title: "审核结果", dataIndex: "reviewResult", width: 100, render: (v) => REVIEW_RESULT_MAP[v] || v || "-" },
{ title: "审核结果说明", dataIndex: "reviewResultRemark", ellipsis: true },
{ title: "审核专家", dataIndex: "filingExpertName", width: 120 },
{ title: "综合审核意见", dataIndex: "reviewOpinion", ellipsis: true },
];
return ( return (
<FilingListTable <>
PageLayout={PageLayout} <FilingListTable
listTitle="已备案资质管理" PageLayout={PageLayout}
listDesc="对已备案资质进行周期性填报与维护。" listTitle="已备案资质管理"
createLabel="资质备案填报" listDesc="对已备案资质进行周期性填报与维护。"
mode={FILING_FORM_MODE.FILED} createLabel="资质备案填报"
dataSource={dataSource} mode={FILING_FORM_MODE.FILED}
total={total} dataSource={dataSource}
loading={loading} total={total}
scrollY={props.scrollY} loading={loading}
searchForm={searchForm} scrollY={props.scrollY}
onSearch={handleSearch} searchForm={searchForm}
onPageChange={handlePageChange} onSearch={handleSearch}
onCreate={handleCreate} onPageChange={handlePageChange}
/> onCreate={handleCreate}
extraActions={(record) =>
Number(record.filingStatusCode) === 3
? <Button type="link" size="small" onClick={() => handleShowReview(record)}>打回原因</Button>
: null
}
/>
<Modal
open={reviewModalOpen}
title="打回原因"
width={800}
loading={qualFilingLoading}
cancelText="关闭"
okButtonProps={{ style: { display: "none" } }}
onCancel={handleCloseReview}
>
{reviewList.length ? (
<Table
rowKey="id"
size="small"
bordered
pagination={false}
dataSource={reviewList}
columns={reviewColumns}
/>
) : !qualFilingLoading ? <Empty /> : null}
</Modal>
</>
); );
} }

View File

@ -6,7 +6,6 @@ import { CHONGQING_DISTRICTS } from "~/enumerate/enterpriseOptions";
import { import {
FILING_FORM_MODE, FILING_FORM_MODE,
getFilingStatusOptions, getFilingStatusOptions,
isFiledManageEditable,
isQualFilingEditable, isQualFilingEditable,
QUAL_FILING_STATUS_COLOR, QUAL_FILING_STATUS_COLOR,
} from "~/enumerate/qualFilingOptions"; } from "~/enumerate/qualFilingOptions";
@ -35,9 +34,7 @@ export default function FilingListTable({
const statusOptions = getFilingStatusOptions(mode); const statusOptions = getFilingStatusOptions(mode);
const canEditRow = (record) => { const canEditRow = (record) => {
if (mode === FILING_FORM_MODE.FILED) {
return isFiledManageEditable(record.filingStatusCode, mode);
}
return isQualFilingEditable(record.filingStatusCode); return isQualFilingEditable(record.filingStatusCode);
}; };

View File

@ -61,7 +61,7 @@ const ExpertVerification = (props) => {
ellipsis: true, ellipsis: true,
}, },
{ title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 }, { title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 },
{ title: "证书编号", dataIndex: "filingNo", width: 140, ellipsis: true }, { title: "证书编号", dataIndex: "qualCertNo", width: 140, ellipsis: true },
{ {
title: "安全评价业务范围", title: "安全评价业务范围",
dataIndex: "businessScope", dataIndex: "businessScope",

View File

@ -54,7 +54,7 @@ const QualConfirm = (props) => {
}, },
{ title: "机构名称", dataIndex: "filingUnitName", width: 220, ellipsis: true }, { title: "机构名称", dataIndex: "filingUnitName", width: 220, ellipsis: true },
{ title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 }, { title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 },
{ title: "证书编号", dataIndex: "filingNo", width: 140, ellipsis: true }, { title: "证书编号", dataIndex: "qualCertNo", width: 140, ellipsis: true },
{ title: "安全评价业务范围", dataIndex: "businessScope", width: 180, ellipsis: true }, { title: "安全评价业务范围", dataIndex: "businessScope", width: 180, ellipsis: true },
{ {
title: "确认状态", title: "确认状态",

View File

@ -60,7 +60,7 @@ const QualConfirmForm = (props) => {
</div> </div>
<div> <div>
<div className="summary-label">证书编号</div> <div className="summary-label">证书编号</div>
<div className="summary-value">{qualFilingDetail.filingNo || '--'}</div> <div className="summary-value">{qualFilingDetail.qualCertNo || '--'}</div>
</div> </div>
<div> <div>
<div className="summary-label">业务范围</div> <div className="summary-label">业务范围</div>

View File

@ -149,7 +149,7 @@ const QualReview = (props) => {
allowClear allowClear
style={{ width: "100%" }} style={{ width: "100%" }}
> >
<Select.Option value="1">已审核</Select.Option>
<Select.Option value="2">审核中</Select.Option> <Select.Option value="2">审核中</Select.Option>
<Select.Option value="3">打回</Select.Option> <Select.Option value="3">打回</Select.Option>
</ControlWrapper.Select> </ControlWrapper.Select>

View File

@ -102,7 +102,7 @@ function OrgAccountPage(props) {
<strong>{record.orgName}</strong> <strong>{record.orgName}</strong>
的密码重置为初始密码 的密码重置为初始密码
</p> </p>
<p style={{ color: "rgba(0,0,0,0.45)", fontSize: 12 }}>初始密码Ap@123456</p> <p style={{ color: "rgba(0,0,0,0.45)", fontSize: 12 }}>初始密码a123456</p>
</div> </div>
), ),
okText: "确认重置", okText: "确认重置",
@ -166,7 +166,7 @@ function OrgAccountPage(props) {
const columns = [ const columns = [
{ title: "机构名称", dataIndex: "orgName", ellipsis: true }, { title: "机构名称", dataIndex: "orgName", ellipsis: true },
{ title: "属地", dataIndex: "district", width: 100 }, { title: "属地", dataIndex: "district", width: 260 },
{ {
title: "状态", title: "状态",
width: 80, width: 80,

View File

@ -291,7 +291,10 @@ const ExperManage = (props) => {
{qualExpertDetail?.idCardNo || "--"} {qualExpertDetail?.idCardNo || "--"}
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="证书" span={2}> <Descriptions.Item label="证书" span={2}>
{(qualExpertDetail?.certificate? JSON.parse(qualExpertDetail?.certificate): [])?.map((item) => ( {(Array.isArray(qualExpertDetail?.certificate)
? qualExpertDetail?.certificate
: JSON.parse(qualExpertDetail?.certificate || "[]")
)?.map((item) => (
<a key={item.id} href={item.url} target="_blank"> <a key={item.id} href={item.url} target="_blank">
{item.name} {item.name}
</a> </a>