import { Z1_APIgetDictZhi } from '@/store/action/Z1dict' import { Checkbox, Collapse, CollapseProps, Modal, Tree } from 'antd' import { FC, useEffect, useState } from 'react' export interface RelicModalProps { isModalOpen: boolean checkedIds: string[][] setIsModalOpen: (v: boolean) => void onChange: (v: string[][]) => void onColumnChange?: (v: any[]) => void } const getMatchedItems = (res: any[], checkedIds: string[]) => { const result: { title: string; dataIndex: string }[] = [] function traverse(nodes: any[]) { for (const node of nodes) { if (checkedIds.includes(node.id || node.value)) { result.push({ title: node.name || node.label, dataIndex: node.id || node.value }) } if (node.children) { traverse(node.children) } } } traverse(res) return result } export const RelicModal: FC = ({ isModalOpen, checkedIds, setIsModalOpen, onChange, onColumnChange }) => { const [cate1List, setCate1List] = useState([]) const [cate2List, setCate2List] = useState([]) const [cate3List, setCate3List] = useState([]) const [checked1Ids, setChecked1Ids] = useState([]) const [checked2Ids, setChecked2Ids] = useState([]) const [checked3Ids, setChecked3Ids] = useState([]) const categories: CollapseProps['items'] = [ { label: '文物类别', key: 12001, children: ( setChecked1Ids(v)} /> ) }, { label: '馆内分类1', key: 12015, children: ( setChecked2Ids(v)} /> ) }, { label: '馆内分类2', key: 12016, children: ( setChecked3Ids(v as string[])} /> ) } ] const handleOk = () => { onChange([[...checked1Ids], [...checked2Ids], [...checked3Ids]]) setIsModalOpen(false) } const handleCancel = () => { setIsModalOpen(false) } const getList = async (id: number) => { const res = await Z1_APIgetDictZhi(`${id}`) return res } const init = () => { Promise.all([ getList(categories[0].key as number), getList(categories[1].key as number), getList(categories[2].key as number) ]).then(res => { setCate1List(res[0].data.map((i: any) => ({ label: i.name, value: i.id }))) setCate2List(res[1].data.map((i: any) => ({ label: i.name, value: i.id }))) setCate3List(res[2].data) }) } useEffect(() => { init() // eslint-disable-next-line react-hooks/exhaustive-deps }, []) useEffect(() => { if (isModalOpen) { setChecked1Ids(checkedIds[0]) setChecked2Ids(checkedIds[1]) setChecked3Ids(checkedIds[2]) } }, [checkedIds, isModalOpen]) useEffect(() => { onColumnChange?.([ ...getMatchedItems(cate1List, checkedIds[0]), ...getMatchedItems(cate2List, checkedIds[1]), ...getMatchedItems(cate3List, checkedIds[2]) ]) }, [cate1List, cate2List, cate3List, checkedIds, onColumnChange]) return ( i.key as number)} /> ) }