Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun
	
		
	
				
					
				
			
						commit
						d72ccd63bc
					
				| @ -0,0 +1,127 @@ | ||||
| /* | ||||
|  * @Description: 知识点 | ||||
|  * @Author: tangjiang | ||||
|  * @Github:  | ||||
|  * @Date: 2019-12-30 13:51:19 | ||||
|  * @LastEditors  : tangjiang | ||||
|  * @LastEditTime : 2020-01-03 09:32:24 | ||||
|  */ | ||||
| import './index.scss'; | ||||
| import React, { useState, useEffect } from 'react'; | ||||
| import { Select, notification } from 'antd'; | ||||
| 
 | ||||
| const { Option } = Select; | ||||
| 
 | ||||
| function KnowLedge (props) { | ||||
| 
 | ||||
|   const { | ||||
|     options = [], // 下拉选项
 | ||||
|     values = [], // 已选择的下拉项
 | ||||
|     onChange // 获取选择的值
 | ||||
|   } = props; | ||||
| 
 | ||||
|   useEffect(() => { | ||||
|     const _options = []; | ||||
|     const _selects = []; | ||||
|     options.forEach(opt => { | ||||
|       if (!values.includes(opt.id)) { | ||||
|         _options.push(opt); | ||||
|       } else { | ||||
|         _selects.push(opt); | ||||
|       } | ||||
|     }); | ||||
|     setSelectOptions(_options || []); | ||||
|     setSelectValue(_selects || []); | ||||
|   }, [props]); | ||||
| 
 | ||||
|   // 显示的下拉项
 | ||||
|   const [selectOptions, setSelectOptions] = useState(options); | ||||
|   // 已选择的下拉项
 | ||||
|   const [selectValue, setSelectValue] = useState([]); | ||||
|   //
 | ||||
|   const [value] = useState([]); | ||||
| 
 | ||||
|   // 渲染下拉选项
 | ||||
|   const renderOptions = (options = []) => { | ||||
|     return options.map((opt, i) => ( | ||||
|       <Option key={`opt_${i}`} value={`${opt.id}`}>{opt.name}</Option> | ||||
|     )); | ||||
|   } | ||||
|   // 过滤下拉列表项
 | ||||
|   const handleSelectChange = (value) => { | ||||
|     value = +value.join(''); | ||||
|     const tempArr = [...selectValue]; | ||||
|     const _result = selectOptions.filter(item => { | ||||
|       if (item.id === value && tempArr.findIndex(t => t.id === value) === -1) { | ||||
|         tempArr.push(item); | ||||
|       } | ||||
|       return item.id !== value; | ||||
|     }); | ||||
|     if (tempArr.length > 50) { | ||||
|       notification.warning({ | ||||
|         message: '提示', | ||||
|         description: '知识点不能超过50个' | ||||
|       }); | ||||
|       return; | ||||
|     } | ||||
|     setSelectValue(tempArr); | ||||
|     setSelectOptions(_result); | ||||
|     // 将选择值返回
 | ||||
|     onChange && onChange(tempArr); | ||||
|   } | ||||
| 
 | ||||
|   // 删除
 | ||||
|   const handleRemoveResult = (item) => { | ||||
|     // console.log('点击了删除按钮===>>>>', item);
 | ||||
|     // 将删除的值重新加入到列表中
 | ||||
|     const tempOptions = [...selectOptions]; | ||||
|     const tempValue = selectValue.filter(t => t.id !== item.id); | ||||
|     // console.log(selectValue);
 | ||||
|     tempOptions.push(item); | ||||
|     setSelectOptions(tempOptions); | ||||
|     setSelectValue(tempValue); | ||||
|     // 将选择值返回
 | ||||
|     onChange && onChange(tempValue); | ||||
|   } | ||||
| 
 | ||||
|   // 渲染下拉结果
 | ||||
|   const renderResult = (arrs) => { | ||||
|     return arrs.map((item) => ( | ||||
|       <span className="knowledge-item" key={`item_${item.name}`}> | ||||
|         {item.name} | ||||
|         <span | ||||
|           onClick={() => handleRemoveResult(item)} | ||||
|           className="iconfont icon-roundclose knowledge-close" | ||||
|         ></span> | ||||
|       </span> | ||||
|     )); | ||||
|   } | ||||
|   // 渲染下拉列表
 | ||||
|   const renderSelect = (options = []) => { | ||||
|     // console.log('+++++', options);
 | ||||
|     // setSelectValue(_selects);
 | ||||
|     return ( | ||||
|       <Select | ||||
|         value={value} | ||||
|         mode="tags" | ||||
|         placeholder="请选择" | ||||
|         style={{ width: '100%' }} | ||||
|         onChange={handleSelectChange} | ||||
|       > | ||||
|         {renderOptions(options)} | ||||
|       </Select> | ||||
|     ) | ||||
|   } | ||||
|    | ||||
|   return ( | ||||
|     <div className="knowledge-select-area"> | ||||
|       { renderSelect(selectOptions) } | ||||
|       {/* 渲染下拉选择项 */} | ||||
|       <div className="knowledge-result"> | ||||
|         { renderResult(selectValue) }         | ||||
|       </div> | ||||
|     </div> | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| export default KnowLedge; | ||||
| @ -0,0 +1,42 @@ | ||||
| .knowledge-select-area{ | ||||
|   .ant-select-selection__rendered{ | ||||
|     margin-bottom: 0 !important; | ||||
|   } | ||||
|   .ant-select-search--inline{ | ||||
|     margin-left: 5px; | ||||
|     margin-top: 2px; | ||||
|   } | ||||
| 
 | ||||
|   .knowledge-result{ | ||||
|     display: flex; | ||||
|     flex-direction: row; | ||||
|     flex-wrap: wrap; | ||||
|     // margin-top: 15px; | ||||
| 
 | ||||
|     .knowledge-item{ | ||||
|       position: relative; | ||||
|       border: 1px solid #DDDDDD; | ||||
|       border-radius: 3px; | ||||
|       padding: 10px; | ||||
|       background: #fff; | ||||
|       margin-right: 10px; | ||||
|       margin-top: 10px; | ||||
|       // margin-bottom: 10px; | ||||
| 
 | ||||
|       .knowledge-close{ | ||||
|         display: none; | ||||
|         position: absolute; | ||||
|         right: -10px; | ||||
|         top: -10px; | ||||
|         background-color: rgba(250,250,250,1); | ||||
|         cursor: pointer; | ||||
|       } | ||||
| 
 | ||||
|       &:hover{ | ||||
|         .knowledge-close{ | ||||
|           display: block; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue