From 2ef8fe31b5696e3e2285e4ed23e3c17d0980d752 Mon Sep 17 00:00:00 2001 From: caicai8 <1149225589@qq.com> Date: Wed, 18 Sep 2019 14:49:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=95=E8=AE=BE=E4=BB=BB=E5=8A=A1-=E4=BA=A4?= =?UTF-8?q?=E5=8F=89=E8=AF=84=E9=98=85=E8=AE=BE=E7=BD=AE=E5=BC=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/graduation/style.css | 11 + .../graduation/tasks/GraduationAcrossCheck.js | 475 ++++++++++++++++++ .../graduation/tasks/GraduationTaskDetail.js | 42 +- .../tasks/GraduationTaskssetting.js | 16 +- 4 files changed, 532 insertions(+), 12 deletions(-) diff --git a/public/react/src/modules/courses/graduation/style.css b/public/react/src/modules/courses/graduation/style.css index c704a9c93..5d78f3cb9 100644 --- a/public/react/src/modules/courses/graduation/style.css +++ b/public/react/src/modules/courses/graduation/style.css @@ -43,3 +43,14 @@ .TopicDetailTable .bottomBody li{border-bottom: 1px solid #eee;clear: both;} .TopicDetailTable .bottomBody li:last-child{border-bottom: none;} +.acrossSureBtn{ + width:40px; + height:24px; + line-height: 20px; + border:1px solid rgba(76,172,255,1); + color: #4CACFF!important; + float: left; + border-radius:4px; + text-align: center +} + diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationAcrossCheck.js b/public/react/src/modules/courses/graduation/tasks/GraduationAcrossCheck.js index e69de29bb..2cca4ccae 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationAcrossCheck.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationAcrossCheck.js @@ -0,0 +1,475 @@ +import React, { Component } from 'react'; + +import { Modal , Radio , Table , Pagination , Select ,Divider ,Icon , Input } from "antd"; +import {Link} from 'react-router-dom' +import axios from 'axios'; + +import '../style.css' + + +const RadioGroup = Radio.Group; + +const { Option } = Select; +const $ = window.$; + +const bindTableColumn=(that)=>{ + let { course_groups }=that.state + const filter=course_groups && course_groups.map((i,key)=>{ + let list={ + value: i.id, + text: i.name + } + return list; + }) + const columns = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + width:"50px", + className:"edu-txt-center", + render: (id, student, index) => { + return (that.state.page - 1) * that.state.limit + index + 1 + } + }, + { + title: '姓名', + dataIndex: 'user_name', + key: 'user_name', + render: (user_name, line, index) => { + return( + {user_name} + ) + } + },{ + title: '学号', + dataIndex: 'student_id', + key: 'student_id', + render: (student_id, line, index) => { + return( + {student_id} + ) + } + },{ + title: '分班', + dataIndex: 'course_group_name', + key: 'course_group_name', + filters:filter, + render: (course_group_name, line, index) => { + return( + {course_group_name} + ) + } + } + ]; + if(that.state.comment_status == 2){ + columns.push({ + title: '交叉评阅老师', + dataIndex: 'cross_teachers', + key: 'cross_teachers', + width:"200px", + render: (cross_teachers, line, index) => { + return( + {cross_teachers} + ) + } + }) + }else{ + columns.push({ + title: '答辩组', + dataIndex: 'cross_groups', + key: 'cross_groups', + width:"200px", + render: (cross_groups, line, index) => { + return( + {cross_groups} + ) + } + }) + } + return columns; +} +class GraduationAcrossCheck extends Component{ + constructor(props){ + super(props); + this.state={ + comment_status:2, + page:1, + limit:7, + group_ids:undefined, + users:undefined, + user_count:undefined, + graduation_groups:undefined, + course_groups:undefined, + teachers:undefined, + tableLoading:false, + chooseCount:0, + chooseId:undefined, + AcrossTeamIds:undefined, + searchValue:undefined, + showflag:false + } + } + + + + // 根据分班筛选 + filterByGroup=(value,record)=>{ + console.log(value); + console.log(record) + } + + // 切换分配方式 + funcommentstatus = (e) =>{ + this.setState({ + comment_status:e.target.value, + chooseCount:0, + chooseId:[], + AcrossTeamIds:undefined, + searchValue:undefined, + showflag:false, + page:1 + }) + let { group_ids }=this.state; + this.getList(1,group_ids,e.target.value); + } + + componentDidMount =()=>{ + let { comment_status }=this.props; + let { page,group_ids }=this.state; + this.setState({ + comment_status + }) + + this.getList(page,group_ids,comment_status); + + window.addEventListener('click', this.clickOther) + } + + clickOther = (e) =>{ + if(e.target && e.target.matches('#acrossContent') || e.target.matches(".ant-modal-body") + || e.target.matches(".acrossfoot") || e.target.matches(".acrossHead") || e.target.matches ('.ant-radio-wrapper') || + e.target.matches("th") || e.target.matches("td")) { + this.setState({ + showflag:false + }) + } + } + + componentWillUnmount() { + window.removeEventListener('click', this.clickOther); + } + + getList=(page,group_ids,comment_status)=>{ + let { limit }=this.state; + let { task_Id }=this.props; + this.setState({ + tableLoading:true + }) + let url=`/graduation_tasks/${task_Id}/cross_comment_setting.json`; + axios.get((url),{params:{ + page,limit,group_ids,comment_status + }}).then((result)=>{ + if(result){ + this.setState({ + users:result.data.work_users && result.data.work_users.map((item,key)=>{ + let list = { + key:item.work_id, + course_group_name:item.course_group_name, + cross_teachers: item.cross_teachers, + student_id:item.student_id, + user_name:item.user_name, + work_id:item.work_id + } + return list; + }), + user_count:result.data.user_count, + graduation_groups:result.data.graduation_groups, + course_groups:result.data.course_groups, + teachers:result.data.teachers, + tableLoading:false, + // AcrossTeamIds:result.data + }) + } + }).catch((error)=>{ + this.setState({ + tableLoading:false + }) + console.log(error); + }) + } + + // 切换分页 + onPageChange=(page)=>{ + this.setState({ + page, + showflag:false + }) + let{group_ids,comment_status}=this.state; + this.getList(page,group_ids,comment_status); + } + + // 下拉切换 + changeSelect = (AcrossTeamIds) =>{ + this.setState({ + AcrossTeamIds + }) + } + + // 重置 + clearSelect =()=>{ + this.setState({ + AcrossTeamIds:undefined, + searchValue:undefined + }) + } + + // 确定分配 + sureAcross=()=>{ + let { AcrossTeamIds , chooseId , group_ids , comment_status }=this.state; + let { task_Id }=this.props; + + let type = comment_status == 2 ? "user_ids" : "graduation_group_ids"; + + let url=`/graduation_tasks/${task_Id}/assign_works.json`; + if(!AcrossTeamIds || (AcrossTeamIds && AcrossTeamIds.length==0)){ + this.props.showNotification(`请先选择${ comment_status == 2 ? "老师": "答辩组" }!`); + return; + } + if(!chooseId || (chooseId && chooseId.length==0)){ + this.props.showNotification("请先选择毕设作品!"); + return; + } + axios.post((url),{ + [type]:AcrossTeamIds, + work_ids:chooseId + }).then((result)=>{ + if(result){ + this.props.showNotification(result.data.message); + this.getList(1,group_ids,comment_status); + this.setState({ + showflag:false, + AcrossTeamIds:undefined, + chooseCount:0, + chooseId:[] + }) + } + }).catch((error)=>{ + console.log(error); + }) + } + + // 筛选 + handleTableChange =(pagination, filters, sorter)=>{ + console.log(filters.course_group_name) + // if(filters.course_group_name.length > 0){ + this.setState({ + page:1, + group_ids:filters.course_group_name + }) + let { comment_status }= this.state; + this.getList(1,filters.course_group_name,comment_status); + // } + } + + // 下拉搜索 + changeSearchValue=(e)=>{ + this.setState({ + searchValue:e.target.value + }) + } + // 显示下拉 + changeFlag=(flag)=>{ + this.setState({ + showflag:flag + }) + } + + + render(){ + let { + comment_status, + users, + user_count, + graduation_groups, + course_groups, + teachers, + page, + limit, + tableLoading, + chooseCount, + chooseId, + AcrossTeamIds, + searchValue,showflag + } = this.state; + let { modalVisible } = this.props; + let courseId = this.props.match.params.coursesId; + + const radioStyle = { + display: 'block', + height: '30px', + lineHeight: '30px', + marginRight:'0px' + }; + + + + const rowSelection = { + // 选中行的key,选中行 + onChange: (selectedRowKeys, selectedRows) => { + this.setState({ + chooseId:selectedRowKeys, + chooseCount:selectedRowKeys.length, + showflag:false + }) + console.log(selectedRowKeys); + }, + selectedRowKeys:chooseId, + getCheckboxProps: record => ({ + disabled: record.name === 'Disabled User', // Column configuration not to be checked + name: record.name, + }), + }; + + // 筛选下拉列表 + const teacherList = searchValue ? teachers.filter(e=>e.user_name.indexOf(searchValue)>-1) : teachers; + const course_groupsList = searchValue ? course_groups.filter(e=>e.name.indexOf(searchValue)>-1) : course_groups; + return( + + +
+ 评阅分配方式: + + + 手动分配评阅(逐一指定每个学生的交叉评阅老师) + 答辩组分配评阅(将老师加入不同答辩组,指定每个学生的交叉评阅答辩组, + + 立即设置答辩组 + + + +
+
+ 已选 { chooseCount == 0 ? 0 : {chooseCount}} 个 + + 分配给{ comment_status && comment_status == 2 ? "老师":"答辩组"}: + + +
+ {menu} + +
+ 确定 + 重置 +
+ + )} + > + { comment_status == 2 ? + teacherList && teacherList.map((i,key)=>{ + return + }): + course_groupsList && course_groupsList.map((i,key)=>{ + return + }) + } + + + + +
+
+
+ { + user_count > limit ? + :"" + } +
+
+ 关闭 + 确认 +
+
+
+ ) + } +} +export default GraduationAcrossCheck; \ No newline at end of file diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js index e228d4146..dc5e4d602 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js @@ -10,6 +10,7 @@ import HomeworkModal from "../../coursesPublic/HomeworkModal"; import AccessoryModal from "../../coursesPublic/AccessoryModal"; import Associationmodel from '../../coursesPublic/Associationmodel'; import CoursesListType from '../../coursesPublic/CoursesListType'; +import GraduationAcrossCheck from "./GraduationAcrossCheck"; import moment from 'moment'; import "../../css/members.css" import "../../css/Courses.css" @@ -58,7 +59,8 @@ class GraduationTaskDetail extends Component{ Modalstype:undefined, Modalstopval:undefined, ModalCancel:undefined, - ModalSave:undefined + ModalSave:undefined, + acrossVisible:undefined } } componentDidMount(){ @@ -80,6 +82,21 @@ class GraduationTaskDetail extends Component{ }) } + + // 交叉评阅设置弹框 + openAcross=()=>{ + this.setState({ + acrossVisible:true + }) + } + closeAcross=()=>{ + this.setState({ + acrossVisible:false + }) + } + + + //返回 goback=()=>{ // let courseId=this.props.match.params.coursesId; @@ -190,7 +207,6 @@ class GraduationTaskDetail extends Component{ } // 取消 cancelmodel=()=>{ - debugger this.setState({ Modalstype:false, Loadtype:false, @@ -291,11 +307,13 @@ class GraduationTaskDetail extends Component{ Modalstype, Modalstopval, ModalCancel, - ModalSave + ModalSave, + acrossVisible } = this.state const commom = { - setTab:this.setTab + setTab:this.setTab, + getdatas:this.getdatas } return(
@@ -353,6 +371,20 @@ class GraduationTaskDetail extends Component{ destroyOnClose={true} centered={true} /> + + { + acrossVisible && + + } +

{questionslist.course_name} > @@ -436,7 +468,7 @@ class GraduationTaskDetail extends Component{ {/*项目在线质量检测*/} { this.props.isAdmin() ? questionslist.status===1 ? { this.end()} }>立即截止 : "" : "" } { this.props.isAdmin() ? questionslist.status===0 ? { this.publish()} }>立即发布 : "" : "" } - { this.props.isAdmin() ? 交叉评阅设置 : "" } + { this.props.isAdmin() && questionslist.cross_comment ? 交叉评阅设置 : "" } { this.props.isAdmin() ? 编辑任务 : "" }

diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js index 874a69ca5..74300bf5d 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js @@ -79,7 +79,7 @@ class GraduationTaskssettingapp extends Component{ visible:false, starttime:undefined, DownloadType:false, - DownloadMessageval:undefined, + DownloadMessageval:undefined } } @@ -166,7 +166,7 @@ class GraduationTaskssettingapp extends Component{ } } - + baseprojectfun=(e)=>{ this.setState({ baseonproject:e.target.checked @@ -711,7 +711,9 @@ class GraduationTaskssettingapp extends Component{ starttime:undefined, course_groupslist:[], }) - this.props.showNotification(resulet.data.message); + this.props.showNotification(resulet.data.message); + //调用父组件方法,刷新按钮 + this.props.getdatas(); } } }).catch((error)=>{ @@ -1188,7 +1190,7 @@ class GraduationTaskssettingapp extends Component{ {crosscomment===true&&commenttimetype===true?
{commenttimevalue}
:""} -
+ {/*
评阅方式: @@ -1203,10 +1205,10 @@ class GraduationTaskssettingapp extends Component{ -
+
*/} -
+ {/*
评阅数: @@ -1243,7 +1245,7 @@ class GraduationTaskssettingapp extends Component{ ) })} -
+
*/}
:""}