import React, { useEffect } from "react"; import { IDataSourceItem, defaultClassName } from "../../../@types/SelectMenu"; import { Dropdown, Button, Menu } from "antd"; import { DownOutlined } from "@ant-design/icons"; import { BaseService } from "../../base"; import { Utils } from "../../../utils"; import { EventHandlerParams, MouseEventType } from "../../../@types/Base"; const { SubMenu } = Menu; export class Service extends BaseService { constructor(props: Object, isPureComponent?: boolean) { super(props, isPureComponent) } /** * @description 获取类名 */ getClassName() { const { className } = this.getProps() let nextClassName = super.getClassName(defaultClassName) if (className) { nextClassName.push(className) } return nextClassName } /** * @description 事件处理 */ eventHandler(params: EventHandlerParams) { const { ev } = params as any ev && ev.stopPropagation && ev.stopPropagation() } /** * @description 菜单项的点击事件 */ onMenuClick(data: any) { const { key, item } = data const title = item.props.title const { onMenuClick, dataSource } = this.getProps() if (!this.isPureComponent) { this.setProps({ text: title }) } if (onMenuClick && typeof onMenuClick === "function") { onMenuClick({ ev: null, eventName: MouseEventType.onMenuClick, value: key, data: dataSource.find((item: any) => item["key"] == key) }, this.props) } } /** * 根据传入数据源 dataSource 生成 menu 组件 * @param dataSource * @param options */ generateMenu = ( dataSource: IDataSourceItem[], options?: { isSub?: boolean; key?: number | string; title?: string; } ): React.ReactElement => { let processedGroups: any = []; let menus = dataSource .map((item: any, i: number) => { let curDefaultKey = options ? `${options.key}-${i}` : i; if (item.children && item.children.length > 0) { return this.generateMenu(item.children, { isSub: true, key: item.key || curDefaultKey, title: item.label }); } else if (item.group && processedGroups.indexOf(item.group) === -1) { processedGroups.push(item.group); return (