You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
help_user/src/Main.tsx

159 lines
4.9 KiB

import React from "react";
import {Navbar,Nav,Dropdown} from "react-bootstrap";
import {IndexMenu} from "./sub/IndexMenu";
import {Volunteer} from "./sub/Volunteer";
import {MyHelp} from "./sub/MyHelp";
import {MyFriend} from "./my/MyFriend";
import {MyDialog} from "./my/MyDialog";
import {MyLeaveWord} from "./my/MyLeaveWord";
import {MyMessage} from "./my/MyMessage";
/**
* 菜单标记
*/
enum Menu {
index,
volunteer,
myHelp
}
/**
* 我的弹框菜单列表
*/
enum DialogType {
friend="我的好友",
leaveWord="我的留言",
message="个人信息"
}
/**
* 主菜单
*/
export class Main extends React.Component<any, any>{
constructor(props: Readonly<any>) {
super(props);
//默认菜单
this.state={
//一级菜单
menu:Menu.index,
//二级菜单
subMenu:<IndexMenu/>,
//我的好友信息
friendList:[],
//我的菜单
my:{menuName: "",content:null,open:false}
}
}
//获取菜单名颜色
getMenuColor(menu:Menu){
if(this.state.menu===menu){
return {
color:"white",
backgroundColor:"blue"
}
}else{
return {
color:"blue",
backgroundColor: "white"
}
}
}
//切换菜单
changeMenu(menu:Menu){
this.setState({
menu:menu
})
switch (menu) {
case Menu.index:
this.setState({
subMenu:<IndexMenu/>
});break;
case Menu.volunteer:
this.setState({
subMenu:<Volunteer/>
});break;
case Menu.myHelp:
this.setState({
subMenu:<MyHelp/>
});break;
}
}
/**
* 关闭弹窗
*/
closeDialog(){
this.setState({my:{...this.state.my,...{menuName: "",content:null,open:false}}})
console.debug(this.state.my)
}
/**
* 打开弹窗
*/
openDialog(dialogType:DialogType){
switch (dialogType) {
case DialogType.friend:
this.setState({
my:{menuName:dialogType,content:<MyFriend user={this.props.user}/>,open:true}
})
break;
case DialogType.leaveWord:
this.setState({
my:{menuName:dialogType,content:<MyLeaveWord/>,open:true}
})
break;
case DialogType.message:
this.setState({
my:{menuName:dialogType,content:<MyMessage/>,open:true}
})
break;
}
}
render() {
return (
<div>
<Navbar bg="light">
<Navbar.Brand>+</Navbar.Brand>
<Nav variant="pills" defaultActiveKey="index" className="w-100">
<Nav.Item className="col-2">
<Nav.Link eventKey="index" style={this.getMenuColor(Menu.index)} onClick={()=>this.changeMenu(Menu.index)}></Nav.Link>
</Nav.Item>
<Nav.Item className="col-2">
<Nav.Link eventKey="volunteer" style={this.getMenuColor(Menu.volunteer)} onClick={()=>this.changeMenu(Menu.volunteer)}></Nav.Link>
</Nav.Item>
<Nav.Item className="col-2">
<Nav.Link eventKey="myHelp" style={this.getMenuColor(Menu.myHelp)} onClick={()=>this.changeMenu(Menu.myHelp)}></Nav.Link>
</Nav.Item>
<Dropdown>
<Dropdown.Toggle variant="secondary" id="dropdown-basic">
{this.props.user}
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item></Dropdown.Item>
{[DialogType.friend,DialogType.leaveWord,DialogType.message].map((type:DialogType,index:number)=><Dropdown.Item disabled={this.state.my.open} key={"dropdown"+index} onClick={()=>this.openDialog(type)}>{type}</Dropdown.Item>)}
<Dropdown.Item onClick={()=>this.props.logout()}></Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
<Navbar.Brand className="ml-3"></Navbar.Brand>
<MyDialog menuName={this.state.my.menuName} content={this.state.my.content} open={this.state.my.open} onClose={()=>this.closeDialog()}/>
</Nav>
</Navbar>
{this.state.subMenu}
</div>
);
}
}