import React,{ Component } from "react";
import { Input,Checkbox,Table, Pagination, Modal,Menu ,Spin, Tooltip} from "antd";
import ClipboardJS from 'clipboard'
import '../css/Courses.css'
import '../css/members.css'
import CourseLayoutcomponent from '../common/CourseLayoutComponent'
import Titlesearchsection from '../common/titleSearch/TitleSearchSection'
import ColorCountText from '../common/titleSearch/ColorCountText'
import { WordsBtn, trigger, on, off ,downloadFile} from 'educoder'
import Modals from "../../modals/Modals";
import axios from 'axios'
import _ from 'lodash'
import NoneData from "../coursesPublic/NoneData"
import DownloadMessageysl from "../../modals/DownloadMessageysl";
import CreateGroupByImportModal from './modal/CreateGroupByImportModal'
const Search =Input.Search;
const buildColumns = (that) => {
const { course_groups } = that.state
const columns=[{
title: '序号',
dataIndex: 'id',
key: 'id',
align:'center',
width:"10%",
className:"color-grey-6",
render: (id, student, index) => {
return (that.state.page - 1) * 20 + index + 1
}
}, {
title: '用户id',
dataIndex: 'login',
key: 'login',
align:'center',
width:"10%",
className:"color-grey-6",
render: (login, record) => {
return 10 ? login : ''}
>{login}
}
}, {
title: '姓名',
dataIndex: 'name',
key: 'name',
align:'center',
width:"10%",
className:"color-grey-6",
render: (name, record) => {
return {name}
}
}, {
title: '学号',
dataIndex: 'student_id',
key: 'student_id',
align:'center',
width:"10%",
className:"color-grey-6",
render: (student_id, record) => {
return 10 ? student_id : ''}
style={{maxWidth: '160px'}} >{student_id}
}
}];
if (course_groups && course_groups.length) {
columns.push({
title: '分班',
dataIndex: 'course_group_name',
key: 'course_group_name',
align:'center',
width:"40%",
className:"color-grey-6"
})
}
const isAdminOrStudent = that.props.isAdminOrStudent()
if (!isAdminOrStudent) {
columns.some((item,key)=> {
if (item.title === "学号") {
columns.splice(key, 1)
return true
}
})
}
const isAdmin = that.props.isAdmin()
if (isAdmin) {
columns.unshift({
title: '',
dataIndex: 'check',
key: 'check',
render: (text, item) => {
return
},
width:"5%"
})
}
return columns;
}
// 1-按照学生学号 2-按照分班名称,
const ORDER_BY_NUM = 1;
const ORDER_BY_GROUP = 2;
class studentsList extends Component{
constructor(props){
super(props);
this.state={
page:1,
order: ORDER_BY_NUM,
searchValue: '',
course_groups: [],
students: [],
checkBoxValues: [],
stu_new_flag:false,
StudentList_value:"",
modalsType:"",
modalsTopval:"",
modalsBottomval:"",
modalCancel:"",
n_And_e:1,
isSpin:false,
DownloadType:false,
DownloadMessageval:undefined,
}
}
/// 确认是否下载
confirmysl(url){
axios.get(url).then((response) => {
if(response === undefined){
return
}
if(response.data.status&&response.data.status===-1){
}else if(response.data.status&&response.data.status===-2){
if(response.data.message === "100"){
// 已超出文件导出的上限数量(100 ),建议:
this.setState({
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:true,
DownloadMessageval:500
})
}
}else {
this.props.showNotification(`正在下载中`);
// window.open("/api"+url, '_blank');
downloadFile({
url: url,
successCallback: (url) => {
console.log('successCallback')
},
failCallback: (responseHtml, url) => {
console.log('failCallback')
}
})
}
}).catch((error) => {
console.log(error)
});
}
Downloadcal=()=>{
this.setState({
DownloadType:false,
DownloadMessageval:undefined
})
}
inputStudent=(e)=>{
this.setState({
StudentList_value:e.target.value
})
}
// 有关新建分班和分班重命名
showStuNewBox=(index)=>{
this.setState({
stu_new_flag:true,
n_And_e:index
})
}
hideStuNewBox=()=>{
this.setState({
stu_new_flag:false
})
}
// 有关删除分班
delClasses=()=>{
this.setState({
modalsType:true,
modalsTopval:"该分班的学生将被移动到“XX班”",
modalsBottomval:"是否确认删除?",
modalCancel:true
})
}
cancelDelClasses=()=>{
this.setState({
modalsType:false,
modalsTopval:"",
modalsBottomval:"",
modalCancel:false
})
}
// 确认删除
sureDelClasses=()=>{
this.setState({
modalsType:false,
modalsTopval:"",
modalsBottomval:"",
modalCancel:false
})
}
onChange=()=>{
}
componentDidMount() {
this.setState({
isSpin:true
})
this.fetchAll()
const isAdmin = this.props.isAdmin()
// if (isAdmin) {
this.fetchCourseGroups();
// }
isAdmin && on('addStudentSuccess', this.addStudentSuccessListener)
isAdmin && on('updateNavSuccess', this.updateNavSuccess)
}
componentWillUnmount() {
const isAdmin = this.props.isAdmin()
if (isAdmin) {
off('addStudentSuccess', this.addStudentSuccessListener)
off('updateNavSuccess', this.updateNavSuccess)
}
}
createGroupImportSuccess = () => {
this.props.updataleftNavfun()
}
updateNavSuccess = () => {
this.fetchCourseGroups()
}
addStudentSuccessListener=(e, data)=>{
const params = JSON.parse(data)
const course_group_id = this.props.match.params.course_group_id
const coursesId = this.props.match.params.coursesId
if (params.course_group_id == course_group_id) {
this.fetchAll(1)
} else {
this.props.history.push(`/courses/${coursesId}/course_groups/${params.course_group_id}`)
}
// console.log('addStudentSuccessListener', data)
}
fetchCourseGroups = () => {
const courseId = this.props.match.params.coursesId
let url = `/courses/${courseId}/all_course_groups.json`
axios.get(url, {
})
.then((response) => {
if (response.data.course_groups && response.data.course_groups.length) {
this.setState({
course_groups: response.data.course_groups
})
} else {
// showNotification('')
}
})
.catch(function (error) {
console.log(error);
});
}
componentDidUpdate(prevProps) {
if (prevProps.match.params.course_group_id != this.props.match.params.course_group_id) {
this.setState({checkBoxValues: []})
this.fetchAll(1)
}
// 加载了2次
// else if (prevProps.coursesids != this.props.coursesids) {
// this.fetchAll(1)
// }
}
fetchAll = (argPage) => {
this.setState({
isSpin:true
})
let id = this.props.match.params.coursesId
let course_group_id = this.props.match.params.course_group_id
const { coursesids } = this.props
// if (!coursesids) {
// return;
// }
if (!course_group_id || course_group_id == coursesids) {
course_group_id = ''
}
if (argPage) {
this.setState({ page: argPage })
}
let page = argPage || this.state.page
let { order, searchValue }=this.state
let url=`/courses/${id}/students.json?order=${order}&page=${page}&limit=20&course_group_id=${course_group_id}`;
if(!!searchValue){
url+='&search='+searchValue;
}
axios.get((url)).then((result)=>{
if (result.data.students) {
this.setState({
students: result.data.students,
total_count: result.data.students_count,
course_group_name: result.data.course_group_name,
invite_code: result.data.invite_code,
isSpin:false
}, () => {
if (!this.clipboard) {
const clipboard = new ClipboardJS('.copybtn');
clipboard.on('success', (e) => {
this.props.showNotification('复制成功')
});
this.clipboard = clipboard
}
})
}
}).catch((error)=>{
console.log(error);
this.setState({
isSpin:false
})
})
}
onInputSearchChange = (e) => {
this.setState({
searchValue: e.target.value
})
if (this.timeoutHandler) {
clearTimeout(this.timeoutHandler)
}
this.timeoutHandler = setTimeout(() => {
this.fetchAll(1)
}, 1200)
}
onSortTypeChange = (order) => {
this.setState({ order: order }, () => {
this.fetchAll()
})
}
onPageChange = (page) => {
this.fetchAll(page)
this.setState({ checkAllValue: false })
}
onPressEnter = (e) => {
this.fetchAll(1)
}
onCheckBoxChange = (checkedValues) => {
this.setState({
checkBoxValues: checkedValues,
checkAllValue: checkedValues.length == this.state.students.length
})
}
// 多选
moveToGroup = (group) => {
const len = this.state.checkBoxValues.length
if (len == 0) {
this.props.showNotification('请从列表先选择要移动的学生')
return;
}
let id = this.props.match.params.coursesId
let { order, searchValue }=this.state
let url=`/courses/${id}/transfer_to_course_group.json`;
axios.post((url), {
students: this.state.checkBoxValues.map(item => {return {course_member_id: item} }),
course_group_id: group.id
}).then((result)=>{
if (result.data.status == 0) {
this.props.showNotification('移动成功')
this.setState({checkBoxValues: []})
this.fetchAll()
this.props.updataleftNavfun()
}
}).catch((error)=>{
console.log(error);
})
}
onCheckAll = (e) => {
this.setState({
checkAllValue: e.target.checked
})
const values = this.state.students.map(item => {
return item.course_member_id
})
if (e.target.checked) {
const concated = this.state.checkBoxValues.concat(values);
const sortedUniqed = _.uniq(concated)
this.setState({
checkBoxValues: sortedUniqed
})
} else {
this.setState({
checkBoxValues: _.difference(this.state.checkBoxValues, values)
})
}
}
// 多选
onDelete = () => {
const len = this.state.checkBoxValues.length
if (len == 0) {
this.props.showNotification('请先从列表选择要删除的学生')
return;
}
this.props.confirm({
// content: `确认要删除所选的${len}个学生吗?`,
content: `是否确认删除?`,
onOk: () => {
let id = this.props.match.params.coursesId
let url=`/courses/${id}/delete_from_course.json`;
axios.post((url), {
students: this.state.checkBoxValues.map(item => {return {course_member_id: item} }),
}).then((result)=>{
if (result.data.status == 0) {
this.props.showNotification('删除成功')
this.fetchAll()
this.setState({checkBoxValues: []})
trigger('updatabanner')
}
}).catch((error)=>{
console.log(error);
})
}
})
}
addDir = () => {
trigger('groupAdd', this.props.coursesids)
}
renameDir = () => {
const course_group_id = this.props.match.params.course_group_id
trigger('groupRename', { id: parseInt(course_group_id), name: this.state.course_group_name})
}
deleteDir = () => {
this.props.confirm({
content:
,
onOk: () => {
// const cid = this.props.match.params.coursesId
const course_group_id = this.props.match.params.course_group_id
const url = `/course_groups/${course_group_id}.json`
axios.delete(url)
.then((response) => {
if (response.data.status == 0) {
this.props.showNotification('删除成功')
this.props.history.push(response.data.right_url)
}
})
.catch(function (error) {
console.log(error);
});
}
})
}
jsCopy = () => {
var e = document.getElementById("copy_invite_code");
e.select();
document.execCommand("Copy");
this.props.showNotification('复制成功')
}
render(){
const isAdmin = this.props.isAdmin()
const isSuperAdmin = this.props.isSuperAdmin()
let {
page,
order,
StudentList_value,
stu_new_flag,
modalsType,
modalsTopval,
modalsBottomval,
n_And_e ,
students,
searchValue,
total_count,
course_groups,
checkBoxValues,
checkAllValue
}=this.state;
let currentOrderName = '学生学号排序'
if (order == ORDER_BY_GROUP) {
currentOrderName = '分班名称排序'
}
const { coursesids } = this.props
const course_group_id = this.props.match.params.course_group_id
const isParent = !course_group_id || course_group_id == coursesids
const { course_group_name, invite_code } = this.state;
const courseId = this.props.match.params.coursesId
let exportUrl = `/courses/${courseId}/export_member_scores_excel.xlsx?`; //总成绩
let exportUrltwo = `/courses/${courseId}/export_couser_info.xlsx?`; //课堂信息
let exportUrlthree = `/courses/${courseId}/export_member_act_score.xlsx?`; //活跃度
const params = {}
if (checkBoxValues) {
if(course_group_id){
params.group_id = course_group_id
}
}
if (searchValue) {
searchValue = searchValue.trim()
if (searchValue) {
params.search = searchValue
}
}
let paramsString = ''
for (let key in params) {
paramsString += `${key}=${params[key]}&`
}
exportUrl += paramsString;
exportUrltwo+=paramsString;
exportUrlthree+=paramsString;
// console.log(paramsString);
// console.log(checkBoxValues);
// console.log(searchValue);
return(
{course_group_name || '未分班'}
{isAdmin && invite_code &&
邀请码:
{invite_code}
成员可以通过邀请码主动加入课堂
点击立刻复制邀请码
}>
}
}
searchValue={ searchValue }
onInputSearchChange={this.onInputSearchChange}
showSearchInput={total_count >= 10}
searchPlaceholder={ '请输入姓名、学号进行搜索' }
firstRowRight={
{ isSuperAdmin &&
this.refs['createGroupByImportModal'].setVisible(true)}>导入创建分班
}
{ isAdmin && isParent && this.addDir()}>添加分班 }
{ isAdmin && !isParent && course_group_id != 0 && this.deleteDir()}>删除分班 }
{ isAdmin && !isParent && course_group_id != 0 && this.renameDir()}>分班重命名 }
{ isAdmin &&
导出
}
{/*this.confirmysl(exportUrl)} >导出成绩*/}
{/* */}
}
secondRowLeft={
total_count ? : ''
}
onPressEnter={this.onPressEnter}
>
{
total_count > 0 || this.state.isSpin == true ?
{isAdmin &&
已选 {checkBoxValues.length} 个}
{isAdmin &&
删除}
{isAdmin &&
移动到...
}
{currentOrderName}
{ course_groups && !!course_groups.length &&
- this.onSortTypeChange(ORDER_BY_NUM)} >学生学号排序
- this.onSortTypeChange(ORDER_BY_GROUP)} >分班名称排序
}
:
}
{/* showQuickJumper */}
{ total_count > 20 && }
)
}
}
export default studentsList;