import { FC, useCallback, useEffect, useRef, useState } from 'react' import style from './index.module.scss' import MyTable from '@/components/MyTable' import { NUMBER_OF_COLLECTION_COLUMNS } from './constants' import { Button, Select, Table } from 'antd' import { A1_APIGetCheck } from '@/store/action/A1dataSta' import dayjs from 'dayjs' import { RelicModal } from '../RelicModal' import { exportTempExcel } from '@/utils/exportExcelUtils' export const A1Tab1: FC = () => { const [prevYearData, setPrevYearData] = useState([]) const [curYearData, setCurYearData] = useState([]) const [addData, setAddData] = useState([]) const [columns, setColumns] = useState([]) const [customData, setCustomData] = useState([]) const [relicModalOpen, setRelicModalOpen] = useState(false) const [checkedRelicIds, setCheckedRelicIds] = useState([ ['12501', '12502', '12503', '12504', '12505'], [], [] ]) const getDetail = async (year: number) => { const res = await A1_APIGetCheck(year) return res.data && res.data.snap ? (JSON.parse(res.data.snap) as Record) : null } const getYearList = () => { const currentYear = dayjs().year() const years = [] for (let i = 0; i < 10; i++) { years.push(currentYear - i) } return years } const years = useRef(getYearList()) const [curYear, setCurYear] = useState(years.current[0]) const initData = useCallback(async () => { const curRes = await getDetail(curYear) const prevRes = await getDetail(curYear - 1) const _addData = { id: 1, totalIncrease: 0, totalDecrease: 0, level0Increase: 0, level0Decrease: 0, level1Increase: 0, level1Decrease: 0, level2Increase: 0, level2Decrease: 0, level3Increase: 0, level3Decrease: 0, level4Increase: 0, level4Decrease: 0 } const levels = ['total', 'level0', 'level1', 'level2', 'level3', 'level4'] levels.forEach(level => { if (!curRes || !prevRes) return const curProp = level === 'total' ? 'total' : `pcs${level.charAt(0).toUpperCase()}${level.slice(1)}` const diff = curRes[curProp] - prevRes[curProp] if (diff) { // @ts-ignore _addData[`${level}${diff > 0 ? 'Increase' : 'Decrease'}`] = Math.abs(diff) } }) curRes && setCurYearData([ { ...curRes, id: 1 } ]) prevRes && setPrevYearData([ { ...prevRes, id: 1 } ]) setAddData([_addData]) }, [curYear]) const handleColumnChange = useCallback( (v: any[]) => { const flat = v.flat().map(i => [i.title, i.dataIndex]) if (!flat.length || !curYearData.length) return const tempColumns: any[] = [] const tempData: Record = { id: 1 } flat.forEach(arr => { const keys = Object.keys(curYearData[0]) tempData[`${arr[1]}Increase`] = 0 tempData[`${arr[1]}Decrease`] = 0 if (keys.includes(`${arr[1]}`)) { const diff = (curYearData[0]?.[arr[1]] || 0) - (prevYearData[0]?.[arr[1]] || 0) tempData[`${arr[1]}${diff > 0 ? 'Increase' : 'Decrease'}`] = Math.abs(diff) } tempColumns.push({ title: arr[0], children: [ { title: '增', dataIndex: arr[1] + 'Increase', align: 'center' }, { title: '减', dataIndex: arr[1] + 'Decrease', align: 'center' } ] }) }) setColumns(tempColumns) setCustomData([tempData]) }, [curYearData, prevYearData] ) const handleExport = () => { exportTempExcel( curYear + '年度核查统计', worksheet => { const levels = ['total', 'level1', 'level2', 'level3', 'level0', 'level4'] worksheet.addRow(['', ...NUMBER_OF_COLLECTION_COLUMNS.map(i => i[1])]) worksheet.addRow(['', ...NUMBER_OF_COLLECTION_COLUMNS.map(i => prevYearData[0][i[2]] || 0)]) worksheet.addRow(['', ...NUMBER_OF_COLLECTION_COLUMNS.map(i => i[1])]) worksheet.addRow(['', ...NUMBER_OF_COLLECTION_COLUMNS.map(i => curYearData[0][i[2]] || 0)]) worksheet.addRow(['', ...NUMBER_OF_COLLECTION_COLUMNS.map(i => i[1])]) worksheet.addRow([ '', ...levels.map(level => { const curProp = level === 'total' ? 'total' : `pcs${level.charAt(0).toUpperCase()}${level.slice(1)}` const diff = curYearData[0][curProp] - prevYearData[0][curProp] return !isNaN(diff) ? diff : 0 }) ]) worksheet.addRow(['', ...columns.map(i => i.title)]) worksheet.addRow([ '', ...columns.map( // @ts-ignore i => (customData[`${i.id}Increase`] || 0) - (customData[`${i.id}Decrease`] || 0) ) ]) worksheet.mergeCells('A1:A2') worksheet.mergeCells('A3:A4') worksheet.mergeCells('A5:A6') worksheet.mergeCells('A7:A8') worksheet.getCell('A1').value = '上一年度馆藏数量' worksheet.getCell('A3').value = '核查年度馆藏数量' worksheet.getCell('A5').value = '馆藏数量增减情况' worksheet.getCell('A7').value = '馆藏文物增加类别明细' ;[20, 10, 10, 10, 10, 10, 10].forEach((width: number, index: number) => { worksheet.getColumn(index + 1).width = width }) }, [8, Math.max(columns.length, NUMBER_OF_COLLECTION_COLUMNS.length + 1)] ) } useEffect(() => { initData() }, [initData]) return ( <>

上一年度馆藏数量

核查年度馆藏数量