import './index.less' import { Alert, Space } from 'ant-design-vue' import 'ant-design-vue/es/alert/style/index.less' import 'ant-design-vue/es/space/style/index.less' import { getPrefixCls } from '#/layout/RouteContext' import type { IntlType } from '#/provider' import { useIntl } from '#/provider' import type { VueNode } from '#/types' import { getRender } from '#/layout/utils' import type { FunctionalComponent } from 'vue' type AlertRender = (props: { intl: IntlType selectedRowKeys: (number | string)[] selectedRows: T[] onCleanSelected: () => void }) => VueNode export type AlertRenderType = AlertRender | false export type TableAlertProps = { selectedRowKeys: (number | string)[] selectedRows: T[] alwaysShowAlert?: boolean alertInfoRender?: AlertRenderType onCleanSelected: () => void alertOptionRender?: AlertRenderType } const defaultAlertOptionRender: AlertRender = (props: { intl: IntlType onCleanSelected: () => void }) => { const { intl, onCleanSelected } = props return [ {intl.getMessage('alert.clear', '清空')} ] } const defaultAlertInfoRender: AlertRender = ({ intl, selectedRowKeys }) => ( {intl.getMessage('alert.selected', '已选择')} {selectedRowKeys.length} {intl.getMessage('alert.item', '项')}   ) const TableAlert: FunctionalComponent> = (props, { slots }) => { const intl = useIntl() const alertRenderProps = { onCleanSelected: props.onCleanSelected, selectedRowKeys: props.selectedRowKeys, selectedRows: props.selectedRows, intl } let optionRender = getRender>(props, slots, 'alertOptionRender') if (optionRender !== false && !optionRender) { optionRender = defaultAlertOptionRender } const option = optionRender && optionRender(alertRenderProps) const className = getPrefixCls('pro-table-alert') let infoRender = getRender>(props, slots, 'alertInfoRender') if (infoRender === false) { return null } else if (!infoRender) { infoRender = defaultAlertInfoRender } const dom = infoRender(alertRenderProps) if (dom === false || (props.selectedRowKeys.length < 1 && !props.alwaysShowAlert)) { return null } return (
{dom}
{option ?
{option}
: null}
} type="info" /> ) } export default TableAlert