import { Cascader } from "antd"; import { useEffect, useMemo } from "react"; import { processTreeDataByLevel } from "../../../utils"; /** * 基础级联组件(不建议直接使用此组件,二次继承使用) */ function BasicCascader(props) { const { onGetData, onChange, onGetNodePaths, onGetNodePathsIsIncludeOneself = true, placeholder = "", data = [], nameKey = "name", idKey = "id", childrenKey = "children", level, ...restProps } = props; // 根据 level 处理树数据 const processedData = useMemo(() => { return level ? processTreeDataByLevel({ data, level, childrenKey, currentLevel: 1, }) : data; }, [data, level, childrenKey]); const getNodePaths = (selectedOptions) => { let nodePaths = selectedOptions; if (!onGetNodePathsIsIncludeOneself && selectedOptions) { nodePaths = selectedOptions.slice(0, -1); } return nodePaths || []; }; const handleChange = (value, selectedOptions) => { if (selectedOptions && onGetNodePaths) { const parentNodes = getNodePaths(selectedOptions); onGetNodePaths?.(parentNodes); } onChange?.(value, selectedOptions); }; useEffect(() => { onGetData?.(data, processedData); }, [data, processedData]); return ( ); } BasicCascader.displayName = "BasicCascader"; export default BasicCascader;