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 Upload from "zy-react-library/components/Upload"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { getOrgInfoDetail } from "~/api/enterpriseInfo/orgBootstrap"; import PageHeader from "../components/PageHeader"; import { NS_ORG_INFO } from "~/enumerate/namespace"; import { CHONGQING_DISTRICTS, ENTERPRISE_SCALE_OPTIONS, ENTERPRISE_STATUS_OPTIONS, FILING_RECORD_STATUS_OPTIONS, FILING_TYPE_OPTIONS, } from "~/enumerate/enterpriseOptions"; import { formSelectField } from "~/utils/enterpriseForm"; import { mockUploadFileList } from "~/utils/mockUpload"; import { creditCodeRule, latitudeRule, longitudeRule, nonNegativeIntegerRule, phoneRule, positiveNumberRule, urlRule, } from "~/utils/validators"; const numberFieldProps = { style: { width: "100%" } }; function OrgInfoPage(props) { const [form] = Form.useForm(); const [editing, setEditing] = useState(true); const [submitting, setSubmitting] = useState(false); const [detail, setDetail] = useState({}); /** 是否已存在机构数据(有 id 视为已入库,只能修改) */ const [hasExistingData, setHasExistingData] = useState(false); const loadDetail = async () => { try { const res = getOrgInfoDetail(); if (res?.data?.id) { setDetail(res.data); form.setFieldsValue(res.data); setHasExistingData(true); setEditing(false); } else { setDetail({}); setHasExistingData(false); setEditing(true); form.setFieldsValue({ filingType: "确认备案", filingRecordStatus: "未备案", attachments: mockUploadFileList("资质申请书.pdf"), }); } } catch (err) { console.warn("[OrgInfo] loadDetail failed:", err); setDetail({}); setHasExistingData(false); setEditing(true); } }; useEffect(() => { loadDetail(); }, []); const handleCancelEdit = () => { if (hasExistingData) { form.setFieldsValue(detail); setEditing(false); } else { form.resetFields(); } }; const handleSave = async (submitType) => { try { const values = await form.validateFields(); setSubmitting(true); let request; if (hasExistingData) { // 已有数据:仅走修改接口 request = props.orgInfoSave; values.id = detail.id; } else { // 无数据:暂存、提交均走保存接口(草稿/已提交由 authStatusCode 区分) request = submitType === "draft" ? props.orgInfoDraft : props.orgInfoSave; } const res = await request(values); if (res?.success !== false) { message.success( hasExistingData ? "修改成功" : (submitType === "draft" ? "暂存成功" : "提交成功"), ); setEditing(false); loadDetail(); } } catch (err) { if (err?.errorFields) { return; } message.error(hasExistingData ? "修改失败,请稍后重试" : "保存失败,请稍后重试"); } 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: "请输入安全生产监管行业类别" }], }, { ...formSelectField("regionCountyName", "属地", CHONGQING_DISTRICTS, { rules: [{ required: true, message: "请选择属地" }], colProps: { span: 12 }, }), }, { name: "regionStreetName", label: "所属镇、街道", rules: [{ required: true, message: "请输入所属镇街道" }], }, { name: "regionCommunityName", label: "属村(社区)", required: false, }, { name: "longitude", label: "所在地坐标经度", render: FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, useConstraints: false, componentProps: { ...numberFieldProps, min: -180, max: 180, precision: 6 }, rules: [longitudeRule(false)], }, { name: "latitude", label: "所在地坐标纬度", render: FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, useConstraints: false, componentProps: { ...numberFieldProps, min: -90, max: 90, precision: 6 }, 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: "归属类型", required: false, }, { name: "gbIndustryCode", label: "国民经济行业分类(GB/T4754-2017)", required: false, }, { 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: "安全管理部门负责人", required: false, }, { name: "safetyDeptPhone", label: "安全管理部门负责人联系电话", rules: [phoneRule("安全管理部门负责人联系电话", false)], }, { name: "safetyVp", label: "主管安全副总", required: false, }, { name: "safetyVpPhone", label: "主管安全副总联系电话", rules: [phoneRule("主管安全副总联系电话", false)], }, { name: "productionDate", label: "投产日期", required: false, render: FORM_ITEM_RENDER_ENUM.DATE, }, { name: "businessStatus", label: "企业经营状态", required: false, }, { name: "disclosureUrl", label: "信息公开网址", useConstraints: false, rules: [urlRule("信息公开网址", false)], }, { name: "workplaceArea", label: "工作场所建筑面积", render: FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, useConstraints: false, componentProps: { ...numberFieldProps, min: 0, precision: 2 }, rules: [positiveNumberRule("工作场所建筑面积", false)], }, { name: "archiveRoomArea", label: "档案室面积", render: FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, useConstraints: false, componentProps: { ...numberFieldProps, min: 0, precision: 2 }, rules: [positiveNumberRule("档案室面积", false)], }, { name: "fullTimeEvaluatorCount", label: "专职安全评价师数量", render: FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, useConstraints: false, componentProps: { ...numberFieldProps, min: 0, precision: 0 }, rules: [nonNegativeIntegerRule("专职安全评价师数量", false)], }, { name: "registeredSafetyEngineerCount", label: "注册安全工程师数量", render: FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, useConstraints: false, componentProps: { ...numberFieldProps, min: 0, precision: 0 }, rules: [nonNegativeIntegerRule("注册安全工程师数量", false)], }, formSelectField("enterpriseStatus", "企业状态", ENTERPRISE_STATUS_OPTIONS, { required: false }), formSelectField("enterpriseScale", "企业规模", ENTERPRISE_SCALE_OPTIONS, { required: false }), formSelectField("filingType", "备案类型", FILING_TYPE_OPTIONS, { required: false }), formSelectField("filingRecordStatus", "备案状态", FILING_RECORD_STATUS_OPTIONS, { required: false }), { name: "attachments", label: "上传附件", required: false, render: ( ), }, ]; return ( setEditing(true)}> 修改 )} /> {editing && ( 取消 {!hasExistingData && ( handleSave("draft")}> 暂存 )} handleSave("submit")}> 提交 )} ); } export default Connect([NS_ORG_INFO], true)(OrgInfoPage);