diff --git a/docs/en-US/component/cascader.md b/docs/en-US/component/cascader.md
index 3561c3f12f..bb5cc3424f 100644
--- a/docs/en-US/component/cascader.md
+++ b/docs/en-US/component/cascader.md
@@ -148,6 +148,16 @@ cascader/custom-tag
:::
+## Custom Header & Footer of the Dropdown ^(2.10.5)
+
+You can customize both the header and footer of the dropdown using slots.
+
+:::demo Use slot to customize the content.
+
+cascader/custom-header-footer
+
+:::
+
## Click to Select Node ^(2.10.5)
Allows selecting nodes by clicking, with optional control visibility.
@@ -214,6 +224,8 @@ cascader/check-on-click-node
| prefix ^(2.9.4) | content as Input prefix | — |
| suggestion-item ^(2.9.5) | custom content for suggestion item when searching | ^[object]`{ item: CascaderNode }` |
| tag ^(2.10.3) | custom tags style | ^[object]`{ data: Tag[], deleteTag: (tag: Tag) => void }` |
+| header ^(2.10.5) | content at the top of the dropdown | — |
+| footer ^(2.10.5) | content at the bottom of the dropdown | — |
### Cascader Exposes
diff --git a/docs/examples/cascader/custom-header-footer.vue b/docs/examples/cascader/custom-header-footer.vue
new file mode 100644
index 0000000000..425f086fe8
--- /dev/null
+++ b/docs/examples/cascader/custom-header-footer.vue
@@ -0,0 +1,123 @@
+
+
+
+
Custom header content
+
+
+
+ All
+
+
+
+
+
+
Custom footer content
+
+
+ Clear
+
+
+
+
+
+
+
+
+
diff --git a/packages/components/cascader/src/cascader.vue b/packages/components/cascader/src/cascader.vue
index 1028dda097..a3e9dbdb22 100644
--- a/packages/components/cascader/src/cascader.vue
+++ b/packages/components/cascader/src/cascader.vue
@@ -149,6 +149,9 @@
+
+
+
+
+
+
diff --git a/packages/theme-chalk/src/cascader.scss b/packages/theme-chalk/src/cascader.scss
index 9c6008db21..4b8e5c5264 100644
--- a/packages/theme-chalk/src/cascader.scss
+++ b/packages/theme-chalk/src/cascader.scss
@@ -154,6 +154,16 @@
}
}
+ @include e(header) {
+ padding: map.get($cascader-dropdown, 'header-padding');
+ border-bottom: map.get($cascader-dropdown, 'border');
+ }
+
+ @include e(footer) {
+ padding: map.get($cascader-dropdown, 'footer-padding');
+ border-top: map.get($cascader-dropdown, 'border');
+ }
+
@include e(tags) {
position: absolute;
left: 0;
diff --git a/packages/theme-chalk/src/common/var.scss b/packages/theme-chalk/src/common/var.scss
index c72717b368..2adfea73cf 100644
--- a/packages/theme-chalk/src/common/var.scss
+++ b/packages/theme-chalk/src/common/var.scss
@@ -705,6 +705,16 @@ $cascader-search-input-margin-left: map.merge(
$cascader-search-input-margin-left
);
+$cascader-dropdown: () !default;
+$cascader-dropdown: map.merge(
+ (
+ 'header-padding': 10px,
+ 'footer-padding': 10px,
+ 'border': 1px solid getCssVar('border-color-light'),
+ ),
+ $cascader-dropdown
+);
+
//statistic
// css3 var in packages/theme-chalk/src/statistic.scss
$statistic: () !default;