|
|
import React, { Component } from "react";
|
|
|
import { Modal, Checkbox, Input, Spin, Select, Divider, Radio } from "antd";
|
|
|
import axios from 'axios'
|
|
|
import ModalWrapper from "../../common/ModalWrapper"
|
|
|
import InfiniteScroll from 'react-infinite-scroller';
|
|
|
import { ROLE_TEACHER_NUM, ROLE_ASSISTANT_NUM } from '../common'
|
|
|
import NoneData from '../../coursesPublic/NoneData'
|
|
|
import { ConditionToolTip } from 'educoder'
|
|
|
import SchoolSelect from '../../coursesPublic/form/SchoolSelect'
|
|
|
|
|
|
const RadioGroup = Radio.Group;
|
|
|
|
|
|
const Option = Select.Option;
|
|
|
const pageCount = 15;
|
|
|
class AddAdminModal extends Component{
|
|
|
constructor(props){
|
|
|
super(props);
|
|
|
this.state={
|
|
|
radioBoxValue: [],
|
|
|
users: [],
|
|
|
hasMore: true,
|
|
|
loading: false,
|
|
|
courseGroup: '',
|
|
|
page: 1
|
|
|
}
|
|
|
}
|
|
|
fetchTeacherList = (arg_page) => {
|
|
|
const courseId = this.props.match.params.coursesId
|
|
|
const page = arg_page || this.state.page;
|
|
|
const { name, school_name } = this.state
|
|
|
|
|
|
let url = `/courses/${courseId}/teachers.json`
|
|
|
this.setState({ loading: true })
|
|
|
axios.get(url, {
|
|
|
params: {
|
|
|
page: page,
|
|
|
limit: pageCount
|
|
|
}
|
|
|
})
|
|
|
.then((response) => {
|
|
|
if (!response.data.teacher_list || response.data.teacher_list.length == 0) {
|
|
|
this.setState({
|
|
|
teacher_list: page == 1 ? response.data.teacher_list : this.state.teacher_list,
|
|
|
page,
|
|
|
loading: false,
|
|
|
hasMore: false,
|
|
|
})
|
|
|
} else {
|
|
|
this.setState({
|
|
|
teacher_list: page == 1 ? response.data.teacher_list : this.state.teacher_list.concat(response.data.teacher_list),
|
|
|
page,
|
|
|
loading: false,
|
|
|
hasMore: response.data.teacher_list.length == pageCount
|
|
|
})
|
|
|
}
|
|
|
|
|
|
})
|
|
|
.catch(function (error) {
|
|
|
console.log(error);
|
|
|
});
|
|
|
}
|
|
|
componentDidMount() {
|
|
|
|
|
|
|
|
|
}
|
|
|
setVisible = (visible) => {
|
|
|
if (visible) {
|
|
|
this.fetchTeacherList()
|
|
|
}
|
|
|
this.refs.modalWrapper.setVisible(visible)
|
|
|
if (visible == false) {
|
|
|
this.setState({
|
|
|
radioBoxValue: ''
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
onSendOk = () => {
|
|
|
if(!this.state.radioBoxValue || this.state.radioBoxValue.length == 0) {
|
|
|
this.props.showNotification('请从列表中先选择用户。')
|
|
|
return;
|
|
|
}
|
|
|
const courseId = this.props.match.params.coursesId
|
|
|
const params = {
|
|
|
"user_ids": this.state.radioBoxValue
|
|
|
}
|
|
|
const { courseGroup } = this.state
|
|
|
|
|
|
if (courseGroup) {
|
|
|
params.course_group_id = courseGroup
|
|
|
}
|
|
|
const url = `/courses/${courseId}/change_course_admin.json`
|
|
|
axios.post(url, {
|
|
|
course_member_id: this.state.radioBoxValue.course_member_id,
|
|
|
user_id: this.state.radioBoxValue.user_id
|
|
|
}).then((result)=>{
|
|
|
if(result.data.status==0){
|
|
|
this.props.showNotification('操作成功。')
|
|
|
window.location.reload()
|
|
|
// this.fetchAll()
|
|
|
this.setVisible(false)
|
|
|
this.props.changeAdminSuccess && this.props.changeAdminSuccess()
|
|
|
}
|
|
|
}).catch((error)=>{
|
|
|
console.log(error);
|
|
|
})
|
|
|
}
|
|
|
|
|
|
onOk = () => {
|
|
|
this.onSendOk()
|
|
|
}
|
|
|
|
|
|
onCheckBoxChange = (e) => {
|
|
|
this.setState({
|
|
|
radioBoxValue: e.target.value
|
|
|
})
|
|
|
}
|
|
|
|
|
|
handleInfiniteOnLoad = () => {
|
|
|
this.fetchTeacherList(this.state.page + 1)
|
|
|
}
|
|
|
|
|
|
onSearch = () => {
|
|
|
this.fetchTeacherList(1)
|
|
|
}
|
|
|
handleCourseGroupChange = (value) => {
|
|
|
this.setState({
|
|
|
courseGroup: value
|
|
|
})
|
|
|
}
|
|
|
render(){
|
|
|
const { teacher_list, radioBoxValue, loading, hasMore, name, school_name
|
|
|
, courseGroup, course_groups, } = this.state
|
|
|
const { moduleName } = this.props
|
|
|
return(
|
|
|
<ModalWrapper
|
|
|
ref="modalWrapper"
|
|
|
width="600px"
|
|
|
title={`更换管理员`}
|
|
|
{...this.props }
|
|
|
onOk={this.onOk}
|
|
|
className="addStudentModal"
|
|
|
>
|
|
|
<style>
|
|
|
{`
|
|
|
.demo-loading-container {
|
|
|
position: absolute;
|
|
|
bottom: 93px;
|
|
|
width: 82%;
|
|
|
text-align: center;
|
|
|
}
|
|
|
.df {
|
|
|
display: flex;
|
|
|
align-items: baseline;
|
|
|
margin: 12px 0;
|
|
|
}
|
|
|
.firstLabel {
|
|
|
flex: 0 0 60px;
|
|
|
}
|
|
|
.df span.label {
|
|
|
margin-right: 8px;
|
|
|
text-align: right;
|
|
|
margin-left: 12px;
|
|
|
}
|
|
|
.df .ant-input-affix-wrapper {
|
|
|
width: 32%;
|
|
|
}
|
|
|
|
|
|
.addTeacherModal label.task-hide {
|
|
|
width: 100%;
|
|
|
}
|
|
|
`}
|
|
|
</style>
|
|
|
|
|
|
<div className="df" style={{ alignItems: 'center', flexDirection: 'column'}}>
|
|
|
<p>选择的成员将会成为新的管理员</p>
|
|
|
<p>您将不再拥有管理员的权限,但您仍是教师团队的一员</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
{/* <p className="clearfix mb2" style={{ margin: '0px 15px 6px' }}>
|
|
|
<Checkbox className="fl" style={{ visibility: 'hidden' }} ></Checkbox>
|
|
|
<span className="fl with25"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'姓名'}</label></span>
|
|
|
<span className="fl with25"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'学号'}</label></span>
|
|
|
<span className="fl with45"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'单位'}</label></span>
|
|
|
</p> */}
|
|
|
{ teacher_list && teacher_list.length ? <div>
|
|
|
{/* https://github.com/CassetteRocks/react-infinite-scroller/issues/70 */}
|
|
|
<div className="edu-back-skyblue padding10-15" style={{"height":"300px", overflowY: "scroll", overflowAnchor: 'none' }}>
|
|
|
<InfiniteScroll
|
|
|
threshold={10}
|
|
|
initialLoad={false}
|
|
|
pageStart={0}
|
|
|
loadMore={this.handleInfiniteOnLoad}
|
|
|
hasMore={!loading && hasMore}
|
|
|
useWindow={false}
|
|
|
>
|
|
|
<RadioGroup style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={radioBoxValue}>
|
|
|
|
|
|
{ teacher_list.map( candidate => {
|
|
|
return (
|
|
|
<p className="clearfix mb7" key={candidate.user_id}>
|
|
|
<Radio className="fl" value={candidate} disabled={candidate.role == "管理员"}></Radio>
|
|
|
<span className="fl with25">
|
|
|
<label className="task-hide fl" style={{"maxWidth":"208px"}}>{candidate.name || ' '}{candidate.role == "管理员" ? '(当前管理员)' : '' }</label>
|
|
|
</span>
|
|
|
{/* <span className="fl with25">
|
|
|
<ConditionToolTip title={candidate.student_id} condition={candidate.student_id && candidate.student_id.length > 12 }>
|
|
|
<label className="task-hide fl" style={{"maxWidth":"208px;"}}>{candidate.student_id || ' '}</label>
|
|
|
</ConditionToolTip>
|
|
|
</span>
|
|
|
<span className="fl with45"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{candidate.school_name}</label></span> */}
|
|
|
|
|
|
</p>
|
|
|
)
|
|
|
}) }
|
|
|
</RadioGroup>
|
|
|
{loading && hasMore && (
|
|
|
<div className="demo-loading-container">
|
|
|
<Spin />
|
|
|
</div>
|
|
|
)}
|
|
|
|
|
|
</InfiniteScroll>
|
|
|
</div>
|
|
|
</div> : <NoneData></NoneData> }
|
|
|
</ModalWrapper>
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
export default AddAdminModal;
|