import { connect } from "umi"; import type { CurrentUser } from "umi"; import type { ConnectState } from "@/models/connect"; import React, { useRef, useState } from "react"; import ProCard from "@ant-design/pro-card"; import { MenuFoldOutlined } from "@ant-design/icons"; import type { FormInstance } from "antd"; import { Button, message, Space, Spin, Tree } from "antd"; import useRequest from "@ahooksjs/use-request"; import { getServerpartTree, handleCallLogs } from "@/services/options"; import type { ActionType } from "@ant-design/pro-table"; import ProTable from "@ant-design/pro-table"; import ReactHTMLTableToExcel from "react-html-table-to-excel"; import { handleGetYsabnormalityReport } from "@/pages/reports/audit/spAbnormalReport/service"; import moment from "moment/moment"; import PageTitleBox from "@/components/PageTitleBox"; import LeftSelectTree from "../../settlementAccount/component/leftSelectTree"; import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun"; import { formatTreeData } from "@/utils/format"; const spAbnormalReport: React.FC<{ currentUser: CurrentUser }> = (props) => { const { currentUser } = props const downloadBtnRef = useRef() const actionRef = useRef(); const formRef = useRef(); const [reqDetailList, setReqDetailList] = useState(); // 合计项数据源 const [printOut, setPrintOut] = useState(); // 打印数据的内容 const [collapsible, setCollapsible] = useState(false) const [treeView, setTreeView] = useState() // 加载服务区树 const { loading: treeLoading, data: treeViews } = useRequest(async () => { const data = await getServerpartTree(currentUser?.ProvinceCode, currentUser?.CityAuthority, true, true, true) setTreeView(data) return data }) // 树相关的属性和方法 const [selectedId, setSelectedId] = useState() // 导出的加载效果 const [showLoading, setShowLoading] = useState(false) // 是否显示打印的表格 const [showExportTable, setShowExportTable] = useState(false) // 门店还是服务区 const [ShowShop, setShowShop] = useState(1) const columns: any = [ { title: '统计时间', dataIndex: 'search_date', valueType: 'dateRange', hideInTable: true, hideInDescriptions: true, initialValue: [moment().subtract(7, 'days'), moment().add(-1, 'day')], search: { transform: (value) => { return { startDate: value[0], endDate: value[1], }; }, }, fieldProps: { disabledDate: (current: any) => current && current > moment().endOf('day') } }, { dataIndex: 'ShowShop', valueType: "radioButton", hideInTable: true, initialValue: '1', valueEnum: { 1: { text: '门店' }, 2: { text: '服务区' }, }, fieldProps: { onChange: (e: any) => { setShowShop(Number(e.target.value)) }, labelCol: { span: 0 }, wrapperCol: { span: 24 } }, }, { title: '服务区信息', dataIndex: '', hideInSearch: true, children: [ { title: '序号', width: 120, align: 'center', dataIndex: 'index', valueType: "index" }, { title: '服务区名称', width: 200, ellipsis: true, align: 'center', dataIndex: 'Name', }, { title:
异常总数
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE', }, ] }, { title: '稽核必查', dataIndex: 'EXCEPTIONTYPEA', hideInSearch: true, children: [ { title:
连续单清
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_B', }, { title:
整单清除
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_C', }, { title:
每单必打
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_Z', }, { title:
销售退货
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_F', }, { title:
异常交易
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_G', }, { title:
单品数量超限
, width: 150, align: 'right', dataIndex: 'EXCEPTIONTYPE_L', }, { title:
单品金额超限
, width: 150, align: 'right', dataIndex: 'EXCEPTIONTYPE_M', }, { title:
数量及金额超限
, width: 170, align: 'right', dataIndex: 'EXCEPTIONTYPE_R', }, { title:
总数
, width: 100, align: 'right', dataIndex: 'TotalMust', } ] }, { title: '稽核抽查', dataIndex: 'EXCEPTIONTYPEB', hideInSearch: true, children: [ { title:
单行清除
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_A', }, { title:
小票重打
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_H', }, { title:
异常重打小票
, width: 150, align: 'right', dataIndex: 'EXCEPTIONTYPE_I', }, { title:
非销售开钱箱
, width: 150, align: 'right', dataIndex: 'EXCEPTIONTYPE_J', }, { title:
单价修改
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_N', }, { title:
整单折扣
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_O', }, { title:
单项折扣
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_P', }, { title:
单项优惠
, width: 120, align: 'right', dataIndex: 'EXCEPTIONTYPE_Q', }, { title:
总数
, width: 100, align: 'right', dataIndex: 'TotalMay', }, ] } ] const exportTable = (e) => { e.stopPropagation(); // 防止Collapse组件收起 const main = document.getElementsByClassName('spAbnormalReportHideBox')[0] const thead = main.querySelector('thead').cloneNode(true); // 深克隆DOM节点 const tbody = main.querySelector('tbody').cloneNode(true); // 深克隆DOM节点 const container = document.querySelector('#hiddenBox'); const tempTable = document.createElement('table'); tempTable.appendChild(thead); tempTable.appendChild(tbody); tempTable.setAttribute('id', 'table-to-xls-spAbnormalReport'); // 给table添加id,值与按钮上的table字段对应 container.appendChild(tempTable); // 把创建的节点添加到页面容器中 setShowLoading(false) downloadBtnRef.current.handleDownload(); setShowExportTable(false) tempTable.remove() // 防止重复打印一个内容 } // 查询的条件 const [searchParams, setSearchParams] = useState() return (
{ // 打印报表 if (!reqDetailList || reqDetailList.length === 0) return; setPrintOut(el); }} > { showLoading ?
数据导出中...
: '' }
{ showExportTable && reqDetailList && reqDetailList.length > 0 ? : '' }
{/* { setCollapsible(!collapsible) }} />} colSpan={!collapsible ? "300px" : "60px"} title={!collapsible ? "请选择服务区" : ""} headerBordered collapsed={collapsible} > {treeView && treeView.length > 0 ? { const selectedIds = info.checkedNodes.filter(n => n?.type === 1) setSelectedId(selectedIds.map(n => n?.value)?.toString() || '') // actionRef?.current?.reload() // getData(selectedIds.map(n => n?.value)?.toString() || '') }} // switcherIcon={} /> : ''} */}
record?.Id + record?.Name} bordered scroll={{ x: '100%', y: 'calc(100vh - 470px)' }} headerTitle={} search={{ span: 6 }} request={async (params) => { if (!selectedId) { return } const req = { ...params, ServerpartIds: selectedId, ShowShop: ShowShop === 1 } handleCallLogs() setSearchParams(params) const data = await handleGetYsabnormalityReport(req) console.log('data', data) if (data && data.length > 0) { const list: any = JSON.parse(JSON.stringify(data)) list.forEach((item: any, index: number) => { item.index = index + 1 if (item.children && item.children.length > 0) { item.children.forEach((subItem: any, subIndex: number) => { subItem.index = subIndex + 1 if (subItem.children && subItem.children.length > 0) { subItem.children.forEach((thirdItem: any, thirdIndex: number) => { thirdItem.index = thirdIndex + 1 }) } }) } }) let fieldData: any = [ "EXCEPTIONTYPE", "EXCEPTIONTYPE_B", "EXCEPTIONTYPE_C", "EXCEPTIONTYPE_Z", "EXCEPTIONTYPE_F", "EXCEPTIONTYPE_G", "EXCEPTIONTYPE_L", "EXCEPTIONTYPE_M", "EXCEPTIONTYPE_R", "TotalMust", "EXCEPTIONTYPE_A", "EXCEPTIONTYPE_H", "EXCEPTIONTYPE_I", "EXCEPTIONTYPE_J", "EXCEPTIONTYPE_N", "EXCEPTIONTYPE_O", "EXCEPTIONTYPE_P", "EXCEPTIONTYPE_Q", "TotalMay", ] let enumList: any = [] let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(list)), fieldData, enumList, [], []) setReqDetailList(newPrintData) return { data: list, success: true } } return { data: [], success: true } }} toolbar={{ actions: [ // // // , ] }} />
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(spAbnormalReport);