背景
- 表单级联菜单需要添加表头,用于表示各级含义。

- 如果你的
antd
版本大于等于4.4.0
,则直接可以使用dropdownRender
属性自定义,本篇文章可以直接跳过。
参数 | 说明 | 类型 | 默认值 | 版本 |
---|
dropdownRender | 自定义下拉框内容 | (menus: ReactNode) => ReactNode | - | 4.4.0 |
- 由于博主的antd版本过低,用不了
dropdownRender
属性,只能另辟蹊径了。
实现
import { Cascader} from 'antd';
import React, { useState } from 'react';
import './index.css';
export default function(){
const [popupVisible, setPopupVisible] = useState(false);
return (
<div>
<div className="navSpacePopup-container" style={{ display: popupVisible ? 'block' : 'none' }}>
<div className="header">
<span>部门</span>
<span>产品</span>
<span>业务</span>
</div>
<div className="body" />
<div className="footer" />
</div>
<Cascader
options={options}
popupClassName={'navSpacePopup'}
showSearch={true}
onSearch={(search) => {
const uls: any = document.querySelector('.navSpacePopup .ant-cascader-menus .ant-cascader-menu');
if (search) {
uls.style.width = '100%';
} else {
uls.style.width = '33%';
}
}}
getPopupContainer={() => document.querySelector('.navSpacePopup-container .body')}
onPopupVisibleChange={(val) => setPopupVisible(val)}
/>
</div>
)
}
.navSpacePopup-container {
position: absolute;
top: 224px;
right: 25px;
width: 65%;
height: 210px;
z-index: 999;
background: #fff;
border: 1px solid #ddd;
}
.navSpacePopup-container .header {
width: 100%;
height: 32px;
line-height: 32px;
display: grid;
grid-template-columns: auto auto auto;
text-align: center;
}
.navSpacePopup-container .footer {
width: 100%;
height: 32px;
line-height: 32px;
}
.navSpacePopup-container .body {
width: 100%;
height: 248px;
}
.navSpacePopup-container .body > div {
position: relative !important;
}
.navSpacePopup {
width: 100%;
position: relative !important;
top: 0 !important;
left: 0 !important;
box-shadow: none;
}
.navSpacePopup .ant-cascader-menus .ant-cascader-menu {
width: 33%;
}
.navSpacePopup .ant-cascader-menus .ant-cascader-menu .ant-cascader-menu-item .ant-cascader-menu-item-content {
flex: none !important;
}
.navSpacePopup .ant-cascader-menus .ant-cascader-menu .ant-cascader-menu-item {
display: flex;
justify-content: space-between;
}
.navSpacePopup .ant-cascader-menus .ant-cascader-menu {
flex-grow: inherit;
}