mirror of
https://gitee.com/ant-design/ant-design.git
synced 2024-12-16 01:41:02 +08:00
63ddf2fc8d
+ close #5095 + close #5135 + support OptGroup of AutoComplete
168 lines
3.7 KiB
Markdown
168 lines
3.7 KiB
Markdown
---
|
|
order: 4
|
|
title:
|
|
zh-CN: 查询模式 - 确定类目
|
|
en-US: Lookup-Patterns - Certain Category
|
|
---
|
|
|
|
## zh-CN
|
|
|
|
[查询模式: 确定类目](https://ant.design/docs/spec/reaction#Lookup-Patterns) 示例。
|
|
|
|
## en-US
|
|
|
|
Demonstration of [Lookup Patterns: Certain Category](https://ant.design/docs/spec/reaction#Lookup-Patterns).
|
|
Basic Usage, set datasource of autocomplete with `dataSource` property.
|
|
|
|
````jsx
|
|
import { Icon, Input, AutoComplete } from 'antd';
|
|
const Option = AutoComplete.Option;
|
|
const OptGroup = AutoComplete.OptGroup;
|
|
|
|
const dataSource = [{
|
|
title: '话题',
|
|
children: [{
|
|
title: 'AntDesign',
|
|
count: 10000,
|
|
}, {
|
|
title: 'AntDesign UI',
|
|
count: 10600,
|
|
}],
|
|
}, {
|
|
title: '问题',
|
|
children: [{
|
|
title: 'AntDesign UI 有多好',
|
|
count: 60100,
|
|
}, {
|
|
title: 'AntDesign 是啥',
|
|
count: 30010,
|
|
}],
|
|
}, {
|
|
title: '文章',
|
|
children: [{
|
|
title: 'AntDesign 是一个设计语言',
|
|
count: 100000,
|
|
}],
|
|
}];
|
|
|
|
function renderTitle(title) {
|
|
return (<span>
|
|
{title}
|
|
<a
|
|
style={{ float: 'right' }}
|
|
href="https://www.google.com/search?q=antd"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
>更多
|
|
</a>
|
|
</span>);
|
|
}
|
|
|
|
const options = dataSource.map(group =>
|
|
<OptGroup
|
|
key={group.title}
|
|
label={renderTitle(group.title)}
|
|
>
|
|
{group.children.map(opt =>
|
|
<Option key={opt.title} value={opt.title}>
|
|
{opt.title}
|
|
<span className="certain-search-item-count">{opt.count} 人 关注</span>
|
|
</Option>)
|
|
}
|
|
</OptGroup>).concat([
|
|
<Option disabled key="all" className="show-all">
|
|
<a
|
|
href="https://www.google.com/search?q=antd"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
>查看所有结果</a>
|
|
</Option>,
|
|
]);
|
|
|
|
function Complete() {
|
|
return (
|
|
<div className="certain-category-search-wrapper" style={{ width: 250 }}>
|
|
<AutoComplete
|
|
className="certain-category-search"
|
|
dropdownClassName="certain-category-search-dropdown"
|
|
dropdownMatchSelectWidth={false}
|
|
dropdownStyle={{ width: 300 }}
|
|
size="large"
|
|
style={{ width: '100%' }}
|
|
dataSource={options}
|
|
placeholder="input here"
|
|
optionLabelProp="value"
|
|
dropdownAlign={{
|
|
points: ['bl', 'tl'],
|
|
offset: [0, -4],
|
|
overflow: {
|
|
adjustX: 0,
|
|
adjustY: 0,
|
|
},
|
|
}}
|
|
>
|
|
<Input
|
|
suffix={<Icon type="search" className="certain-category-icon" />}
|
|
/>
|
|
</AutoComplete>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
ReactDOM.render(<Complete />, mountNode);
|
|
````
|
|
|
|
````css
|
|
.certain-category-search.ant-select-auto-complete .ant-input {
|
|
height: 40px;
|
|
padding: 11px 12px;
|
|
}
|
|
.certain-category-search.ant-select-auto-complete .ant-input-preSuffix-wrapper .ant-input-suffix {
|
|
right: 16px;
|
|
}
|
|
|
|
.certain-category-search.ant-select-auto-complete .ant-select-selection__placeholder {
|
|
top: 20px;
|
|
margin-left: 12px;
|
|
margin-right: 12px;
|
|
}
|
|
|
|
.certain-category-search-dropdown .ant-select-dropdown-menu-item-group-title {
|
|
color: #666;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.certain-category-search-dropdown .ant-select-dropdown-menu-item-group {
|
|
border-bottom: 1px solid #F6F6F6;
|
|
}
|
|
|
|
.certain-category-search-dropdown .ant-select-dropdown-menu-item {
|
|
padding-left: 16px;
|
|
}
|
|
|
|
.certain-category-search-dropdown .ant-select-dropdown-menu-item.show-all {
|
|
text-align: center;
|
|
cursor: default;
|
|
}
|
|
|
|
.certain-category-search-dropdown .ant-select-dropdown-menu {
|
|
max-height: 300px;
|
|
}
|
|
|
|
.certain-search-item-count {
|
|
position: absolute;
|
|
color: #999;
|
|
right: 16px;
|
|
}
|
|
|
|
.certain-category-search.ant-select-focused .certain-category-icon {
|
|
color: #49A9EE;
|
|
}
|
|
|
|
.certain-category-icon {
|
|
color: #6E6E6E;
|
|
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
font-size: 16px;
|
|
}
|
|
````
|