This commit is contained in:
caishi 2023-03-03 14:52:00 +08:00
parent efa3f32773
commit d2c23ff27e
2 changed files with 0 additions and 180 deletions

View File

@ -1,179 +0,0 @@
import React ,{ useState , useEffect , useRef } from 'react';
import { Dropdown , Menu , Input, message } from 'antd';
import { findDOMNode } from 'react-dom';
import { getImageUrl } from 'educoder';
const { Search } = Input;
/**
*
* @param name显示的标题
* @param names选择下拉项后显示的内容
* @param list[]选项
* @param emptyName:没有选择项时显示的内容
* @param value[]显示的值
* @param onAdd标记管理只针对标记
* @param searchFlag是否显示搜索输入框
* @param editFlag是否有编辑按钮
* @param double可多选
* @param onChange:选择项后返回id数组
* @param permission:权限
* @returns
*/
function EditMenus({
name ,
names,
emptyName='未设置',
list,
value ,
onAdd ,
searchFlag ,
editFlag ,
searchFunc ,
double ,
onChange ,
imgFlag,
permission
}){
const [ menus , setMenus ] = useState([]);
const [ searchValue , setSearchValue ]= useState(undefined);
const [ showValue , setShowValue ] = useState(undefined);
const [ valueId , setValueId ] = useState([]);
const [ visible , setVisible ] = useState(false);
const refFa = useRef(null);
const refBox = useRef(null);
useEffect(()=>{
setMenus(list);
setValueId(value);
setShowValue(names && names.length >0 ? names : undefined);
},[names,value,list])
useEffect(() => {
document.addEventListener('click', clickMe , false);
}, [])
const clickMe = ({ target }) => {
//
const faComponent = findDOMNode(refFa.current);
const boxComponent = findDOMNode(refBox.current);
if (faComponent && boxComponent) {
const isChild = faComponent.contains(target);
const isBox = boxComponent.contains(target);
if(!isChild && !isBox){
setVisible(false);
}
}
}
function chooseMenu(i){
if(!double){
setVisible(false);
}
let l = valueId;
let idStr = i && i.id ? i.id.toString() :i.name;
// idname
if(double){
l = valueId || [] ;
let nameArr = names || [] ;
if(l && l.indexOf(idStr)>=0){
l = l.filter(k=>k.toString() !== idStr);
nameArr = nameArr.filter(k=>k.toString() !== i.name);
}else{
if(valueId && valueId.length >= double){
message.info(`最多只能添加${double}${name}`);
return;
}
l.push(idStr);
nameArr.push(i.name);
}
setValueId(l);
setShowValue(nameArr);
onChange(l,nameArr);
}else{
if(l && l.indexOf(idStr)>=0){
setValueId([]);
onChange([]);
setShowValue(undefined);
}else{
setValueId([`${i.id || i.name}`]);
onChange([`${i.id || i.name}`],[i.name]);
setShowValue(i.name);
}
}
}
//
function changeSearchvalue(e){
setSearchValue(e.target.value);
searchFunc(e.target.value);
}
function renderNames(nameArrs){
return <React.Fragment>
{
nameArrs && nameArrs.length>0?
nameArrs.map((i,k)=>{
return(
<p className="task-hide">{i}</p>
)
})
:""
}
</React.Fragment>
}
return(
<li>
<span>
{name}
{!editFlag && <a ref={refBox} onClick={()=>setVisible(visible ? false : true)}><i className="iconfont icon-a-bianji12 font-13" style={{color:"#898d9d"}}></i></a>}
</span>
<Dropdown
visible={visible}
overlayClassName={"overlayStyle"}
placement="bottomLeft"
trigger={['click']}
overlay={
<div ref={refFa}>
{ searchFlag &&
<div className="searchbox">
<Search
placeholder={`搜索${name}`}
value={searchValue}
onChange={changeSearchvalue}
style={{marginRight:"18px"}}
/>
</div>
}
{
menus && menus.length >0?
<Menu className="piecemenu" selectedKeys={valueId}>
{
menus.map((i,k)=>{
return(
<Menu.Item key={i.id || i.name} onClick={()=>chooseMenu(i)}>
{ imgFlag && <img src={getImageUrl(i.image_url)} alt="" width="22px" className="mr5 radius"/>}
{i.color && <span style={{backgroundColor:i.color}} className="colorpiece"></span>}
<span className="task-hide">{i.name}</span>
</Menu.Item>
)
})
}
</Menu>
:
<div className="menusEmpty">
<p>{searchValue ? <span>暂无{name}{searchValue}</span>: `暂无${name}`}</p>
{ onAdd && (permission && permission!=="reporter") && <a className="color-blue font-15" onClick={()=>{setVisible(false);onAdd()}}><i className="iconfont icon-a-bianji12 font-14 mr5"></i>标记管理</a>}
</div>
}
</div>
}>
<div className={showValue?"operatevalue color-grey-3":"operatevalue"}>{ names ? renderNames(names) : emptyName}</div>
</Dropdown>
</li>
)
}
export default EditMenus;

View File

@ -4,7 +4,6 @@ import { getImageUrl } from 'educoder';
import { Link } from 'react-router-dom';
import { Box , LongWidth } from '../../Component/layout';
import RenderHtml from "../../../components/render-html";
import EditMenus from '../Component/editMenus';
import DropMenu from '../Component/dropMenu';
import NewPanel from '../Component/newPanel';
import Attachments from "../../Upload/attachment";