55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			55 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,
 | 
						|
    formValues,
 | 
						|
    ...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;
 |