diff --git a/src/pages/Container/Notice/Add/index.js b/src/pages/Container/Notice/Add/index.js index 092507a..cb1fec4 100644 --- a/src/pages/Container/Notice/Add/index.js +++ b/src/pages/Container/Notice/Add/index.js @@ -12,6 +12,7 @@ function Add(props) { const queryParams = useGetUrlQuery(); const [form] = Form.useForm(); const [corpData, setCorpData] = useState([]); + const [submitting, setSubmitting] = useState(false); const contentValue = Form.useWatch("content", form); const publishScope = Form.useWatch("publishScope", form); @@ -25,6 +26,20 @@ function Add(props) { } }, [publishScope]); + // 监听分子公司选择变化,处理"全部"选项逻辑 + const publishCorpinfoIdsValue = Form.useWatch("publishCorpinfoIds", form); + useEffect(() => { + if (!publishCorpinfoIdsValue || publishCorpinfoIdsValue.length === 0) return; + + const hasAll = publishCorpinfoIdsValue.includes("ALL"); + const hasOther = publishCorpinfoIdsValue.some(id => id !== "ALL"); + + // 如果同时选择了"全部"和其他选项,只保留"全部" + if (hasAll && hasOther) { + form.setFieldValue("publishCorpinfoIds", ["ALL"]); + } + }, [publishCorpinfoIdsValue]); + useEffect(() => { if (queryParams["id"]) { props["noticeInfo"]({ id: queryParams["id"] }).then((res) => { @@ -53,16 +68,22 @@ function Add(props) { item.bianma = item.id; item.name = item.corpName; }); + // 在开头添加"全部"选项 + const allOption = { bianma: "ALL", name: "全部" }; + setCorpData([allOption, ...res.data]); } - setCorpData(res.data); }); }, []); const onSubmit = async () => { + // 防止重复提交 + if (submitting) return; + setSubmitting(true); + try { await form.validateFields(); // 触发表单校验 - } - catch { + } catch { + setSubmitting(false); return; // 阻止后续逻辑 } const values = await form.validateFields(); @@ -73,8 +94,17 @@ function Add(props) { } // 将分子公司数组转换为字符串 if (values.publishCorpinfoIds && Array.isArray(values.publishCorpinfoIds)) { - values.publishCorpinfoIds = values.publishCorpinfoIds.join(","); + // 如果选择了"全部",则提取所有分子公司ID(排除"ALL") + if (values.publishCorpinfoIds.includes("ALL")) { + const allIds = corpData + .filter(item => item.bianma !== "ALL") + .map(item => item.bianma); + values.publishCorpinfoIds = allIds.join(","); + } else { + values.publishCorpinfoIds = values.publishCorpinfoIds.join(","); + } } + if (queryParams["id"]) { values.id = queryParams["id"]; props["noticeEdit"](values).then((res) => { @@ -82,14 +112,17 @@ function Add(props) { message.success("编辑成功!"); window.history.back(); } + }).finally(() => { + setSubmitting(false); }); - } - else { + } else { props["noticeAdd"](values).then((res) => { if (res.success) { message.success("新增成功!"); window.history.back(); } + }).finally(() => { + setSubmitting(false); }); } }; @@ -98,20 +131,18 @@ function Add(props) { - - + )} >