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

# Conflicts:
#	src/main.js
dev_1.0.1
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) });
}));
export const qualFilingReviewGet = declareRequest(
"qualFilingLoading",
"Get > /safetyEval/qual-filing-review/page",
);
export const submitQualFiling = declareRequest(
"qualFilingSubmitLoading",
"Post > @/safetyEval/qual-filing/aggregationSaveOrEdit",

View File

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

View File

@ -99,10 +99,4 @@ export function canStartFilingChange(statusCode) {
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.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_STATUS_OPTIONS,
FILING_RECORD_STATUS_OPTIONS,
FILING_TYPE_OPTIONS,
REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS,
} from "~/enumerate/enterpriseOptions";
import { NS_ORG_INFO } from "~/enumerate/namespace";
import { mockUploadFileList } from "~/utils/mockUpload";
@ -428,7 +428,7 @@ function OrgInfoPage(props) {
<Col span={12}>
<Form.Item name="filingTypeName" label="备案类型">
<Select
options={FILING_TYPE_OPTIONS}
options={REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS}
placeholder="请选择备案类型"
allowClear
/>

View File

@ -1,5 +1,5 @@
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 { tools } from "@cqsjjb/jjb-common-lib";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
@ -12,6 +12,8 @@ import { goFilingForm } from "../../filingPaths";
const { router } = tools;
function FiledManageListPage(props) {
const { qualFiling } = props;
const {qualFilingLoading}= qualFiling;
const [searchForm] = Form.useForm();
const [loading, setLoading] = useState(false);
const [dataSource, setDataSource] = useState([]);
@ -57,7 +59,35 @@ function FiledManageListPage(props) {
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 (
<>
<FilingListTable
PageLayout={PageLayout}
listTitle="已备案资质管理"
@ -72,7 +102,33 @@ function FiledManageListPage(props) {
onSearch={handleSearch}
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 {
FILING_FORM_MODE,
getFilingStatusOptions,
isFiledManageEditable,
isQualFilingEditable,
QUAL_FILING_STATUS_COLOR,
} from "~/enumerate/qualFilingOptions";
@ -35,9 +34,7 @@ export default function FilingListTable({
const statusOptions = getFilingStatusOptions(mode);
const canEditRow = (record) => {
if (mode === FILING_FORM_MODE.FILED) {
return isFiledManageEditable(record.filingStatusCode, mode);
}
return isQualFilingEditable(record.filingStatusCode);
};

View File

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

View File

@ -54,7 +54,7 @@ const QualConfirm = (props) => {
},
{ title: "机构名称", dataIndex: "filingUnitName", width: 220, ellipsis: true },
{ 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: "确认状态",

View File

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

View File

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

View File

@ -102,7 +102,7 @@ function OrgAccountPage(props) {
<strong>{record.orgName}</strong>
的密码重置为初始密码
</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>
),
okText: "确认重置",
@ -166,7 +166,7 @@ function OrgAccountPage(props) {
const columns = [
{ title: "机构名称", dataIndex: "orgName", ellipsis: true },
{ title: "属地", dataIndex: "district", width: 100 },
{ title: "属地", dataIndex: "district", width: 260 },
{
title: "状态",
width: 80,

View File

@ -291,7 +291,10 @@ const ExperManage = (props) => {
{qualExpertDetail?.idCardNo || "--"}
</Descriptions.Item>
<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">
{item.name}
</a>