import React, { Component } from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux' import { Icon, Modal, Alert, Input, message, Menu, Row, Col } from 'antd' import { autobind } from 'core-decorators'; import axios from 'axios'; import { withRouter } from 'react-router-dom'; const { TextArea } = Input; const Search = Input.Search; const TYPE_EDIT = 'edit'; const confirm = Modal.confirm; import UsernameAutoComplete from '../../../components/UsernameAutoComplete/UsernameAutoComplete.js'; import { fetchGroupList, setCurrGroup, setGroupList } from '../../../reducer/modules/group.js' import './GroupList.scss' @connect( state => ({ groupList: state.group.groupList, currGroup: state.group.currGroup, curUserRole: state.user.role }), { fetchGroupList, setCurrGroup, setGroupList } ) @withRouter export default class GroupList extends Component { static propTypes = { groupList: PropTypes.array, currGroup: PropTypes.object, fetchGroupList: PropTypes.func, setCurrGroup: PropTypes.func, setGroupList: PropTypes.func, match: PropTypes.object, history: PropTypes.object, curUserRole: PropTypes.string } state = { addGroupModalVisible: false, editGroupModalVisible: false, newGroupName: '', newGroupDesc: '', currGroupName: '', currGroupDesc: '', groupList: [], owner_uid: 0 } constructor(props) { super(props) } async componentWillMount() { const groupId = !isNaN(this.props.match.params.groupId) ? parseInt(this.props.match.params.groupId) : 0; await this.props.fetchGroupList(); let currGroup = this.props.groupList[0] || { group_name: '', group_desc: '' }; if (this.props.groupList.length && groupId) { for (let i = 0; i < this.props.groupList.length; i++) { if (this.props.groupList[i]._id === groupId) { currGroup = this.props.groupList[i]; } else { this.props.history.replace(`${currGroup._id}`); } } } else if (!groupId && this.props.groupList.length) { this.props.history.push(`/group/${this.props.groupList[0]._id}`); } this.setState({ groupList: this.props.groupList }); this.props.setCurrGroup(currGroup) } @autobind showModal(type) { if (type === 'edit') { const { currGroup } = this.props; this.setState({ currGroupName: currGroup.group_name, currGroupDesc: currGroup.group_desc, editGroupModalVisible: true }); } else { this.setState({ addGroupModalVisible: true }); } } @autobind hideModal(type) { if (type === TYPE_EDIT) { this.setState({ editGroupModalVisible: false }); } else { this.setState({ addGroupModalVisible: false }); } } @autobind async addGroup() { const { newGroupName: group_name, newGroupDesc: group_desc, owner_uid } = this.state; const res = await axios.post('/api/group/add', { group_name, group_desc, owner_uid }) if (!res.data.errcode) { this.setState({ addGroupModalVisible: false }); await this.props.fetchGroupList(); this.setState({ groupList: this.props.groupList }); this.props.setCurrGroup(res.data.data) } else { message.error(res.data.errmsg) } } @autobind async editGroup() { const { currGroupName: group_name, currGroupDesc: group_desc } = this.state; const id = this.props.currGroup._id; const res = await axios.post('/api/group/up', { group_name, group_desc, id }); if (res.data.errcode) { message.error(res.data.errmsg); } else { this.setState({ editGroupModalVisible: false }); this.props.setCurrGroup({ group_name, group_desc, _id: id }); } } @autobind inputNewGroupName(e, type) { if (type === TYPE_EDIT) { this.setState({ currGroupName: e.target.value }) } else { this.setState({ newGroupName: e.target.value }); } } @autobind inputNewGroupDesc(e, type) { if (type === TYPE_EDIT) { this.setState({ currGroupDesc: e.target.value }) } else { this.setState({ newGroupDesc: e.target.value }); } } @autobind selectGroup(e) { const groupId = e.key; const currGroup = this.props.groupList.find((group) => { return +group._id === +groupId }); this.props.setCurrGroup(currGroup); this.props.history.replace(`${currGroup._id}`); } @autobind onUserSelect(childState) { this.setState({ owner_uid: childState.uid }) } showConfirm = () => { let that = this; confirm({ title: "确认删除 " + that.props.currGroup.group_name + " 分组吗?", content:
请输入分组名称确认此操作: