2026-06-23 18:07:30 +08:00
|
|
|
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
2026-06-29 16:45:58 +08:00
|
|
|
|
import {
|
|
|
|
|
|
Button,
|
|
|
|
|
|
Col,
|
|
|
|
|
|
DatePicker,
|
|
|
|
|
|
Form,
|
|
|
|
|
|
Input,
|
|
|
|
|
|
InputNumber,
|
|
|
|
|
|
message,
|
|
|
|
|
|
Row,
|
|
|
|
|
|
Select,
|
|
|
|
|
|
Space,
|
2026-07-14 11:29:29 +08:00
|
|
|
|
Flex,
|
2026-06-29 16:45:58 +08:00
|
|
|
|
} from "antd";
|
2026-07-02 11:00:31 +08:00
|
|
|
|
import AttachmentUpload from "~/components/AttachmentUpload";
|
2026-07-14 10:09:08 +08:00
|
|
|
|
import BaiduMapPicker from "~/components/BaiduMapPicker";
|
2026-06-29 16:45:58 +08:00
|
|
|
|
import dayjs from "dayjs";
|
2026-06-23 18:07:30 +08:00
|
|
|
|
import { useEffect, useState } from "react";
|
2026-06-29 16:45:58 +08:00
|
|
|
|
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
|
|
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
|
CHONGQING_DISTRICTS,
|
|
|
|
|
|
ENTERPRISE_SCALE_OPTIONS,
|
|
|
|
|
|
ENTERPRISE_STATUS_OPTIONS,
|
2026-07-09 13:15:13 +08:00
|
|
|
|
REGISTERED_ORG_FILING_RECORD_STATUS_OPTIONS,
|
2026-07-08 18:14:50 +08:00
|
|
|
|
REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS,
|
2026-07-14 11:29:29 +08:00
|
|
|
|
QUALIFICATION_INDUSTRY_OPTIONS,
|
|
|
|
|
|
ECONOMY_INDUSTRY_OPTIONS,
|
2026-06-29 16:45:58 +08:00
|
|
|
|
} from "~/enumerate/enterpriseOptions";
|
2026-06-23 18:07:30 +08:00
|
|
|
|
import { NS_ORG_INFO } from "~/enumerate/namespace";
|
2026-07-09 13:15:13 +08:00
|
|
|
|
|
2026-06-29 16:45:58 +08:00
|
|
|
|
import {
|
2026-07-09 09:43:00 +08:00
|
|
|
|
coordinatePairRule,
|
2026-06-29 16:45:58 +08:00
|
|
|
|
creditCodeRule,
|
|
|
|
|
|
latitudeRule,
|
|
|
|
|
|
longitudeRule,
|
|
|
|
|
|
nonNegativeIntegerRule,
|
2026-07-09 09:43:00 +08:00
|
|
|
|
normalizeUrl,
|
2026-06-29 16:45:58 +08:00
|
|
|
|
phoneRule,
|
|
|
|
|
|
positiveNumberRule,
|
|
|
|
|
|
urlRule,
|
|
|
|
|
|
} from "~/utils/validators";
|
2026-06-24 11:58:57 +08:00
|
|
|
|
|
2026-06-23 18:07:30 +08:00
|
|
|
|
function OrgInfoPage(props) {
|
|
|
|
|
|
const [form] = Form.useForm();
|
2026-06-29 16:45:58 +08:00
|
|
|
|
const { orgInfoLoading } = props.orgInfo;
|
2026-06-23 18:07:30 +08:00
|
|
|
|
const [editing, setEditing] = useState(true);
|
|
|
|
|
|
const [submitting, setSubmitting] = useState(false);
|
|
|
|
|
|
const [detail, setDetail] = useState({});
|
2026-07-14 10:09:08 +08:00
|
|
|
|
const [mapPickerVisible, setMapPickerVisible] = useState(false);
|
2026-06-24 11:58:57 +08:00
|
|
|
|
/** 是否已存在机构数据(有 id 视为已入库,只能修改) */
|
|
|
|
|
|
const [hasExistingData, setHasExistingData] = useState(false);
|
2026-06-23 18:07:30 +08:00
|
|
|
|
|
|
|
|
|
|
const loadDetail = async () => {
|
|
|
|
|
|
try {
|
2026-06-29 16:45:58 +08:00
|
|
|
|
const res = await props.orgInfoGet();
|
2026-06-24 11:58:57 +08:00
|
|
|
|
if (res?.data?.id) {
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setDetail(res.data);
|
2026-06-29 16:45:58 +08:00
|
|
|
|
form.setFieldsValue({
|
|
|
|
|
|
...res.data,
|
|
|
|
|
|
productionDate: res.data.productionDate
|
|
|
|
|
|
? dayjs(res.data.productionDate)
|
|
|
|
|
|
: undefined,
|
2026-07-09 13:15:13 +08:00
|
|
|
|
attachmentUrls: res.data.attachmentUrls
|
|
|
|
|
|
? JSON.parse(res.data.attachmentUrls)
|
|
|
|
|
|
: null,
|
2026-06-29 16:45:58 +08:00
|
|
|
|
});
|
2026-06-24 11:58:57 +08:00
|
|
|
|
setHasExistingData(true);
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setEditing(false);
|
2026-06-29 16:45:58 +08:00
|
|
|
|
} else {
|
2026-06-24 11:58:57 +08:00
|
|
|
|
setDetail({});
|
|
|
|
|
|
setHasExistingData(false);
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setEditing(true);
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
} catch (err) {
|
2026-06-23 18:07:30 +08:00
|
|
|
|
console.warn("[OrgInfo] loadDetail failed:", err);
|
2026-06-24 11:58:57 +08:00
|
|
|
|
setDetail({});
|
|
|
|
|
|
setHasExistingData(false);
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setEditing(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
loadDetail();
|
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
2026-06-24 11:58:57 +08:00
|
|
|
|
const handleCancelEdit = () => {
|
2026-07-09 13:15:13 +08:00
|
|
|
|
setEditing(false);
|
2026-06-24 11:58:57 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-06-23 18:07:30 +08:00
|
|
|
|
const handleSave = async (submitType) => {
|
|
|
|
|
|
try {
|
2026-06-29 16:45:58 +08:00
|
|
|
|
const formValues = await form.validateFields();
|
|
|
|
|
|
const values = {
|
|
|
|
|
|
...formValues,
|
|
|
|
|
|
productionDate: formValues.productionDate
|
|
|
|
|
|
? dayjs(formValues.productionDate).format("YYYY-MM-DD")
|
|
|
|
|
|
: undefined,
|
2026-07-09 13:15:13 +08:00
|
|
|
|
attachmentUrls: formValues.attachmentUrls
|
|
|
|
|
|
? JSON.stringify(formValues.attachmentUrls)
|
|
|
|
|
|
: null,
|
2026-07-09 09:43:00 +08:00
|
|
|
|
infoDisclosureUrl: formValues.infoDisclosureUrl
|
|
|
|
|
|
? normalizeUrl(formValues.infoDisclosureUrl)
|
|
|
|
|
|
: undefined,
|
2026-07-06 16:22:51 +08:00
|
|
|
|
authStatusCode: submitType === "draft" ? 0 : 1,
|
|
|
|
|
|
authStatusName: submitType === "draft" ? "草稿" : "已提交",
|
2026-06-29 16:45:58 +08:00
|
|
|
|
};
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setSubmitting(true);
|
2026-06-24 11:58:57 +08:00
|
|
|
|
|
|
|
|
|
|
let request;
|
|
|
|
|
|
if (hasExistingData) {
|
2026-07-06 16:22:51 +08:00
|
|
|
|
request = props.orgInfoModify;
|
2026-06-24 11:58:57 +08:00
|
|
|
|
values.id = detail.id;
|
2026-06-29 16:45:58 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
request =
|
|
|
|
|
|
submitType === "draft" ? props.orgInfoDraft : props.orgInfoSave;
|
2026-06-24 11:58:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-23 18:07:30 +08:00
|
|
|
|
const res = await request(values);
|
|
|
|
|
|
if (res?.success !== false) {
|
2026-06-24 11:58:57 +08:00
|
|
|
|
message.success(
|
|
|
|
|
|
hasExistingData
|
|
|
|
|
|
? "修改成功"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
: submitType === "draft"
|
|
|
|
|
|
? "暂存成功"
|
|
|
|
|
|
: "提交成功",
|
2026-06-24 11:58:57 +08:00
|
|
|
|
);
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setEditing(false);
|
|
|
|
|
|
loadDetail();
|
|
|
|
|
|
}
|
2026-07-09 13:15:13 +08:00
|
|
|
|
} finally {
|
2026-06-23 18:07:30 +08:00
|
|
|
|
setSubmitting(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
2026-07-14 10:09:08 +08:00
|
|
|
|
const handleMapConfirm = ({ lng, lat }) => {
|
|
|
|
|
|
form.setFieldsValue({ longitude: lng, latitude: lat });
|
|
|
|
|
|
setMapPickerVisible(false);
|
|
|
|
|
|
};
|
2026-06-23 18:07:30 +08:00
|
|
|
|
|
|
|
|
|
|
return (
|
2026-06-29 16:45:58 +08:00
|
|
|
|
<PageLayout
|
2026-06-30 18:30:30 +08:00
|
|
|
|
title={
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>机构信息管理</span>
|
2026-07-06 16:22:51 +08:00
|
|
|
|
<div className="pageLayout-extra">
|
2026-06-30 18:30:30 +08:00
|
|
|
|
新成立或首次使用系统的安全评价机构,可通过系统提供的引导页面,详细填写机构的基本信息。
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
extra={
|
|
|
|
|
|
hasExistingData &&
|
|
|
|
|
|
!editing && (
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Button
|
|
|
|
|
|
type="primary"
|
|
|
|
|
|
loading={orgInfoLoading}
|
|
|
|
|
|
onClick={() => setEditing(true)}
|
|
|
|
|
|
>
|
2026-06-23 18:07:30 +08:00
|
|
|
|
修改
|
|
|
|
|
|
</Button>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Form form={form} labelCol={{ span: 10 }} disabled={!editing}>
|
|
|
|
|
|
<Row gutter={[16, 16]}>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="unitName"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="生产经营单位名称"
|
|
|
|
|
|
rules={[{ required: true, message: "请输入生产经营单位名称" }]}
|
|
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入生产经营单位名称"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={200}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="creditCode"
|
|
|
|
|
|
label="统一社会信用代码"
|
|
|
|
|
|
rules={[creditCodeRule(true)]}
|
|
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入统一社会信用代码"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={18}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-14 11:29:29 +08:00
|
|
|
|
name="safetyIndustryCategoryCode"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="安全生产监管行业类别"
|
|
|
|
|
|
rules={[
|
2026-07-14 11:29:29 +08:00
|
|
|
|
{ required: true, message: "请选择安全生产监管行业类别" },
|
2026-06-29 16:45:58 +08:00
|
|
|
|
]}
|
|
|
|
|
|
>
|
2026-07-14 11:29:29 +08:00
|
|
|
|
<Select
|
|
|
|
|
|
options={QUALIFICATION_INDUSTRY_OPTIONS}
|
2026-07-14 16:51:18 +08:00
|
|
|
|
// mode="multiple"
|
2026-07-14 11:29:29 +08:00
|
|
|
|
placeholder="请选择安全生产监管行业类别"
|
2026-07-14 10:09:08 +08:00
|
|
|
|
allowClear
|
2026-07-14 11:29:29 +08:00
|
|
|
|
onChange={(value, option) => {
|
|
|
|
|
|
form.setFieldValue(
|
|
|
|
|
|
"safetyIndustryCategoryName",
|
2026-07-14 16:51:18 +08:00
|
|
|
|
option?.label || "",
|
|
|
|
|
|
//option?.map((item) => item.label).join(",") || "",
|
2026-07-14 11:29:29 +08:00
|
|
|
|
);
|
|
|
|
|
|
}}
|
2026-07-14 10:09:08 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-14 11:29:29 +08:00
|
|
|
|
<Form.Item name="safetyIndustryCategoryName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-10 17:11:22 +08:00
|
|
|
|
name="districtCode"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="属地"
|
|
|
|
|
|
rules={[{ required: true, message: "请选择属地" }]}
|
|
|
|
|
|
>
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Select
|
2026-07-06 16:22:51 +08:00
|
|
|
|
options={CHONGQING_DISTRICTS}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
placeholder="请选择属地"
|
|
|
|
|
|
allowClear
|
2026-07-10 17:11:22 +08:00
|
|
|
|
onChange={(value, option) => {
|
|
|
|
|
|
form.setFieldValue("districtName", option?.label || "");
|
|
|
|
|
|
}}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
<Form.Item name="districtName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="townStreet"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="所属镇、街道"
|
|
|
|
|
|
rules={[{ required: true, message: "请输入所属镇街道" }]}
|
|
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入所属镇街道"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={100}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-06 16:22:51 +08:00
|
|
|
|
<Form.Item name="villageCommunity" label="属村(社区)">
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入属村(社区)"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={100}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Form.Item label="所在地坐标经度">
|
|
|
|
|
|
<Flex>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="longitude"
|
|
|
|
|
|
noStyle
|
|
|
|
|
|
dependencies={["latitude"]}
|
|
|
|
|
|
rules={[
|
|
|
|
|
|
{
|
|
|
|
|
|
validator(_, value) {
|
|
|
|
|
|
const latitude = form.getFieldValue("latitude");
|
|
|
|
|
|
if (
|
|
|
|
|
|
value !== undefined &&
|
|
|
|
|
|
value !== null &&
|
|
|
|
|
|
value !== "" &&
|
|
|
|
|
|
(latitude === undefined ||
|
|
|
|
|
|
latitude === null ||
|
|
|
|
|
|
latitude === "")
|
|
|
|
|
|
) {
|
|
|
|
|
|
return Promise.reject(
|
|
|
|
|
|
new Error("填写经度后,纬度必填"),
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
return Promise.resolve();
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<InputNumber
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
min={-180}
|
|
|
|
|
|
max={180}
|
|
|
|
|
|
precision={6}
|
|
|
|
|
|
placeholder="请输入经度"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
|
|
|
|
|
|
<Button onClick={() => setMapPickerVisible(true)}>选择</Button>
|
|
|
|
|
|
</Flex>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="latitude"
|
|
|
|
|
|
label="所在地坐标纬度"
|
2026-07-09 09:43:00 +08:00
|
|
|
|
dependencies={["longitude"]}
|
|
|
|
|
|
rules={[
|
|
|
|
|
|
latitudeRule(false),
|
|
|
|
|
|
coordinatePairRule("longitude", "纬度", "经度"),
|
|
|
|
|
|
]}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
>
|
|
|
|
|
|
<InputNumber
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
min={-90}
|
|
|
|
|
|
max={90}
|
|
|
|
|
|
precision={6}
|
|
|
|
|
|
placeholder="请输入纬度"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="registerAddress"
|
|
|
|
|
|
label="注册地址"
|
|
|
|
|
|
rules={[{ required: true, message: "请输入注册地址" }]}
|
|
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input.TextArea
|
|
|
|
|
|
rows={3}
|
|
|
|
|
|
placeholder="请输入注册地址"
|
|
|
|
|
|
maxLength={200}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="businessAddress"
|
|
|
|
|
|
label="经营地址"
|
|
|
|
|
|
rules={[{ required: true, message: "请输入经营地址" }]}
|
|
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input.TextArea
|
|
|
|
|
|
rows={3}
|
|
|
|
|
|
placeholder="请输入经营地址"
|
|
|
|
|
|
maxLength={200}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-06 16:22:51 +08:00
|
|
|
|
<Form.Item name="ownershipTypeName" label="归属类型">
|
2026-07-13 16:07:51 +08:00
|
|
|
|
<Input placeholder="请输入归属类型" allowClear maxLength={50} />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="economyIndustryCode"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="国民经济行业分类(GB/T4754-2017)"
|
|
|
|
|
|
>
|
2026-07-14 11:29:29 +08:00
|
|
|
|
<Select
|
|
|
|
|
|
options={ECONOMY_INDUSTRY_OPTIONS}
|
|
|
|
|
|
placeholder="请选择国民经济行业分类"
|
2026-07-14 10:09:08 +08:00
|
|
|
|
allowClear
|
2026-07-14 11:29:29 +08:00
|
|
|
|
onChange={(value, option) => {
|
|
|
|
|
|
form.setFieldValue(
|
|
|
|
|
|
"economyIndustryName",
|
|
|
|
|
|
option?.label || "",
|
|
|
|
|
|
);
|
|
|
|
|
|
}}
|
2026-07-14 10:09:08 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-14 11:29:29 +08:00
|
|
|
|
<Form.Item name="economyIndustryName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="legalRepresentative"
|
|
|
|
|
|
label="法定代表人"
|
|
|
|
|
|
rules={[{ required: true, message: "请输入法定代表人" }]}
|
|
|
|
|
|
>
|
2026-07-13 16:07:51 +08:00
|
|
|
|
<Input placeholder="请输入法定代表人" allowClear maxLength={50} />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="legalRepresentativePhone"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="法定代表人联系电话"
|
|
|
|
|
|
rules={[phoneRule("法定代表人联系电话", false)]}
|
2026-07-09 13:15:13 +08:00
|
|
|
|
normalize={(value) =>
|
|
|
|
|
|
typeof value === "string" ? value.trim() : value
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入法定代表人联系电话"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={11}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="principalName"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="主要负责人"
|
|
|
|
|
|
rules={[{ required: true, message: "请输入主要负责人" }]}
|
|
|
|
|
|
>
|
2026-07-13 16:07:51 +08:00
|
|
|
|
<Input placeholder="请输入主要负责人" allowClear maxLength={50} />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="principalPhone"
|
|
|
|
|
|
label="主要负责人联系电话"
|
|
|
|
|
|
rules={[phoneRule("主要负责人联系电话", true)]}
|
2026-07-09 13:15:13 +08:00
|
|
|
|
normalize={(value) =>
|
|
|
|
|
|
typeof value === "string" ? value.trim() : value
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入主要负责人联系电话"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={11}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-06 16:22:51 +08:00
|
|
|
|
<Form.Item name="safetyDeptManager" label="安全管理部门负责人">
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入安全管理部门负责人"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={50}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="safetyDeptManagerPhone"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="安全管理部门负责人联系电话"
|
|
|
|
|
|
rules={[phoneRule("安全管理部门负责人联系电话", false)]}
|
2026-07-09 13:15:13 +08:00
|
|
|
|
normalize={(value) =>
|
|
|
|
|
|
typeof value === "string" ? value.trim() : value
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
>
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入安全管理部门负责人联系电话"
|
|
|
|
|
|
allowClear
|
2026-07-13 16:07:51 +08:00
|
|
|
|
maxLength={11}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
|
2026-06-29 16:45:58 +08:00
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="safetyDeputyPhone"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="主管安全副总联系电话"
|
|
|
|
|
|
rules={[phoneRule("主管安全副总联系电话", false)]}
|
2026-07-09 13:15:13 +08:00
|
|
|
|
normalize={(value) =>
|
|
|
|
|
|
typeof value === "string" ? value.trim() : value
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入主管安全副总联系电话"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={11}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item name="productionDate" label="投产日期">
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<DatePicker
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
placeholder="请选择投产日期"
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-06 16:22:51 +08:00
|
|
|
|
<Form.Item name="businessStatusName" label="企业经营状态">
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入企业经营状态"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={50}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="infoDisclosureUrl"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="信息公开网址"
|
|
|
|
|
|
rules={[urlRule("信息公开网址", false)]}
|
2026-07-09 13:15:13 +08:00
|
|
|
|
normalize={(value) =>
|
|
|
|
|
|
typeof value === "string" ? value.trim() : value
|
|
|
|
|
|
}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<Input
|
|
|
|
|
|
placeholder="请输入信息公开网址"
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
maxLength={200}
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="workplaceArea"
|
|
|
|
|
|
label="工作场所建筑面积"
|
|
|
|
|
|
rules={[positiveNumberRule("工作场所建筑面积", false)]}
|
|
|
|
|
|
>
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<InputNumber
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
min={0}
|
2026-07-14 10:09:08 +08:00
|
|
|
|
max={99999}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
precision={2}
|
|
|
|
|
|
placeholder="请输入工作场所建筑面积"
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
name="archiveRoomArea"
|
|
|
|
|
|
label="档案室面积"
|
|
|
|
|
|
rules={[positiveNumberRule("档案室面积", false)]}
|
|
|
|
|
|
>
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<InputNumber
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
min={0}
|
2026-07-14 10:09:08 +08:00
|
|
|
|
max={99999}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
precision={2}
|
|
|
|
|
|
placeholder="请输入档案室面积"
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="fulltimeEvaluatorCount"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="专职安全评价师数量"
|
|
|
|
|
|
rules={[nonNegativeIntegerRule("专职安全评价师数量", false)]}
|
|
|
|
|
|
>
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<InputNumber
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
min={0}
|
2026-07-14 10:09:08 +08:00
|
|
|
|
max={99999}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
precision={0}
|
|
|
|
|
|
placeholder="请输入专职安全评价师数量"
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
2026-07-06 16:22:51 +08:00
|
|
|
|
name="registeredEngineerCount"
|
2026-06-29 16:45:58 +08:00
|
|
|
|
label="注册安全工程师数量"
|
|
|
|
|
|
rules={[nonNegativeIntegerRule("注册安全工程师数量", false)]}
|
|
|
|
|
|
>
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<InputNumber
|
|
|
|
|
|
style={{ width: "100%" }}
|
|
|
|
|
|
min={0}
|
2026-07-14 10:09:08 +08:00
|
|
|
|
max={99999}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
precision={0}
|
|
|
|
|
|
placeholder="请输入注册安全工程师数量"
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
<Form.Item name="enterpriseStatusCode" label="企业状态">
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Select
|
|
|
|
|
|
options={ENTERPRISE_STATUS_OPTIONS}
|
|
|
|
|
|
placeholder="请选择企业状态"
|
|
|
|
|
|
allowClear
|
2026-07-10 17:11:22 +08:00
|
|
|
|
onChange={(value, option) => {
|
|
|
|
|
|
console.log(value, option);
|
|
|
|
|
|
form.setFieldValue(
|
|
|
|
|
|
"enterpriseStatusName",
|
|
|
|
|
|
option?.label || "",
|
|
|
|
|
|
);
|
|
|
|
|
|
}}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
<Form.Item name="enterpriseStatusName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
<Form.Item name="enterpriseScaleCode" label="企业规模">
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Select
|
|
|
|
|
|
options={ENTERPRISE_SCALE_OPTIONS}
|
|
|
|
|
|
placeholder="请选择企业规模"
|
|
|
|
|
|
allowClear
|
2026-07-10 17:11:22 +08:00
|
|
|
|
onChange={(value, option) => {
|
|
|
|
|
|
form.setFieldValue(
|
|
|
|
|
|
"enterpriseScaleName",
|
|
|
|
|
|
option?.label || "",
|
|
|
|
|
|
);
|
|
|
|
|
|
}}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
<Form.Item name="enterpriseScaleName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-09 13:15:13 +08:00
|
|
|
|
<Form.Item name="filingTypeCode" label="备案类型">
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Select
|
2026-07-08 18:14:50 +08:00
|
|
|
|
options={REGISTERED_ORG_FILING_TYPE_SEARCH_OPTIONS}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
placeholder="请选择备案类型"
|
|
|
|
|
|
allowClear
|
2026-07-10 17:11:22 +08:00
|
|
|
|
onChange={(value, option) => {
|
2026-07-09 13:15:13 +08:00
|
|
|
|
form.setFieldValue("filingTypeName", option?.label);
|
|
|
|
|
|
}}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-09 13:15:13 +08:00
|
|
|
|
<Form.Item name="filingTypeName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-09 13:15:13 +08:00
|
|
|
|
<Form.Item name="filingRecordStatusCode" label="备案状态">
|
2026-06-30 17:43:05 +08:00
|
|
|
|
<Select
|
2026-07-09 13:15:13 +08:00
|
|
|
|
options={REGISTERED_ORG_FILING_RECORD_STATUS_OPTIONS}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
placeholder="请选择备案状态"
|
|
|
|
|
|
allowClear
|
2026-07-10 17:11:22 +08:00
|
|
|
|
onChange={(value, option) => {
|
|
|
|
|
|
form.setFieldValue(
|
|
|
|
|
|
"filingRecordStatusName",
|
|
|
|
|
|
option?.label || "",
|
|
|
|
|
|
);
|
2026-07-09 13:15:13 +08:00
|
|
|
|
}}
|
2026-06-30 17:43:05 +08:00
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Form.Item>
|
2026-07-10 17:11:22 +08:00
|
|
|
|
<Form.Item name="filingRecordStatusName" noStyle />
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<AttachmentUpload
|
|
|
|
|
|
name="attachmentUrls"
|
|
|
|
|
|
label="上传附件"
|
|
|
|
|
|
extra={"最多上传10个PDF、DOC、DOCX格式文件"}
|
|
|
|
|
|
maxCount={10}
|
|
|
|
|
|
accept=".pdf,.doc,.docx"
|
|
|
|
|
|
/>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
</Form>
|
2026-07-14 10:09:08 +08:00
|
|
|
|
<BaiduMapPicker
|
|
|
|
|
|
visible={mapPickerVisible}
|
|
|
|
|
|
onCancel={() => setMapPickerVisible(false)}
|
|
|
|
|
|
onConfirm={handleMapConfirm}
|
|
|
|
|
|
/>
|
2026-06-23 18:07:30 +08:00
|
|
|
|
{editing && (
|
|
|
|
|
|
<div style={{ marginTop: 24, textAlign: "center" }}>
|
|
|
|
|
|
<Space>
|
2026-06-29 16:45:58 +08:00
|
|
|
|
<Button onClick={handleCancelEdit}>取消</Button>
|
2026-06-24 11:58:57 +08:00
|
|
|
|
{!hasExistingData && (
|
|
|
|
|
|
<Button loading={submitting} onClick={() => handleSave("draft")}>
|
|
|
|
|
|
暂存
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
)}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
<Button
|
|
|
|
|
|
type="primary"
|
|
|
|
|
|
loading={submitting}
|
|
|
|
|
|
onClick={() => handleSave("submit")}
|
|
|
|
|
|
>
|
2026-06-23 18:07:30 +08:00
|
|
|
|
提交
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
</Space>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)}
|
2026-06-29 16:45:58 +08:00
|
|
|
|
</PageLayout>
|
2026-06-23 18:07:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default Connect([NS_ORG_INFO], true)(OrgInfoPage);
|