safety-eval-service-frontend/src/pages/Container/EnterpriseInfo/OrgInfo/index.js

252 lines
6.8 KiB
JavaScript
Raw Normal View History

2026-06-23 18:07:30 +08:00
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Space } from "antd";
import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import PageHeader from "../components/PageHeader";
import { NS_ORG_INFO } from "~/enumerate/namespace";
import {
creditCodeRule,
latitudeRule,
longitudeRule,
phoneRule,
positiveNumberRule,
urlRule,
} from "~/utils/validators";
function OrgInfoPage(props) {
const [form] = Form.useForm();
const [editing, setEditing] = useState(true);
const [submitting, setSubmitting] = useState(false);
const [detail, setDetail] = useState({});
const loadDetail = async () => {
try {
const res = await props.orgInfoGet().catch(() => null);
if (res?.data) {
setDetail(res.data);
form.setFieldsValue(res.data);
setEditing(false);
}
else {
setEditing(true);
}
}
catch (err) {
console.warn("[OrgInfo] loadDetail failed:", err);
setEditing(true);
}
};
useEffect(() => {
loadDetail();
}, []);
const handleSave = async (submitType) => {
try {
const values = await form.validateFields();
setSubmitting(true);
const request = submitType === "draft" ? props.orgInfoDraft : props.orgInfoSave;
const res = await request(values);
if (res?.success !== false) {
message.success(submitType === "draft" ? "暂存成功" : "提交成功");
setEditing(false);
loadDetail();
}
}
catch (err) {
if (err?.errorFields) {
return;
}
message.error("保存失败,请稍后重试");
}
finally {
setSubmitting(false);
}
};
const formOptions = [
{
name: "orgName",
label: "生产经营单位名称",
rules: [{ required: true, message: "请输入生产经营单位名称" }],
},
{
name: "creditCode",
label: "统一社会信用代码",
rules: [creditCodeRule(true)],
},
{
name: "safetyIndustryCategory",
label: "安全生产监管行业类别",
rules: [{ required: true, message: "请输入安全生产监管行业类别" }],
},
{
name: "regionCountyName",
label: "所属(县、区)",
rules: [{ required: true, message: "请输入所属县区" }],
},
{
name: "regionStreetName",
label: "所属镇、街道",
rules: [{ required: true, message: "请输入所属镇街道" }],
},
{
name: "regionCommunityName",
label: "属村(社区)",
},
{
name: "longitude",
label: "所在地坐标经度",
rules: [longitudeRule(false)],
},
{
name: "latitude",
label: "所在地坐标纬度",
rules: [latitudeRule(false)],
},
{
name: "registerAddress",
label: "注册地址",
rules: [{ required: true, message: "请输入注册地址" }],
render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
},
{
name: "businessAddress",
label: "经营地址",
rules: [{ required: true, message: "请输入经营地址" }],
render: FORM_ITEM_RENDER_ENUM.TEXTAREA,
},
{
name: "ownershipType",
label: "归属类型",
},
{
name: "gbIndustryCode",
label: "国民经济行业分类(GB/T4754-2017)",
},
{
name: "legalRepresentative",
label: "法定代表人",
rules: [{ required: true, message: "请输入法定代表人" }],
},
{
name: "legalRepPhone",
label: "法定代表人联系电话",
rules: [phoneRule("法定代表人联系电话", false)],
},
{
name: "principal",
label: "主要负责人",
rules: [{ required: true, message: "请输入主要负责人" }],
},
{
name: "principalPhone",
label: "主要负责人联系电话",
rules: [phoneRule("主要负责人联系电话", true)],
},
{
name: "safetyDeptHead",
label: "安全管理部门负责人",
},
{
name: "safetyDeptPhone",
label: "安全管理部门负责人联系电话",
rules: [phoneRule("安全管理部门负责人联系电话", false)],
},
{
name: "safetyVp",
label: "主管安全副总",
},
{
name: "safetyVpPhone",
label: "主管安全副总联系电话",
rules: [phoneRule("主管安全副总联系电话", false)],
},
{
name: "productionDate",
label: "投产日期",
render: FORM_ITEM_RENDER_ENUM.DATE,
},
{
name: "businessStatus",
label: "企业经营状态",
},
{
name: "disclosureUrl",
label: "信息公开网址",
rules: [urlRule("信息公开网址", false)],
},
{
name: "workplaceArea",
label: "工作场所建筑面积",
rules: [positiveNumberRule("工作场所建筑面积", false)],
},
{
name: "archiveRoomArea",
label: "档案室面积",
rules: [positiveNumberRule("档案室面积", false)],
},
{
name: "fullTimeEvaluatorCount",
label: "专职安全评价师数量",
rules: [positiveNumberRule("专职安全评价师数量", false)],
},
{
name: "registeredSafetyEngineerCount",
label: "注册安全工程师数量",
rules: [positiveNumberRule("注册安全工程师数量", false)],
},
];
return (
<Page isShowAllAction={false}>
<PageHeader
title="机构信息管理"
subTitle="新成立或首次使用系统的安全评价机构,可通过系统提供的引导页面,详细填写机构的基本信息。"
extra={!editing && (
<Button type="primary" onClick={() => setEditing(true)}>
修改
</Button>
)}
/>
<FormBuilder
form={form}
span={12}
disabled={!editing}
options={formOptions}
labelCol={{ span: 10 }}
showActionButtons={false}
/>
{editing && (
<div style={{ marginTop: 24, textAlign: "center" }}>
<Space>
<Button
onClick={() => {
if (detail && Object.keys(detail).length) {
form.setFieldsValue(detail);
setEditing(false);
}
else {
form.resetFields();
}
}}
>
取消
</Button>
<Button loading={submitting} onClick={() => handleSave("draft")}>
暂存
</Button>
<Button type="primary" loading={submitting} onClick={() => handleSave("submit")}>
提交
</Button>
</Space>
</div>
)}
</Page>
);
}
export default Connect([NS_ORG_INFO], true)(OrgInfoPage);