47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
|  | import { CloseCircleOutlined } from "@ant-design/icons"; | ||
|  | import { Select } from "antd"; | ||
|  | 
 | ||
|  | /** | ||
|  |  * 可创建选项的选择器组件 | ||
|  |  */ | ||
|  | function SelectCreate(props) { | ||
|  |   const { items, showDelete = true, label = "", maxCount = 1, onDelete, ...restProps } = props; | ||
|  | 
 | ||
|  |   const handlerDelete = (option) => { | ||
|  |     onDelete?.(option); | ||
|  |   }; | ||
|  | 
 | ||
|  |   return ( | ||
|  |     <Select | ||
|  |       mode="tags" | ||
|  |       maxCount={maxCount} | ||
|  |       placeholder={`请选择${label},无对应选项可直接输入创建选项`} | ||
|  |       optionRender={option => ( | ||
|  |         <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}> | ||
|  |           <span>{option.label}</span> | ||
|  |           { | ||
|  |             showDelete && ( | ||
|  |               <CloseCircleOutlined | ||
|  |                 style={{ marginRight: 10 }} | ||
|  |                 onClick={(e) => { | ||
|  |                   e.stopPropagation(); | ||
|  |                   handlerDelete(option); | ||
|  |                 }} | ||
|  |               /> | ||
|  |             ) | ||
|  |           } | ||
|  |         </div> | ||
|  |       )} | ||
|  |       {...restProps} | ||
|  |     > | ||
|  |       { | ||
|  |         items.map(item => ( | ||
|  |           <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option> | ||
|  |         )) | ||
|  |       } | ||
|  |     </Select> | ||
|  |   ); | ||
|  | } | ||
|  | 
 | ||
|  | export default SelectCreate; |