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 { Drawer } from "antd"; import { Button, message, Space, Spin, Tree } from "antd"; import useRequest from "@ahooksjs/use-request"; import { getFieldEnum, getServerpartTree } 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 { handleGetServerPartShopNewList, handleSynchroServerPartShopNew } from "./service"; import session from "@/utils/session"; import moment from 'moment' import Detail from "./component/detail"; import PageTitleBox from "@/components/PageTitleBox"; const serviceArea: React.FC<{ currentUser: CurrentUser }> = (props) => { const { currentUser } = props const downloadBtnRef = useRef() const detailChildrenRef = 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 [printIndex, setPrintIndex] = useState(new Date().getTime()) // 加载服务区树 const { loading: treeLoading, data: treeViews } = useRequest(async () => { const data = await getServerpartTree(currentUser?.ProvinceCode, currentUser?.CityAuthority, true, true, true) setTreeView(data) return data }) const businessTypeObj = session.get('BUSINESSTYPEObj') const businessStateObj = session.get('businessStateObj') // 树相关的属性和方法 const [selectedId, setSelectedId] = useState() // 导出的加载效果 const [showLoading, setShowLoading] = useState(false) // 是否显示打印的表格 const [showExportTable, setShowExportTable] = useState(false) // 显示添加和编辑的抽屉 const [showDetailDrawer, setShowDetailDrawer] = useState(false) // 点击行的数据 const [currentRow, setCurrentRow] = useState() // 抽屉的类型 编辑还是新增 const [drawerType, setDrawerType] = useState('') // 新增和编辑的保存的loading效果 const [btnLoading, setBtnLoading] = useState(false) const columns: any = [ { title: '商品业态', width: 120, align: 'center', dataIndex: 'SHOPTRADE', hideInSearch: true, valueType: 'select', request: async () => { return await getFieldEnum({ FieldExplainField: 'BUSINESSTYPE', sessionName: 'BUSINESSTYPE', notformate: true }); }, }, { title: '经营品牌', width: 120, align: 'center', dataIndex: 'BRAND_NAME', hideInSearch: true, }, { title: '服务区名称', width: 150, align: 'center', ellipsis: true, dataIndex: 'SERVERPART_NAME', hideInSearch: true, }, { title:
门店名称
, width: 300, dataIndex: 'SHOPNAME', align: 'left', ellipsis: true, hideInSearch: true, render: (_, record) => { return { console.log('record', record); setDrawerType('edit') setCurrentRow(record) setShowDetailDrawer(true) }}>{record?.SHOPNAME || ''} } }, { width: 150, title: '停业时间', align: 'center', dataIndex: 'BUSINESS_ENDDATE', hideInSearch: true, render: (_, record) => { return record?.BUSINESS_ENDDATE ? moment(record?.BUSINESS_ENDDATE).format('YYYY-MM-DD') : '-' } }, { width: 150, title: '经营模式', align: 'center', dataIndex: 'BUSINESS_TYPE', valueType: 'select', valueEnum: businessTypeObj }, { width: 150, title: '经营状态', dataIndex: 'BUSINESS_STATE', valueType: 'select', align: 'center', valueEnum: businessStateObj, render: (_, record) => { return
{record?.BUSINESS_STATE ? businessStateObj[record?.BUSINESS_STATE] : ''}
} }, { width: 150, title: '经营单位', dataIndex: 'BUSINESS_UNIT', align: 'center', hideInSearch: true, ellipsis: true }, ] const exportTable = (e) => { e.stopPropagation(); // 防止Collapse组件收起 const main = document.getElementsByClassName(`saleReportHideBox${printIndex}`)[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-serviceArea'); // 给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={} /> : ''}
} search={{ span: 6 }} scroll={{ x: "100%", y: 'calc(100vh - 430px)' }} request={async (params) => { if (!selectedId) { return } setSearchParams(params) console.log('params', params); const req: any = { serverPartId: selectedId || '', businessState: params?.BUSINESS_STATE || '', businessType: params?.BUSINESS_TYPE || '' } console.log('req', req); const data = await handleGetServerPartShopNewList(req) console.log('data', data); if (data && data.length > 0) { return { data, success: true } } return { data: [], success: true } }} toolbar={{ actions: [ , , ] }} />
{ // 关闭抽屉 则在清空选中行数据 并 设置抽屉状态为关闭 setDrawerType('') setCurrentRow(undefined) setShowDetailDrawer(false) }} bodyStyle={{ backgroundColor: "#f9f9f9", padding: 0 }} closable={false} destroyOnClose footer={
} >
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(serviceArea);