|
|
@@ -1,6 +1,6 @@
|
|
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
-import { Button, Select } from 'antd'
|
|
|
+import { Button, Modal, Select } from 'antd'
|
|
|
import dayjs from 'dayjs'
|
|
|
import { initEchBingFu, initEchZhuFu } from './data'
|
|
|
|
|
|
@@ -84,9 +84,22 @@ function A1resStat() {
|
|
|
useEffect(() => {
|
|
|
if (zhuData.list && zhuData.list.length) {
|
|
|
zhuData.list.forEach((v, i) => {
|
|
|
- initEchZhuFu(v.children, document.querySelector(`#echZhu${i + 1}`), v.name, id => {
|
|
|
- setZhuSonId(id)
|
|
|
- })
|
|
|
+ initEchZhuFu(
|
|
|
+ v.children,
|
|
|
+ document.querySelector(`#echZhu${i + 1}`),
|
|
|
+ v.name,
|
|
|
+ (id, name, num) => {
|
|
|
+ setModalTitle((num || '') + (name || ''))
|
|
|
+ // 查找对应的children数据
|
|
|
+ const item = v.children?.find((child: any) => child.id === id)
|
|
|
+ if (item && item.children) {
|
|
|
+ setModalData(item.children)
|
|
|
+ } else {
|
|
|
+ setModalData([])
|
|
|
+ }
|
|
|
+ setModalVisible(true)
|
|
|
+ }
|
|
|
+ )
|
|
|
})
|
|
|
}
|
|
|
}, [zhuData])
|
|
|
@@ -380,7 +393,37 @@ function A1resStat() {
|
|
|
}, [allNum, time, yearNum, zhuData, bingData, kuId1, kuId2, kuList])
|
|
|
|
|
|
// 点击柱子打开弹窗
|
|
|
- const [zhuSonId, setZhuSonId] = useState('')
|
|
|
+ const [modalVisible, setModalVisible] = useState(false)
|
|
|
+ const [modalTitle, setModalTitle] = useState('')
|
|
|
+ const [modalData, setModalData] = useState<any[]>([])
|
|
|
+
|
|
|
+ // 弹窗柱状图渲染
|
|
|
+ const modalChartRef = useRef<any>(null)
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (modalVisible && modalData.length > 0) {
|
|
|
+ // 延迟渲染确保DOM已挂载
|
|
|
+ setTimeout(() => {
|
|
|
+ const dom = document.querySelector('#echZhuModal')
|
|
|
+ if (dom) {
|
|
|
+ // 销毁之前的实例
|
|
|
+ if (modalChartRef.current) {
|
|
|
+ modalChartRef.current.dispose()
|
|
|
+ }
|
|
|
+ modalChartRef.current = initEchZhuFu(modalData, dom, modalTitle, () => {})
|
|
|
+ }
|
|
|
+ }, 100)
|
|
|
+ }
|
|
|
+ }, [modalVisible, modalData, modalTitle])
|
|
|
+
|
|
|
+ // 关闭弹窗时销毁图表实例
|
|
|
+ const handleModalClose = useCallback(() => {
|
|
|
+ if (modalChartRef.current) {
|
|
|
+ modalChartRef.current.dispose()
|
|
|
+ modalChartRef.current = null
|
|
|
+ }
|
|
|
+ setModalVisible(false)
|
|
|
+ }, [])
|
|
|
|
|
|
return (
|
|
|
<div className={styles.A1resStat}>
|
|
|
@@ -517,6 +560,21 @@ function A1resStat() {
|
|
|
)}
|
|
|
</div>
|
|
|
</div>
|
|
|
+
|
|
|
+ {/* 弹窗:显示子数据柱状图 */}
|
|
|
+ <Modal
|
|
|
+ title={modalTitle}
|
|
|
+ open={modalVisible}
|
|
|
+ onCancel={handleModalClose}
|
|
|
+ footer={null}
|
|
|
+ width={800}
|
|
|
+ centered
|
|
|
+ >
|
|
|
+ <div id='echZhuModal' style={{ width: '100%', height: 400 }}></div>
|
|
|
+ {modalData.length === 0 && (
|
|
|
+ <div style={{ textAlign: 'center', padding: '40px 0', color: '#999' }}>暂无子数据</div>
|
|
|
+ )}
|
|
|
+ </Modal>
|
|
|
</div>
|
|
|
)
|
|
|
}
|