修改bug:12737、12653、12641、12640、12634、12630、12622、12621、12620、12613、12607、12604、12433、12418、12402
parent
5b5aa3d2eb
commit
0fba48d93e
|
|
@ -31,7 +31,7 @@
|
|||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-to-print": "^3.2.0",
|
||||
"zy-react-library": "^1.0.164"
|
||||
"zy-react-library": "^1.0.176"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^5.4.1",
|
||||
|
|
|
|||
|
|
@ -16,7 +16,3 @@ export const specialDisposalCorpInfoCountList = declareRequest(
|
|||
"specialDisposalLoading",
|
||||
"Post > @/hidden/hidden/extensionHiddenListByCorp",
|
||||
);
|
||||
export const specialDisposalByCorpInfoList = declareRequest(
|
||||
"ignoreLoading",
|
||||
"Post > @/hidden/hidden/extensionHiddenList",
|
||||
);
|
||||
|
|
|
|||
|
|
@ -61,172 +61,178 @@ function Confirm(props) {
|
|||
/>
|
||||
<Divider orientation="left">隐患确认</Divider>
|
||||
<div style={{ paddingBottom: 20 }}>
|
||||
<FormBuilder
|
||||
form={form}
|
||||
loading={props.confirm.confirmLoading}
|
||||
showCancelButton={false}
|
||||
submitButtonText="通过"
|
||||
onFinish={onSubmit}
|
||||
extraActionButtons={[
|
||||
!isFromInspection && <Button key="reject" type="primary" danger onClick={() => setRejectModalOpen(true)}>打回</Button>,
|
||||
]}
|
||||
options={[
|
||||
...(!isFromInspection
|
||||
? [
|
||||
{
|
||||
name: "hiddenLevel",
|
||||
label: "隐患级别",
|
||||
span: 24,
|
||||
render: (
|
||||
<HiddenLevelSelectTree
|
||||
isShowMajor={false}
|
||||
isShowLarger={false}
|
||||
isShowNeglect={data.rectificationType === 1}
|
||||
onChange={() => {
|
||||
form.setFieldValue("deptName", "");
|
||||
form.setFieldValue("userName", "");
|
||||
form.setFieldValue("deptName", "");
|
||||
form.setFieldValue("userName", "");
|
||||
form.setFieldValue("checkDeptName", "");
|
||||
form.setFieldValue("checkUserName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("hiddenLevelName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
]
|
||||
: []),
|
||||
{ name: "hiddenLevelName", label: "隐患级别名称", onlyForLabel: true },
|
||||
...(
|
||||
hiddenLevel !== "hiddenLevel1001"
|
||||
? [
|
||||
...(
|
||||
data.rectificationType === 2
|
||||
? [
|
||||
{
|
||||
name: "deptId",
|
||||
label: "整改负责人部门",
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
onChange={() => {
|
||||
form.setFieldValue("userId", "");
|
||||
{
|
||||
Object.keys(data).length > 0
|
||||
? (
|
||||
<FormBuilder
|
||||
form={form}
|
||||
loading={props.confirm.confirmLoading}
|
||||
showCancelButton={false}
|
||||
submitButtonText="通过"
|
||||
onFinish={onSubmit}
|
||||
extraActionButtons={[
|
||||
!isFromInspection && <Button key="reject" type="primary" danger onClick={() => setRejectModalOpen(true)}>打回</Button>,
|
||||
]}
|
||||
options={[
|
||||
...(!isFromInspection
|
||||
? [
|
||||
{
|
||||
name: "hiddenLevel",
|
||||
label: "隐患级别",
|
||||
span: 24,
|
||||
render: (
|
||||
<HiddenLevelSelectTree
|
||||
isShowMajor={false}
|
||||
isShowLarger={false}
|
||||
isShowNeglect={data.rectificationType === 2}
|
||||
onChange={(event) => {
|
||||
if (event === "hiddenLevel1001") {
|
||||
form.setFieldValue("deptName", "");
|
||||
form.setFieldValue("userName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("deptName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "deptName", label: "整改负责人部门名称", onlyForLabel: true },
|
||||
{
|
||||
name: "userId",
|
||||
label: "整改负责人",
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: deptId }}
|
||||
onGetLabel={label => form.setFieldValue("userName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "userName", label: "整改负责人名称", onlyForLabel: true },
|
||||
{
|
||||
name: "rectificationDeadline",
|
||||
label: "整改完成期限",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
span: 24,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
name: "rectificationType",
|
||||
label: "是否立即整改",
|
||||
render: FORM_ITEM_RENDER_ENUM.RADIO,
|
||||
items: [{ bianma: 1, name: "是" }, { bianma: 2, name: "否" }],
|
||||
span: 24,
|
||||
componentProps: {
|
||||
onChange: () => {
|
||||
form.setFieldValue("checkDeptName", "");
|
||||
form.setFieldValue("checkUserName", "");
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "deptId",
|
||||
label: "整改负责人部门",
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
onChange={() => {
|
||||
form.setFieldValue("userId", "");
|
||||
form.setFieldValue("userName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("deptName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "deptName", label: "整改负责人部门名称", onlyForLabel: true },
|
||||
{
|
||||
name: "userId",
|
||||
label: "整改负责人",
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: deptId }}
|
||||
onGetLabel={label => form.setFieldValue("userName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "userName", label: "整改负责人名称", onlyForLabel: true },
|
||||
{
|
||||
name: "rectificationDeadline",
|
||||
label: "整改完成期限",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
span: 24,
|
||||
dependencies: ["rectificationType"],
|
||||
hidden: formValues => !(formValues.rectificationType === 2),
|
||||
},
|
||||
{
|
||||
name: "checkDeptId",
|
||||
label: "验收部门",
|
||||
required: false,
|
||||
dependencies: ["rectificationType"],
|
||||
hidden: formValues => !(formValues.rectificationType === 1),
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
onChange={() => {
|
||||
form.setFieldValue("checkUserId", "");
|
||||
form.setFieldValue("checkDeptName", "");
|
||||
form.setFieldValue("checkUserName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("checkDeptName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "checkDeptName", label: "验收部门名称", onlyForLabel: true },
|
||||
{
|
||||
name: "checkUserId",
|
||||
label: "验收人",
|
||||
required: false,
|
||||
dependencies: ["rectificationType"],
|
||||
hidden: formValues => !(formValues.rectificationType === 1),
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: checkDeptId }}
|
||||
onGetLabel={label => form.setFieldValue("checkUserName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "checkUserName", label: "验收人名称", onlyForLabel: true },
|
||||
]),
|
||||
]
|
||||
: []
|
||||
),
|
||||
]}
|
||||
/>
|
||||
}
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("hiddenLevelName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
]
|
||||
: []),
|
||||
{ name: "hiddenLevelName", label: "隐患级别名称", onlyForLabel: true },
|
||||
...(
|
||||
hiddenLevel !== "hiddenLevel1001"
|
||||
? [
|
||||
...(
|
||||
data.rectificationType === 2
|
||||
? [
|
||||
{
|
||||
name: "deptId",
|
||||
label: "整改负责人部门",
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
onChange={() => {
|
||||
form.setFieldValue("userId", "");
|
||||
form.setFieldValue("userName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("deptName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "deptName", label: "整改负责人部门名称", onlyForLabel: true },
|
||||
{
|
||||
name: "userId",
|
||||
label: "整改负责人",
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: deptId }}
|
||||
onGetLabel={label => form.setFieldValue("userName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "userName", label: "整改负责人名称", onlyForLabel: true },
|
||||
{
|
||||
name: "rectificationDeadline",
|
||||
label: "整改完成期限",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
span: 24,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
name: "rectificationType",
|
||||
label: "是否立即整改",
|
||||
render: FORM_ITEM_RENDER_ENUM.RADIO,
|
||||
items: [{ bianma: 1, name: "是" }, { bianma: 2, name: "否" }],
|
||||
span: 24,
|
||||
componentProps: {
|
||||
onChange: () => {
|
||||
form.setFieldValue("checkDeptName", "");
|
||||
form.setFieldValue("checkUserName", "");
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "deptId",
|
||||
label: "整改负责人部门",
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
onChange={() => {
|
||||
form.setFieldValue("userId", "");
|
||||
form.setFieldValue("userName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("deptName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "deptName", label: "整改负责人部门名称", onlyForLabel: true },
|
||||
{
|
||||
name: "userId",
|
||||
label: "整改负责人",
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: deptId }}
|
||||
onGetLabel={label => form.setFieldValue("userName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "userName", label: "整改负责人名称", onlyForLabel: true },
|
||||
{
|
||||
name: "rectificationDeadline",
|
||||
label: "整改完成期限",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
span: 24,
|
||||
dependencies: ["rectificationType"],
|
||||
hidden: formValues => !(formValues.rectificationType === 2),
|
||||
},
|
||||
{
|
||||
name: "checkDeptId",
|
||||
label: "验收部门",
|
||||
required: false,
|
||||
dependencies: ["rectificationType"],
|
||||
hidden: formValues => !(formValues.rectificationType === 1),
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
onChange={() => {
|
||||
form.setFieldValue("checkUserId", "");
|
||||
form.setFieldValue("checkUserName", "");
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue("checkDeptName", label);
|
||||
}}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "checkDeptName", label: "验收部门名称", onlyForLabel: true },
|
||||
{
|
||||
name: "checkUserId",
|
||||
label: "验收人",
|
||||
required: false,
|
||||
dependencies: ["rectificationType"],
|
||||
hidden: formValues => !(formValues.rectificationType === 1),
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: checkDeptId }}
|
||||
onGetLabel={label => form.setFieldValue("checkUserName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "checkUserName", label: "验收人名称", onlyForLabel: true },
|
||||
]),
|
||||
]
|
||||
: []
|
||||
),
|
||||
]}
|
||||
/>
|
||||
)
|
||||
: null
|
||||
}
|
||||
</div>
|
||||
{rejectModalOpen && <RejectModal onCancel={() => setRejectModalOpen(false)} data={data} />}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import useGetFile from "zy-react-library/hooks/useGetFile";
|
|||
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
|
||||
import useUploadFile from "zy-react-library/hooks/useUploadFile";
|
||||
import { createGuid, getLabelName } from "zy-react-library/utils";
|
||||
import { createGuid, getFileUrl, getLabelName } from "zy-react-library/utils";
|
||||
import ai_recognize from "~/assets/images/ai_recognize.png";
|
||||
import { IS_RELATED_ENUM } from "~/enumerate/constant";
|
||||
import { NS_CONFIRM_USER, NS_LEDGER, NS_PART } from "~/enumerate/namespace";
|
||||
|
|
@ -43,6 +43,7 @@ function Add(props) {
|
|||
const [uploadedImages, setUploadedImages] = useState([]);
|
||||
const [modalTitle, setModalTitle] = useState("选择图片进行AI识别");
|
||||
const [isShowAiButton, setIsShowAiButton] = useState(true);
|
||||
const [userInfo, setUserInfo] = useState({});
|
||||
|
||||
const [hiddenPartType, setHiddenPartType] = useState("select");
|
||||
const [confirmUserList, setConfirmUserList] = useState([]);
|
||||
|
|
@ -51,8 +52,6 @@ function Add(props) {
|
|||
const deleteHiddenVideoFiles = useRef([]);
|
||||
const deleteAfterRectificationImageFiles = useRef([]);
|
||||
|
||||
const hiddenUserId = useRef("");
|
||||
|
||||
const { getUserInfo } = useGetUserInfo();
|
||||
const { loading: deleteFileLoading, deleteFile } = useDeleteFile();
|
||||
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
|
||||
|
|
@ -63,9 +62,9 @@ function Add(props) {
|
|||
const { data } = await props["hiddenView"]({ id: query.id });
|
||||
const hiddenImageFiles = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["3"], eqForeignKey: query.hiddenId });
|
||||
const hiddenVideoFiles = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["102"], eqForeignKey: query.hiddenId });
|
||||
// const hiddenConfirmUserCO = data?.hiddenConfirmUserCO?.[0] || {};
|
||||
const hiddenRectifyUserCO = data?.hiddenRectifyUserCO?.[0] || {};
|
||||
const hiddenAcceptUserCO = data?.hiddenAcceptUserCO?.[0] || {};
|
||||
const hiddenConfirmUserCO = data?.hiddenConfirmUserCO?.[0] || {};
|
||||
// const hiddenAcceptUserCO = data?.hiddenAcceptUserCO?.[0] || {};
|
||||
let afterRectificationImageFiles = [];
|
||||
if (hiddenRectifyUserCO.hiddenUserId) {
|
||||
afterRectificationImageFiles = await getFile({
|
||||
|
|
@ -78,22 +77,37 @@ function Add(props) {
|
|||
hiddenImageFiles,
|
||||
hiddenVideoFiles,
|
||||
afterRectificationImageFiles,
|
||||
confirmUserId: hiddenConfirmUserCO.userId,
|
||||
rectificationDeptId: hiddenRectifyUserCO.deptId,
|
||||
rectificationDeptName: hiddenRectifyUserCO.deptName,
|
||||
rectificationUserId: hiddenRectifyUserCO.userId,
|
||||
rectificationUserName: hiddenRectifyUserCO.userName,
|
||||
confirmUserId: "",
|
||||
confirmUserName: "",
|
||||
confirmDeptName: "",
|
||||
confirmDeptId: "",
|
||||
rectificationDeptId: "",
|
||||
rectificationDeptName: "",
|
||||
rectificationUserId: "",
|
||||
rectificationUserName: "",
|
||||
checkDeptId: "",
|
||||
checkDeptName: "",
|
||||
checkUserId: "",
|
||||
checkUserName: "",
|
||||
// confirmUserId: hiddenConfirmUserCO.userId,
|
||||
// confirmUserName: hiddenConfirmUserCO.userName,
|
||||
// confirmDeptId: hiddenConfirmUserCO.deptId,
|
||||
// confirmDeptName: hiddenConfirmUserCO.deptName,
|
||||
// rectificationDeptId: hiddenRectifyUserCO.deptId,
|
||||
// rectificationDeptName: hiddenRectifyUserCO.deptName,
|
||||
// rectificationUserId: hiddenRectifyUserCO.userId,
|
||||
// rectificationUserName: hiddenRectifyUserCO.userName,
|
||||
// checkDeptId: hiddenAcceptUserCO.deptId,
|
||||
// checkDeptName: hiddenAcceptUserCO.deptName,
|
||||
// checkUserId: hiddenAcceptUserCO.userId,
|
||||
// checkUserName: hiddenAcceptUserCO.userName,
|
||||
rectificationDescr: hiddenRectifyUserCO.descr,
|
||||
checkDeptId: hiddenAcceptUserCO.deptId,
|
||||
checkDeptName: hiddenAcceptUserCO.deptName,
|
||||
checkUserId: hiddenAcceptUserCO.userId,
|
||||
checkUserName: hiddenAcceptUserCO.userName,
|
||||
isRelated: data.isRelated.toString(),
|
||||
});
|
||||
hiddenUserId.current = hiddenRectifyUserCO.hiddenUserId;
|
||||
}
|
||||
else {
|
||||
const userInfo = await getUserInfo();
|
||||
setUserInfo(userInfo);
|
||||
form.setFieldsValue({
|
||||
hiddenFindDept: userInfo.departmentId,
|
||||
creatorId: userInfo.id,
|
||||
|
|
@ -124,15 +138,15 @@ function Add(props) {
|
|||
};
|
||||
|
||||
const getAIHiddenImageRecognize = async (imageToProcess) => {
|
||||
// const { filePath } = await uploadFile({ files: [imageToProcess], params: { type: UPLOAD_FILE_TYPE_ENUM["3"] } });
|
||||
const { data } = await props["hiddenAiRecognize"]({ hiddenUrl: "https://pic.rmb.bdstatic.com/bjh/news/0a68c2681805fcaea506d922f024420c.png" });
|
||||
// const { data } = await props["hiddenAiRecognize"]({ hiddenUrl: getFileUrl() + filePath });
|
||||
const { filePath } = await uploadFile({ files: [imageToProcess], params: { type: UPLOAD_FILE_TYPE_ENUM["3"] } });
|
||||
// const { data } = await props["hiddenAiRecognize"]({ hiddenUrl: "https://pic.rmb.bdstatic.com/bjh/news/0a68c2681805fcaea506d922f024420c.png" });
|
||||
const { data } = await props["hiddenAiRecognize"]({ hiddenUrl: getFileUrl() + filePath });
|
||||
if (data?.aiHiddens) {
|
||||
processedImageUids.current.push(imageToProcess.uid);
|
||||
setAiHiddens(data?.aiHiddens.map(item => ({ ...JSON.parse(item), id: createGuid() })));
|
||||
setAiHiddenModalOpen(true);
|
||||
clearHiddenRecognizeState();
|
||||
// await deleteFile({ files: [{ filePath }] });
|
||||
await deleteFile({ files: [{ filePath }] });
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -211,7 +225,7 @@ function Add(props) {
|
|||
const { id: afterRectificationImageId } = await uploadFile({
|
||||
single: false,
|
||||
files: values.afterRectificationImageFiles,
|
||||
params: { type: UPLOAD_FILE_TYPE_ENUM["4"], foreignKey: hiddenUserId.current },
|
||||
params: { type: UPLOAD_FILE_TYPE_ENUM["4"], foreignKey: "" },
|
||||
});
|
||||
let hiddenPart = values.hiddenPart;
|
||||
if (hiddenPartType === "input") {
|
||||
|
|
@ -255,6 +269,10 @@ function Add(props) {
|
|||
form.setFieldValue("hiddenDesc", selectHiddens[currentProcessHiddenIndex + 1].hiddenDescr);
|
||||
form.setFieldValue("legalBasis", selectHiddens[currentProcessHiddenIndex + 1].legalBasis);
|
||||
form.setFieldValue("rectificationDescr", selectHiddens[currentProcessHiddenIndex + 1].rectificationSuggestions);
|
||||
form.setFieldValue("hiddenFindDept", userInfo.departmentId);
|
||||
form.setFieldValue("creatorId", userInfo.id);
|
||||
form.setFieldValue("hiddenFindDeptName", userInfo.departmentName);
|
||||
form.setFieldValue("creatorName", userInfo.name);
|
||||
}
|
||||
else {
|
||||
props.history.goBack();
|
||||
|
|
|
|||
|
|
@ -229,7 +229,6 @@ const AddModalComponent = (props) => {
|
|||
{
|
||||
name: "responsibleDeptId",
|
||||
label: "负责部门",
|
||||
span: 12,
|
||||
required: false,
|
||||
render: (
|
||||
<DepartmentSelectTree
|
||||
|
|
@ -247,7 +246,6 @@ const AddModalComponent = (props) => {
|
|||
{
|
||||
name: "responsibleUserId",
|
||||
label: "负责人",
|
||||
span: 12,
|
||||
required: false,
|
||||
render: (
|
||||
<PersonnelSelect
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ function List(props) {
|
|||
hiddenFindTime: formData.hiddenFindTime?.[0],
|
||||
hiddenFindTimeLe: formData.hiddenFindTime?.[1],
|
||||
}),
|
||||
params: { eqType: 2 },
|
||||
params: { eqType: 2, entry: 2 },
|
||||
});
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ function List(props) {
|
|||
hiddenFindTime: formData.hiddenFindTime?.[0],
|
||||
hiddenFindTimeLe: formData.hiddenFindTime?.[1],
|
||||
}),
|
||||
params: { eqType: 1 },
|
||||
params: { eqType: 1, entry: 2 },
|
||||
});
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -24,15 +24,13 @@ function HiddenList(props) {
|
|||
const { loading: downloadBlobLoading, downloadBlob } = useDownloadBlob();
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
|
||||
const [form] = Form.useForm();
|
||||
const { tableProps, getData } = useTable(props["specialDisposalByCorpInfoList"], {
|
||||
const { tableProps, getData } = useTable(props["specialDisposalList"], {
|
||||
form,
|
||||
transform: formData => ({
|
||||
hiddenFindTime: formData.hiddenFindTime?.[0],
|
||||
hiddenFindTimeLe: formData.hiddenFindTime?.[1],
|
||||
}),
|
||||
params: {
|
||||
corpId: query.corpId,
|
||||
},
|
||||
params: { corpId: query.corpId, entry: 1 },
|
||||
});
|
||||
|
||||
const onExportExcel = async () => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue