fix
parent
d2ce6e6b52
commit
64eac8a544
|
|
@ -19,7 +19,7 @@ export const VERIFY_STATUS_MAP = {
|
|||
|
||||
/** 审核状态 */
|
||||
export const REVIEW_STATUS_MAP = {
|
||||
1: { label: "已审核", color: "success" },
|
||||
1: { label: "审核通过", color: "success" },
|
||||
2: { label: "审核中", color: "processing" },
|
||||
3: { label: "打回", color: "error" },
|
||||
};
|
||||
|
|
@ -39,26 +39,24 @@ export const PUBLICITY_STATUS_MAP = {
|
|||
|
||||
/** 备案状态(通用,含变更审核中、暂存) */
|
||||
export const FILING_STATUS_MAP = {
|
||||
1: { label: "已备案", color: "success" },
|
||||
2: { label: "审核中", color: "processing" },
|
||||
3: { label: "已打回", color: "error" },
|
||||
1: { label: "确认通过", color: "success" },
|
||||
2: { label: "待确认", color: "processing" },
|
||||
3: { label: "打回", color: "error" },
|
||||
4: { label: "变更审核中", color: "processing" },
|
||||
5: { label: "暂存", color: "default" },
|
||||
};
|
||||
|
||||
export const FILING_STATUS_MAP_CHANGE = {
|
||||
1: { label: "已备案", color: "success" },
|
||||
|
||||
3: { label: "已打回", color: "error" },
|
||||
4: { label: "变更审核中", color: "processing" },
|
||||
1: { label: "审核通过", color: "success" },
|
||||
3: { label: "打回", color: "error" },
|
||||
4: { label: "待审核", color: "processing" },
|
||||
};
|
||||
|
||||
/** 变更状态 */
|
||||
export const CHANGE_STATUS_MAP = {
|
||||
stuck: { label: "停滞中", color: "error" },
|
||||
pending: { label: "待审核", color: "warning" },
|
||||
approved: { label: "已审核", color: "success" },
|
||||
};
|
||||
export const CHANGE_STATUS_OPTIONS = [
|
||||
{ label: "审核通过", value: 1 },
|
||||
{ label: "打回", value: 3 },
|
||||
{ label: "待审核", value: 4 },
|
||||
];
|
||||
|
||||
/** 资质保持监控状态 */
|
||||
export const QUAL_MONITOR_STATUS_MAP = {
|
||||
|
|
@ -128,14 +126,38 @@ export const QUAL_MONITOR_STATUS_OPTIONS = [
|
|||
|
||||
/** 资质保持监控-业务范围专业能力配备标准 */
|
||||
export const QUAL_MONITOR_STANDARD_ROWS = [
|
||||
{ scope: "煤炭开采业", standard: "安全、机械、电气、采矿、通风、地质、矿建各 1 名及以上" },
|
||||
{ scope: "金属、非金属矿及其他矿采选业", standard: "安全、机械、电气、采矿、通风、地质、水工结构各 1 名及以上" },
|
||||
{ scope: "陆地石油和天然气开采业", standard: "安全、机械、电气、采油、储运各 1 名及以上" },
|
||||
{ scope: "陆上油气管道运输业", standard: "油气储运 2 名及以上,设备、仪表、电气、防腐、安全各 1 名及以上" },
|
||||
{ scope: "石油加工业,化学原料、化学品及医药制造业", standard: "化工工艺、化工机械、仪表自动化、电气、安全各 2 名及以上" },
|
||||
{ scope: "烟花爆竹制造业和仓储业", standard: "火炸药(爆炸技术)、机械、电气、安全各 1 名及以上" },
|
||||
{ scope: "金属冶炼", standard: "安全、机械、电气、冶金、有色金属各 1 名及以上" },
|
||||
{ scope: "民用爆炸物品行业", standard: "火炸药(爆炸技术)10 名,机械、电气、安全各 2 名及以上" },
|
||||
{
|
||||
scope: "煤炭开采业",
|
||||
standard: "安全、机械、电气、采矿、通风、地质、矿建各 1 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "金属、非金属矿及其他矿采选业",
|
||||
standard: "安全、机械、电气、采矿、通风、地质、水工结构各 1 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "陆地石油和天然气开采业",
|
||||
standard: "安全、机械、电气、采油、储运各 1 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "陆上油气管道运输业",
|
||||
standard: "油气储运 2 名及以上,设备、仪表、电气、防腐、安全各 1 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "石油加工业,化学原料、化学品及医药制造业",
|
||||
standard: "化工工艺、化工机械、仪表自动化、电气、安全各 2 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "烟花爆竹制造业和仓储业",
|
||||
standard: "火炸药(爆炸技术)、机械、电气、安全各 1 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "金属冶炼",
|
||||
standard: "安全、机械、电气、冶金、有色金属各 1 名及以上",
|
||||
},
|
||||
{
|
||||
scope: "民用爆炸物品行业",
|
||||
standard: "火炸药(爆炸技术)10 名,机械、电气、安全各 2 名及以上",
|
||||
},
|
||||
];
|
||||
|
||||
/** 证书类型选项 */
|
||||
|
|
@ -166,7 +188,11 @@ export const CERT_LEVEL_OPTIONS_BY_TYPE = {
|
|||
|
||||
/** 证书等级 value → label 映射(按证书类型区分标签) */
|
||||
export const CERT_LEVEL_LABEL_BY_TYPE = {
|
||||
registered_safety_engineer: { SENIOR: "高级", MIDDLE: "中级", JUNIOR: "初级" },
|
||||
registered_safety_engineer: {
|
||||
SENIOR: "高级",
|
||||
MIDDLE: "中级",
|
||||
JUNIOR: "初级",
|
||||
},
|
||||
evaluator: { SENIOR: "一级", MIDDLE: "二级", JUNIOR: "三级" },
|
||||
};
|
||||
|
||||
|
|
@ -440,24 +466,86 @@ export const PROJECT_TYPE_OPTIONS = [
|
|||
{ label: "变更项目", value: "CHANGE" },
|
||||
];
|
||||
|
||||
export const PROJECT_TYPE_MAP= PROJECT_TYPE_OPTIONS.reduce((acc, cur) => {
|
||||
export const PROJECT_TYPE_MAP = PROJECT_TYPE_OPTIONS.reduce((acc, cur) => {
|
||||
acc[cur.value] = cur.label;
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
|
||||
export const ROLE_DEFINITIONS = [
|
||||
{ value: "MARKETING_BUSINESS_REP", name: "市场部业务员", unique: false, summary: "获取项目基础信息,形成风险分析记录;风险通过后签订合同并下达任务通知单。" },
|
||||
{ value: "TECHNICAL_LEAD", name: "技术负责人", unique: false, summary: "评估人员专业匹配与技术可行性,审核检查表并开展评价报告技术审核。" },
|
||||
{ value: "PROCESS_CONTROL_LEAD", name: "过程控制负责人", unique: true, summary: "核查利益冲突、资质范围和人员配置,负责受控管理、程序合规审核及归档前校验。" },
|
||||
{ value: "FINANCE_STAFF", name: "财务人员", unique: false, summary: "核算人工、费用、税金和利润等全成本,评估项目经济性及合同金额合理性。" },
|
||||
{ value: "EVALUATION_AGENCY_HEAD", name: "评价机构负责人", unique: false, summary: "综合多方意见决定是否承接项目,并在全部审核通过后终审签发评价报告。" },
|
||||
{ value: "EVALUATION_DEPT_MANAGER", name: "评价部经理", unique: false, summary: "签发项目组任命文件,审核组长资格、行业经验及成员专业配置。" },
|
||||
{ value: "PROJECT_LEAD", name: "项目负责人(项目组组长)", unique: true, summary: "制定实施计划并组织启动、初勘、检查表、现场勘查、整改复查及报告编制。" },
|
||||
{ value: "PROJECT_TEAM_MEMBERS", name: "项目组各专业组员", unique: false, summary: "按专业分工开展资料收集、检查表编制、现场检查、危险辨识和评价报告专业内容编写。" },
|
||||
{ value: "INTERNAL_AUDITOR", name: "内审人", unique: false, summary: "审核报告初稿及修改结果,重点核查依据、危险辨识、单元划分、评价方法和结论。" },
|
||||
{ value: "REPORT_COMPILER", name: "报告编制人", unique: false, summary: "整合各专业内容形成报告初稿,根据各级审核意见修改并整理全过程档案。" },
|
||||
{ value: "ARCHIVES_ADMIN", name: "档案管理员", unique: false, summary: "办理档案交接、编号、分类、装订和入库,并按规定开展报告信息公开。" },
|
||||
{
|
||||
value: "MARKETING_BUSINESS_REP",
|
||||
name: "市场部业务员",
|
||||
unique: false,
|
||||
summary:
|
||||
"获取项目基础信息,形成风险分析记录;风险通过后签订合同并下达任务通知单。",
|
||||
},
|
||||
{
|
||||
value: "TECHNICAL_LEAD",
|
||||
name: "技术负责人",
|
||||
unique: false,
|
||||
summary: "评估人员专业匹配与技术可行性,审核检查表并开展评价报告技术审核。",
|
||||
},
|
||||
{
|
||||
value: "PROCESS_CONTROL_LEAD",
|
||||
name: "过程控制负责人",
|
||||
unique: true,
|
||||
summary:
|
||||
"核查利益冲突、资质范围和人员配置,负责受控管理、程序合规审核及归档前校验。",
|
||||
},
|
||||
{
|
||||
value: "FINANCE_STAFF",
|
||||
name: "财务人员",
|
||||
unique: false,
|
||||
summary:
|
||||
"核算人工、费用、税金和利润等全成本,评估项目经济性及合同金额合理性。",
|
||||
},
|
||||
{
|
||||
value: "EVALUATION_AGENCY_HEAD",
|
||||
name: "评价机构负责人",
|
||||
unique: false,
|
||||
summary:
|
||||
"综合多方意见决定是否承接项目,并在全部审核通过后终审签发评价报告。",
|
||||
},
|
||||
{
|
||||
value: "EVALUATION_DEPT_MANAGER",
|
||||
name: "评价部经理",
|
||||
unique: false,
|
||||
summary: "签发项目组任命文件,审核组长资格、行业经验及成员专业配置。",
|
||||
},
|
||||
{
|
||||
value: "PROJECT_LEAD",
|
||||
name: "项目负责人(项目组组长)",
|
||||
unique: true,
|
||||
summary:
|
||||
"制定实施计划并组织启动、初勘、检查表、现场勘查、整改复查及报告编制。",
|
||||
},
|
||||
{
|
||||
value: "PROJECT_TEAM_MEMBERS",
|
||||
name: "项目组各专业组员",
|
||||
unique: false,
|
||||
summary:
|
||||
"按专业分工开展资料收集、检查表编制、现场检查、危险辨识和评价报告专业内容编写。",
|
||||
},
|
||||
{
|
||||
value: "INTERNAL_AUDITOR",
|
||||
name: "内审人",
|
||||
unique: false,
|
||||
summary:
|
||||
"审核报告初稿及修改结果,重点核查依据、危险辨识、单元划分、评价方法和结论。",
|
||||
},
|
||||
{
|
||||
value: "REPORT_COMPILER",
|
||||
name: "报告编制人",
|
||||
unique: false,
|
||||
summary:
|
||||
"整合各专业内容形成报告初稿,根据各级审核意见修改并整理全过程档案。",
|
||||
},
|
||||
{
|
||||
value: "ARCHIVES_ADMIN",
|
||||
name: "档案管理员",
|
||||
unique: false,
|
||||
summary: "办理档案交接、编号、分类、装订和入库,并按规定开展报告信息公开。",
|
||||
},
|
||||
];
|
||||
|
||||
export const ROLE_DEFINITIONS_MAP = ROLE_DEFINITIONS.reduce((acc, cur) => {
|
||||
|
|
@ -465,11 +553,9 @@ export const ROLE_DEFINITIONS_MAP = ROLE_DEFINITIONS.reduce((acc, cur) => {
|
|||
return acc;
|
||||
}, {});
|
||||
|
||||
|
||||
export const NATIONAL_COUNTIES = (() => {
|
||||
const result = [];
|
||||
pcaCode.forEach((province) => {
|
||||
|
||||
province.children?.forEach((city) => {
|
||||
city.children?.forEach((county) => {
|
||||
result.push({
|
||||
|
|
@ -539,5 +625,3 @@ export const PROFESSIONAL_MAJOR_MAP = PROFESSIONAL_MAJOR_OPTIONS.reduce(
|
|||
(acc, cur) => ({ ...acc, [cur.value]: cur.label }),
|
||||
{},
|
||||
);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import {
|
|||
REVIEW_BUSINESS_SCOPE_OPTIONS,
|
||||
REVIEW_STATUS_CLASS,
|
||||
REVIEW_UNIT_TYPE_OPTIONS,
|
||||
toQualReviewPageQuery,
|
||||
} from "../reviewPageQuery";
|
||||
import "../QualReview/index.less";
|
||||
|
||||
|
|
@ -34,7 +33,7 @@ const ExpertVerification = (props) => {
|
|||
|
||||
const loadList = () => {
|
||||
queryReviewList({
|
||||
...toQualReviewPageQuery(router.query),
|
||||
...router.query,
|
||||
supervision: true,
|
||||
applyTypeCode: 1,
|
||||
});
|
||||
|
|
@ -173,16 +172,16 @@ const ExpertVerification = (props) => {
|
|||
options={REVIEW_BUSINESS_SCOPE_OPTIONS}
|
||||
/>
|
||||
</Form.Item>,
|
||||
<Form.Item key="confirmStatus" name="confirmStatus">
|
||||
<Form.Item key="filingStatusCode" name="filingStatusCode">
|
||||
<ControlWrapper.Select
|
||||
label="确认状态"
|
||||
placeholder="请选择"
|
||||
allowClear
|
||||
style={{ width: "100%" }}
|
||||
>
|
||||
<Select.Option value="pending">待确认</Select.Option>
|
||||
<Select.Option value="passed">确认通过</Select.Option>
|
||||
<Select.Option value="rejected">打回</Select.Option>
|
||||
<Select.Option value={2}>待确认</Select.Option>
|
||||
<Select.Option value={1}>确认通过</Select.Option>
|
||||
<Select.Option value={3}>打回</Select.Option>
|
||||
</ControlWrapper.Select>
|
||||
</Form.Item>,
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -7,36 +7,15 @@ 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 { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { FILING_STATUS_MAP_CHANGE, CHANGE_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_QUAL_REVIEW } from "~/enumerate/namespace";
|
||||
import { QUALIFICATION_INDUSTRY_OPTIONS_MAP } from "~/enumerate/enterpriseOptions";
|
||||
import { REVIEW_BUSINESS_SCOPE_OPTIONS, REVIEW_STATUS_CLASS } from "../reviewPageQuery";
|
||||
import { REVIEW_BUSINESS_SCOPE_OPTIONS } from "../reviewPageQuery";
|
||||
import "../QualReview/index.less";
|
||||
|
||||
const { router } = tools;
|
||||
|
||||
/** 变更状态筛选(原型:停滞中/待审核/已审核;对应备案状态码 3 已打回/4 变更审核中/1 已备案) */
|
||||
const CHANGE_STATUS_OPTIONS = [
|
||||
{ label: "待审核", value: 4 },
|
||||
{ label: "停滞中", value: 3 },
|
||||
{ label: "已审核", value: 1 },
|
||||
];
|
||||
|
||||
/** 变更状态配色(对齐原型 tag-warning/danger/success) */
|
||||
function changeStatusColor(name) {
|
||||
if (/待审核|审核中|变更审核中/.test(name || "")) return "warning";
|
||||
if (/已打回|停滞|退回/.test(name || "")) return "error";
|
||||
if (/已审核|已备案|通过/.test(name || "")) return "success";
|
||||
return "default";
|
||||
}
|
||||
|
||||
/**
|
||||
* 备案变更管理(原型 mod-qual-change)
|
||||
* - 搜索:机构名称 / 备案编号 / 安全评价业务范围 / 变更状态
|
||||
* - 列:复选框、序号、机构名称、机构类型、备案编号、业务范围、变更项、变更状态、操作(查看 / 审核)
|
||||
* - 查看/审核与资质初审备案一致:查看 → FilingDetail?mode=change,审核 → QualReviewForm?mode=change
|
||||
* - 变更项:后端列表 CO 未聚合(明细在 qual_filing_change_detail.change_item_name),真实接口暂显示 "-"
|
||||
* - Mock 演示默认开启:所有行展示 查看 + 审核 按钮
|
||||
*/
|
||||
const QualChange = (props) => {
|
||||
const [form] = Form.useForm();
|
||||
const { qualReview, queryQualChangePage } = props;
|
||||
|
|
@ -105,14 +84,9 @@ const QualChange = (props) => {
|
|||
title: "变更状态",
|
||||
dataIndex: "filingStatusCode",
|
||||
width: 110,
|
||||
render: (_, record) => {
|
||||
const name = record.filingStatusName || record.statusName;
|
||||
const color = changeStatusColor(name);
|
||||
return name ? (
|
||||
<Tag className={REVIEW_STATUS_CLASS[color] || "tag_default"}>{name}</Tag>
|
||||
) : (
|
||||
"--"
|
||||
);
|
||||
render: (code) => {
|
||||
const config = FILING_STATUS_MAP_CHANGE[code];
|
||||
return config ? <Tag color={config.color}>{config.label}</Tag> : "--";
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,34 +8,25 @@ import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
|
|||
import { tools } from "@cqsjjb/jjb-common-lib";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { NS_QUAL_REVIEW } from "~/enumerate/namespace";
|
||||
import { VERIFY_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { VERIFY_STATUS_MAP, FILING_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { QUALIFICATION_INDUSTRY_OPTIONS_MAP } from "~/enumerate/enterpriseOptions";
|
||||
import {
|
||||
FILING_CODE_TO_CONFIRM,
|
||||
REVIEW_BUSINESS_SCOPE_OPTIONS,
|
||||
REVIEW_STATUS_CLASS,
|
||||
REVIEW_UNIT_TYPE_OPTIONS,
|
||||
toQualReviewPageQuery,
|
||||
} from "../reviewPageQuery";
|
||||
import "../QualReview/index.less";
|
||||
|
||||
const { router } = tools;
|
||||
|
||||
/**
|
||||
* 资质备案确认(原型 mod-qual-confirm)
|
||||
* - 搜索:机构名称 / 机构类型 / 业务范围 / 确认状态
|
||||
* - 列表:复选框、序号、机构名称、机构类型、证书编号、业务范围、确认状态、操作(查看 / 确认)
|
||||
* - 查看复用 FilingDetail(六项备案内容);确认进入 QualConfirmForm(复用 FilingTabs)
|
||||
* - Mock 演示默认开启:所有行展示 查看 + 确认 按钮,便于与原型对比
|
||||
*/
|
||||
const QualConfirm = (props) => {
|
||||
const [form] = Form.useForm();
|
||||
const { qualReview, queryReviewList } = props;
|
||||
const { qualReviewList, qualReviewTotal, qualReviewLoading } = qualReview || {};
|
||||
const { qualReviewList, qualReviewTotal, qualReviewLoading } =
|
||||
qualReview || {};
|
||||
|
||||
const loadList = () => {
|
||||
queryReviewList({
|
||||
...toQualReviewPageQuery(router.query),
|
||||
...router.query,
|
||||
supervision: true,
|
||||
applyTypeCode: 3,
|
||||
});
|
||||
|
|
@ -60,29 +51,6 @@ const QualConfirm = (props) => {
|
|||
loadList();
|
||||
}, []);
|
||||
|
||||
const renderConfirmStatus = (record) => {
|
||||
const name = record.filingStatusName || record.statusName;
|
||||
if (name) {
|
||||
const color = /待确认|待核验/.test(name)
|
||||
? "warning"
|
||||
: /确认通过|已审核|通过/.test(name)
|
||||
? "success"
|
||||
: /打回|退回/.test(name)
|
||||
? "error"
|
||||
: "default";
|
||||
return <Tag className={REVIEW_STATUS_CLASS[color] || "tag_default"}>{name}</Tag>;
|
||||
}
|
||||
const status = FILING_CODE_TO_CONFIRM[Number(record.filingStatusCode)];
|
||||
const config = VERIFY_STATUS_MAP[status];
|
||||
return config ? (
|
||||
<Tag className={REVIEW_STATUS_CLASS[config.color] || "tag_default"}>
|
||||
{config.label}
|
||||
</Tag>
|
||||
) : (
|
||||
"--"
|
||||
);
|
||||
};
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: "序号",
|
||||
|
|
@ -90,7 +58,12 @@ const QualConfirm = (props) => {
|
|||
fixed: "left",
|
||||
render: (_, __, index) => index + 1,
|
||||
},
|
||||
{ title: "机构名称", dataIndex: "filingUnitName", width: 220, ellipsis: true },
|
||||
{
|
||||
title: "机构名称",
|
||||
dataIndex: "filingUnitName",
|
||||
width: 220,
|
||||
ellipsis: true,
|
||||
},
|
||||
{ title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 },
|
||||
{ title: "证书编号", dataIndex: "filingNo", width: 140, ellipsis: true },
|
||||
{
|
||||
|
|
@ -111,7 +84,10 @@ const QualConfirm = (props) => {
|
|||
title: "确认状态",
|
||||
dataIndex: "filingStatusCode",
|
||||
width: 100,
|
||||
render: (_, record) => renderConfirmStatus(record),
|
||||
render: (status) => {
|
||||
const config = FILING_STATUS_MAP[status];
|
||||
return config ? <Tag color={config.color}>{config.label}</Tag> : "--";
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
|
|
@ -131,7 +107,9 @@ const QualConfirm = (props) => {
|
|||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
onClick={() => props.history.push(`QualConfirmForm?id=${record.id}`)}
|
||||
onClick={() =>
|
||||
props.history.push(`QualConfirmForm?id=${record.id}`)
|
||||
}
|
||||
>
|
||||
确认
|
||||
</Button>
|
||||
|
|
@ -150,7 +128,11 @@ const QualConfirm = (props) => {
|
|||
loading={qualReviewLoading}
|
||||
formLine={[
|
||||
<Form.Item key="filingUnitName" name="filingUnitName">
|
||||
<ControlWrapper.Input label="机构名称" placeholder="请输入机构名称" allowClear />
|
||||
<ControlWrapper.Input
|
||||
label="机构名称"
|
||||
placeholder="请输入机构名称"
|
||||
allowClear
|
||||
/>
|
||||
</Form.Item>,
|
||||
<Form.Item key="filingUnitTypeName" name="filingUnitTypeName">
|
||||
<ControlWrapper.Select
|
||||
|
|
@ -172,16 +154,16 @@ const QualConfirm = (props) => {
|
|||
options={REVIEW_BUSINESS_SCOPE_OPTIONS}
|
||||
/>
|
||||
</Form.Item>,
|
||||
<Form.Item key="confirmStatus" name="confirmStatus">
|
||||
<Form.Item key="filingStatusCode" name="filingStatusCode">
|
||||
<ControlWrapper.Select
|
||||
label="确认状态"
|
||||
placeholder="请选择"
|
||||
allowClear
|
||||
style={{ width: "100%" }}
|
||||
>
|
||||
<Select.Option value="pending">待确认</Select.Option>
|
||||
<Select.Option value="passed">确认通过</Select.Option>
|
||||
<Select.Option value="rejected">打回</Select.Option>
|
||||
<Select.Option value={1}>确认通过</Select.Option>
|
||||
<Select.Option value={2}>待确认</Select.Option>
|
||||
<Select.Option value={3}>打回</Select.Option>
|
||||
</ControlWrapper.Select>
|
||||
</Form.Item>,
|
||||
]}
|
||||
|
|
@ -233,4 +215,7 @@ const QualConfirm = (props) => {
|
|||
);
|
||||
};
|
||||
|
||||
export default Connect([NS_QUAL_REVIEW], true)(AntdTableFuncControl(QualConfirm));
|
||||
export default Connect(
|
||||
[NS_QUAL_REVIEW],
|
||||
true,
|
||||
)(AntdTableFuncControl(QualConfirm));
|
||||
|
|
|
|||
|
|
@ -9,24 +9,17 @@ import { tools } from "@cqsjjb/jjb-common-lib";
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { NS_QUAL_REVIEW } from "~/enumerate/namespace";
|
||||
import { QUALIFICATION_INDUSTRY_OPTIONS_MAP } from "~/enumerate/enterpriseOptions";
|
||||
import { EXPERT_STATUS_MAP } from "~/enumerate/constant";
|
||||
import { EXPERT_STATUS_MAP, REVIEW_STATUS_MAP } from "~/enumerate/constant";
|
||||
import {
|
||||
REVIEW_BUSINESS_SCOPE_OPTIONS,
|
||||
REVIEW_LIST_STATUS_MAP,
|
||||
REVIEW_STATUS_CLASS,
|
||||
REVIEW_UNIT_TYPE_OPTIONS,
|
||||
toQualReviewPageQuery,
|
||||
} from "../reviewPageQuery";
|
||||
import "./index.less";
|
||||
|
||||
const { router } = tools;
|
||||
|
||||
/**
|
||||
* 资质备案初审(原型 mod-qual-review)
|
||||
* - 搜索区:机构名称 / 机构类型 / 安全评价业务范围 / 是否专家核验 / 审核状态
|
||||
* - 表格列:复选框、序号、机构名称、机构类型、证书编号、业务范围、专家核验、审核状态、操作
|
||||
* - 操作:查看(详情)、审核(非已审核状态)
|
||||
*/
|
||||
|
||||
const QualReview = (props) => {
|
||||
const [form] = Form.useForm();
|
||||
const { qualReview, queryReviewList } = props;
|
||||
|
|
@ -37,7 +30,7 @@ const QualReview = (props) => {
|
|||
*/
|
||||
const loadList = () => {
|
||||
queryReviewList({
|
||||
...toQualReviewPageQuery(router.query),
|
||||
...router.query,
|
||||
supervision: true,
|
||||
applyTypeCode: 1,
|
||||
});
|
||||
|
|
@ -62,38 +55,11 @@ const QualReview = (props) => {
|
|||
loadList();
|
||||
}, []);
|
||||
|
||||
/** 审核状态渲染:优先后端文案,缺失时按状态编码推断 */
|
||||
const renderStatus = (record) => {
|
||||
const name = record.filingStatusName || record.statusName;
|
||||
if (name) {
|
||||
const code = Number(record.filingStatusCode);
|
||||
const fallback = REVIEW_LIST_STATUS_MAP[code] || {};
|
||||
const color = /待审核|待核验/.test(name)
|
||||
? "warning"
|
||||
: /审核中/.test(name)
|
||||
? "processing"
|
||||
: /打回|退回/.test(name)
|
||||
? "error"
|
||||
: /已审核|通过|已备案/.test(name)
|
||||
? "success"
|
||||
: fallback.color || "default";
|
||||
return (
|
||||
<Tag className={REVIEW_STATUS_CLASS[color] || "tag_default"}>{name}</Tag>
|
||||
);
|
||||
}
|
||||
const config = REVIEW_LIST_STATUS_MAP[Number(record.filingStatusCode)];
|
||||
return config ? (
|
||||
<Tag className={REVIEW_STATUS_CLASS[config.color] || "tag_default"}>
|
||||
{config.label}
|
||||
</Tag>
|
||||
) : (
|
||||
"--"
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
const renderExpertStatus = (record) => {
|
||||
if (!record.needExpertCheck) {
|
||||
return <span className="expertDash">—</span>;
|
||||
return "-";
|
||||
}
|
||||
const config = EXPERT_STATUS_MAP[record.expertStatus];
|
||||
return config ? (
|
||||
|
|
@ -101,7 +67,7 @@ const QualReview = (props) => {
|
|||
{config.label}
|
||||
</Tag>
|
||||
) : (
|
||||
"--"
|
||||
"-"
|
||||
);
|
||||
};
|
||||
|
||||
|
|
@ -139,7 +105,10 @@ const QualReview = (props) => {
|
|||
title: "审核状态",
|
||||
dataIndex: "filingStatusCode",
|
||||
width: 100,
|
||||
render: (_, record) => renderStatus(record),
|
||||
render: (_, {filingStatusCode}) => {
|
||||
const config = REVIEW_STATUS_MAP[filingStatusCode];
|
||||
return config ? <Tag color={config.color}>{config.label}</Tag> : '--';
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
|
|
@ -154,7 +123,6 @@ const QualReview = (props) => {
|
|||
>
|
||||
查看
|
||||
</Button>
|
||||
{/* 仅已审核状态不可审核 */}
|
||||
{Number(record.filingStatusCode) !== 1 && (
|
||||
<Button
|
||||
type="link"
|
||||
|
|
@ -218,9 +186,9 @@ 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>
|
||||
<Select.Option value={1}>审核通过</Select.Option>
|
||||
<Select.Option value={2}>审核中</Select.Option>
|
||||
<Select.Option value={3}>打回</Select.Option>
|
||||
</ControlWrapper.Select>
|
||||
</Form.Item>,
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,13 @@ const ReviewModal = (props) => {
|
|||
onCancel,
|
||||
onSuccess,
|
||||
} = props;
|
||||
const { qualExpert, qualReview, queryExpertPage, reviewSubmit, changeReviewSubmit } = props;
|
||||
const {
|
||||
qualExpert,
|
||||
qualReview,
|
||||
queryExpertPage,
|
||||
reviewSubmit,
|
||||
changeReviewSubmit,
|
||||
} = props;
|
||||
const { qualExpertList } = qualExpert || {};
|
||||
const { qualReviewSubmitLoading } = qualReview || {};
|
||||
|
||||
|
|
@ -60,7 +66,9 @@ const ReviewModal = (props) => {
|
|||
);
|
||||
|
||||
const doSubmit = async (values, passQuick) => {
|
||||
const selected = expertOptions.find((o) => o.value === values.filingExpertId);
|
||||
const selected = expertOptions.find(
|
||||
(o) => o.value === values.filingExpertId,
|
||||
);
|
||||
const result = passQuick ? 1 : values.reviewResult;
|
||||
const resultLabel =
|
||||
REVIEW_RESULT_OPTIONS.find((r) => r.value === result)?.label || "通过";
|
||||
|
|
@ -108,15 +116,15 @@ const ReviewModal = (props) => {
|
|||
footer={
|
||||
<div style={{ display: "flex", justifyContent: "flex-end", gap: 8 }}>
|
||||
<Button onClick={onCancel}>取消</Button>
|
||||
<Button loading={qualReviewSubmitLoading} onClick={handleSubmit}>
|
||||
📤 提交
|
||||
<Button loading={qualReviewSubmitLoading} onClick={handlePass}>
|
||||
通过
|
||||
</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
loading={qualReviewSubmitLoading}
|
||||
onClick={handlePass}
|
||||
onClick={handleSubmit}
|
||||
type="primary"
|
||||
>
|
||||
✅ 通过
|
||||
提交
|
||||
</Button>
|
||||
</div>
|
||||
}
|
||||
|
|
@ -130,7 +138,13 @@ const ReviewModal = (props) => {
|
|||
marginBottom: "1rem",
|
||||
}}
|
||||
>
|
||||
<div style={{ fontSize: "0.88rem", fontWeight: 600, marginBottom: "0.5rem" }}>
|
||||
<div
|
||||
style={{
|
||||
fontSize: "0.88rem",
|
||||
fontWeight: 600,
|
||||
marginBottom: "0.5rem",
|
||||
}}
|
||||
>
|
||||
📊 评价分析
|
||||
</div>
|
||||
<div
|
||||
|
|
@ -142,32 +156,45 @@ const ReviewModal = (props) => {
|
|||
>
|
||||
<div style={statStyle}>
|
||||
<div style={statLabelStyle}>已核验材料</div>
|
||||
<div style={{ fontSize: "1.1rem", fontWeight: 700, color: "#059669" }}>
|
||||
<div
|
||||
style={{ fontSize: "1.1rem", fontWeight: 700, color: "#059669" }}
|
||||
>
|
||||
{totalChecked}
|
||||
</div>
|
||||
</div>
|
||||
<div style={statStyle}>
|
||||
<div style={statLabelStyle}>符合</div>
|
||||
<div style={{ fontSize: "1.1rem", fontWeight: 700, color: "#059669" }}>
|
||||
<div
|
||||
style={{ fontSize: "1.1rem", fontWeight: 700, color: "#059669" }}
|
||||
>
|
||||
{legalPassCount}
|
||||
</div>
|
||||
</div>
|
||||
<div style={statStyle}>
|
||||
<div style={statLabelStyle}>不符合</div>
|
||||
<div style={{ fontSize: "1.1rem", fontWeight: 700, color: "#dc2626" }}>
|
||||
<div
|
||||
style={{ fontSize: "1.1rem", fontWeight: 700, color: "#dc2626" }}
|
||||
>
|
||||
{legalFailCount}
|
||||
</div>
|
||||
</div>
|
||||
<div style={statStyle}>
|
||||
<div style={statLabelStyle}>风险提醒</div>
|
||||
<div style={{ fontSize: "1.1rem", fontWeight: 700, color: "#d97706" }}>
|
||||
<div
|
||||
style={{ fontSize: "1.1rem", fontWeight: 700, color: "#d97706" }}
|
||||
>
|
||||
{legalWarnCount}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Form form={form} layout="vertical" style={{ marginTop: "0.5rem" }} scrollToFirstError>
|
||||
<Form
|
||||
form={form}
|
||||
layout="vertical"
|
||||
style={{ marginTop: "0.5rem" }}
|
||||
scrollToFirstError
|
||||
>
|
||||
<Form.Item
|
||||
label="审核结果"
|
||||
name="reviewResult"
|
||||
|
|
@ -198,7 +225,11 @@ const ReviewModal = (props) => {
|
|||
name="reviewOpinion"
|
||||
rules={[{ required: true, message: "请输入综合审核意见" }]}
|
||||
>
|
||||
<TextArea rows={3} placeholder="请输入综合审核意见..." maxLength={200} />
|
||||
<TextArea
|
||||
rows={3}
|
||||
placeholder="请输入综合审核意见..."
|
||||
maxLength={200}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</Modal>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,6 @@
|
|||
import { QUALIFICATION_INDUSTRY_OPTIONS } from "~/enumerate/enterpriseOptions";
|
||||
import { FILING_UNIT_TYPE_OPTIONS } from "~/enumerate/qualFilingOptions";
|
||||
|
||||
/** 确认状态筛选值 -> 备案状态编码 */
|
||||
const CONFIRM_STATUS_TO_FILING_CODE = {
|
||||
pending: 2,
|
||||
passed: 1,
|
||||
rejected: 3,
|
||||
};
|
||||
|
||||
/** 备案状态编码 -> 确认状态展示 */
|
||||
export const FILING_CODE_TO_CONFIRM = {
|
||||
2: "pending",
|
||||
|
|
@ -50,25 +43,3 @@ export const REVIEW_RESULT_OPTIONS = [
|
|||
{ label: "待定", value: 2 },
|
||||
{ label: "不通过", value: 3 },
|
||||
];
|
||||
|
||||
/** 资质审核列表查询参数映射 */
|
||||
export function toQualReviewPageQuery(query = {}) {
|
||||
const { confirmStatus, orgType, filingUnitTypeName, filingStatusCode, needExpertCheck, ...rest } = query;
|
||||
const params = { ...rest };
|
||||
const unitType = filingUnitTypeName || orgType;
|
||||
if (unitType) {
|
||||
params.filingUnitTypeName = unitType;
|
||||
}
|
||||
if (needExpertCheck) {
|
||||
params.needExpertCheck = needExpertCheck;
|
||||
}
|
||||
const statusKey = confirmStatus || filingStatusCode;
|
||||
if (statusKey && CONFIRM_STATUS_TO_FILING_CODE[statusKey] != null) {
|
||||
params.filingStatusCode = CONFIRM_STATUS_TO_FILING_CODE[statusKey];
|
||||
} else if (filingStatusCode !== undefined && filingStatusCode !== null && filingStatusCode !== "") {
|
||||
params.filingStatusCode = Number(filingStatusCode);
|
||||
}
|
||||
delete params.confirmStatus;
|
||||
delete params.orgType;
|
||||
return params;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue