feat
parent
1060c7126e
commit
fc8b18eaec
|
|
@ -127,4 +127,10 @@ export const queryOrgSelectList = declareRequest(
|
||||||
export const fetchQualOnSiteReviewResultDetail = declareRequest(
|
export const fetchQualOnSiteReviewResultDetail = declareRequest(
|
||||||
"siteReviewResultLoading",
|
"siteReviewResultLoading",
|
||||||
"Get > /safetyEval/qual-on-site-review/result-detail/{id}",
|
"Get > /safetyEval/qual-on-site-review/result-detail/{id}",
|
||||||
|
);
|
||||||
|
|
||||||
|
export const queryQualOnSiteReviewOrgPage = declareRequest(
|
||||||
|
"siteReviewNoticeLoading",
|
||||||
|
"Get > /safetyEval/qual-on-site-review/org/page",
|
||||||
|
'orgSiteReviewList: [] | res.data || [] & orgSiteReviewTotal: 0 | res.total || 0',
|
||||||
);
|
);
|
||||||
|
|
@ -177,6 +177,11 @@ const menuItems = [
|
||||||
label: "备案变更管理",
|
label: "备案变更管理",
|
||||||
icon: <SyncOutlined />,
|
icon: <SyncOutlined />,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: "/safetyEval/container/qualApplication/SiteReviewNotice",
|
||||||
|
label: "现场审查通知",
|
||||||
|
icon: <FileTextOutlined />,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,247 @@
|
||||||
|
import React, { useState, useEffect } from "react";
|
||||||
|
import {
|
||||||
|
Form,
|
||||||
|
Table,
|
||||||
|
Button,
|
||||||
|
Tag,
|
||||||
|
Modal,
|
||||||
|
Select,
|
||||||
|
Descriptions,
|
||||||
|
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_QUAL_REVIEW } from "~/enumerate/namespace";
|
||||||
|
import { ON_SITE_REVIEW_STATUS_MAP } from "~/enumerate/constant";
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { tools } from "@cqsjjb/jjb-common-lib";
|
||||||
|
import "./index.less";
|
||||||
|
|
||||||
|
const { router } = tools;
|
||||||
|
|
||||||
|
const BIZ_TYPE_MAP = {
|
||||||
|
add: "新申请资质",
|
||||||
|
change: "资质变更",
|
||||||
|
};
|
||||||
|
|
||||||
|
const SiteReviewNotice = (props) => {
|
||||||
|
const [searchForm] = Form.useForm();
|
||||||
|
const [detailModalVisible, setDetailModalVisible] = useState(false);
|
||||||
|
const [currentRecord, setCurrentRecord] = useState(null);
|
||||||
|
|
||||||
|
const {
|
||||||
|
qualReview,
|
||||||
|
queryQualOnSiteReviewOrgPage,
|
||||||
|
} = props;
|
||||||
|
|
||||||
|
const {
|
||||||
|
orgSiteReviewList = [],
|
||||||
|
orgSiteReviewTotal = 0,
|
||||||
|
siteReviewNoticeLoading,
|
||||||
|
} = qualReview || {};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
searchForm.setFieldsValue(router.query);
|
||||||
|
getData();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const getData = () => {
|
||||||
|
queryQualOnSiteReviewPage({
|
||||||
|
...router.query,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const queryQualOnSiteReviewPage = (params) => {
|
||||||
|
router.query = params;
|
||||||
|
queryQualOnSiteReviewOrgPage(params);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSearch = (values) => {
|
||||||
|
const { reviewDateRange, ...rest } = values;
|
||||||
|
queryQualOnSiteReviewPage({
|
||||||
|
...router.query,
|
||||||
|
...rest,
|
||||||
|
...(reviewDateRange?.[0] && { reviewDateStartBegin: reviewDateRange[0].format("YYYY-MM-DD") }),
|
||||||
|
...(reviewDateRange?.[1] && { reviewDateStartEnd: reviewDateRange[1].format("YYYY-MM-DD") }),
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleReset = (values) => {
|
||||||
|
searchForm.resetFields();
|
||||||
|
queryQualOnSiteReviewPage({ ...values, current: 1, size: 10 });
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleViewDetail = (record) => {
|
||||||
|
setCurrentRecord(record);
|
||||||
|
setDetailModalVisible(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleConfirm = (record) => {
|
||||||
|
Modal.confirm({
|
||||||
|
title: "确认现场审查安排",
|
||||||
|
content: `确定确认项目"${record.id}"的现场审查安排吗?确认后将反馈至监管端。`,
|
||||||
|
onOk: async () => {
|
||||||
|
// TODO: 调用确认接口
|
||||||
|
message.success("现场审查安排已确认");
|
||||||
|
getData();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ title: "通知编号", dataIndex: "id", width: 110 ,ellipsis: true },
|
||||||
|
{
|
||||||
|
title: "申请事项",
|
||||||
|
dataIndex: "bizType",
|
||||||
|
width: 120,
|
||||||
|
render: (v) => BIZ_TYPE_MAP[v] || v || "-",
|
||||||
|
},
|
||||||
|
{ title: "监管部门", dataIndex: "supervisorContact", width: 130, ellipsis: true },
|
||||||
|
{ title: "现场审查时间", dataIndex: "reviewDateStart", width: 180 },
|
||||||
|
{ title: "审查地点", dataIndex: "reviewLocation", width: 180, ellipsis: true },
|
||||||
|
{ title: "审查组", dataIndex: "reviewMembers", width: 130, ellipsis: true },
|
||||||
|
{
|
||||||
|
title: "材料准备",
|
||||||
|
dataIndex: "materialRequirements",
|
||||||
|
width: 160,
|
||||||
|
ellipsis: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "状态",
|
||||||
|
dataIndex: "status",
|
||||||
|
width: 110,
|
||||||
|
render: (status) => {
|
||||||
|
const cfg = ON_SITE_REVIEW_STATUS_MAP[status];
|
||||||
|
return cfg ? <Tag color={cfg.color}>{cfg.label}</Tag> : (status || "-");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 180,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<TableAction>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
|
||||||
|
onClick={() => handleViewDetail(record)}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
{record.status === "AGENCY_PENDING_CONFIRMATION" && (
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
|
||||||
|
onClick={() => handleConfirm(record)}
|
||||||
|
>
|
||||||
|
确认安排
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</TableAction>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<PageLayout title="现场审查通知">
|
||||||
|
|
||||||
|
|
||||||
|
<SearchForm
|
||||||
|
form={searchForm}
|
||||||
|
loading={siteReviewNoticeLoading}
|
||||||
|
style={{ marginBottom: 16 }}
|
||||||
|
formLine={[
|
||||||
|
<Form.Item key="keyword" name="keyword">
|
||||||
|
<ControlWrapper.Input
|
||||||
|
label="通知编号"
|
||||||
|
placeholder="请输入通知编号"
|
||||||
|
allowClear
|
||||||
|
/>
|
||||||
|
</Form.Item>,
|
||||||
|
<Form.Item key="bizType" name="bizType">
|
||||||
|
<ControlWrapper.Select label="申请事项" placeholder="全部" allowClear style={{ width: "100%" }}>
|
||||||
|
<Select.Option value="add">新申请资质</Select.Option>
|
||||||
|
<Select.Option value="change">资质变更</Select.Option>
|
||||||
|
</ControlWrapper.Select>
|
||||||
|
</Form.Item>,
|
||||||
|
<Form.Item key="reviewDateRange" name="reviewDateRange">
|
||||||
|
<ControlWrapper.DatePicker.RangePicker label="审查日期" placeholder={["开始日期", "结束日期"]} />
|
||||||
|
</Form.Item>,
|
||||||
|
<Form.Item key="status" name="status">
|
||||||
|
<ControlWrapper.Select label="确认状态" placeholder="全部" allowClear style={{ width: "100%" }}>
|
||||||
|
{Object.entries(ON_SITE_REVIEW_STATUS_MAP).map(([value, cfg]) => (
|
||||||
|
<Select.Option key={value} value={value}>{cfg.label}</Select.Option>
|
||||||
|
))}
|
||||||
|
</ControlWrapper.Select>
|
||||||
|
</Form.Item>,
|
||||||
|
]}
|
||||||
|
onFinish={handleSearch}
|
||||||
|
onReset={handleReset}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Table
|
||||||
|
rowKey="id"
|
||||||
|
columns={columns}
|
||||||
|
dataSource={orgSiteReviewList}
|
||||||
|
loading={siteReviewNoticeLoading}
|
||||||
|
scroll={{ y: props.scrollY, x: 1300 }}
|
||||||
|
pagination={{
|
||||||
|
total: orgSiteReviewTotal,
|
||||||
|
showSizeChanger: true,
|
||||||
|
showQuickJumper: true,
|
||||||
|
showTotal: (total) => `共 ${total} 条`,
|
||||||
|
current: Number(router.query.current) || 1,
|
||||||
|
pageSize: Number(router.query.size) || 10,
|
||||||
|
onChange: (page, pageSize) => {
|
||||||
|
queryQualOnSiteReviewPage({ ...router.query, current: page, size: pageSize });
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
title="现场审查通知详情"
|
||||||
|
open={detailModalVisible}
|
||||||
|
onCancel={() => setDetailModalVisible(false)}
|
||||||
|
footer={null}
|
||||||
|
width={680}
|
||||||
|
destroyOnHide={true}
|
||||||
|
>
|
||||||
|
{currentRecord && (
|
||||||
|
<Descriptions column={2} bordered size="small">
|
||||||
|
<Descriptions.Item label="通知编号">{currentRecord.id}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="申请事项">
|
||||||
|
{BIZ_TYPE_MAP[currentRecord.bizType] || currentRecord.bizType || "-"}
|
||||||
|
</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="监管联系人">{currentRecord.supervisorContact || "-"}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="联系电话">{currentRecord.contactPhone || "-"}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="现场审查时间" span={2}>{currentRecord.reviewDateStart || "-"}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="审查地点" span={2}>{currentRecord.reviewLocation || "-"}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="审查组成员" span={2}>{currentRecord.reviewMembers || "-"}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="审查组长">{currentRecord.reviewLeader || "-"}</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="状态">
|
||||||
|
<Tag color={ON_SITE_REVIEW_STATUS_MAP[currentRecord.status]?.color}>
|
||||||
|
{ON_SITE_REVIEW_STATUS_MAP[currentRecord.status]?.label || currentRecord.status}
|
||||||
|
</Tag>
|
||||||
|
</Descriptions.Item>
|
||||||
|
<Descriptions.Item label="材料准备要求" span={2}>
|
||||||
|
{currentRecord.materialRequirements || "-"}
|
||||||
|
</Descriptions.Item>
|
||||||
|
</Descriptions>
|
||||||
|
)}
|
||||||
|
</Modal>
|
||||||
|
</PageLayout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Connect(
|
||||||
|
[NS_QUAL_REVIEW],
|
||||||
|
true,
|
||||||
|
)(AntdTableFuncControl(SiteReviewNotice));
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
.srn {
|
||||||
|
&-search-form {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-sub {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -246,12 +246,12 @@ const EvalProjectCreate = (props) => {
|
||||||
</Row>
|
</Row>
|
||||||
<Row gutter={24}>
|
<Row gutter={24}>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="planStartDate" label="项目开始时间">
|
<Form.Item name="planStartDate" label="项目开始时间" rules={[{ required: true, message: "请选择项目开始时间" }]}>
|
||||||
<DatePicker style={{ width: "100%" }} placeholder="请选择" />
|
<DatePicker style={{ width: "100%" }} placeholder="请选择" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="planEndDate" label="项目完成时间">
|
<Form.Item name="planEndDate" label="项目完成时间" rules={[{ required: true, message: "请选择项目完成时间" }]}>
|
||||||
<DatePicker style={{ width: "100%" }} placeholder="请选择" />
|
<DatePicker style={{ width: "100%" }} placeholder="请选择" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Col>
|
</Col>
|
||||||
|
|
@ -259,6 +259,7 @@ const EvalProjectCreate = (props) => {
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name="industryCode"
|
name="industryCode"
|
||||||
label="所属行业"
|
label="所属行业"
|
||||||
|
rules={[{ required: true, message: "请选择所属行业" }]}
|
||||||
|
|
||||||
>
|
>
|
||||||
<Select placeholder="请选择" allowClear>
|
<Select placeholder="请选择" allowClear>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue