diff --git a/src/pages/Container/Supervision/Average/Average/HiddenList/index.js b/src/pages/Container/Supervision/Average/Average/HiddenList/index.js index 2aa91fe..47ee312 100644 --- a/src/pages/Container/Supervision/Average/Average/HiddenList/index.js +++ b/src/pages/Container/Supervision/Average/Average/HiddenList/index.js @@ -1,8 +1,9 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime"; -import { Button, Form, message, Modal, Space, Spin } from "antd"; +import { Button, Checkbox, Form, message, Modal, Space } from "antd"; import dayjs from "dayjs"; -import { useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { useReactToPrint } from "react-to-print"; +import FormBuilder from "zy-react-library/components/FormBuilder"; import ExportIcon from "zy-react-library/components/Icon/ExportIcon"; import PrintIcon from "zy-react-library/components/Icon/PrintIcon"; import Page from "zy-react-library/components/Page"; @@ -19,15 +20,16 @@ import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useTable from "zy-react-library/hooks/useTable"; import { getLabelName, getUnmatchedItems } from "zy-react-library/utils"; import { IS_RELATED_ENUM } from "~/enumerate/constant"; -import { NS_AVERAGE } from "~/enumerate/namespace"; +import { NS_AVERAGE, NS_LEDGER } from "~/enumerate/namespace"; import "../../../../BranchCompany/Average/Ledger/List/index.less"; function HiddenList(props) { const query = useGetUrlQuery(); - const { loading: downloadBlobLoading, downloadBlob } = useDownloadBlob(); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [printModalOpen, setPrintModalOpen] = useState(false); + const [exportByColumnModalOpen, setExportByColumnModalOpen] = useState(false); const [printData, setPrintData] = useState([]); + const [form] = Form.useForm(); const { tableProps, getData } = useTable(props["averageByCorpInfoList"], { form, @@ -40,158 +42,147 @@ function HiddenList(props) { }, }); - const onExportExcel = async () => { - if (selectedRowKeys.length === 0) { - message.error("请选中要导出的数据"); - return; - } - Modal.confirm({ - title: "导出确认", - content: "确定要导出excel吗?", - onOk: async () => { - await downloadBlob("/hidden/hidden/exportHiddenById", { - params: { ids: selectedRowKeys }, - }); - message.success("导出成功"); - }, - }); - }; - return ( - - }, - { - name: "hiddenType", - label: "隐患类型", - render: , - }, - { - name: "hiddenPart", - label: "隐患部位", - render: , - }, - { - name: "hiddenLevel", - label: "隐患级别", - render: , - }, - { name: "creatorName", label: "隐患发现人" }, - { - name: "state", - label: "隐患状态", - render: FORM_ITEM_RENDER_ENUM.SELECT, - items: getUnmatchedItems({ list: HIDDEN_STATE_ENUM, value: ["98", "102"] }), - }, - { name: "confirmUserName", label: "确认人" }, - { name: "rectificationUserName", label: "整改人" }, - { name: "rectificationDeptId", label: "整改部门", render: }, - { name: "checkUserName", label: "验收人" }, - { - name: "isRelated", - label: "是否相关方", - render: FORM_ITEM_RENDER_ENUM.SELECT, - items: IS_RELATED_ENUM, - }, - ]} - form={form} - onFinish={getData} + }, + { + name: "hiddenType", + label: "隐患类型", + render: , + }, + { + name: "hiddenPart", + label: "隐患部位", + render: , + }, + { + name: "hiddenLevel", + label: "隐患级别", + render: , + }, + { name: "creatorName", label: "隐患发现人" }, + { + name: "state", + label: "隐患状态", + render: FORM_ITEM_RENDER_ENUM.SELECT, + items: getUnmatchedItems({ list: HIDDEN_STATE_ENUM, value: ["98", "102"] }), + }, + { name: "confirmUserName", label: "确认人" }, + { name: "rectificationUserName", label: "整改人" }, + { name: "rectificationDeptId", label: "整改部门", render: }, + { name: "checkUserName", label: "验收人" }, + { + name: "isRelated", + label: "是否相关方", + render: FORM_ITEM_RENDER_ENUM.SELECT, + items: IS_RELATED_ENUM, + }, + ]} + form={form} + onFinish={getData} + /> + { + setSelectedRowKeys(selectedRowKeys); + }, + }} + headerTitle={`公司名称:${query.corpName}`} + toolBarRender={() => ( + + + + + )} + columns={[ + { + title: "隐患来源", + dataIndex: "source", + render: (_, record) => getLabelName({ list: HIDDEN_SOURCE_ENUM, status: record.source }), + }, + { title: "隐患描述", dataIndex: "hiddenDesc" }, + { title: "隐患级别", dataIndex: "hiddenLevelName", width: 100 }, + { title: "隐患类型", dataIndex: "hiddenTypeName" }, + { title: "隐患部位", dataIndex: "hiddenPartName" }, + { title: "隐患发现部门", dataIndex: "hiddenFindDeptName" }, + { title: "隐患发现人", dataIndex: "createName", width: 130 }, + { + title: "隐患发现时间", + dataIndex: "hiddenFindTime", + render: (_, record) => record.hiddenFindTime ? dayjs(record.hiddenFindTime).format("YYYY-MM-DD HH:mm:ss") : "", + }, + { + title: "整改类型", + dataIndex: "rectificationType", + width: 100, + render: (_, record) => getLabelName({ list: HIDDEN_RECTIFICATION_TYPE_ENUM, status: record.rectificationType }), + }, + { title: "确认人", dataIndex: "confirmUserName", width: 100 }, + { title: "整改人", dataIndex: "rectifyUserName", width: 100 }, + { title: "整改时间", dataIndex: "rectificationTime" }, + { title: "验收人", dataIndex: "hiddenYUserName", width: 100 }, + { + title: "隐患状态", + dataIndex: "state", + render: (_, record) => getLabelName({ list: HIDDEN_STATE_ENUM, status: record.state }), + }, + { + title: "操作", + width: 100, + fixed: "right", + render: (_, record) => ( + + + + ), + }, + ]} + {...tableProps} + /> + {exportByColumnModalOpen && ( + setExportByColumnModalOpen(false)} + corpId={query.corpId} /> -
{ - setSelectedRowKeys(selectedRowKeys); - }, - }} - headerTitle={`公司名称:${query.corpName}`} - toolBarRender={() => ( - - - - - )} - columns={[ - { - title: "隐患来源", - dataIndex: "source", - render: (_, record) => getLabelName({ list: HIDDEN_SOURCE_ENUM, status: record.source }), - }, - { title: "隐患描述", dataIndex: "hiddenDesc" }, - { title: "隐患级别", dataIndex: "hiddenLevelName", width: 100 }, - { title: "隐患类型", dataIndex: "hiddenTypeName" }, - { title: "隐患部位", dataIndex: "hiddenPartName" }, - { title: "隐患发现部门", dataIndex: "hiddenFindDeptName" }, - { title: "隐患发现人", dataIndex: "createName", width: 130 }, - { - title: "隐患发现时间", - dataIndex: "hiddenFindTime", - render: (_, record) => record.hiddenFindTime ? dayjs(record.hiddenFindTime).format("YYYY-MM-DD HH:mm:ss") : "", - }, - { - title: "整改类型", - dataIndex: "rectificationType", - width: 100, - render: (_, record) => getLabelName({ list: HIDDEN_RECTIFICATION_TYPE_ENUM, status: record.rectificationType }), - }, - { title: "确认人", dataIndex: "confirmUserName", width: 100 }, - { title: "整改人", dataIndex: "rectifyUserName", width: 100 }, - { title: "整改时间", dataIndex: "rectificationTime" }, - { title: "验收人", dataIndex: "hiddenYUserName", width: 100 }, - { - title: "隐患状态", - dataIndex: "state", - render: (_, record) => getLabelName({ list: HIDDEN_STATE_ENUM, status: record.state }), - }, - { - title: "操作", - width: 100, - fixed: "right", - render: (_, record) => ( - - - - ), - }, - ]} - {...tableProps} - /> - + )} {printModalOpen && ( { ); }; +const ExportByColumnModalComponent = (props) => { + const [form] = Form.useForm(); + const exportFields = Form.useWatch("exportFields", form); + const { loading, downloadBlob } = useDownloadBlob(); + const [items, setItems] = useState([]); + + const indeterminate = useMemo( + () => { + if (!exportFields) + return false; + return exportFields.length > 0 && exportFields.length < items.length; + }, + [exportFields], + ); + + const getExportColumn = async () => { + const { data } = await props["hiddenExportColumn"](); + setItems(data.map(item => ({ bianma: item, name: item }))); + + const defaultExportFields = data.filter(item => !item.includes("图片")); + form.setFieldsValue({ exportFields: [...defaultExportFields] }); + }; + + useEffect(() => { + getExportColumn(); + }, []); + + const onSubmit = async (values) => { + const hiddenFindTime = props.hiddenFindTime; + const selectedRowKeys = props.selectedRowKeys; + + // 检查导出字段是否包含"图片" + const hasPictureField = values.exportFields && values.exportFields.some(field => field.includes("图片")); + + if (hasPictureField) { + // 包含图片字段的验证逻辑 + if (!selectedRowKeys || selectedRowKeys.length === 0) { + message.error("请选择要导出的数据"); + return; + } + + if (selectedRowKeys.length > 10) { + message.error("选择的数据超过10条,请重新选择"); + return; + } + + // 执行导出 + Modal.confirm({ + title: "导出确认", + content: "确定要导出excel吗?", + onOk: async () => { + await downloadBlob("/hidden/hidden/exportHidden", { + params: { ids: props.selectedRowKeys.join(","), corpId: props.corpId, ...values }, + }); + message.success("导出成功"); + props.onCancel(); + }, + }); + } + else { + // 不包含图片字段的验证逻辑 + if (!hiddenFindTime || hiddenFindTime.length === 0) { + message.error("请选择隐患发现时间"); + return; + } + + // 执行导出 + Modal.confirm({ + title: "导出确认", + content: "确定要导出excel吗?", + onOk: async () => { + await downloadBlob("/hidden/hidden/exportHidden", { + params: { hiddenFindTime: hiddenFindTime[0], hiddenFindTimeLe: hiddenFindTime[1], corpId: props.corpId, ...values }, + }); + message.success("导出成功"); + props.onCancel(); + }, + }); + } + }; + + return ( + + { + const checked = e.target.checked; + if (checked) { + form.setFieldsValue({ exportFields: items.map(item => item.bianma) }); + } + else { + form.setFieldsValue({ exportFields: [] }); + } + }} + checked={items.length === (exportFields || []).length} + > + 全选(为保障导出效率,导出带图片的excel最多10条) + + ), + required: false, + }, + { + name: "exportFields", + label: "导出内容", + render: FORM_ITEM_RENDER_ENUM.CHECKBOX, + items, + checkboxCol: 6, + }, + ]} + /> + + ); +}; + +const ExportByColumnModal = Connect([NS_LEDGER], true)(ExportByColumnModalComponent); export default Connect([NS_AVERAGE], true)(HiddenList);