caishi 6 years ago
commit 57ddb15bcc

@ -6,7 +6,7 @@
"@flatten/array": "^1.1.7", "@flatten/array": "^1.1.7",
"@icedesign/base": "^0.2.5", "@icedesign/base": "^0.2.5",
"@novnc/novnc": "^1.1.0", "@novnc/novnc": "^1.1.0",
"antd": "^3.6.5", "antd": "^3.20.1",
"array-flatten": "^2.1.2", "array-flatten": "^2.1.2",
"autoprefixer": "7.1.6", "autoprefixer": "7.1.6",
"axios": "^0.18.0", "axios": "^0.18.0",
@ -42,8 +42,6 @@
"immutability-helper": "^2.6.6", "immutability-helper": "^2.6.6",
"install": "^0.12.2", "install": "^0.12.2",
"jest": "20.0.4", "jest": "20.0.4",
"js-base64": "^2.5.1",
"js-file-download": "^0.4.7",
"lodash": "^4.17.5", "lodash": "^4.17.5",
"loglevel": "^1.6.1", "loglevel": "^1.6.1",
"material-ui": "^1.0.0-beta.40", "material-ui": "^1.0.0-beta.40",
@ -165,8 +163,6 @@
"babel-plugin-import": "^1.11.0", "babel-plugin-import": "^1.11.0",
"concat": "^1.0.3", "concat": "^1.0.3",
"happypack": "^5.0.1", "happypack": "^5.0.1",
"js-base64": "^2.5.1",
"videojs-for-react": "^0.0.3",
"webpack-bundle-analyzer": "^3.0.3", "webpack-bundle-analyzer": "^3.0.3",
"webpack-parallel-uglify-plugin": "^1.1.0" "webpack-parallel-uglify-plugin": "^1.1.0"
} }

@ -1799,7 +1799,15 @@ ol.linenums{margin-top:0;margin-bottom:0}li.L1,li.L3,li.L5,li.L7,li.L9{backgroun
.page--body { .page--body {
margin-top: 54px; margin-top: 54px;
} }
.yslflexhome {
display: flex;
flex-direction: row;
}
.yslflexhomes {
display: flex;
flex-direction: row;
}
#games_repository_contents, #games_repository_contents,
.cm-s-railscasts .CodeMirror-gutters, .cm-s-railscasts .CodeMirror-gutters,
.split-panel--second { .split-panel--second {

@ -455,7 +455,7 @@ li.li-width7{width: 7%;text-align: left}
.top-black-trangle{display: block;border-width: 8px;position: absolute;top: -16px;right: 4px;border-style: dashed solid dashed dashed;border-color: transparent transparent rgba(5,16,26,0.6) transparent;font-size: 0;line-height: 0;} .top-black-trangle{display: block;border-width: 8px;position: absolute;top: -16px;right: 4px;border-style: dashed solid dashed dashed;border-color: transparent transparent rgba(5,16,26,0.6) transparent;font-size: 0;line-height: 0;}
.right-black-trangle{display: block;border-width: 8px;position: absolute;top: 10px;right: -16px;border-style: dashed solid dashed dashed;border-color: transparent transparent transparent rgba(5,16,26,0.6);font-size: 0;line-height: 0;} .right-black-trangle{display: block;border-width: 8px;position: absolute;top: 10px;right: -16px;border-style: dashed solid dashed dashed;border-color: transparent transparent transparent rgba(5,16,26,0.6);font-size: 0;line-height: 0;}
.activity-nav.active{color: #4CACFF!important;} .activity-nav.active{color: #4CACFF!important;}
.yslinvitetip{right: 140px;color: #fff; box-sizing: border-box;width: 170px;text-align: center;border-radius: 2px;background-color: rgba(5,16,26,0.6)}
.courseNewNum{display: block;background: #FF6800;border-radius:30px;padding:0px 2px;color: #fff!important;font-size: 11px; .courseNewNum{display: block;background: #FF6800;border-radius:30px;padding:0px 2px;color: #fff!important;font-size: 11px;
height: 16px;line-height: 15px;min-width: 12px;text-align: center;margin-top: 17px;} height: 16px;line-height: 15px;min-width: 12px;text-align: center;margin-top: 17px;}

@ -0,0 +1,103 @@
function Base64() {
// private property
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
this.encode = function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;
}
// public method for decoding
this.decode = function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = _keyStr.indexOf(input.charAt(i++));
enc2 = _keyStr.indexOf(input.charAt(i++));
enc3 = _keyStr.indexOf(input.charAt(i++));
enc4 = _keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = _utf8_decode(output);
return output;
}
// private method for UTF-8 encoding
_utf8_encode = function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
// private method for UTF-8 decoding
_utf8_decode = function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}

File diff suppressed because one or more lines are too long

@ -258,7 +258,7 @@ class App extends Component {
<MuiThemeProvider theme={theme}> <MuiThemeProvider theme={theme}>
<LoginDialog></LoginDialog> <LoginDialog {...this.props} {...this.state}></LoginDialog>
{/*{*/} {/*{*/}
{/* isRender === true?*/} {/* isRender === true?*/}
{/* <LoginDialog></LoginDialog> : ""*/} {/* <LoginDialog></LoginDialog> : ""*/}

@ -60,7 +60,7 @@ class DMDEditor extends Component{
<style>{` <style>{`
`}</style> `}</style>
<div id="content_editorMd_show" className="new_li content_editorMd_show" <div id="content_editorMd_show" className="new_li content_editorMd_show markdown-body"
style={_style} style={_style}
dangerouslySetInnerHTML={{__html: initValue ? markdownToHTML(initValue):this.props.placeholder}} dangerouslySetInnerHTML={{__html: initValue ? markdownToHTML(initValue):this.props.placeholder}}
onClick={this.toMDMode} onClick={this.toMDMode}

File diff suppressed because one or more lines are too long

@ -27,8 +27,8 @@ window.__useKindEditor = false;
const render = (Component) => { const render = (Component) => {
ReactDOM.render( ReactDOM.render(
<AppContainer> <AppContainer {...this.props} {...this.state}>
<Component /> <Component {...this.props} {...this.state}/>
</AppContainer>, </AppContainer>,
document.getElementById('root') document.getElementById('root')
); );

@ -73,6 +73,10 @@ const WrappedCoursesNewApp= Loadable({
loading: Loading, loading: Loading,
}) })
const ShixunHomeworkPage =Loadable({
loader: () => import('./shixunHomework/ShixunHomeworkPage'),
loading: Loading,
})
//实训作业 //实训作业
const ShixunHomework= Loadable({ const ShixunHomework= Loadable({
loader: () => import('./shixunHomework/shixunHomework'), loader: () => import('./shixunHomework/shixunHomework'),
@ -95,7 +99,6 @@ const Listofworks= Loadable({
// loader: () => import('./shixunHomework/Listofworksstudentone'), // loader: () => import('./shixunHomework/Listofworksstudentone'),
// loading: Loading, // loading: Loading,
// }) // })
//实训作业列表完成的 //实训作业列表完成的
const Studenthascompleted= Loadable({ const Studenthascompleted= Loadable({
loader: () => import('./shixunHomework/Listofworksstudentone'), loader: () => import('./shixunHomework/Listofworksstudentone'),
@ -720,12 +723,12 @@ class CoursesIndex extends Component{
{/*实训查重列表*/} {/*实训查重列表*/}
<Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/student_work" <Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/student_work"
render={ render={
(props) => (<ShixunStudentWork {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
<Route path="/courses/:coursesId/shixun_homework/:homeworkid/student_work" <Route path="/courses/:coursesId/shixun_homework/:homeworkid/student_work"
render={ render={
(props) => (<ShixunStudentWork {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
@ -744,24 +747,29 @@ class CoursesIndex extends Component{
{/*教师列表*/} {/*教师列表*/}
<Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/list" <Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/list"
render={ render={
(props) => (<Listofworks {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
<Route path="/courses/:coursesId/shixun_homework/:homeworkid/list" <Route path="/courses/:coursesId/shixun_homework/:homeworkid/list"
render={ render={
(props) => (<Listofworks {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
}
></Route>
{/*实训作业page*/}
<Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/Page"
render={
(props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*实训作业设置*/} {/*实训作业设置*/}
<Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/settings" <Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/settings"
render={ render={
(props) => (<Trainingjobsetting {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
<Route path="/courses/:coursesId/shixun_homework/:homeworkid/settings" <Route path="/courses/:coursesId/shixun_homework/:homeworkid/settings"
render={ render={
(props) => (<Trainingjobsetting {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*/!*实训作品列表教师*!/*/} {/*/!*实训作品列表教师*!/*/}
@ -790,13 +798,13 @@ class CoursesIndex extends Component{
{/*实训学生作品列表已公布*/} {/*实训学生作品列表已公布*/}
<Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/openlist" <Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/openlist"
render={ render={
(props) => (<Studenthascompleted {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*实训学生作品列表已公布*/} {/*实训学生作品列表已公布*/}
<Route path="/courses/:coursesId/shixun_homework/:homeworkid/openlist" <Route path="/courses/:coursesId/shixun_homework/:homeworkid/openlist"
render={ render={
(props) => (<Studenthascompleted {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
@ -805,14 +813,14 @@ class CoursesIndex extends Component{
{/*实训作业问答主目录*/} {/*实训作业问答主目录*/}
<Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/questions" <Route path="/courses/:coursesId/shixun_homeworks/:homeworkid/questions"
render={ render={
(props) => (<Workquestionandanswer {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*实训作业问答子目录*/} {/*实训作业问答子目录*/}
<Route path="/courses/:coursesId/shixun_homework/:homeworkid/questions" <Route path="/courses/:coursesId/shixun_homework/:homeworkid/questions"
render={ render={
(props) => (<Workquestionandanswer {...this.props} {...props} {...this.state} />) (props) => (<ShixunHomeworkPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>

@ -6,7 +6,6 @@ import {getImageUrl} from 'educoder';
import axios from 'axios' import axios from 'axios'
import {getUrl} from 'educoder'; import {getUrl} from 'educoder';
import moment from 'moment' import moment from 'moment'
import { Base64 } from 'js-base64';
import CoursesListType from '../coursesPublic/CoursesListType'; import CoursesListType from '../coursesPublic/CoursesListType';
import Showoldfiles from "../coursesPublic/Showoldfiles"; import Showoldfiles from "../coursesPublic/Showoldfiles";
import Modals from '../../modals/Modals'; import Modals from '../../modals/Modals';

@ -13,6 +13,9 @@ import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal'
import '../css/Courses.css' import '../css/Courses.css'
import WorkDetailPageHeader from './common/WorkDetailPageHeader' import WorkDetailPageHeader from './common/WorkDetailPageHeader'
import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply' import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply'
import Example from './TestHooks'
import CommonWorkAppraiseReviseAttachments from './CommonWorkAppraiseReviseAttachments'
const { Option} = Select; const { Option} = Select;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm; const confirm = Modal.confirm;
@ -174,12 +177,12 @@ class CommonWorkAppraise extends Component{
modalSave={ModalSave} modalSave={ModalSave}
loadtype={loadtype} loadtype={loadtype}
/> />
{/* 内容区 */} {/* 内容区 */}
{/* <div className="padding40 memoContent new_li"> {/* <div className="padding40 memoContent new_li">
</div> */} </div> */}
<div className={"appraise imageLayerParent "} style={{}}> <div className={"appraise imageLayerParent "} style={{}}>
<style>{` <style>{`
.workAppraise>div:last-child { .workAppraise>div:last-child {
border-bottom: none !important; border-bottom: none !important;
@ -234,42 +237,7 @@ class CommonWorkAppraise extends Component{
</div> } </div> }
{revise_attachments.length===0?"":<div className={"stud-class-set bor-top-greyE padding20-30 edu-back-white"}> <CommonWorkAppraiseReviseAttachments {...this.state}></CommonWorkAppraiseReviseAttachments>
<style>{`
.color-grey:hover i {
display: inline !important;
}
`}</style>
<div className={"color-grey-6 mb10 font-16"}>
补交附件
</div>
<div className={"ml20"}>
{revise_reason}
</div>
{revise_attachments.map((item,key)=>{
return(
<div className="color-grey" key={key}>
<a className="color-grey ml20">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a>
<a href={item.url}
className="mr12 color9B9B imageTarget" length="58">
{item.title}
</a>
<span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span>
{item.delete===true?<i className="font-14 iconfont icon-guanbi " style={{display: 'none'}} id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}
</div>
)
})}
<div className={"color-grey-6 clearfix lineh-25 ml20"}>
<span className={"color9B9B fr"}>更新</span>
<span className={"fr font-13 mr10 ml10"}>{atta_update_user}</span>
<span className={"color9B9B fr"}>
{moment(atta_update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(atta_update_time).format('YYYY-MM-DD HH:mm')}
</span>
</div>
</div>}
{is_evaluation != true && project_info && project_info.name && <div className={"stud-class-set bor-top-greyE edu-back-white padding20-30"}> {is_evaluation != true && project_info && project_info.name && <div className={"stud-class-set bor-top-greyE edu-back-white padding20-30"}>
<div className={"color-grey-6 mb10"}> <div className={"color-grey-6 mb10"}>

@ -0,0 +1,52 @@
import React, { useState } from 'react'
import moment from 'moment'
// import Example from './TestHooks'
function CommonWorkAppraiseReviseAttachments(props) {
const { revise_attachments, revise_reason, atta_update_time, atta_update_user} = props
if (!revise_attachments) return ''
return (
<React.Fragment>
{/* {Example()} */}
{revise_attachments.length===0?"":<div className={"stud-class-set bor-top-greyE padding20-30 edu-back-white"}>
<style>{`
.color-grey:hover i {
display: inline !important;
}
`}</style>
<div className={"color-grey-6 mb10 font-16"}>
补交附件
</div>
{/* {age} */}
<div className={"ml20"}>
{revise_reason}
</div>
{revise_attachments.map((item,key)=>{
return(
<div className="color-grey" key={key}>
<a className="color-grey ml20">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a>
<a href={item.url}
className="mr12 color9B9B imageTarget" length="58">
{item.title}
</a>
<span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span>
{item.delete===true?<i className="font-14 iconfont icon-guanbi " style={{display: 'none'}} id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}
</div>
)
})}
<div className={"color-grey-6 clearfix lineh-25 ml20"}>
<span className={"color9B9B fr"}>更新</span>
<span className={"fr font-13 mr10 ml10"}>{atta_update_user}</span>
<span className={"color9B9B fr"}>
{moment(atta_update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(atta_update_time).format('YYYY-MM-DD HH:mm')}
</span>
</div>
</div>}
</React.Fragment>
)
}
export default CommonWorkAppraiseReviseAttachments;

@ -150,7 +150,9 @@ class CommonWorkDetailIndex extends Component{
]}></CBreadcrumb> ]}></CBreadcrumb>
<div style={{ width:'100%',height:'52px'}} > <div style={{ width:'100%',height:'52px'}} >
<span className=" fl color-black summaryname" title={`${homework_name && homework_name.length > 36 ? homework_name : ''}`}> <span className=" fl color-black summaryname" title={`${homework_name && homework_name.length > 36 ? homework_name : ''}`}
style={{height: 'auto'}}
>
{homework_name} {homework_name}
{/* <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{homework_name}</Link> */} {/* <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{homework_name}</Link> */}
</span> </span>

@ -139,9 +139,10 @@ class CommonWorkItem extends Component{
} }
<div className="flex1" onClick={() => this.props.onItemClick(Object.assign({}, item, {id: item.homework_id})) }> <div className="flex1" onClick={() => this.props.onItemClick(Object.assign({}, item, {id: item.homework_id})) }>
<p className="clearfix mb20"> <p className="clearfix mb20">
{/* 放开点击进入进入后弹框canNotLink ? () => {} : */}
<a title={item.name} <a title={item.name}
className="fl font-16 font-bd mt2 comnonwidth580" style={{cursor: canNotLink ? 'normal' : 'poninter'}} className="fl font-16 font-bd mt2 comnonwidth580" style={{cursor: canNotLink ? 'normal' : 'poninter'}}
onClick={canNotLink ? () => {} : () => this.onItemClick(item)} onClick={() => this.onItemClick(item)}
>{item.name}</a> >{item.name}</a>
{/* 只有非课堂成员且作业是私有的情况下才会为true */} {/* 只有非课堂成员且作业是私有的情况下才会为true */}

@ -70,7 +70,7 @@ function buildColumns(that, student_works) {
render: (text, record, index) => { render: (text, record, index) => {
return ( return (
<span style={{ minWidth: '50px', display: 'inline-block', textAlign: 'center' }} > <span style={{ minWidth: '50px', display: 'inline-block', textAlign: 'center' }} >
{record.isMine == true ? '我' : (that.state.page - 1) * PAGE_SIZE + index + 1} {record.isMine == true && (student_works && student_works.length) ? '我' : (that.state.page - 1) * PAGE_SIZE + index + 1}
</span> </span>
)}, )},
}, { }, {

@ -92,8 +92,16 @@ class CommonWorkPost extends Component{
} else { } else {
axios.get(url).then((response)=>{ axios.get(url).then((response)=>{
if(response.data.course_id){ if(response.data.course_id){
const mine = {
user_id: response.data.user_id,
user_name: response.data.user_name,
student_id: response.data.user_student_id,
group_name: response.data.group_name,
}
this.setState({ this.setState({
...response.data, ...response.data,
selectmemberslist: [mine],
memberNumMin: response.data.min_num, memberNumMin: response.data.min_num,
memberNumMax: response.data.max_num, memberNumMax: response.data.max_num,
}) })
@ -102,30 +110,6 @@ class CommonWorkPost extends Component{
console.log(error) console.log(error)
}) })
} }
return
const responseData = {
"course_id": 1309,
"course_name": "计算机开发实战课-示例",
"category": {
"category_id": 11551,
"category_name": "分组作业"
},
"homework_status": [
"申诉中"
],
"homework_name": "小米便签的功能改进",
"homework_id": 7013,
"homework_type": "group",
"user_id": 15582,
"user_name": "胡莎莎",
"user_student_id": null,
"group_name": "示例A班"
}
this.setState({
...responseData
})
} }
@ -420,84 +404,6 @@ class CommonWorkPost extends Component{
}).catch((error)=>{ }).catch((error)=>{
console.log(error) console.log(error)
}) })
return
const member = {
"members": [
{
"user_id": 8686,
"user_name": "陈晓婷",
"group_name": "未分班",
"student_id": "2018201801106004",
"commit_status": false
},
{
"user_id": 46220,
"user_name": "刘恩",
"group_name": "未分班",
"student_id": "173139241573",
"commit_status": false
},
{
"user_id": 57106,
"user_name": "曾啸笛",
"group_name": "未分班",
"student_id": "184962010005",
"commit_status": false
},
{
"user_id": 57110,
"user_name": "王玉龙",
"group_name": "未分班",
"student_id": "184962710013",
"commit_status": false
},
{
"user_id": 57280,
"user_name": "陈涛",
"group_name": "未分班",
"student_id": "184962020046",
"commit_status": false
},
{
"user_id": 57341,
"user_name": "何仁杰",
"group_name": "未分班",
"student_id": "18496232002036",
"commit_status": false
},
{
"user_id": 57386,
"user_name": "王震东",
"group_name": "未分班",
"student_id": "1849620100012",
"commit_status": false
},
{
"user_id": 58337,
"user_name": "李游",
"group_name": "未分班",
"student_id": null,
"commit_status": false
},
{
"user_id": 58787,
"user_name": "彭然",
"group_name": "未分班",
"student_id": null,
"commit_status": false
},
{
"user_id": 59553,
"user_name": "李明霞",
"group_name": "未分班",
"student_id": null,
"commit_status": false
}
]
}
this.setState({
members: member.members
})
} }
@ -651,7 +557,8 @@ render(){
<a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a> <a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a>
</div> </div>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} > {/* */}
<Form >
<div className="stud-class-set pd20 coursenavbox edu-back-white"> <div className="stud-class-set pd20 coursenavbox edu-back-white">
<style>{` <style>{`
.uploadBtn.ant-btn { .uploadBtn.ant-btn {

@ -1009,7 +1009,7 @@ class CommonWorkSetting extends Component{
} }
`}</style> `}</style>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} className={'settingForm'}> <Form className={'settingForm'}>
<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36"> <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36">
{/* TODO {/* TODO
取消统一发布设置 取消统一发布设置

@ -0,0 +1,26 @@
// import React, { useState, useEffect } from 'react'
// function Example() {
// const [state, setState] = useState({counter: 0})
// useEffect(() => {
// console.log(' cdm')
// return () => {
// console.log(' cwum')
// };
// })
// const add1ToCounter = () => {
// const newCounterValue = state.counter + 1
// setState({ counter: newCounterValue })
// }
// return (
// <div>
// <p>{state.counter}</p>
// <button onClick={add1ToCounter}>
// Click me
// </button>
// </div>
// )
// }
// export default Example

@ -75,12 +75,16 @@ class WorkDetailPageHeader extends Component{
return( return(
<React.Fragment> <React.Fragment>
<div> <div>
<div className="newMain clearfix worklist1"> <div className="newMain clearfix worklist1 workDetailPageHeader">
<div className={"educontent mt20"}> <div className={"educontent mt20"}>
<style>{` <style>{`
.memoContent { .memoContent {
background: #fff; background: #fff;
} }
.workDetailPageHeader .summaryname {
line-height: 20px;
margin-top: 13px;
}
`}</style> `}</style>
<CBreadcrumb items={[ <CBreadcrumb items={[
{ to: `/courses/${courseId}`, name: course_name}, { to: `/courses/${courseId}`, name: course_name},
@ -93,7 +97,7 @@ class WorkDetailPageHeader extends Component{
]}></CBreadcrumb> ]}></CBreadcrumb>
<div style={{ width:'100%',height:'52px'}} > <div style={{ width:'100%',height:'52px'}} >
<span className=" fl color-black summaryname"> <span className=" fl color-black summaryname" style={{height: 'auto'}}>
{homework_name} {homework_name}
{/* <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{homework_name}</Link> */} {/* <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{homework_name}</Link> */}
</span> </span>

@ -825,6 +825,7 @@ a.white-btn.use_scope-btn:hover{
.summaryname{ .summaryname{
/*height: 23px;*/ /*height: 23px;*/
font-size: 22px; font-size: 22px;
height: 25px;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: 400; font-weight: 400;
color: rgba(51,51,51,1); color: rgba(51,51,51,1);

@ -68,7 +68,7 @@ class Ecercisemount extends Component{
</div> </div>
</div> </div>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={this.handleSubmit} className={"edu-back-white newcourses exercise"}> <Form onSubmit={this.handleSubmit} className={"edu-back-white newcourses exercise"}>
{/*内容*/} {/*内容*/}
<div className="stud-class-set bor-bottom-greyE pd20 exerciselist"> <div className="stud-class-set bor-bottom-greyE pd20 exerciselist">

@ -186,7 +186,7 @@ class Exercisestatisticalresult extends Component {
<span className="CACFF">{item.ques_position+"."}{item.ques_type===0?"单选":item.ques_type===1?"多选":item.ques_type===2?"判断":item.ques_type===3?"填空":item.ques_type===4?"主观":item.ques_type===5?"实训":""}</span> <span className="CACFF">{item.ques_position+"."}{item.ques_type===0?"单选":item.ques_type===1?"多选":item.ques_type===2?"判断":item.ques_type===3?"填空":item.ques_type===4?"主观":item.ques_type===5?"实训":""}</span>
<div> <div>
{/*Q{item.ques_position}*/} {/*Q{item.ques_position}*/}
<div dangerouslySetInnerHTML={{__html: markdownToHTML(item.ques_title).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(item.ques_title).replace(/▁/g,"▁▁▁")}}></div>
{/*<span className="markdown-body" dangerouslySetInnerHTML={createMarkup(item.ques_title)}></span>*/} {/*<span className="markdown-body" dangerouslySetInnerHTML={createMarkup(item.ques_title)}></span>*/}
</div> </div>

@ -1907,7 +1907,7 @@ class Studentshavecompletedthelist extends Component {
}) })
} }
} else { } else {
console.log("2699包含主观题包含分班"); // console.log("2699包含主观题包含分班");
if (response.data.exercise_types.groups_count > 0) { if (response.data.exercise_types.groups_count > 0) {
this.setState({ this.setState({
data: datalist, data: datalist,

@ -113,24 +113,26 @@ class Testpapersettinghomepage extends Component{
experiment=(url)=>{ experiment=(url)=>{
axios.get(url).then((response) => { axios.get(url).then((response) => {
console.log(response);
debugger
if(response.data.status&&response.data.status===-1){ if(response.data.status&&response.data.status===-1){
}else if(response.data.status&&response.data.status===-2){ }else if(response.data.status&&response.data.status===-2){
if(response.data.messages === "100"){ if(response.data.messages === "100"){
// 已超出文件导出的上限数量100 ),建议: // 已超出文件导出的上限数量100 ),建议:
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:100 DownloadMessageval:100
}) })
}else { }else {
//因附件资料超过500M //因附件资料超过500M
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:500 DownloadMessageval:500
}) })
} }
}else { }else {
window.open(url, '_blank'); window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -290,9 +292,9 @@ class Testpapersettinghomepage extends Component{
{isAdmin === true? <li className="li_line drop_down fr color-blue font-15" style={{"paddingLeft":"0px"}}> {isAdmin === true? <li className="li_line drop_down fr color-blue font-15" style={{"paddingLeft":"0px"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a onClick={()=>this.experiment(`/api/exercises/${this.props.match.params.Id}/exercise_lists.xlsx`)}>学生成绩</a></li> <li><a onClick={()=>this.experiment(`/exercises/${this.props.match.params.Id}/exercise_lists.xlsx`)}>学生成绩</a></li>
<li><a onClick={()=>this.experiment(`/api/exercises/${this.props.match.params.Id}/export_exercise`)} >空白试卷</a></li> <li><a onClick={()=>this.experiment(`/exercises/${this.props.match.params.Id}/export_exercise`)} >空白试卷</a></li>
<li><a onClick={()=>this.experiment(`/api/zip/export_exercises?exercise_id=${this.props.match.params.Id}${this.state.groupyslsval}`)}>学生答题试卷</a></li> <li><a onClick={()=>this.experiment(`/zip/export_exercises?exercise_id=${this.props.match.params.Id}${this.state.groupyslsval}`)}>学生答题试卷</a></li>
</ul> </ul>
</li>:""} </li>:""}
</div> </div>

@ -293,7 +293,20 @@ class GraduationTasksSubmitedit extends Component{
funtaskstatus=(checkedValues)=>{ funtaskstatus=(checkedValues)=>{
let{memberslist,selectobjct}=this.state;
let{memberslist,selectobjct,workslist}=this.state;
if(selectobjct.length>workslist.max_num){
this.setState({
minvalue:workslist.max_num,
setvalue:"大于",
minmaxtype:true
})
return
}else{
this.setState({
minmaxtype:false
})
}
let newlist =memberslist; let newlist =memberslist;
let newcheckedValues=checkedValues; let newcheckedValues=checkedValues;
let selects=[]; let selects=[];
@ -309,6 +322,7 @@ class GraduationTasksSubmitedit extends Component{
} }
} }
this.setState({ this.setState({
task_status:checkedValues, task_status:checkedValues,
selectmemberslist:selects selectmemberslist:selects
@ -347,12 +361,7 @@ class GraduationTasksSubmitedit extends Component{
handleSubmit=(e) => { handleSubmit=(e) => {
let {fileList,selectmemberslist,workslist}=this.state; let {fileList,selectmemberslist,workslist}=this.state;
if(fileList.length===0){
this.setState({
shixunsreplace:true,
})
return
}
this.Commoninterface(fileList,selectmemberslist,workslist); this.Commoninterface(fileList,selectmemberslist,workslist);
// setTimeout(function () { // setTimeout(function () {
@ -361,6 +370,7 @@ class GraduationTasksSubmitedit extends Component{
} }
Commoninterface =(fileList,selectmemberslist,workslist)=>{ Commoninterface =(fileList,selectmemberslist,workslist)=>{
let userids=[]; let userids=[];
for(var list of selectmemberslist){ for(var list of selectmemberslist){
@ -386,17 +396,16 @@ class GraduationTasksSubmitedit extends Component{
return return
} }
if(workslist.task_type===2){ if(workslist.task_type===2){
if(userids.length<2){ if(userids.length<workslist.min_num){
this.setState({ this.setState({
minvalue:2, minvalue:workslist.min_num,
setvalue:"小于", setvalue:"小于",
minmaxtype:true minmaxtype:true
}) })
return return
}else if(userids.length>5){ }else if(userids.length>workslist.max_num){
this.setState({ this.setState({
minvalue:5, minvalue:workslist.max_num,
setvalue:"大于", setvalue:"大于",
minmaxtype:true minmaxtype:true
}) })
@ -409,6 +418,13 @@ class GraduationTasksSubmitedit extends Component{
}) })
let workId=this.props.match.params.work_Id; let workId=this.props.match.params.work_Id;
if(fileList.length===0){
this.setState({
shixunsreplace:true,
})
return
}
let url="/graduation_works/"+workId+".json"; let url="/graduation_works/"+workId+".json";
axios.put(url, { axios.put(url, {
description:values.description, description:values.description,
@ -474,7 +490,7 @@ class GraduationTasksSubmitedit extends Component{
multiple: true, multiple: true,
// https://github.com/ant-design/ant-design/issues/15505 // https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
showUploadList: false, // showUploadList: false,
action: `${getUrl()}/api/attachments.json`, action: `${getUrl()}/api/attachments.json`,
onChange: this.handleChange, onChange: this.handleChange,
onRemove: this.onAttachmentRemove, onRemove: this.onAttachmentRemove,
@ -556,7 +572,7 @@ class GraduationTasksSubmitedit extends Component{
{description&&description? {description&&description?
<div> <div>
{/*<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={this.handleSubmit} >*/} {/*<Form onSubmit={this.handleSubmit} >*/}
<div className="stud-class-set pd20 coursenavbox edu-back-white"> <div className="stud-class-set pd20 coursenavbox edu-back-white">
<style>{` <style>{`
.uploadBtn.ant-btn { .uploadBtn.ant-btn {
@ -628,37 +644,37 @@ class GraduationTasksSubmitedit extends Component{
) )
})} })}
<style> {/*<style>*/}
{ {/*{*/}
` {/*`*/}
.maxwidth500{ {/*.maxwidth500{*/}
max-width:500px; {/*max-width:500px;*/}
overflow: hidden; {/*overflow: hidden;*/}
text-overflow: ellipsis; {/*text-overflow: ellipsis;*/}
white-space: nowrap; {/*white-space: nowrap;*/}
color: #05101a; {/*color: #05101a;*/}
} {/*}*/}
` {/*`*/}
} {/*}*/}
</style> {/*</style>*/}
{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{ {/*{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{*/}
return( {/*return(*/}
<p className="color-grey mt10" key={key} > {/*<p className="color-grey mt10" key={key} >*/}
<a className="color-grey fl"> {/*<a className="color-grey fl">*/}
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> {/*<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>*/}
</a> {/*</a>*/}
<span className="mr12 color9B9B maxwidth500 fl" length="58"> {/*<span className="mr12 color9B9B maxwidth500 fl" length="58">*/}
{item.name} {/*{item.name}*/}
</span> {/*</span>*/}
<span className="color656565 mt2 color-grey-6 font-12 mr8"> {/*<span className="color656565 mt2 color-grey-6 font-12 mr8">*/}
{item.response===undefined?"":bytesToSize(item.size)} {/*{item.response===undefined?"":bytesToSize(item.size)}*/}
</span> {/*</span>*/}
<i className="font-14 iconfont icon-guanbi " {/*<i className="font-14 iconfont icon-guanbi "*/}
id={item.response===undefined?"":item.response.id} {/*id={item.response===undefined?"":item.response.id}*/}
aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i> {/*aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i>*/}
</p> {/*</p>*/}
) {/*)*/}
})} {/*})}*/}
@ -675,7 +691,7 @@ class GraduationTasksSubmitedit extends Component{
> >
<div> <div>
<div className={"fl ml20"}>成员要求25</div> <div className={"fl ml20"}>成员要求{workslist&&workslist.min_num}{workslist&&workslist.max_num}</div>
<Search <Search
className={"fl mt5 ml20"} className={"fl mt5 ml20"}
style={{width:"270px"}} style={{width:"270px"}}
@ -724,7 +740,7 @@ class GraduationTasksSubmitedit extends Component{
</div>:memberslist&&memberslist.map((item,key)=>{ </div>:memberslist&&memberslist.map((item,key)=>{
return( return(
<div key={key} style={{ <div key={key} style={{
width: '375px', width: '400px',
height: '30px' height: '30px'
}}> }}>
<Checkbox value={item.user_id} <Checkbox value={item.user_id}
@ -735,8 +751,8 @@ class GraduationTasksSubmitedit extends Component{
} }
disabled={item.commit_status===true?true:false} className="fl "></Checkbox> disabled={item.commit_status===true?true:false} className="fl "></Checkbox>
<div className={"fl ml5 fonthidden width100"} style={{width: '70px'}} title={item.user_name}>{item.user_name}</div> <div className={"fl ml5 fonthidden width100"} style={{width: '70px'}} title={item.user_name}>{item.user_name}</div>
<div className={"fl ml5 fonthidden width100 color-grey-9"} style={{width: '70px'}}>{item.group_name}</div> <div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width100"} style={{width: '70px'}}>{item.student_id}</div> <div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div>
<div className={"fl ml20"}>{item.commit_status===false?<span className={"color-orange"}>已提交</span> :""}</div> <div className={"fl ml20"}>{item.commit_status===false?<span className={"color-orange"}>已提交</span> :""}</div>
</div> </div>
) )
@ -760,7 +776,7 @@ class GraduationTasksSubmitedit extends Component{
height: '30px', height: '30px',
display: item.user_name === undefined ? "none" : "" display: item.user_name === undefined ? "none" : ""
}}> }}>
<div className={"fl ml5 fonthidden width100"} style={{width: '50px'}} <div className={"fl ml5 fonthidden width100"}
title={item.user_name}>{item.user_name}</div> title={item.user_name}>{item.user_name}</div>
<div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div> <div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div> <div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div>
@ -769,6 +785,7 @@ class GraduationTasksSubmitedit extends Component{
style={{marginTop: '-4px'}} style={{marginTop: '-4px'}}
onClick={() => this.delecttask_status(item.user_id)}></i> onClick={() => this.delecttask_status(item.user_id)}></i>
</div> : ""} </div> : ""}
<div className={"both"}></div>
</div> </div>
) )
} }

@ -85,15 +85,9 @@ class GraduationTasksSubmitnew extends Component{
} }
handleSubmit=(e) => { handleSubmit=(e) => {
console.log("86");
let {fileList,selectmemberslist,workslist}=this.state; let {fileList,selectmemberslist,workslist}=this.state;
if(fileList.length === 0){
this.setState({
shixunsreplace:true,
})
return
}
this.Commoninterface(fileList,selectmemberslist,workslist); this.Commoninterface(fileList,selectmemberslist,workslist);
} }
@ -280,7 +274,19 @@ class GraduationTasksSubmitnew extends Component{
funtaskstatus=(checkedValues)=>{ funtaskstatus=(checkedValues)=>{
let{memberslist,selectobjct}=this.state; let{memberslist,selectobjct,workslist}=this.state;
if(selectobjct.length>workslist.max_num){
this.setState({
minvalue:workslist.max_num,
setvalue:"大于",
minmaxtype:true
})
return
}else{
this.setState({
minmaxtype:false
})
}
let newlist =memberslist; let newlist =memberslist;
let newcheckedValues=checkedValues; let newcheckedValues=checkedValues;
let selects=[]; let selects=[];
@ -382,17 +388,17 @@ class GraduationTasksSubmitnew extends Component{
} }
if(workslist&&workslist.task_type===2){ if(workslist&&workslist.task_type===2){
if(userids!=undefined){ if(userids!=undefined){
if(userids.length<2){ if(userids.length<workslist.min_num){
this.setState({ this.setState({
minvalue:2, minvalue:workslist.min_num,
setvalue:"小于", setvalue:"小于",
minmaxtype:true minmaxtype:true
}) })
return return
}else if(userids.length>5){ }else if(userids.length>workslist.max_num){
this.setState({ this.setState({
minvalue:5, minvalue:workslist.max_num,
setvalue:"大于", setvalue:"大于",
minmaxtype:true minmaxtype:true
}) })
@ -405,8 +411,16 @@ class GraduationTasksSubmitnew extends Component{
spinnings:true spinnings:true
}) })
let id=this.props.match.params.task_Id; let id=this.props.match.params.task_Id;
if(fileList.length === 0){
this.setState({
shixunsreplace:true,
})
return
}
debugger
let url="/graduation_tasks/"+id+"/graduation_works.json"; let url="/graduation_tasks/"+id+"/graduation_works.json";
axios.post(url, { axios.post(url, {
description:values.description, description:values.description,
@ -471,7 +485,7 @@ render(){
multiple: true, multiple: true,
// https://github.com/ant-design/ant-design/issues/15505 // https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
showUploadList: false, // showUploadList: false,
action: `${getUrl()}/api/attachments.json`, action: `${getUrl()}/api/attachments.json`,
onChange: this.handleChange, onChange: this.handleChange,
onRemove: this.onAttachmentRemove, onRemove: this.onAttachmentRemove,
@ -554,7 +568,7 @@ render(){
<a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a> <a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a>
</div> </div>
{/*<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={GraduationTasksnewtype===true?this.handleSubmit:"return false"}*/} {/*<Form onSubmit={GraduationTasksnewtype===true?this.handleSubmit:"return false"}*/}
{/*>*/} {/*>*/}
<div className="stud-class-set pd20 coursenavbox edu-back-white"> <div className="stud-class-set pd20 coursenavbox edu-back-white">
<style>{` <style>{`
@ -593,37 +607,37 @@ render(){
</Button> </Button>
<span className={"color-grey-9"}>(单个文件150M以内)</span> <span className={"color-grey-9"}>(单个文件150M以内)</span>
</Upload> </Upload>
<style> {/*<style>*/}
{ {/*{*/}
` {/*`*/}
.maxwidth500{ {/*.maxwidth500{*/}
max-width:500px; {/*max-width:500px;*/}
overflow: hidden; {/*overflow: hidden;*/}
text-overflow: ellipsis; {/*text-overflow: ellipsis;*/}
white-space: nowrap; {/*white-space: nowrap;*/}
color: #05101a; {/*color: #05101a;*/}
} {/*}*/}
` {/*`*/}
} {/*}*/}
</style> {/*</style>*/}
{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{ {/*{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{*/}
return( {/*return(*/}
<p className="color-grey mt10" key={key} > {/*<p className="color-grey mt10" key={key} >*/}
<a className="color-grey fl"> {/*<a className="color-grey fl">*/}
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> {/*<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>*/}
</a> {/*</a>*/}
<span className="mr12 color9B9B maxwidth500 fl" length="58"> {/*<span className="mr12 color9B9B maxwidth500 fl" length="58">*/}
{item.name} {/*{item.name}*/}
</span> {/*</span>*/}
<span className="color656565 mt2 color-grey-6 font-12 mr8"> {/*<span className="color656565 mt2 color-grey-6 font-12 mr8">*/}
{item.response===undefined?"":bytesToSize(item.size)} {/*{item.response===undefined?"":bytesToSize(item.size)}*/}
</span> {/*</span>*/}
<i className="font-14 iconfont icon-guanbi " {/*<i className="font-14 iconfont icon-guanbi "*/}
id={item.response===undefined?"":item.response.id} {/*id={item.response===undefined?"":item.response.id}*/}
aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i> {/*aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i>*/}
</p> {/*</p>*/}
) {/*)*/}
})} {/*})}*/}
</div> </div>
@ -638,7 +652,7 @@ render(){
> >
<div> <div>
<div className={"fl ml20"}>成员要求25</div> <div className={"fl ml20"}>成员要求{workslist&&workslist.min_num}{workslist&&workslist.max_num}</div>
<input type="text" style={{width:"0px",height:"0px",display:"none"}} onKeyUp={(e) => this.onSearchKeywordKeyUp(e)} <input type="text" style={{width:"0px",height:"0px",display:"none"}} onKeyUp={(e) => this.onSearchKeywordKeyUp(e)}
onkeydown={(e)=>this.onSearchKeywordKeyUps(e)}/> onkeydown={(e)=>this.onSearchKeywordKeyUps(e)}/>

@ -353,8 +353,8 @@ class GraduationTasksedit extends Component{
{description===undefined?"": {description===undefined?"":
<div> <div>
{/*<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} >*/} {/*<Form >*/}
{/* <Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} >*/} {/* <Form >*/}
{/*内容*/} {/*内容*/}
<div className="stud-class-set bor-bottom-greyE pt20 pl20 pr20 pb0 edu-back-white"> <div className="stud-class-set bor-bottom-greyE pt20 pl20 pr20 pb0 edu-back-white">

@ -322,7 +322,7 @@ class GraduationTasksnew extends Component {
</div> </div>
{/*<Form labelCol={{span: 5}} wrapperCol={{span: 12}}*/} {/*<Form*/}
{/* onSubmit={GraduationTasksnewtype === true ? this.handleSubmit : ""}>*/} {/* onSubmit={GraduationTasksnewtype === true ? this.handleSubmit : ""}>*/}
<style> <style>
{ {

@ -5,16 +5,11 @@ import locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn,getUrl ,handleDateString} from 'educoder'; import { WordsBtn,getUrl ,handleDateString} from 'educoder';
import axios from 'axios'; import axios from 'axios';
import Modals from '../../../modals/Modals'; import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage';
import CoursesListType from '../../coursesPublic/CoursesListType'; import CoursesListType from '../../coursesPublic/CoursesListType';
import PublishModals from "../../coursesPublic/PublishModals";
import HomeworkModal from "../../coursesPublic/HomeworkModal"; import HomeworkModal from "../../coursesPublic/HomeworkModal";
import moment from 'moment'; import moment from 'moment';
const { Option} = Select; const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
let GraduationTasksnewtype=true;
// const $ = window.$;
const Search = Input.Search;
const RadioGroup = Radio.Group; const RadioGroup = Radio.Group;
function range(start, end) { function range(start, end) {
@ -894,7 +889,40 @@ class GraduationTaskssettingapp extends Component{
} }
/// 确认是否下载
confirmysl(url){
axios.get(url).then((response) => {
if(response.data.status&&response.data.status===-1){
}else if(response.data.status&&response.data.status===-2){
if(response.data.messages === "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');
}
}).catch((error) => {
console.log(error)
});
}
Downloadcal=()=>{
this.setState({
DownloadType:false,
DownloadMessageval:undefined
})
}
render(){ render(){
const { getFieldDecorator } = this.props.form; const { getFieldDecorator } = this.props.form;
const dateFormat = 'YYYY-MM-DD HH:mm'; const dateFormat = 'YYYY-MM-DD HH:mm';
@ -969,7 +997,12 @@ class GraduationTaskssettingapp extends Component{
{/*course_groups={course_groups}*/} {/*course_groups={course_groups}*/}
{/*skipTop={this.skipTop}*/} {/*skipTop={this.skipTop}*/}
{/*/>*/} {/*/>*/}
<DownloadMessage
{...this.props}
value={this.state.DownloadMessageval}
modalCancel={this.Downloadcal}
modalsType={this.state.DownloadType}
/>
<HomeworkModal <HomeworkModal
starttimes={this.state.starttimes} starttimes={this.state.starttimes}
typs={this.state.typs} typs={this.state.typs}
@ -1070,8 +1103,8 @@ class GraduationTaskssettingapp extends Component{
{this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> {this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.xlsx"} className="color-dark">导出成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li>
<li><a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.zip"} className="color-dark">导出作品附件</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li>
</ul> </ul>
</li>:""} </li>:""}
@ -1086,7 +1119,7 @@ class GraduationTaskssettingapp extends Component{
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} id={"starttime"}> <Form id={"starttime"}>
{ {
!flagPageEdit && this.props.isAdmin() === true ? !flagPageEdit && this.props.isAdmin() === true ?
<a className="fr mt20 mr40" onClick={this.editSetting}><Tooltip title="编辑"><i <a className="fr mt20 mr40" onClick={this.editSetting}><Tooltip title="编辑"><i

@ -6,7 +6,7 @@ import axios from 'axios';
import moment from 'moment'; import moment from 'moment';
import HomeworkModal from "../../coursesPublic/HomeworkModal"; import HomeworkModal from "../../coursesPublic/HomeworkModal";
import Modals from '../../../modals/Modals'; import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage';
import CoursesListType from '../../coursesPublic/CoursesListType'; import CoursesListType from '../../coursesPublic/CoursesListType';
import ModulationModal from "../../coursesPublic/ModulationModal"; import ModulationModal from "../../coursesPublic/ModulationModal";
@ -73,14 +73,14 @@ class GraduationTaskssettinglist extends Component{
//get 数组 //get 数组
axios.get(url,{ axios.get(url,{
params: { params: {
teacher_comment:teacher_comment, teacher_comment:teacher_comment===null?undefined:teacher_comment,
task_status:task_status, task_status:task_status===null?undefined:task_status,
course_group:course_group, course_group:course_group===null?undefined:course_group,
cross_comment:cross_comment, cross_comment:cross_comment===null?undefined:cross_comment,
order:order, order:order===null?undefined:order,
b_order:b_order, b_order:b_order===null?undefined:b_order,
search:search, search:search===null?undefined:search,
page:pages, page:pages===null?undefined:pages,
limit:20, limit:20,
}, },
paramsSerializer: function(params) { paramsSerializer: function(params) {
@ -144,11 +144,16 @@ class GraduationTaskssettinglist extends Component{
let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search} = this.state; let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search} = this.state;
this.setState({ this.setState({
teacher_comment:list.length===key?null:list, teacher_comment:list.length===key?undefined:list[0],
loadingstate:true loadingstate:true
}) })
this.seacthdata(list.length===key?undefined:list, task_status, course_group, cross_comment, order, b_order, search,this.state.page); if(list.length===key){
}else{
this.seacthdata(list[0], task_status, course_group, cross_comment, order, b_order, search,this.state.page);
}
} }
@ -612,7 +617,51 @@ class GraduationTaskssettinglist extends Component{
this.seacthdata(teacher_comment,task_status,course_group,cross_comment,order,b_order,search,pageNumber); this.seacthdata(teacher_comment,task_status,course_group,cross_comment,order,b_order,search,pageNumber);
} }
/// 确认是否下载
confirmysl(url){
let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search,page} =this.state;
axios.get(url,{
teacher_comment:teacher_comment,
task_status:task_status,
course_group:course_group,
cross_comment:cross_comment,
order:order,
b_order:b_order,
search:search,
}).then((response) => {
if(response.data.status&&response.data.status===-1){
}else if(response.data.status&&response.data.status===-2){
if(response.data.messages === "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');
}
}).catch((error) => {
console.log(error)
});
}
Downloadcal=()=>{
this.setState({
DownloadType:false,
DownloadMessageval:undefined
})
}
render(){ render(){
let {coursename,coursesearch,taskname,taskid,taskslistdata,data,page,limit,teacher_comment,task_status,cross_comment,search,loadingstate, let {coursename,coursesearch,taskname,taskid,taskslistdata,data,page,limit,teacher_comment,task_status,cross_comment,search,loadingstate,
@ -959,7 +1008,17 @@ class GraduationTaskssettinglist extends Component{
Cancel={this.Cancelvisible} Cancel={this.Cancelvisible}
categoryid={taskslistdata.work_id} categoryid={taskslistdata.work_id}
setupdate={this.setupdate} setupdate={this.setupdate}
/>:""} {taskslistdata&&taskslistdata? />:""}
<DownloadMessage
{...this.props}
value={this.state.DownloadMessageval}
modalCancel={this.Downloadcal}
modalsType={this.state.DownloadType}
/>
{taskslistdata&&taskslistdata?
// 教师列表 // 教师列表
this.props.isAdmin()?<div className="newMain clearfix"> this.props.isAdmin()?<div className="newMain clearfix">
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
@ -1025,8 +1084,8 @@ class GraduationTaskssettinglist extends Component{
{this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> {this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.xlsx"} className="color-dark">学生成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">学生成绩</a></li>
<li><a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.zip"} className="color-dark">作品附件</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">作品附件</a></li>
</ul> </ul>
</li>:""} </li>:""}

@ -4,6 +4,7 @@ import {Link} from 'react-router-dom';
import { WordsBtn,markdownToHTML} from 'educoder'; import { WordsBtn,markdownToHTML} from 'educoder';
import axios from 'axios'; import axios from 'axios';
import Modals from '../../../modals/Modals'; import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage';
import HomeworkModal from "../../coursesPublic/HomeworkModal"; import HomeworkModal from "../../coursesPublic/HomeworkModal";
import CoursesListType from '../../coursesPublic/CoursesListType'; import CoursesListType from '../../coursesPublic/CoursesListType';
import moment from 'moment'; import moment from 'moment';
@ -187,6 +188,41 @@ class GraduationTasksquestions extends Component{
course_groupslist:id course_groupslist:id
}) })
} }
/// 确认是否下载
confirmysl(url){
axios.get(url).then((response) => {
if(response.data.status&&response.data.status===-1){
}else if(response.data.status&&response.data.status===-2){
if(response.data.messages === "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');
}
}).catch((error) => {
console.log(error)
});
}
Downloadcal=()=>{
this.setState({
DownloadType:false,
DownloadMessageval:undefined
})
}
render(){ render(){
let { Modalstype,Modalstopval,ModalCancel,ModalSave,questionslist} =this.state; let { Modalstype,Modalstopval,ModalCancel,ModalSave,questionslist} =this.state;
@ -218,7 +254,12 @@ class GraduationTasksquestions extends Component{
{/*modalSave={ModalSave}*/} {/*modalSave={ModalSave}*/}
{/*loadtype={Loadtype}*/} {/*loadtype={Loadtype}*/}
{/*/>*/} {/*/>*/}
<DownloadMessage
{...this.props}
value={this.state.DownloadMessageval}
modalCancel={this.Downloadcal}
modalsType={this.state.DownloadType}
/>
<HomeworkModal <HomeworkModal
starttimes={this.state.starttimes} starttimes={this.state.starttimes}
typs={this.state.typs} typs={this.state.typs}
@ -311,8 +352,8 @@ class GraduationTasksquestions extends Component{
{this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> {this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.xlsx"} className="color-dark">导出成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li>
<li><a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.zip"} className="color-dark">导出作品附件</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li>
</ul> </ul>
</li>:""} </li>:""}
@ -335,7 +376,7 @@ class GraduationTasksquestions extends Component{
width: '100%', width: '100%',
border: '1px solid transparent' border: '1px solid transparent'
}}> }}>
<div dangerouslySetInnerHTML={{__html: markdownToHTML(questionslist.description).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(questionslist.description).replace(/▁/g,"▁▁▁")}}></div>
</div>:"" </div>:""
} }

@ -0,0 +1,96 @@
import React, { useState, useEffect } from 'react'
import { trigger } from 'educoder'
import { Input, Checkbox } from "antd";
/**
arg_course_groups 选中的id数组
joinCourseGroup 选中时触发 joinCourseGroup(checkedValues, item, index) 传入item数据对象index 数据对象index
checkAllValue 是否全选
onCheckAllChange 全选 onCheckAllChange(e, item, index)
course_groups 所有的group
*/
function CourseGroupChooser({ course_groups, isAdminOrCreator = true, item, index, arg_course_groups, checkAllValue, alwaysShow
, onCheckAllChange, joinCourseGroup }) {
const [state, setState] = useState({counter: 0})
const [search, setSearch] = useState('')
// useEffect(() => {
// console.log(' cdm')
// return () => {
// console.log(' cwum')
// };
// // , [state.counter] 加了这个后onClick就消失了 加错位置了?
// }, [state.counter] )
// TODO 为什么每次onClick都会执行 cwum
// const add1ToCounter = () => {
// const newCounterValue = state.counter + 1
// setState({ counter: newCounterValue })
// }
/**
that.state.groupSearchValue
that.setState({groupSearchValue: e.target.value})
that.onCheckAllChange(e, item, index) - onCheckAllChange(e, item, index)
that.joinCourseGroup(checkedValues, item, index) - joinCourseGroup(checkedValues, item, index)
that.state.checkAllArray[index] - checkAllValue
*/
console.log('arg_course_groups', arg_course_groups)
const urlStyle = {"lef":"tunset", minWidth: '262px'};
if (alwaysShow == true) {
urlStyle.display = 'block'
}
return (
<ul className="drop_down_menu" style={urlStyle}>
{
course_groups && course_groups.length > 10?
(<p className="drop_down_search">
<Input placeholder="搜索" value={search} onChange={(e) => {setSearch(e.target.value)}} allowClear/>
</p>):
''
}
<Checkbox.Group onChange={(checkedValues) => joinCourseGroup(checkedValues, item, index)}
value={arg_course_groups.length && arg_course_groups[0].id ? arg_course_groups.map(item => item.id): arg_course_groups}
disabled={!isAdminOrCreator} className="mainGroup"
>
{course_groups && course_groups.length > 1 && <li key={'_all' + index} >
{/* 防止被外面group包裹 */}
<Checkbox.Group onChange={(e) => onCheckAllChange(e, item, index)} value={[checkAllValue]}>
<Checkbox
value={true}
style={{ marginRight: '6px' }} onClick={() => {}}
>全选</Checkbox>
</Checkbox.Group>
</li>}
{
course_groups && course_groups.filter((item) => {
return (!search || item.name.indexOf(search) != -1)
}).map((item,key)=>{
return(
<li key={item.id} value={item.id} >
<Checkbox value={item.id}
id={`check${item.id}`}
style={{ marginRight: '6px' }}
></Checkbox>
<label for={`check${item.id}`}>{item.name}</label>
</li>
)
})
}
</Checkbox.Group>
<p className="drop_down_btn">
<a href="javascript:void(0)" className="color-grey-6"
onClick={() => trigger('groupAdd')}
>添加分班...</a>
</p>
</ul>
)
}
export default CourseGroupChooser

@ -0,0 +1,108 @@
import React, { useState, useEffect, useRef } from 'react'
import { trigger } from 'educoder'
import { Input, Checkbox } from "antd";
import CourseGroupChooser from '../CourseGroupChooser'
import ModalWrapper from "../../common/ModalWrapper"
import axios from 'axios'
/**
arg_course_groups 选中的id数组
joinCourseGroup 选中时触发 joinCourseGroup(checkedValues, item, index) 传入item数据对象index 数据对象index
checkAllValue 是否全选
onCheckAllChange 全选 onCheckAllChange(e, item, index)
course_groups 所有的group
*/
function CourseGroupChooserModal({ course_groups = [], isAdminOrCreator, item, index,
setVisible, visible, record = {}, props = {}, fetchAll
}) {
// , arg_course_groups, checkAllValue , onCheckAllChange, joinCourseGroup
const [checkAllValue, setCheckAllValue] = useState(true)
const [arg_course_groups, setArg_course_groups] = useState(course_groups.map(item => item.id))
const modalEl = useRef(null);
useEffect(() => {
setCheckAllValue(true)
setArg_course_groups(course_groups.map(item => item.id))
}, [course_groups, visible])
useEffect(() => {
if (visible != undefined) {
modalEl.current.setVisible(true)
}
}, [visible])
const joinCourseGroup = (checks) => {
setArg_course_groups(checks)
}
const onCheckAllChange = (e) => {
if (checkAllValue) {
setArg_course_groups([])
} else {
setArg_course_groups(course_groups.map(item => item.id))
}
setCheckAllValue(!checkAllValue)
}
const onOk = async () => {
console.log(checkAllValue, arg_course_groups)
let approval = 1
const courseId = props.match.params.coursesId
let url = `/courses/${courseId}/teacher_application_review.json`
const response = await axios.post(url, {
user_id: record.user_id,
application_id: record.application_id,
approval: approval,
group_id: arg_course_groups
})
props.showNotification(`${approval == 1? '同意' : '拒绝'}`)
fetchAll(1)
modalEl.current.setVisible(false)
}
return (
<ModalWrapper
ref={modalEl}
width="600px"
title={`同意`}
visible={visible}
onOk={onOk}
className="courseGroupChooserModal"
>
<style>{`
.courseGroupChooserModal .description {
font-size: 16px;
text-align: center;
margin-bottom: 20px;
}
.courseGroupChooserModal .drop_down_menu {
position: relative;
top: auto;
box-shadow: none;
padding: 0 20px;
background: #f2f9ff;
padding-top: 12px;
}
.courseGroupChooserModal .drop_down_menu .mainGroup.ant-checkbox-group {
width: 100%;
max-height: 300px
}
.courseGroupChooserModal .drop_down_search {
margin: 0;
margin-bottom: 10px;
}
.courseGroupChooserModal .drop_down_menu li {
padding: 0px;
}
.courseGroupChooserModal .drop_down_menu .drop_down_btn {
padding: 0px 20px;
margin: 0;
}
`}</style>
{/* <React.Fragment>
<React.Fragment> */}
<div className="description">确认同意TA的加入并设置TA的分班管理权限</div>
<CourseGroupChooser
{...{ checkAllValue, isAdminOrCreator, course_groups, arg_course_groups, item, index,
joinCourseGroup, onCheckAllChange, alwaysShow: true }}
></CourseGroupChooser>
</ModalWrapper>
)
}
export default CourseGroupChooserModal

@ -472,7 +472,7 @@ class studentsList extends Component{
const { course_group_name, invite_code } = this.state; const { course_group_name, invite_code } = this.state;
const courseId = this.props.match.params.coursesId const courseId = this.props.match.params.coursesId
let exportUrl = "/api/courses/${courseId}/export_member_scores_excel.xlsx?" let exportUrl = `/api/courses/${courseId}/export_member_scores_excel.xlsx?`
const params = {} const params = {}
if (course_group_id) { if (course_group_id) {
params.group_id = course_group_id params.group_id = course_group_id

@ -1,7 +1,8 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import { Input,Checkbox,Table, Divider, Tooltip,Spin } from "antd"; import { Input,Checkbox,Table, Divider, Tooltip,Spin, Menu } from "antd";
import CourseLayoutcomponent from '../common/CourseLayoutComponent' import CourseLayoutcomponent from '../common/CourseLayoutComponent'
import NoneData from "../coursesPublic/NoneData"
import Titlesearchsection from '../common/titleSearch/TitleSearchSection' import Titlesearchsection from '../common/titleSearch/TitleSearchSection'
import ColorCountText from '../common/titleSearch/ColorCountText' import ColorCountText from '../common/titleSearch/ColorCountText'
@ -20,25 +21,31 @@ import { from } from "array-flatten";
// import AddStudentModal from './modal/AddStudentModal' // import AddStudentModal from './modal/AddStudentModal'
import AddGraduationGroupModal from './modal/AddGraduationGroupModal' import AddGraduationGroupModal from './modal/AddGraduationGroupModal'
import AddAdminModal from './modal/AddAdminModal' import AddAdminModal from './modal/AddAdminModal'
import CourseGroupChooserModal from './modal/CourseGroupChooserModal'
import { ROLE_TEACHER_NUM, ROLE_ASSISTANT_NUM } from './common' import { ROLE_TEACHER_NUM, ROLE_ASSISTANT_NUM } from './common'
import CourseGroupChooser from './CourseGroupChooser'
const Search = Input.Search; const Search = Input.Search;
const ROLE_ADMIN = "管理员" const ROLE_ADMIN = "管理员"
const ROLE_TEACHER = "教师" const ROLE_TEACHER = "教师"
const ROLE_TEACHER_ASSISTANT = "助教" const ROLE_TEACHER_ASSISTANT = "助教"
const pageSize = 20; const pageSize = 20;
function buildColumns(that) { function buildColumns(that) {
let sortedInfo = that.state.sortedInfo || {}
const isAdmin = that.props.isAdmin() const isAdmin = that.props.isAdmin()
const isAdminOrCreator = that.props.isAdminOrCreator(); const isAdminOrCreator = that.props.isAdminOrCreator();
const isAdminOrTeacher = that.props.isAdminOrTeacher() const isAdminOrTeacher = that.props.isAdminOrTeacher()
const { course_groups } = that.state const { course_groups, filterKey } = that.state
const showSorter = filterKey == '1'
const columns = [{ const columns = [{
title: '序号', title: '序号',
dataIndex: 'name', dataIndex: 'name',
key: 'index', key: 'index',
render: (content, item, index) => { render: (content, item, index) => {
return item.isApply == true ? '' : <a href="javascript:;">{(that.state.page - 1) * 20 + index + 1 return index + 1
- (that.state.application_list ? that.state.application_list.length : 0)} </a> // return item.isApply == true ? '' : <a href="javascript:;">{(that.state.page - 1) * 20 + index + 1
// - (that.state.application_list ? that.state.application_list.length : 0)} </a>
} }
} }
// ,{ // ,{
@ -55,6 +62,8 @@ function buildColumns(that) {
dataIndex: 'name', dataIndex: 'name',
width: 120, width: 120,
key: 'name', key: 'name',
sorter: showSorter,
sortOrder: sortedInfo.columnKey === 'name' && sortedInfo.order,
render: (name, record) => { render: (name, record) => {
return <a href={`/login/${record.login}`} target="_blank" className="overflowHidden1" style={{ maxWidth: '110px'}} return <a href={`/login/${record.login}`} target="_blank" className="overflowHidden1" style={{ maxWidth: '110px'}}
title={`${name.length > 4 ? name : ''}`}>{name}</a> title={`${name.length > 4 ? name : ''}`}>{name}</a>
@ -63,6 +72,11 @@ function buildColumns(that) {
title: '角色', title: '角色',
dataIndex: 'role', dataIndex: 'role',
key: 'role', key: 'role',
sorter: showSorter,
// 'ascend' | 'descend'
defaultSortOrder: 'ascend',
sortOrder: sortedInfo.columnKey === 'role' && sortedInfo.order,
}] }]
that.state.course_groups && that.state.course_groups.length && columns.push({ that.state.course_groups && that.state.course_groups.length && columns.push({
title: <Tooltip title="仅能批阅指定分班的作品">管理权限</Tooltip>, title: <Tooltip title="仅能批阅指定分班的作品">管理权限</Tooltip>,
@ -84,49 +98,12 @@ function buildColumns(that) {
{ isAdmin && { isAdmin &&
<React.Fragment> <React.Fragment>
<i className="iconfont icon-xiajiantou font-12 ml2"></i> <i className="iconfont icon-xiajiantou font-12 ml2"></i>
{!noGroups && <ul className="drop_down_menu" style={{"lef":"tunset", minWidth: '262px'}}> {!noGroups && <CourseGroupChooser
{ {...{course_groups, isAdminOrCreator, item, index, arg_course_groups,
course_groups && course_groups.length > 10? checkAllValue: that.state.checkAllArray[index],
(<p className="drop_down_search"> joinCourseGroup: that.joinCourseGroup,
<Input placeholder="搜索" value={that.state.groupSearchValue} onChange={(e) => {that.setState({groupSearchValue: e.target.value})}} allowClear/> onCheckAllChange: that.onCheckAllChange}}
</p>): ></CourseGroupChooser>}
''
}
{course_groups && course_groups.length > 1 && <li key={'_all' + index} >
{/* 防止被外面group包裹 */}
<Checkbox.Group>
<Checkbox
checked={that.state.checkAllArray[index]}
style={{ marginRight: '6px' }} onClick={(e) => that.onCheckAllChange(e, item, index)} onChange={() => {}}
>全选</Checkbox>
</Checkbox.Group>
</li>}
<Checkbox.Group onChange={(checkedValues) => that.joinCourseGroup(checkedValues, item, index)}
value={arg_course_groups.map(item => item.id)}
disabled={!isAdminOrCreator}
>
{
course_groups && course_groups.filter((item) => {
return (!that.state.groupSearchValue || item.name.indexOf(that.state.groupSearchValue) != -1)
}).map((item,key)=>{
return(
<li key={key} value={item.id} >
<Checkbox value={item.id}
style={{ marginRight: '6px' }}
></Checkbox>
{item.name}
</li>
)
})
}
<p className="drop_down_btn">
<a href="javascript:void(0)" className="color-grey-6"
onClick={() => trigger('groupAdd', that.props.coursesids)}
>添加分班...</a>
</p>
</Checkbox.Group>
</ul>}
</React.Fragment> } </React.Fragment> }
</span> </span>
</ConditionToolTip>) </ConditionToolTip>)
@ -138,8 +115,11 @@ function buildColumns(that) {
columns.push({ columns.push({
title: '答辩组', title: '答辩组',
// width: 90, // width: 90,
sorter: showSorter,
key: 'graduation_group', key: 'graduation_group',
dataIndex: 'graduation_group', dataIndex: 'graduation_group',
sortOrder: sortedInfo.columnKey === 'graduation_group' && sortedInfo.order,
render: text => ( render: text => (
<span> <span>
{text} {text}
@ -200,6 +180,7 @@ class studentsList extends Component{
this.state={ this.state={
headIndex:"1", headIndex:"1",
page:1, page:1,
sortedInfo: { columnKey: 'role', order: 'ascend'},
totalPage:undefined, totalPage:undefined,
searchValue:"", searchValue:"",
order: ORDER_BY_DATE, order: ORDER_BY_DATE,
@ -209,7 +190,8 @@ class studentsList extends Component{
checkBoxValues: [], checkBoxValues: [],
isSpin:false, isSpin:false,
application_list: [], application_list: [],
checkAllArray: [] checkAllArray: [],
filterKey: 1, // 1 已审批 2 待审批
} }
} }
onCheckAllChange = (e, item, index) => { onCheckAllChange = (e, item, index) => {
@ -230,10 +212,21 @@ class studentsList extends Component{
} }
// approval 2 - 拒绝 // approval 2 - 拒绝
onAgree = (record, approval = 1) => { onAgree = (record, approval = 1) => {
const isAdminOrCreator = this.props.isAdminOrCreator()
const { course_groups } = this.state
if (approval == 1 && isAdminOrCreator && course_groups && course_groups.length) {
this.setState({ clickRecord: record}, () => {
this.setGroupChooserModalVisible(true)
})
return;
}
const courseId = this.props.match.params.coursesId const courseId = this.props.match.params.coursesId
let url = `/courses/${courseId}/teacher_application_review.json` let url = `/courses/${courseId}/teacher_application_review.json`
this.props.confirm({
content: `是否确认${ approval == 1 ? '同意' : '拒绝'}TA的加入`,
onOk: () => {
axios.post(url, { axios.post(url, {
user_id: record.user_id, user_id: record.user_id,
application_id: record.application_id, application_id: record.application_id,
@ -249,6 +242,10 @@ class studentsList extends Component{
console.log(error); console.log(error);
}); });
} }
})
}
onRefuse = (record) => { onRefuse = (record) => {
this.onAgree(record, 2) this.onAgree(record, 2)
} }
@ -312,7 +309,7 @@ class studentsList extends Component{
}); });
} }
joinCourseGroup = (ids, item, index) => { joinCourseGroup = (ids, item, index) => {
console.log('join ', ids, item) // console.log('join ', ids, item)
const courseId = this.props.match.params.coursesId const courseId = this.props.match.params.coursesId
@ -339,7 +336,7 @@ class studentsList extends Component{
console.log(error); console.log(error);
}); });
} }
fetchAll=(argPage)=>{ fetchAll = async (argPage) => {
this.setState({ this.setState({
isSpin:true isSpin:true
}) })
@ -347,28 +344,57 @@ class studentsList extends Component{
if (argPage) { if (argPage) {
this.setState({ page: argPage }) this.setState({ page: argPage })
} }
const sortedInfo = this.state.sortedInfo;
let page = argPage || this.state.page let page = argPage || this.state.page
let { order, searchValue }=this.state let { searchValue, filterKey }=this.state
let url=`/courses/${id}/teachers.json?order=${order}&page=${page}`; let order = 1;
if (sortedInfo.columnKey == 'role') {
order = 1;
} else if (sortedInfo.columnKey == 'name') {
order = 2;
} else if (sortedInfo.columnKey == 'graduation_group') {
order = 3;
}
let sort = 'desc'
if (sortedInfo.order == 'ascend') {
sort = 'asc'
}
let url=`/courses/${id}/teachers.json?order=${order}&page=${page}&sort=${sort}`;
if (filterKey == '1') {
} else if (filterKey == '2') {
url = `/courses/${id}/apply_teachers.json?_a=1`
}
if(searchValue!=""){ if(searchValue!=""){
url+='&search='+searchValue; url+='&search='+searchValue;
} }
axios.get((url)).then((result)=>{ const result = await axios.get(url)
// axios.get((url)).then((result)=>{
if (result.data.teacher_list) { if (result.data.teacher_list) {
this.setState({ this.setState({
teachers: result.data.teacher_list, teachers: result.data.teacher_list,
total_count: result.data.teacher_list_size, total_count: result.data.teacher_list_size,
application_list: result.data.application_list, application_list: result.data.application_list || [],
is_admin: result.data.is_admin, is_admin: result.data.is_admin,
apply_size: result.data.apply_size,
isSpin:false isSpin:false
}) })
} } else if (result.data.application_list) {
}).catch((error)=>{
console.log(error);
this.setState({ this.setState({
total_count: result.data.teacher_list_size,
application_list: result.data.application_list || [],
is_admin: result.data.is_admin,
apply_size: result.data.apply_size,
isSpin:false isSpin:false
}) })
}) }
// }).catch((error)=>{
// console.log(error);
// this.setState({
// isSpin:false
// })
// })
} }
getGroupList(){ getGroupList(){
let id = this.props.match.params.coursesId let id = this.props.match.params.coursesId
@ -529,13 +555,37 @@ class studentsList extends Component{
}) })
return result && result.length > 0 return result && result.length > 0
} }
onTableChange = (pagination, filters, sorter) => {
console.log('Various parameters', pagination, filters, sorter);
this.setState({
sortedInfo: sorter,
}, () => {
this.fetchAll()
});
};
clearSelection = () => {
this.setState({ checkBoxValues: [] })
}
selectedStatus=(e)=>{
this.clearSelection()
this.setState({
filterKey: e.key,
page:1,
isSpin:true
}, () => {
this.fetchAll();
})
}
setGroupChooserModalVisible = (visible) => {
// 这里只会调用open
this.setState({groupChooserModalVisible: !this.state.groupChooserModalVisible})
}
render(){ render(){
const isAdmin = this.props.isAdmin() const isAdmin = this.props.isAdmin()
const columns = buildColumns(this) const columns = buildColumns(this)
let { let {
searchValue, checkBoxValues, checkAllValue, searchValue, checkBoxValues, checkAllValue, course_groups,
groupList, total_count, teachers, order, page groupList, total_count, teachers, order, page, apply_size, filterKey
}=this.state }=this.state
let currentOrderName = '加入时间排序' let currentOrderName = '加入时间排序'
@ -544,12 +594,13 @@ class studentsList extends Component{
} else if (order == ORDER_BY_GRADUATION_GROUP) { } else if (order == ORDER_BY_GRADUATION_GROUP) {
currentOrderName = '答辩组排序' currentOrderName = '答辩组排序'
} }
const combineArray = teachers.slice(0) let combineArray = teachers.slice(0)
if (page == 1) { if (page == 1 && filterKey == '2') {
this.state.application_list && this.state.application_list.slice(0).reverse().forEach(item => { // this.state.application_list && this.state.application_list.slice(0).reverse().forEach(item => {
item.isApply = true // item.isApply = true
combineArray.unshift(item) // combineArray.unshift(item)
}) // })
combineArray = this.state.application_list
} }
const isAdminOrTeacher = this.props.isAdminOrTeacher() const isAdminOrTeacher = this.props.isAdminOrTeacher()
const hasGraduationModule = this.hasGraduationModule() const hasGraduationModule = this.hasGraduationModule()
@ -585,21 +636,48 @@ class studentsList extends Component{
</React.Fragment> </React.Fragment>
} }
secondRowLeft={ secondRowLeft={
total_count ? <ColorCountText count={total_count} name="个教师"></ColorCountText> : '' isAdminOrTeacher ? <div className="fl mt6 task_menu_ul ">
<Menu mode="horizontal" defaultSelectedKeys="1" onClick={this.selectedStatus}>
<Menu.Item key="1">已审批({total_count})</Menu.Item>
<Menu.Item key="2">待审批({apply_size})</Menu.Item>
</Menu>
</div> :
(total_count ? <ColorCountText count={total_count} name="个教师"></ColorCountText> : '')
} }
onPressEnter={this.onPressEnter} onPressEnter={this.onPressEnter}
></Titlesearchsection> ></Titlesearchsection>
<style>{` <style>{`
/* CourseGroupChooser */
.drop_down_menu .mainGroup.ant-checkbox-group {
max-height: 380px;
overflow-y: auto;
}
.task_menu_ul .ant-menu-item, .task_menu_ul .ant-menu-submenu-title{
padding:0px;
margin-right: 30px;
line-height: 68px;
font-size: 16px;
}
.teacherList .ant-table-pagination.ant-pagination { .teacherList .ant-table-pagination.ant-pagination {
float: none; float: none;
text-align: center; text-align: center;
} }
`}</style> `}</style>
<div className="mt20 edu-back-white padding20 teacherList"> <div className="mt20 edu-back-white padding20 teacherList">
<div className="clearfix stu_head" style={{paddingLeft: '15px'}}>
<CourseGroupChooserModal
props={this.props}
record={this.state.clickRecord}
fetchAll={this.fetchAll}
course_groups={course_groups}
visible={this.state.groupChooserModalVisible}
setVisible={this.setGroupChooserModalVisible}
></CourseGroupChooserModal>
{filterKey == '1' && <div className="clearfix stu_head" style={{paddingLeft: '15px'}}>
{ isAdminOrTeacher && hasGraduationModule && <Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} </Checkbox> } { isAdminOrTeacher && hasGraduationModule && <Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} </Checkbox> }
{ <div className="studentList_operation_ul"> { filterKey == '1' && <div className="studentList_operation_ul">
{ hasGraduationModule && isAdminOrTeacher && <li className="li_line drop_down"> { hasGraduationModule && isAdminOrTeacher && <li className="li_line drop_down">
加入答辩组<i className="iconfont icon-xiajiantou font-12 ml2"></i> 加入答辩组<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"0px","left":"unset", minWidth: '222px'}}> <ul className="drop_down_menu" style={{"right":"0px","left":"unset", minWidth: '222px'}}>
@ -627,22 +705,24 @@ class studentsList extends Component{
</p> </p>
</ul> </ul>
</li> } </li> }
<li className="drop_down"> {/* <li className="drop_down">
{currentOrderName} <i className="iconfont icon-xiajiantou font-12 ml2"></i> {currentOrderName} <i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_normal"> <ul className="drop_down_normal">
<li onClick={() => this.onSortTypeChange(ORDER_BY_NAME)} >姓名排序</li> <li onClick={() => this.onSortTypeChange(ORDER_BY_NAME)} >姓名排序</li>
<li onClick={() => this.onSortTypeChange(ORDER_BY_DATE)} style={{width: '125px'}}>加入时间排序</li> <li onClick={() => this.onSortTypeChange(ORDER_BY_DATE)} style={{width: '125px'}}>加入时间排序</li>
{this.hasGraduationModule() && <li onClick={() => this.onSortTypeChange(ORDER_BY_GRADUATION_GROUP)} >答辩组排序</li>} {this.hasGraduationModule() && <li onClick={() => this.onSortTypeChange(ORDER_BY_GRADUATION_GROUP)} >答辩组排序</li>}
</ul> </ul>
</li> </li> */}
</div> }
</div>} </div>}
</div>
<Spin size="large" spinning={this.state.isSpin}> <Spin size="large" spinning={this.state.isSpin}>
<div className="clearfix stu_table"> <div className="clearfix stu_table">
{combineArray.length ?
<Checkbox.Group style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={checkBoxValues}> <Checkbox.Group style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={checkBoxValues}>
{/* pagination={{ current: page, total: total_count, pageSize:20, onChange: this.onPageChange }} */} {/* pagination={{ current: page, total: total_count, pageSize:20, onChange: this.onPageChange }} */}
<Table columns={columns} dataSource={combineArray} <Table columns={columns} dataSource={combineArray}
pagination={total_count > 20 ? { //分页 onChange={this.onTableChange}
pagination={total_count > 20 && filterKey == '1' ? { //分页
total: page == 1 && this.state.application_list.length ? total_count + total_count / Math.floor(this.state.application_list.length + 20) : total_count , //数据总数量 total: page == 1 && this.state.application_list.length ? total_count + total_count / Math.floor(this.state.application_list.length + 20) : total_count , //数据总数量
pageSize: page == 1 && this.state.application_list.length ? this.state.application_list.length + 20 : 20, //显示几条一页 pageSize: page == 1 && this.state.application_list.length ? this.state.application_list.length + 20 : 20, //显示几条一页
current: page, current: page,
@ -650,6 +730,8 @@ class studentsList extends Component{
} : false} } : false}
></Table> ></Table>
</Checkbox.Group> </Checkbox.Group>
:
<NoneData></NoneData>}
</div> </div>
</Spin> </Spin>
</div> </div>

@ -1,5 +1,5 @@
import React, {Component} from "React"; import React, {Component} from "React";
import {Form, Select, Input, Button, Checkbox, DatePicker,Spin} from "antd"; import {Form, Select, Input, Button, Checkbox, DatePicker,Spin,Icon} from "antd";
import axios from 'axios'; import axios from 'axios';
import "../css/Courses.css"; import "../css/Courses.css";
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -72,7 +72,7 @@ class CoursesNew extends Component {
console.log(error); console.log(error);
}) })
}else{ }else{
console.log(user_school); // console.log(user_school);
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
school:user_school, school:user_school,
}); });
@ -259,7 +259,7 @@ class CoursesNew extends Component {
axios.post(url,{ axios.post(url,{
search:value search:value
}).then((result)=>{ }).then((result)=>{
console.log(result.data) // console.log(result.data)
this.setState({ this.setState({
searchlist:result.data.course_lists, searchlist:result.data.course_lists,
// course:value, // course:value,
@ -357,7 +357,7 @@ class CoursesNew extends Component {
`} `}
</style> </style>
<Form labelCol={{span: 5}} wrapperCol={{span: 12}} onSubmit={this.handleSubmit} <Form onSubmit={this.handleSubmit}
className={"edu-back-white newcourses"}> className={"edu-back-white newcourses"}>
{/*内容*/} {/*内容*/}
<style> <style>
@ -412,7 +412,7 @@ class CoursesNew extends Component {
})( })(
<Select <Select
showSearch showSearch
className={"fl construction mr10 "} className={"fl construction "}
placeholder="例如:数据结构" placeholder="例如:数据结构"
// value={this.state.course} // value={this.state.course}
onSearch={this.handleSearch} onSearch={this.handleSearch}
@ -426,13 +426,13 @@ class CoursesNew extends Component {
)} )}
<span className={"newcoursestitle fl"}> <span className={"newcoursestitle fl"}>
{/*错误示例数据结构2017本部数据结构2017秋季数据结构2017电子商务1班*/} {/*错误示例数据结构2017本部数据结构2017秋季数据结构2017电子商务1班*/}
<p className="ant-progress-text ml10"> <p className="ant-progress-text">
<i aria-label="图标: check-circle" className="ant-progress-textyes anticon anticon-check-circle"></i> <Icon style={{ color: '#52c41a' }} type="check-circle" theme="filled"/>
<span className={"color-grey-9 font-12"}>正确示例数据结构</span> <span className={"color-grey-9 font-12 ml5"}>正确示例数据结构</span>
</p> </p>
<p className="ant-progress-text ml10"> <p className="ant-progress-text">
<i aria-label="图标: close-circle" className="ant-progress-textno anticon anticon-close-circle"></i> <Icon style={{ color: 'red' }} theme="filled" type="close-circle"/>
<span className={"color-grey-9 font-12"}>错误示例数据结构2019春</span> <span className={"color-grey-9 font-12 ml5"}>错误示例数据结构2019春</span>
</p> </p>
</span> </span>
<div id='iscourse'></div> <div id='iscourse'></div>
@ -458,14 +458,13 @@ class CoursesNew extends Component {
})(<Input className={"greyInput fl"} placeholder="例如数据结构2016秋季班级"/>)} })(<Input className={"greyInput fl"} placeholder="例如数据结构2016秋季班级"/>)}
<span className={"newcoursestitle fl"}> <span className={"newcoursestitle fl"}>
{/*(如果本学期包含多个班级,只需创建一个课堂然后在课堂内部建立不同的分班)*/} {/*(如果本学期包含多个班级,只需创建一个课堂然后在课堂内部建立不同的分班)*/}
<p className="ant-progress-text ml19"> <p className="ant-progress-text">
<i aria-label="图标: check-circle" className="ant-progress-textyes anticon anticon-check-circle"></i> <Icon style={{ color: '#52c41a' }} type="check-circle" theme="filled"/>
<span className={"color-grey-9 font-12"}>正确示例数据结构2019春季班级</span> <span className={"color-grey-9 font-12 ml5"}>正确示例数据结构2019春季班级</span>
</p> </p>
<p className="ant-progress-text ml19"> <p className="ant-progress-text">
<i aria-label="图标: close-circle" className="ant-progress-textno anticon anticon-close-circle"></i> <Icon style={{ color: 'red' }} theme="filled" type="close-circle"/>
<span className={"color-grey-9 font-12"}>错误示例2019春季班级数据结构</span> <span className={"color-grey-9 font-12 ml5"}>错误示例2019春季班级数据结构</span>
</p> </p>
</span> </span>
<div id='isclassroom'></div> <div id='isclassroom'></div>

File diff suppressed because it is too large Load Diff

@ -38,7 +38,19 @@
.problemShow:last-child{ .problemShow:last-child{
border-bottom: none; border-bottom: none;
} }
.yslinvitetip{display: block;border-width: 8px;position: absolute;top: 10px;right: -16px;border-style: dashed solid dashed dashed;border-color: transparent transparent transparent rgba(5,16,26,0.6);font-size: 0;line-height: 0;}
.right-black-trangle{border-width: 8px;position: absolute;top: 10px;left: -16px;border-style: dashed solid dashed dashed;border-color: transparent transparent transparent rgba(5,16,26,0.6);font-size: 0;line-height: 0;}
.right-black-trangles{border-width: 8px;position: absolute;top: 10px;left: -16px;border-style: dashed solid dashed dashed;border-color: transparent rgba(5,16,26,0.6) transparent transparent;font-size: 0;line-height: 0;}
.top-black-trangle{border-width: 8px;position: absolute;top: -16px;right: 4px;border-style: dashed solid dashed dashed;border-color: transparent transparent rgba(5,16,26,0.6) transparent;font-size: 0;line-height: 0;}
.invite-tipysl{color: #999999; box-sizing: border-box;text-align: center;border-radius: 2px;font-size: 14px}
.to-back-left {
width: 0;
height: 0;
margin-top: 27px;
border-right: 15px solid #FAFAFA;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
}
/* 问卷详情 */ /* 问卷详情 */
/* 答题列表 */ /* 答题列表 */
.unlimit{ .unlimit{
@ -340,3 +352,6 @@ textarea:read-only{
line-height: 40px; line-height: 40px;
text-align: center; text-align: center;
} }
.myyslwidth {
min-width:1200px
}

@ -98,7 +98,7 @@ class CommitSummary extends Component{
// console.log("提交总结接口") // console.log("提交总结接口")
// console.log(JSON.stringify(result)) // console.log(JSON.stringify(result))
// message.success(result.data.message); // message.success(result.data.message);
this.props.history.push(`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${this.props.match.params.homeworkid}/openlist`); this.props.history.push(`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${this.props.match.params.homeworkid}/openlist?tab=0`);
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -115,7 +115,7 @@ class CommitSummary extends Component{
return ( return (
<div> <div>
<div className="newMain clearfix"> <div className="newMain clearfix">
{/*<Form labelCol={{span: 5}} wrapperCol={{span: 12}} onSubmit={this.handleSubmit}>*/} {/*<Form onSubmit={this.handleSubmit}>*/}
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div style={{ <div style={{
width:'100%', width:'100%',
@ -136,7 +136,7 @@ class CommitSummary extends Component{
</div> </div>
<div> <div>
<p className="ml29 fl color-black mt10 summaryname" onClick={this.asdasdsad}>提交总结</p> <p className="ml29 fl color-black mt10 summaryname" onClick={this.asdasdsad}>提交总结</p>
<a href={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${this.props.match.params.homeworkid}/openlist`} className="color-grey-6 fr font-16 ml30 mt10">返回</a> <a href={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${this.props.match.params.homeworkid}/openlist?tab=0`} className="color-grey-6 fr font-16 ml30 mt10">返回</a>
</div> </div>
{/*educontentbox*/} {/*educontentbox*/}
<div className="stud-class-set pt40 pb40"> <div className="stud-class-set pt40 pb40">
@ -148,7 +148,7 @@ class CommitSummary extends Component{
内容</span> 内容</span>
</div> </div>
<div className="new-wrap"> <div className="new-wrap">
<Form labelCol={{span: 5}}layout='vertical' onSubmit={this.handleSubmit} wrapperCol={{span: 12}}> <Form layout='vertical' onSubmit={this.handleSubmit} >
<Form.Item <Form.Item
> >
<div style={{ "background": "#fff","padding-bottom":"20px","padding-left":"20px","padding-right":"20px"}} <div style={{ "background": "#fff","padding-bottom":"20px","padding-left":"20px","padding-right":"20px"}}
@ -160,18 +160,18 @@ class CommitSummary extends Component{
max: 5000, message: '最大限制为5000个字符', max: 5000, message: '最大限制为5000个字符',
}], }],
})( })(
<TPMMDEditor ref={this.mdRef} placeholder={'请在此输入帖子详情,最大限制为5000个字符'} <TPMMDEditor ref={this.mdRef} placeholder={'请在此输入总结内容,最多5000个字符'}
mdID={'courseMessageMD'} initValue={this.state.description} className="courseMessageMD"></TPMMDEditor> mdID={'courseMessageMD'} initValue={this.state.description} className="courseMessageMD"></TPMMDEditor>
)} )}
</div> </div>
</Form.Item> </Form.Item>
<Form.Item wrapperCol={{span: 12, offset: 5}}> <Form.Item>
<div className="clearfix mt40 mb30"> <div className="clearfix mt40 mb30">
<Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20" > <Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20" >
提交 提交
</Button> </Button>
<a className="defalutCancelbtn fl" href={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${this.props.match.params.homeworkid}/openlist`}>取消</a> <a className="defalutCancelbtn fl" href={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${this.props.match.params.homeworkid}/openlist?tab=0`}>取消</a>
</div> </div>
</Form.Item> </Form.Item>
</Form> </Form>

@ -1,21 +0,0 @@
import {Base64} from 'js-base64';
import axios from 'axios';
// 导出实习报告批量zip 、xlsx 类型
export function Internshipreportsy (url,struy,types,stingtype){
axios.get((url),{responseType: 'blob'}).then((response) => {
const blob = new Blob([response.data], { type: stingtype });
const downloadElement = document.createElement('a');
const href = window.URL.createObjectURL(blob);
const string = Base64.decode(response.headers['content-disposition'].split('=')[1]);
downloadElement.href = href;
downloadElement.download = string+struy+types;
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement) ;// 下载完成移除元素
window.URL.revokeObjectURL(href) // 释放掉blob对象
}).catch((error) => {
console.log(error)
});
}

@ -5,8 +5,6 @@ import TraineetraininginformationModal from './TraineetraininginformationModal';
import ModulationModal from "../coursesPublic/ModulationModal"; import ModulationModal from "../coursesPublic/ModulationModal";
import HomeworkModal from "../coursesPublic/HomeworkModal"; import HomeworkModal from "../coursesPublic/HomeworkModal";
import DownloadMessage from '../../modals/DownloadMessage'; import DownloadMessage from '../../modals/DownloadMessage';
import {Base64} from 'js-base64';
import {Internshipreportsy} from './Httpdownloads'
import { import {
Form, Form,
Select, Select,
@ -339,13 +337,6 @@ class Listofworks extends Component {
render: (text, record) => ( render: (text, record) => (
record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> : record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> :
<span> <span>
<Tooltip placement="bottom" title={<div>
<div>直接调整最终成绩的分数</div>
<div>其它评分全部作废</div>
</div>}>
<a style={this.props.isNotMember() === true ? this.state.mystyles : this.state.mystyle}
onClick={() => this.Viewstudenttraininginformations(record)}>调分</a>
</Tooltip>
<a style={{"text-align": "center"}} className="color-blue" <a style={{"text-align": "center"}} className="color-blue"
onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a> onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a>
</span> </span>
@ -592,13 +583,6 @@ class Listofworks extends Component {
render: (text, record) => ( render: (text, record) => (
record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> : record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> :
<span> <span>
<Tooltip placement="bottom" title={<div>
<div>直接调整最终成绩的分数</div>
<div>其它评分全部作废</div>
</div>}>
<a style={this.props.isNotMember() === true ? this.state.mystyles : this.state.mystyle}
onClick={() => this.Viewstudenttraininginformations(record)}>调分</a>
</Tooltip>
<a style={{"text-align": "center"}} className="color-blue" <a style={{"text-align": "center"}} className="color-blue"
onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a> onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a>
</span> </span>
@ -612,6 +596,8 @@ class Listofworks extends Component {
} }
componentDidMount() { componentDidMount() {
console.log("Listofworks");
console.log("componentDidMount");
var homeworkid = this.props.match.params.homeworkid; var homeworkid = this.props.match.params.homeworkid;
// console.log(homeworkid) // console.log(homeworkid)
// this.Gettitleinformation(homeworkid); // this.Gettitleinformation(homeworkid);
@ -633,6 +619,7 @@ class Listofworks extends Component {
// 获取作品列表 // 获取作品列表
Getalistofworks = (homeworkid) => { Getalistofworks = (homeworkid) => {
// console.log("获取作品列表");7009 // console.log("获取作品列表");7009
let urll = `/homework_commons/${homeworkid}/works_list.json`; let urll = `/homework_commons/${homeworkid}/works_list.json`;
// console.log(homeworkid); // console.log(homeworkid);
@ -651,6 +638,8 @@ class Listofworks extends Component {
limit:20, limit:20,
} }
axios.post(urll, data).then((result) => { axios.post(urll, data).then((result) => {
if(this.props.isNotMember()===false){
if (result !== undefined) { if (result !== undefined) {
// console.log(url) // console.log(url)
// console.log("作品列表6789077") // console.log("作品列表6789077")
@ -668,8 +657,9 @@ class Listofworks extends Component {
code_review: result.data.code_review, code_review: result.data.code_review,
challenges_count:result.data.challenges_count, challenges_count:result.data.challenges_count,
}) })
this.props.Getdataback(result,result.data);
this.seacthdata(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,1); this.seacthdata(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,1);
} } }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
this.setState({ this.setState({
@ -712,6 +702,7 @@ class Listofworks extends Component {
// console.log(url) // console.log(url)
// console.log("作品列表______________________") // console.log("作品列表______________________")
// console.log(JSON.stringify(result)) // console.log(JSON.stringify(result))
if(this.props.isNotMember()===false){
if (result !== undefined) { if (result !== undefined) {
this.setState({ this.setState({
teacherdata: result.data, teacherdata: result.data,
@ -726,9 +717,10 @@ class Listofworks extends Component {
code_review: result.data.code_review, code_review: result.data.code_review,
challenges_count:result.data.challenges_count, challenges_count:result.data.challenges_count,
}) })
this.props.Getdataback(result,result.data);
this.seacthdata(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,page); this.seacthdata(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,page);
} }
}
// } // }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -738,6 +730,7 @@ class Listofworks extends Component {
}) })
} }
TablePagination = (e) => { TablePagination = (e) => {
@ -1348,18 +1341,19 @@ class Listofworks extends Component {
// 已超出文件导出的上限数量100 ),建议: // 已超出文件导出的上限数量100 ),建议:
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:100 DownloadMessageval:100
}) })
}else { }else {
//因附件资料超过500M //因附件资料超过500M
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:500 DownloadMessageval:500
}) })
} }
}else { }else {
window.open(url, '_blank'); this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -1372,6 +1366,10 @@ class Listofworks extends Component {
DownloadMessageval:undefined DownloadMessageval:undefined
}) })
} }
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() { render() {
// console.log("Listofworks.js000") // console.log("Listofworks.js000")
@ -1381,7 +1379,7 @@ class Listofworks extends Component {
// console.log(course_group_info) // console.log(course_group_info)
// console.log(JSON.stringify(this.props)); // console.log(JSON.stringify(this.props));
return ( return (
<div className="newMain clearfix "> <div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{visible === true ? <ModulationModal {visible === true ? <ModulationModal
visible={visible} visible={visible}
Cancel={this.cancelModulationModel} Cancel={this.cancelModulationModel}
@ -1455,50 +1453,21 @@ class Listofworks extends Component {
typs={this.state.typs} typs={this.state.typs}
/> />
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div className="educontent mb30">
<p className="clearfix mb20 mt10">
<ActionBtn className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/students`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<ActionBtn
className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id===undefined?"":jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn className="fl">作业详情</WordsBtn>
</p>
</div>
<div className="educontent mb30">
<p className=" fl color-black summaryname" style={{heigth:"33px"}}>
{teacherdata === undefined ? "" : teacherdata.homework_name}
</p>
<CoursesListType
typelist={teacherdata === undefined ? [""] : teacherdata.homework_status}
/>
<a className="color-grey-9 fr font-16 summaryname ml20 mr20"
href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id===undefined?"": jobsettingsdata.data.category.category_id}`}>返回</a>
<a className="color-grey-9 fr font-16 mr20"
href={`/shixuns/${teacherdata === undefined ? "" : teacherdata.shixun_identifier}/challenges`}
target={"_blank"}>实训详情</a>
</div>
<div className="edu-back-white"> <div className="edu-back-white">
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list"> <div className=" clearfix edu-back-white poll_list">
<Link className="active" <a className="active" onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/list`}>作品列表</Link> <a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link>
{this.props.isAdmin() ? {this.props.isAdmin() ?
this.state.code_review === true ||jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0]==="未发布"? "" : <Link this.state.code_review === true ||jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0]==="未发布"? "" : <a
// to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/student_work`} // to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/student_work`}
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/student_work`}> onClick={(e)=>this.ChangeTab(2)}>
代码查重</Link> : ""} 代码查重</a> : ""}
<Link <a
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`} onClick={(e)=>this.ChangeTab(3)}
>设置</Link> >设置</a>
{/*{this.props.isAdmin() ? <a*/} {/*{this.props.isAdmin() ? <a*/}
{/* className="fr color-blue font-16"*/} {/* className="fr color-blue font-16"*/}
{/* href={`/api/homework_commons/${this.props.match.params.coursesId}/works_list.xlsx`}*/} {/* href={`/api/homework_commons/${this.props.match.params.coursesId}/works_list.xlsx`}*/}
@ -1533,18 +1502,18 @@ class Listofworks extends Component {
</li>:""} </li>:""}
{this.props.isAdmin() ? {this.props.isAdmin() ?
teacherdata && teacherdata.end_immediately === true ? teacherdata && teacherdata.end_immediately === true ?
<a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a> : "" <a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a>
: ""
: ""} : ""}
{this.props.isAdmin() ? {this.props.isAdmin() ?
teacherdata && teacherdata.publish_immediately === true ? teacherdata && teacherdata.publish_immediately === true ?
<a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a> : "" <a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a>
: ""
: ""} : ""}
{/*<a className="fr color-blue font-16" href={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/commitsummary`}>提交总结</a>*/}
{this.props.isAdmin() ? {this.props.isAdmin() ?
this.state.code_review === false ? teacherdata && teacherdata.code_review === true ?
"" <a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a>
: <a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a> : ""} : "": ""}
</div> </div>
</div> </div>
@ -1765,3 +1734,31 @@ class Listofworks extends Component {
} }
export default Listofworks; export default Listofworks;
{/*<div className="educontent mb20">*/}
{/* <p className="clearfix mb20 mt10">*/}
{/* <ActionBtn className=" btn colorgrey fl hovercolorblue "*/}
{/* to={`/courses/${this.props.match.params.coursesId}/students`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>*/}
{/* <span className="color-grey-9 fl ml3 mr3">&gt;</span>*/}
{/* <ActionBtn*/}
{/* className=" btn colorgrey fl hovercolorblue "*/}
{/* to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id===undefined?"":jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>*/}
{/* <span className="color-grey-9 fl ml3 mr3">&gt;</span>*/}
{/* <WordsBtn className="fl">作业详情</WordsBtn>*/}
{/* </p>*/}
{/*</div>*/}
{/*<div className="educontent mb20">*/}
{/* <p className=" fl color-black summaryname" style={{heigth:"33px"}}>*/}
{/*{teacherdata === undefined ? "" : teacherdata.homework_name}*/}
{/*</p>*/}
{/*<CoursesListType*/}
{/*typelist={teacherdata === undefined ? [""] : teacherdata.homework_status}*/}
{/*/>*/}
{/*<a className="color-grey-9 fr font-16 summaryname ml20 mr20"*/}
{/*href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id===undefined?"": jobsettingsdata.data.category.category_id}`}>返回</a>*/}
{/*<a className="color-grey-9 fr font-16 mr20"*/}
{/*href={`/shixuns/${teacherdata === undefined ? "" : teacherdata.shixun_identifier}/challenges`}*/}
{/*target={"_blank"}>实训详情</a>*/}
{/*</div>*/}

@ -102,6 +102,7 @@ class Listofworksstudentone extends Component {
key: 'name', key: 'name',
align: "center", align: "center",
className:'font-14', className:'font-14',
width:'100px',
render: (text, record) => ( render: (text, record) => (
<span> <span>
{record.name === undefined ? {record.name === undefined ?
@ -158,7 +159,7 @@ class Listofworksstudentone extends Component {
dataIndex: 'classroom', dataIndex: 'classroom',
align: "center", align: "center",
className:'font-14', className:'font-14',
width:'288px', width:'260px',
render: (text, record) => ( render: (text, record) => (
<span> <span>
<span style={{ <span style={{
@ -214,6 +215,57 @@ class Listofworksstudentone extends Component {
</span> </span>
), ),
}, },
{
title: '关卡得分',
dataIndex: 'levelscore',
key: 'levelscore',
align: 'center',
className:'font-14',
render: (text, record) => (
<span>
<span style={parseInt(record.levelscore) <= 60 ? {
"color": '#747A7F',
"text-align": "center"
} : parseInt(record.levelscore) < 90 ? {
"color": '#FF6800',
"text-align": "center"
} : parseInt(record.levelscore) >= 90 ? {"color": '#DD1717', "text-align": "center"} : {
"color": '#747A7F',
"text-align": "center"
}}>{record.levelscore}</span>
</span>
)
},
{
title: '效率分',
dataIndex: 'efficiencyscore',
key: 'efficiencyscore',
align: 'center',
className:'font-14',
render: (text, record) => (
<span>
{
record.efficiencyscore&& record.efficiencyscore=== "--"?(
<span style={{color:"#9A9A9A"}}>
--
</span>
)
:
<span style={parseInt(record.efficiencyscore) <= 60 ? {
"color": '#747A7F',
"text-align": "center"
} : parseInt(record.efficiencyscore) < 90 ? {
"color": '#FF6800',
"text-align": "center"
} : parseInt(record.efficiencyscore) >= 90 ? {
"color": '#DD1717',
"text-align": "center"
} : {"color": '#747A7F', "text-align": "center"}}>{record.efficiencyscore}</span>
}
</span>
)
},
{ {
title: '最终成绩', title: '最终成绩',
dataIndex: 'levelscore', dataIndex: 'levelscore',
@ -258,12 +310,14 @@ class Listofworksstudentone extends Component {
), ),
}, },
], ],
work_efficiency:true,
} }
// //
} }
componentDidMount() { componentDidMount() {
console.log("Listofworksstudentone");
console.log("componentDidMount");
var homeworkid = this.props.match.params.homeworkid; var homeworkid = this.props.match.params.homeworkid;
this.Getalistofworks(homeworkid); this.Getalistofworks(homeworkid);
let query = this.props.location.pathname; let query = this.props.location.pathname;
@ -294,7 +348,11 @@ class Listofworksstudentone extends Component {
course_group: "", course_group: "",
} }
axios.post(urll, data).then((result) => { axios.post(urll, data).then((result) => {
if(result === undefined){
return
}
if (result.status === 200) { if (result.status === 200) {
if(this.props.isNotMember()===false) {
this.setState({ this.setState({
teacherdata: result.data, teacherdata: result.data,
task_status: result.data.task_status, task_status: result.data.task_status,
@ -309,6 +367,7 @@ class Listofworksstudentone extends Component {
challenges_count: result.data.challenges_count, challenges_count: result.data.challenges_count,
view_report: result.data.view_report, view_report: result.data.view_report,
}) })
this.props.Getdataback(result,result.data);
if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") { if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") {
this.seacthdata(result.data); this.seacthdata(result.data);
} else { } else {
@ -316,6 +375,8 @@ class Listofworksstudentone extends Component {
} }
} }
}
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
}) })
@ -364,6 +425,7 @@ class Listofworksstudentone extends Component {
challenges_count:result.data.challenges_count, challenges_count:result.data.challenges_count,
view_report:result.data.view_report, view_report:result.data.view_report,
}) })
this.props.Getdataback(result,result.data);
if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") { if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") {
this.seacthdata(result.data); this.seacthdata(result.data);
} else { } else {
@ -387,13 +449,19 @@ class Listofworksstudentone extends Component {
} }
seacthdatas = (teacherdata,student_works) => { seacthdatas = (teacherdata,student_works) => {
let {page, limit} = this.state; let {page, limit,work_efficiency} = this.state;
let datalist = []; let datalist = [];
let datalists = []; let datalists = [];
var styletable = {"display": "none"} var styletable = {"display": "none"}
var arr =[]; var arr =[];
for(var i=0;i<this.state.columns.length;i++){ for(var i=0;i<this.state.columns.length;i++){
var item = this.state.columns[i]; var item = this.state.columns[i];
if (work_efficiency === false) {
if(item.title==="关卡得分"){
}
else if(item.title==="效率分"){
}
}
if(this.props.isNotMember()===true&&item.title==="学号") { if(this.props.isNotMember()===true&&item.title==="学号") {
}else{ }else{
@ -475,7 +543,7 @@ class Listofworksstudentone extends Component {
updatetime: timedata === "Invalid date" ? "--" : timedata, updatetime: timedata === "Invalid date" ? "--" : timedata,
completion: student_works[i].complete_count === null ? "0" :student_works[i].complete_count === undefined ? "0":student_works[i].complete_count, completion: student_works[i].complete_count === null ? "0" :student_works[i].complete_count === undefined ? "0":student_works[i].complete_count,
levelscore: student_works[i].final_score, levelscore: student_works[i].final_score,
efficiencyscore: student_works[i].eff_score, efficiencyscore: student_works[i].eff_score==="0.0"?"--":student_works[i].eff_score==="0"?"--":student_works[i].eff_score,
finalscore:student_works[i].work_score, finalscore:student_works[i].work_score,
operating: "查看", operating: "查看",
late_penalty: student_works[i].late_penalty=== null?"0":student_works[i].late_penalty === undefined?"0":student_works[i].late_penalty, late_penalty: student_works[i].late_penalty=== null?"0":student_works[i].late_penalty === undefined?"0":student_works[i].late_penalty,
@ -486,14 +554,9 @@ class Listofworksstudentone extends Component {
} }
/*teacherlists = { //分页
total: this.state.student_works.length, //数据总数量
pageSize: 10, //一页显示几条
current: this.state.pages,
}*/
} }
// console.log("554");
// console.log(columns2);
this.setState({ this.setState({
@ -514,6 +577,13 @@ class Listofworksstudentone extends Component {
var arr =[]; var arr =[];
for(var i=0;i<this.state.columns.length;i++){ for(var i=0;i<this.state.columns.length;i++){
var item = this.state.columns[i]; var item = this.state.columns[i];
if (this.state.work_efficiency === false) {
if (item.title === "关卡得分") {
} else if (item.title === "效率分") {
}
}
if(this.props.isNotMember()===true&&item.title==="学号") { if(this.props.isNotMember()===true&&item.title==="学号") {
}else{ }else{
@ -577,6 +647,8 @@ class Listofworksstudentone extends Component {
} }
// console.log("datalistdatalist文件"); // console.log("datalistdatalist文件");
// console.log(datalist); // console.log(datalist);
// console.log("645");
// console.log(columns2);
this.setState({ this.setState({
data: datalist, data: datalist,
teacherlist: teacherlist, teacherlist: teacherlist,
@ -703,6 +775,7 @@ class Listofworksstudentone extends Component {
if (result !== undefined) { if (result !== undefined) {
// console.log("学生公开的作品列表") // console.log("学生公开的作品列表")
// console.log(JSON.stringify(result)) // console.log(JSON.stringify(result))
if(this.props.isNotMember()===false) {
this.setState({ this.setState({
teacherdata: result.data, teacherdata: result.data,
task_status: result.data.task_status, task_status: result.data.task_status,
@ -717,8 +790,10 @@ class Listofworksstudentone extends Component {
challenges_count:result.data.challenges_count, challenges_count:result.data.challenges_count,
view_report:result.data.view_report, view_report:result.data.view_report,
}) })
this.props.Getdataback(result,result.data);
this.seacthdata(result.data); this.seacthdata(result.data);
} }
}
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
this.setState({ this.setState({
@ -768,13 +843,18 @@ class Listofworksstudentone extends Component {
}); });
} }
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() { render() {
let {visibles, game_list,columns, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state; let {visibles, game_list,columns, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state;
// console.log(this.state.data);
// console.log("841");
// console.log(this.state.columns);
return ( return (
teacherdata === undefined || teacherdata.student_works === undefined || teacherdata.student_works === null || JSON.stringify(teacherdata.student_works) === "[]" ? teacherdata === undefined || teacherdata.student_works === undefined || teacherdata.student_works === null || JSON.stringify(teacherdata.student_works) === "[]" ?
// 学生不能查看别人的 // 学生不能查看别人的
<div className="newMain clearfix "> <div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
<style> <style>
{` {`
.startbox{ .startbox{
@ -844,44 +924,18 @@ class Listofworksstudentone extends Component {
} }
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div className="educontent mb30">
<p className="clearfix mb20 mt10">
<ActionBtn className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/students`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<ActionBtn
className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id === undefined ? "" : jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn className="fl">作业详情</WordsBtn>
</p>
</div>
<div className="educontent mb30" style={{width: "1250px"}}>
<p className=" fl color-black summaryname" style={{heigth:"33px"}}>
{teacherdata === undefined ? "" : teacherdata.homework_name}
</p>
<CoursesListType
typelist={teacherdata === undefined ? [""] : teacherdata.homework_status}
/>
<a className="color-grey-9 fr font-16 summaryname ml20 mr20"
href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id === undefined ? "" : jobsettingsdata.data.category.category_id}`}>返回</a>
<p className="color-grey-9 fr font-16"></p>
</div>
<div className="edu-back-white" style={{width: "1250px"}}> <div className="edu-back-white" style={{width: "1250px"}}>
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list"> <div className=" clearfix edu-back-white poll_list">
<Link className="active" <a className="active" onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/openlist`}>作品列表</Link> <a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
<Link <a
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link> onClick={(e)=>this.ChangeTab(3)}
<Link >设置</a>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`} {this.state.view_report===true?<a className="fr color-blue font-16" target={"_blank"}
>设置</Link> href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${teacherdata === undefined ? "" : teacherdata.id}/shixun_work_report`}>
{this.state.view_report===true?<Link className="fr color-blue font-16" target={"_blank"}
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${teacherdata === undefined ? "" : teacherdata.id}/shixun_work_report`}>
查看实训报告 查看实训报告
</Link>:""} </a>:""}
{/*<a className="fr color-blue font-16">查看实训报告</a>*/} {/*<a className="fr color-blue font-16">查看实训报告</a>*/}
{ {
teacherdata === undefined ? "" teacherdata === undefined ? ""
@ -953,7 +1007,7 @@ class Listofworksstudentone extends Component {
} }
`}</style> `}</style>
<div className="edu-table edu-back-white "> <div className="edu-table edu-back-white ">
{data === undefined ? "" : <Table {data === undefined ? "222222" : <Table
dataSource={data} dataSource={data}
columns={columns} columns={columns}
pagination={false} pagination={false}
@ -1025,13 +1079,9 @@ class Listofworksstudentone extends Component {
<div className="edu-back-white"> <div className="edu-back-white">
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list"> <div className=" clearfix edu-back-white poll_list">
<Link className="active" <Link className="active" onClick={(e)=>this.ChangeTab(0)}>作品列表</Link>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/openlist`}>作品列表</Link> <Link onClick={(e)=>this.ChangeTab(1)}>作业问答</Link>
<Link <Link onClick={(e)=>this.ChangeTab(3)}>设置</Link>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link>
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`}
>设置</Link>
{this.state.view_report===true?<Link className="fr color-blue font-16" target={"_blank"} {this.state.view_report===true?<Link className="fr color-blue font-16" target={"_blank"}
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/shixun_work_report`}> to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/shixun_work_report`}>
查看实训报告 查看实训报告
@ -1132,7 +1182,7 @@ class Listofworksstudentone extends Component {
<div className="fr"> <div className="fr">
<span className="fl mr10 color-grey-6 ">计算成绩时间{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}</span> <span className="fl mr10 color-grey-6 ">计算成绩时间{teacherdata&&teacherdata.calculation_time==null?"--": moment(teacherdata&&teacherdata.calculation_time).format('YYYY-MM-DD HH:mm')}</span>
{teacherdata&&teacherdata.task_operation[0]==="开启挑战"?"":<span> {teacherdata&&teacherdata.task_operation&&teacherdata.task_operation[0]==="开启挑战"?"":<span>
{computeTimetype===true?<div className={"computeTime font-13"} onClick={this.setComputeTime}> {computeTimetype===true?<div className={"computeTime font-13"} onClick={this.setComputeTime}>
计算成绩 计算成绩
</div>:<div className={"computeTimes font-13"} onClick={this.setComputeTime}> </div>:<div className={"computeTimes font-13"} onClick={this.setComputeTime}>

@ -0,0 +1,143 @@
import React,{ Component } from "react";
import {Checkbox,Input,Table, Pagination,Menu} from "antd";
import {Link,NavLink} from 'react-router-dom';
import { WordsBtn ,ActionBtn} from 'educoder';
import axios from 'axios';
import '../css/members.css';
import "../common/formCommon.css";
import '../css/Courses.css';
import './style.css';
import '../css/busyWork.css'
import '../poll/pollStyle.css'
import Listofworks from "./Listofworks";
import Listofworksstudentone from './Listofworksstudentone'
import Trainingjobsetting from './Trainingjobsetting'
import Workquestionandanswer from './Workquestionandanswer'
import CoursesListType from '../coursesPublic/CoursesListType';
import ShixunStudentWork from "./ShixunStudentWork";
class ShixunHomeworkPage extends Component {
constructor(props) {
super(props);
this.state={
tab:["0"],
jobsettingsdata:undefined,
teacherdata:undefined,
}
}
//切换tab
ChangeTab=(e)=>{
console.log(e);
this.setState({
tab:e
})
}
Getdataback = (jobsettingsdata,teacherdata)=>{
this.setState({
jobsettingsdata:jobsettingsdata,
teacherdata:teacherdata,
})
}
componentDidMount() {
const query =this.props.location.search;
const type = query.split('?tab=');
// let sum = []
// sum.push(type[1])
// console.log("componentDidMountcomponentDidMount");
// console.log(sum);
this.setState({
tab:type,
})
let querys = this.props.location.pathname;
const types = querys.split('/');
this.setState({
shixuntypes: types[3]
})
}
render() {
let {tab,jobsettingsdata,teacherdata}=this.state;
const isAdmin =this.props.isAdmin();
return (
<div className="newMain clearfix " >
<div className={"educontent mb20"} style={{width:"1200px"}}>
<div className="educontent mb20">
<p className="clearfix mb20 mt10">
<ActionBtn className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/students`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<ActionBtn
className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id===undefined?"":jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn className="fl">作业详情</WordsBtn>
</p>
</div>
<div className="educontent mb20">
<p className=" fl color-black summaryname" style={{heigth:"33px"}}>
{teacherdata === undefined ? "" : teacherdata.homework_name}
</p>
<CoursesListType
typelist={teacherdata === undefined ? [""] : teacherdata.homework_status}
/>
<a className="color-grey-9 fr font-16 summaryname ml20 mr20"
href={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id===undefined?"": jobsettingsdata.data.category.category_id}`}>返回</a>
<a className="color-grey-9 fr font-16 mr20"
href={`/shixuns/${teacherdata === undefined ? "" : teacherdata.shixun_identifier}/challenges`}
target={"_blank"}>实训详情</a>
</div>
{
// 教师列表
parseInt(tab)===0 ? (isAdmin===true ?
<Listofworks {...this.props} {...this.state} ChangeTab={(e)=>this.ChangeTab(e)} Getdataback={(jobsettingsdata,teacherdata)=>this.Getdataback(jobsettingsdata,teacherdata)} ></Listofworks>
:
<Listofworksstudentone {...this.props} {...this.state} ChangeTab={(e)=>this.ChangeTab(e)} Getdataback={(jobsettingsdata,teacherdata)=>this.Getdataback(jobsettingsdata,teacherdata)} ></Listofworksstudentone>)
:
parseInt(tab)===1 ?<Workquestionandanswer {...this.props} {...this.state} ChangeTab={(e)=>this.ChangeTab(e)} Getdataback={(jobsettingsdata,teacherdata)=>this.Getdataback(jobsettingsdata,teacherdata)} ></Workquestionandanswer>
:
parseInt(tab)===2? <ShixunStudentWork {...this.props} {...this.state} ChangeTab={(e)=>this.ChangeTab(e)} Getdataback={(jobsettingsdata,teacherdata)=>this.Getdataback(jobsettingsdata,teacherdata)} ></ShixunStudentWork>
:
<Trainingjobsetting {...this.props} {...this.state} ChangeTab={(e)=>this.ChangeTab(e)} Getdataback={(jobsettingsdata,teacherdata)=>this.Getdataback(jobsettingsdata,teacherdata)} ></Trainingjobsetting>
}
</div>
</div>
)
}
}
export default ShixunHomeworkPage;
// <div className="edu-back-white mt10" >
// <div className="stud-class-set bor-bottom-greyE ">
// <div className=" clearfix edu-back-white pl30 pr30">
// <div className="fl task_menu_ul">
// {this.props.isAdmin() === true ?
//
// <Menu mode="horizontal" selectedKeys={tab} onClick={(e)=>this.changeTab(e)}>
// <Menu.Item key="0">作品列表</Menu.Item>
// <Menu.Item key="1">作业回答</Menu.Item>
// <Menu.Item key="2">代码查重</Menu.Item>
// <Menu.Item key="3">设置</Menu.Item>
// </Menu>
// :
// <Menu mode="horizontal" selectedKeys={tab} onClick={(e)=>this.changeTab(e)}>
// <Menu.Item key="0">作品列表</Menu.Item>
// <Menu.Item key="1">作业回答</Menu.Item>
// <Menu.Item key="2">代码查重</Menu.Item>
// </Menu>
// }
//
// </div>
// </div>
{/* </div>*/}
{/*</div>*/}

@ -33,7 +33,6 @@ import '../css/Courses.css'
import './style.css' import './style.css'
import moment from 'moment'; import moment from 'moment';
import 'moment/locale/zh-cn'; import 'moment/locale/zh-cn';
import {Base64} from 'js-base64';
const Search = Input.Search; const Search = Input.Search;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
@ -74,6 +73,8 @@ class ShixunStudentWork extends Component {
} }
componentDidMount() { componentDidMount() {
console.log("ShixunStudentWork");
console.log("componentDidMount");
this.getupdata(); this.getupdata();
this.getTrainingjobsetting(); this.getTrainingjobsetting();
} }
@ -88,6 +89,8 @@ class ShixunStudentWork extends Component {
jobsettingsdata: result, jobsettingsdata: result,
}) })
this.props.Getdataback(result,result.data);
} }
}) })
} }
@ -135,6 +138,10 @@ class ShixunStudentWork extends Component {
this.setState({ this.setState({
duplicatechecking: true duplicatechecking: true
}) })
notification.open({
message:"提示",
description: response.data.message
});
} }
if (response.data.status === -1) { if (response.data.status === -1) {
@ -144,6 +151,8 @@ class ShixunStudentWork extends Component {
}); });
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
}); });
@ -197,6 +206,10 @@ class ShixunStudentWork extends Component {
this.setState({ this.setState({
duplicatechecking: true duplicatechecking: true
}) })
notification.open({
message:"提示",
description: response.data.message
});
} }
if (response.data.status === -1) { if (response.data.status === -1) {
@ -468,18 +481,19 @@ class ShixunStudentWork extends Component {
// 已超出文件导出的上限数量100 ),建议: // 已超出文件导出的上限数量100 ),建议:
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:100 DownloadMessageval:100
}) })
}else { }else {
//因附件资料超过500M //因附件资料超过500M
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:500 DownloadMessageval:500
}) })
} }
}else { }else {
window.open(url, '_blank'); this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -492,6 +506,9 @@ class ShixunStudentWork extends Component {
DownloadMessageval:undefined DownloadMessageval:undefined
}) })
} }
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() { render() {
let { let {
data, data,
@ -572,7 +589,7 @@ class ShixunStudentWork extends Component {
} }
return ( return (
<div className="newMain clearfix "> <div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{this.state.showmodel===true?<ShixunWorkModal {this.state.showmodel===true?<ShixunWorkModal
{...this.props} {...this.props}
visible={this.state.showmodel} visible={this.state.showmodel}
@ -609,57 +626,14 @@ class ShixunStudentWork extends Component {
typs={this.state.typs} typs={this.state.typs}
/> />
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div className="educontent mb25">
<p className="clearfix mb25 mt5">
<ActionBtn className=" btn colorgrey fl hovercolorblue mt5"
to={`/courses/${this.props.match.params.coursesId}/students`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>
{/*<ActionBtn className="btn colorgrey fl hovercolorblue" href={"/courses/"+data.course_id+"/students"}>{data.course_name}</ActionBtn>*/}
<span className="color-grey-9 fl ml3 mr3 mt5">&gt;</span>
<ActionBtn
className=" btn colorgrey fl hovercolorblue mt5"
to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>
{/*<ActionBtn className="btn colorgrey fl hovercolorblue" href={"/courses/"+data.course_id+"/"+this.state.shixuntypes+"/"+this.props.match.params.homeworkid}>实训作业</ActionBtn>*/}
{/*<ActionBtn className="btn colorgrey fl hovercolorblue" href={"/courses/"+data.course_id+"/"+this.state.shixuntypes+"/"+data.category.category_id}>{data.category.category_name}</ActionBtn>*/}
<span className="color-grey-9 fl ml3 mr3 mt5">&gt;</span>
<ActionBtn className="fl">作业详情</ActionBtn>
</p>
</div>
<div className="educontent mb30">
<p className=" fl color-black summaryname" style={{heigth:"33px"}}>
{jobsettingsdata === undefined ? "" : jobsettingsdata.data.homework_name}
</p>
<CoursesListType
typelist={jobsettingsdata === undefined ? [] : jobsettingsdata.data.homework_status}
/>
<a className="color-grey-9 fr font-16 summaryname ml20 mr20"
href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" :jobsettingsdata.data.category.category_id}`}>返回</a>
<a className={"color-grey-9 fr font-16 mr20"} href={`/shixuns/${jobsettingsdata===undefined?"":jobsettingsdata.data.shixun_identifier}/challenges`} target={"_blank"}>实训详情</a>
</div>
<div className="edu-back-white"> <div className="edu-back-white">
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list"> <div className=" clearfix edu-back-white poll_list">
<a onClick={(e)=>this.ChangeTab(0)}>作品列表</a>:
{/*<Link*/} <a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
{/* to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/listofworks`}>作品列表(教师)</Link>*/} {this.props.isAdmin()?<a className="active" onClick={(e)=>this.ChangeTab(2)}>代码查重</a>:""}
{this.props.isAdmin() === true? <a onClick={(e)=>this.ChangeTab(3)}>设置</a>
<Link to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/list`}>作品列表</Link>:
<Link to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/openlist`}>作品列表</Link>
}
{/*<Link*/}
{/*to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/Listofworksstudentone`}>作品列表(学生未完成)</Link>*/}
{/*<Link*/}
{/*to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/Listofworksstudenttwo`}>作品列表(学生完成)</Link>*/}
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link>
{this.props.isAdmin()?<Link className="active"
// to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/student_work`}
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/student_work`}>
代码查重</Link>:""}
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`}
>设置</Link>
<style>{` <style>{`
.drop_down_menu li a { .drop_down_menu li a {
padding: 0px; padding: 0px;
@ -691,15 +665,11 @@ class ShixunStudentWork extends Component {
</li> : ""} </li> : ""}
{this.props.isAdmin()? {this.props.isAdmin()?
data&&data.end_immediately===true? data&&data.end_immediately===true?
<a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a> : "" : ""} <a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a>
:"": ""}
{this.props.isAdmin()? {this.props.isAdmin()?
data&&data.publish_immediately===true? data&&data.publish_immediately===true?
<a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a> : "": ""} <a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a> : "": ""}
{/*{this.props.isAdmin()?*/}
{/*jobsettingsdata&&jobsettingsdata.data.code_review===true?*/}
{/*<a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a>*/}
{/*:"":""}*/}
</div> </div>
</div> </div>
<style> <style>
@ -741,7 +711,7 @@ class ShixunStudentWork extends Component {
</style> </style>
{data&&data? {data&&data?
<div> <div style={{display:duplicatechecking===false?"":"none"}}>
<ul className="clearfix" style={{padding: '20px 16px 10px'}}> <ul className="clearfix" style={{padding: '20px 16px 10px'}}>
<li className="clearfix "> <li className="clearfix ">

@ -95,7 +95,7 @@ class ShixunWorkDetails extends Component {
</div> </div>
<div className="padding10-30 edu-back-white clearfix" style={{ <div className="padding10-30 edu-back-white clearfix" style={{
padding: '10px 2px' padding: '10px 13px'
}}> }}>
<span className="fl color-orange font-14">非编程类型任务不参与查重</span> <span className="fl color-orange font-14">非编程类型任务不参与查重</span>
<span className="fr mt4"> <span className="fr mt4">

@ -1,5 +1,5 @@
import React, {Component} from "react"; import React, {Component} from "react";
import {WordsBtn} from 'educoder'; import {WordsBtn,markdownToHTML} from 'educoder';
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider,InputNumber, Tag,DatePicker,Radio,Tooltip,Spin} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider,InputNumber, Tag,DatePicker,Radio,Tooltip,Spin} from "antd";
import {Link,Switch,Route,Redirect} from 'react-router-dom'; import {Link,Switch,Route,Redirect} from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
@ -13,14 +13,11 @@ import 'codemirror/mode/cmake/cmake';
import 'codemirror/mode/xml/xml'; import 'codemirror/mode/xml/xml';
import 'codemirror/mode/javascript/javascript'; import 'codemirror/mode/javascript/javascript';
import 'codemirror/mode/clike/clike'; import 'codemirror/mode/clike/clike';
import '../css/members.css'; import '../css/members.css';
import "../common/formCommon.css"; import "../common/formCommon.css";
import '../css/Courses.css'; import '../css/Courses.css';
import './style.css'; import './style.css';
import moment from 'moment';
import 'moment/locale/zh-cn'; import 'moment/locale/zh-cn';
import {Base64} from 'js-base64';
class ShixunWorkReport extends Component { class ShixunWorkReport extends Component {
@ -41,18 +38,19 @@ class ShixunWorkReport extends Component {
// 已超出文件导出的上限数量100 ),建议: // 已超出文件导出的上限数量100 ),建议:
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:100 DownloadMessageval:100
}) })
}else { }else {
//因附件资料超过500M //因附件资料超过500M
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:500 DownloadMessageval:500
}) })
} }
}else { }else {
window.open(url, '_blank'); this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -119,7 +117,7 @@ class ShixunWorkReport extends Component {
<span className={"color-grey-9"}>{data&&data.category.category_name}</span> <span className={"color-grey-9"}>{data&&data.category.category_name}</span>
</WordsBtn> </WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn to={"/courses/"+this.props.match.params.coursesId+"/"+this.state.shixuntypes+"/"+homework_common_id+"/list"} className="fl color-grey-9">作业详情</WordsBtn> <WordsBtn to={"/courses/"+this.props.match.params.coursesId+"/"+this.state.shixuntypes+"/"+homework_common_id+"/list?tab=0"} className="fl color-grey-9">作业详情</WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn className="fl">{data&&data.username}</WordsBtn> <WordsBtn className="fl">{data&&data.username}</WordsBtn>
</p> </p>
@ -142,7 +140,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set bor-bottom-greyE"> <div className="stud-class-set bor-bottom-greyE">
<div className="clearfix edu-back-white poll_list"> <div className="clearfix edu-back-white poll_list">
<div className="font-16 color-dark-21 shixunreporttitle ml20">总体评价</div> <div className="font-16 color-dark-21 shixunreporttitle ml20 pd20">总体评价</div>
<ConclusionEvaluation <ConclusionEvaluation
data={data} data={data}
@ -154,7 +152,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set"> <div className="stud-class-set">
<div className="clearfix edu-back-white poll_list"> <div className="clearfix edu-back-white poll_list">
<div className="font-16 color-dark-21 shixunreporttitle ml20">阶段成绩</div> <div className="font-16 color-dark-21 shixunreporttitle ml20 pd20">阶段成绩</div>
<OfficialAcademicTranscript <OfficialAcademicTranscript
data={data} data={data}
@ -168,11 +166,10 @@ class ShixunWorkReport extends Component {
style={{display:data&&data.work_description===null?"none":""}} style={{display:data&&data.work_description===null?"none":""}}
> >
<div className="clearfix edu-back-white poll_list"> <div className="clearfix edu-back-white poll_list">
<div className="font-16 color-dark-21 shixunreporttitle ml20">个人总结</div> <div className="font-16 color-dark-21 shixunreporttitle ml20 pd20">个人总结</div>
<style> <style>
{` {`
.personalsummary{ .personalsummary{
height:115px;
border:1px solid rgba(235,235,235,1); border:1px solid rgba(235,235,235,1);
border-radius:2px; border-radius:2px;
} }
@ -194,7 +191,9 @@ class ShixunWorkReport extends Component {
</style> </style>
<div className={"pad040"}> <div className={"pad040"}>
<div className={"personalsummary"}> <div className={"personalsummary"}>
{data&&data.work_description}
<div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(data&&data.work_description).replace(/▁/g, "▁▁▁")}}></div>
</div> </div>
</div> </div>
</div> </div>
@ -202,7 +201,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set bor-bottom-greyE"> <div className="stud-class-set bor-bottom-greyE">
<div className="clearfix edu-back-white poll_list"> <div className="clearfix edu-back-white poll_list">
<div className="font-16 color-dark-21 shixunreporttitle ml20">图形统计</div> <div className="font-16 color-dark-21 shixunreporttitle ml20 pd20">图形统计</div>
<Shixunechart <Shixunechart
data={data} data={data}
/> />
@ -212,7 +211,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set bor-bottom-greyE"> <div className="stud-class-set bor-bottom-greyE">
<div className="clearfix edu-back-white poll_list pad40px"> <div className="clearfix edu-back-white poll_list pad40px">
<div className="font-16 color-dark-21 shixunreporttitle ml20">实训详情</div> <div className="font-16 color-dark-21 shixunreporttitle ml20 pd20">实训详情</div>
<style> <style>
{` {`
.poll_list a{ .poll_list a{

@ -294,19 +294,19 @@ class ShixunhomeWorkItem extends Component{
{/*/courses/1309/9373/listofworks*/} {/*/courses/1309/9373/listofworks*/}
{/*to={`/courses/${this.props.match.params.coursesId}/${discussMessage.homework_id}/jobsettings`}*/} {/*to={`/courses/${this.props.match.params.coursesId}/${discussMessage.homework_id}/jobsettings`}*/}
{ {
this.props.isAdmin?<Link to={"/courses/"+this.props.match.params.coursesId+"/"+this.state.shixuntypes+"/"+discussMessage.homework_id+"/list"} this.props.isAdmin?<Link to={"/courses/"+this.props.match.params.coursesId+"/"+this.state.shixuntypes+"/"+discussMessage.homework_id+"/list?tab=0"}
className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</Link>:"" className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</Link>:""
} }
{ {
this.props.isStudent? <Link to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/openlist`} this.props.isStudent? <Link to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/openlist?tab=0`}
className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</Link>:"" className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</Link>:""
} }
{ {
this.props.isNotMember===true? this.props.discussMessage.private_icon===true? this.props.isNotMember===true? this.props.discussMessage.private_icon===true?
<span className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</span> <span className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</span>
: <Link to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/openlist`} : <Link to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/openlist?tab=0`}
className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</Link>:"" className="fl mt3 font-16 font-bd color-dark maxwidth580">{discussMessage.name}</Link>:""
} }
@ -360,7 +360,7 @@ class ShixunhomeWorkItem extends Component{
{this.props.isAdmin?<div className={this.props.isAdminOrCreator()?"homepagePostSetting homepagePostSettingname":"homepagePostSetting homepagePostSettingbox"} style={{"right":"-2px","top":"44px","display":"block"}}> {this.props.isAdmin?<div className={this.props.isAdminOrCreator()?"homepagePostSetting homepagePostSettingname":"homepagePostSetting homepagePostSettingbox"} style={{"right":"-2px","top":"44px","display":"block"}}>
<a className="btn colorblue font-16" href={"/shixuns/"+discussMessage.shixun_identifier+"/challenges"} target={"_blank"}>实训详情</a> <a className="btn colorblue font-16" href={"/shixuns/"+discussMessage.shixun_identifier+"/challenges"} target={"_blank"}>实训详情</a>
{this.props.isAdminOrCreator()?<a onClick={()=>this.editname(discussMessage.name,discussMessage.homework_id)} className={"btn colorblue ml20 font-16"}>重命名</a>:""} {this.props.isAdminOrCreator()?<a onClick={()=>this.editname(discussMessage.name,discussMessage.homework_id)} className={"btn colorblue ml20 font-16"}>重命名</a>:""}
<WordsBtn className="btn colorblue ml20 font-16" to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/settings`} > 设置</WordsBtn> <WordsBtn className="btn colorblue ml20 font-16" to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/settings?tab=3`} > 设置</WordsBtn>
</div>:""} </div>:""}

@ -50,14 +50,20 @@ class ShixunCustomsPass extends Component {
.backgroud4CACFF{ .backgroud4CACFF{
background: #4CACFF; background: #4CACFF;
} }
.fontpass{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 346px;
}
`} `}
</style> </style>
<span className="panel-inner-icon mr15 fl mt3 backgroud4CACFF"> <span className="panel-inner-icon mr15 fl mt3 backgroud4CACFF">
<i className="fa fa-code font-16 color_white"></i> <i className="fa fa-code font-16 color_white"></i>
</span> </span>
<span className="fl mt3 font-14"> <span className="fl mt3 font-14 fontpass">
<span className="font-bd mr15">{record.customs.position}</span> <span className="font-bd mr15">{record.customs.position}</span>
<span className={"font-14"}>{record.customs.subject}</span> <span className={"font-14"} title={record.customs.subject}>{record.customs.subject}</span>
</span> </span>
</span> </span>
), ),

@ -180,14 +180,15 @@ class ShixunWorkModal extends Component{
group_ids: group_ids, group_ids: group_ids,
}) })
.then((response) => { .then((response) => {
// console.log(this.props)
if (response.data.status === 0) { if (response.data.status === 0) {
this.props.updatas() this.props.updatas()
this.props.issCancel() this.props.issCancel()
notification.open({ // notification.open({
message:"提示", // message:"提示",
description: response.data.message // description: response.data.message
}); // });
console.log(this.props) this.props.history.replace(`/courses/${this.props.match.params.coursesId}/shixun_homeworks/${this.props.match.params.homeworkid}/student_work?tab=2`);
}else if(response.data.status === -1){ }else if(response.data.status === -1){
notification.open({ notification.open({
message:"提示", message:"提示",
@ -223,7 +224,7 @@ class ShixunWorkModal extends Component{
let {course_groups,group_ids,onChangetype,group_list}=this.state; let {course_groups,group_ids,onChangetype,group_list}=this.state;
// let {data}=this.props; // let {data}=this.props;
// console.log(group_list) // console.log(group_list)
console.log(group_list) // console.log(group_list)
return( return(
<div> <div>
<Modal <Modal

@ -217,7 +217,7 @@ class TraineetraininginformationModal extends Component {
<span className="ml10 " style={{"text-align": "left","color":'#29BD8B'}} >经验值<span style={{"color":'#29BD8B'}}> {this.props.experience=== undefined?"0" :this.props.experience}/</span><span style={{"color":'#29BD8B'}}>{this.props.viewtrainingdata === undefined ? "" : this.props.viewtrainingdata.shixun_score}</span></span> <span className="ml10 " style={{"text-align": "left","color":'#29BD8B'}} >经验值<span style={{"color":'#29BD8B'}}> {this.props.experience=== undefined?"0" :this.props.experience}/</span><span style={{"color":'#29BD8B'}}>{this.props.viewtrainingdata === undefined ? "" : this.props.viewtrainingdata.shixun_score}</span></span>
</div> </div>
{/*<Button type="primary" className="ml30" >实训报告</Button>*/} {/*<Button type="primary" className="ml30" >实训报告</Button>*/}
<Button type="primary" className="lh38 fr" style={{"text-align": "center","width": "100px",color: "#fff"}} href={`/courses/${this.props.coursesId}/shixun_homeworks/${this.props.viewtrainingdata.work_id}/shixun_work_report`}> <Button type="primary" target="_blank" className="lh38 fr" style={{"text-align": "center","width": "100px",color: "#fff"}} href={`/courses/${this.props.coursesId}/shixun_homeworks/${this.props.viewtrainingdata.work_id}/shixun_work_report`}>
实训报告 实训报告
</Button> </Button>
{/*这里到时候要做判断*/} {/*这里到时候要做判断*/}

@ -1,10 +1,9 @@
import React, {Component} from "react"; import React, {Component} from "react";
import CoursesListType from '../coursesPublic/CoursesListType'; import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal"; import HomeworkModal from "../coursesPublic/HomeworkModal";
import {WordsBtn, ActionBtn, handleDateString} from 'educoder'; import {WordsBtn, ActionBtn, handleDateString,getImageUrl} from 'educoder';
import PollDetailTabForthRules from '../poll/PollDetailTabForthRules'; import PollDetailTabForthRules from '../poll/PollDetailTabForthRules';
import ShixunWorkModal from './Shixunworkdetails/ShixunWorkModal'; import ShixunWorkModal from './Shixunworkdetails/ShixunWorkModal';
import {Base64} from 'js-base64';
import { import {
Button, Button,
Checkbox, Checkbox,
@ -13,7 +12,7 @@ import {
DatePicker, DatePicker,
Radio, Radio,
Tooltip, Tooltip,
notification notification,
} from "antd"; } from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -113,7 +112,8 @@ class Trainingjobsetting extends Component {
group_settings:undefined, group_settings:undefined,
rulesdata:[], rulesdata:[],
showmodel:false, showmodel:false,
code_review:false code_review:false,
testscripttiptype:false,
} }
// console.log("获取到的值") // console.log("获取到的值")
// console.log("Trainingjobsetting") // console.log("Trainingjobsetting")
@ -125,6 +125,8 @@ class Trainingjobsetting extends Component {
} }
componentDidMount() { componentDidMount() {
console.log("Trainingjobsetting");
console.log("componentDidMount");
this.getTrainingjobsetting(); this.getTrainingjobsetting();
let query = this.props.location.pathname; let query = this.props.location.pathname;
const type = query.split('/'); const type = query.split('/');
@ -143,13 +145,17 @@ class Trainingjobsetting extends Component {
// console.log(homeworkid) // console.log(homeworkid)
let url = `/homework_commons/${homeworkid}/settings.json`; let url = `/homework_commons/${homeworkid}/settings.json`;
axios.get(url).then((result) => { axios.get(url).then((result) => {
console.log(url);
console.log(result);
if (result!=undefined) { if (result!=undefined) {
this.props.Getdataback(result,result.data);
// console.log(result.data.code_review) // console.log(result.data.code_review)
// console.log("设置页") // console.log("设置页")
// console.log(JSON.stringify(result)) // console.log(JSON.stringify(result))
let array=[]; let array=[];
let arrays=[]; let arrays=[];
var rulesdatas=[]; var rulesdatas=[];
if(result.data.group_settings !== undefined){
if(result.data.group_settings.length === 0){ if(result.data.group_settings.length === 0){
array.push({ array.push({
course_group_id:[], course_group_id:[],
@ -181,7 +187,9 @@ class Trainingjobsetting extends Component {
} }
} }
} }
}
if(result.data.group_settings!== undefined){
for(var i=0;i<result.data.group_settings.length;i++){ for(var i=0;i<result.data.group_settings.length;i++){
arrays.push({ arrays.push({
@ -206,6 +214,8 @@ class Trainingjobsetting extends Component {
}) })
} }
} }
}
this.setState({ this.setState({
rules:array, rules:array,
rulest:arrays, rulest:arrays,
@ -222,7 +232,7 @@ class Trainingjobsetting extends Component {
deadline: result.data.end_time === undefined ? undefined : result.data.end_time === null ? undefined : result.data.end_time, deadline: result.data.end_time === undefined ? undefined : result.data.end_time === null ? undefined : result.data.end_time,
late_time: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time, late_time: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time,
late_times: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time, late_times: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time,
allowreplenishment: result.data.allow_late === true ? "允许补交" : "禁止补交", allowreplenishment: result.data.allow_late,
latededuction: result.data.late_penalty, latededuction: result.data.late_penalty,
level: result.data.answer_open_evaluation === true ? "满分" : "扣分", level: result.data.answer_open_evaluation === true ? "满分" : "扣分",
completionefficiencyscore: result.data.work_efficiency, completionefficiencyscore: result.data.work_efficiency,
@ -232,10 +242,6 @@ class Trainingjobsetting extends Component {
challenge_settings: result.data.challenge_settings, challenge_settings: result.data.challenge_settings,
code_review:result.data.code_review code_review:result.data.code_review
}) })
} }
}) })
@ -263,7 +269,7 @@ class Trainingjobsetting extends Component {
if (datas[i].checked === true) { if (datas[i].checked === true) {
var object = { var object = {
challenge_id: datas[i].challenge_id, challenge_id: datas[i].challenge_id,
challenge_score: parseInt(datas[i].challenge_score), challenge_score: datas[i].challenge_score,
}; };
challenge_scoredata.push(datas[i].challenge_score); challenge_scoredata.push(datas[i].challenge_score);
array.push(object) array.push(object)
@ -338,7 +344,7 @@ class Trainingjobsetting extends Component {
} }
} }
} }
if (this.state.allowreplenishment === "允许补交") { if (this.state.allowreplenishment === true) {
if (this.state.late_times === undefined || this.state.late_times === null || this.state.late_times === "") { if (this.state.late_times === undefined || this.state.late_times === null || this.state.late_times === "") {
@ -410,7 +416,7 @@ class Trainingjobsetting extends Component {
if (this.state.allowreplenishment === "允许补交") { if (this.state.allowreplenishment === true) {
if (this.state.latededuction === undefined) { if (this.state.latededuction === undefined) {
this.props.showNotification(`请输入迟交扣分数`); this.props.showNotification(`请输入迟交扣分数`);
@ -531,7 +537,7 @@ class Trainingjobsetting extends Component {
unified_setting: this.state.unifiedsetting, //统一配置 unified_setting: this.state.unifiedsetting, //统一配置
publish_time: moment(this.state.publish_time).format('YYYY-MM-DD HH:mm'), //发布时间 publish_time: moment(this.state.publish_time).format('YYYY-MM-DD HH:mm'), //发布时间
end_time: moment(this.state.end_time).format('YYYY-MM-DD HH:mm'), //截止时间 end_time: moment(this.state.end_time).format('YYYY-MM-DD HH:mm'), //截止时间
allow_late: this.state.allowreplenishment === "允许补交" ? true : false, //补交 allow_late: this.state.allowreplenishment, //补交
late_penalty: parseInt(this.state.latededuction), //迟交扣分 late_penalty: parseInt(this.state.latededuction), //迟交扣分
late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间 late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间
answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项 answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项
@ -547,7 +553,7 @@ class Trainingjobsetting extends Component {
data = { data = {
unified_setting: this.state.unifiedsetting, //非统一配置 unified_setting: this.state.unifiedsetting, //非统一配置
group_settings: this.state.rulesdata, group_settings: this.state.rulesdata,
allow_late: this.state.allowreplenishment === "允许补交" ? true : false, //补交 allow_late: this.state.allowreplenishment, //补交
late_penalty: parseInt(this.state.latededuction), //迟交扣分 late_penalty: parseInt(this.state.latededuction), //迟交扣分
late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间 late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间
answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项 answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项
@ -652,9 +658,8 @@ class Trainingjobsetting extends Component {
//允许补交 //允许补交
onChanges = (e) => { onChanges = (e) => {
// console.log("640");
// console.log(this.state.end_time); // console.log(this.state.end_time);
if(e.target.value ==="允许补交"){ if(e.target.checked ===true){
if(this.state.end_time !== null && this.state.end_time!== undefined){ if(this.state.end_time !== null && this.state.end_time!== undefined){
// console.log(this.state.end_time); // console.log(this.state.end_time);
// var times = this.state.deadline.format('YYYY-MM-DD HH:mm'); // var times = this.state.deadline.format('YYYY-MM-DD HH:mm');
@ -666,16 +671,19 @@ class Trainingjobsetting extends Component {
this.setState({ this.setState({
allowreplenishment: e.target.value, allowreplenishment: e.target.checked,
latededuction:5, latededuction:5,
whethertopay:true, whethertopay:true,
}) })
}else { }else {
this.setState({ this.setState({
allowreplenishment: e.target.value, allowreplenishment: e.target.checked,
latededuction:0, latededuction:0,
whethertopay:false, whethertopay:false,
hand__e_tip: "",
hand_flags: false,
handclass:"",
}) })
} }
@ -693,11 +701,11 @@ class Trainingjobsetting extends Component {
this.state.proportion=e.target.value this.state.proportion=e.target.value
if (e.target.value === "均分比例") { if (e.target.value === "均分比例") {
this.Equalproportion(); this.Equalproportion(this.state.latedeductiontwo);
} }
if (e.target.value === "经验值比例") { if (e.target.value === "经验值比例") {
this.Empiricalvalueratio(); this.Empiricalvalueratio(this.state.latedeductiontwo);
} }
if (e.target.value === "自定义分值") { if (e.target.value === "自定义分值") {
@ -717,11 +725,11 @@ class Trainingjobsetting extends Component {
} }
onChangeslevelproportiontwo=(value)=>{ onChangeslevelproportiontwo=(value)=>{
if (value === "均分比例") { if (value === "均分比例") {
this.Equalproportion(); this.Equalproportion(this.state.latedeductiontwo);
} }
if (value === "经验值比例") { if (value === "经验值比例") {
this.Empiricalvalueratio(); this.Empiricalvalueratio(this.state.latedeductiontwo);
} }
if (value=== "自定义分值") { if (value=== "自定义分值") {
@ -739,9 +747,9 @@ class Trainingjobsetting extends Component {
}) })
} }
//均分比例 //均分比例
Equalproportion = () => { Equalproportion = (latedeductiontwo) => {
var challenge_settingsdata=this.state.challenge_settings; var challenge_settingsdata=this.state.challenge_settings;
var latedeductiontwos=this.state.latedeductiontwo; var latedeductiontwos=latedeductiontwo;
if(latedeductiontwos === undefined || latedeductiontwos===null || latedeductiontwos===""){ if(latedeductiontwos === undefined || latedeductiontwos===null || latedeductiontwos===""){
latedeductiontwos=0; latedeductiontwos=0;
} }
@ -774,15 +782,22 @@ class Trainingjobsetting extends Component {
var intkks=0; var intkks=0;
if(srbool==true){ if(srbool==true){
// 奇数 // 奇数
var exams = Math.round(Proportion) var exams = parseFloat(Proportion.toFixed(1));
var intk = srorelength*exams; var intk = srorelength*exams;
intkk=oushution - intk; intkk=oushution - intk;
console.log("奇数");
console.log(srorelength);//3
console.log(oushution);//79
console.log(exams);//26.3
console.log(intk);//78.9
console.log(intkk);
}else { }else {
// 偶数 // 偶数
var examsy = Math.round(Proportion) var examsy =parseFloat(Proportion.toFixed(1));
intkks=oushution - (examsy*srorelength); intkks=oushution - (examsy*srorelength);
console.log("偶数");
console.log(oushution);
console.log((examsy*srorelength));
} }
var mact=0; var mact=0;
@ -790,20 +805,23 @@ class Trainingjobsetting extends Component {
for (var i=0;i<challenge_settingsdata.length;i++){ for (var i=0;i<challenge_settingsdata.length;i++){
if(challenge_settingsdata[i].checked === true) { if(challenge_settingsdata[i].checked === true) {
if(srbool===false){ if(srbool===false){
console.log(intkks);
mact=mact+1; mact=mact+1;
if(mact===srorelength){ if(mact===srorelength){
challenge_settingsdata[i].challenge_score = Math.round(Proportion)+intkks; challenge_settingsdata[i].challenge_score = (parseFloat(Proportion.toFixed(1))+parseFloat(intkks.toFixed(1))).toFixed(1);
console.log( challenge_settingsdata[i].challenge_score);
}else { }else {
challenge_settingsdata[i].challenge_score = Math.round(Proportion); challenge_settingsdata[i].challenge_score = Proportion.toFixed(1);
} }
}else{ }else{
console.log(intkk);
mact=mact+1; mact=mact+1;
if(mact===srorelength){ if(mact===srorelength){
challenge_settingsdata[i].challenge_score = Math.round(Proportion)+intkk; challenge_settingsdata[i].challenge_score = (parseFloat(Proportion.toFixed(1))+parseFloat( intkk.toFixed(1))).toFixed(1);
console.log( challenge_settingsdata[i].challenge_score);
}else { }else {
challenge_settingsdata[i].challenge_score = Math.round(Proportion); challenge_settingsdata[i].challenge_score = Proportion.toFixed(1);
} }
} }
@ -822,10 +840,10 @@ class Trainingjobsetting extends Component {
} }
//经验值比例 //经验值比例
Empiricalvalueratio=()=>{ Empiricalvalueratio=(latedeductiontwo)=>{
var shixun_exp = this.state.shixun_exp; var shixun_exp = this.state.shixun_exp;
var challenge_settingsdata=this.state.challenge_settings; var challenge_settingsdata=this.state.challenge_settings;
var latedeductiontwos=this.state.latedeductiontwo; var latedeductiontwos=latedeductiontwo;
if(latedeductiontwos === undefined || latedeductiontwos===null || latedeductiontwos===""){ if(latedeductiontwos === undefined || latedeductiontwos===null || latedeductiontwos===""){
latedeductiontwos=0; latedeductiontwos=0;
} }
@ -845,14 +863,53 @@ class Trainingjobsetting extends Component {
} }
} }
//开始循环赋值 //开始循环赋值
var expzs=0;
var mact=0;
for (var i=0;i<challenge_settingsdata.length;i++){ for (var i=0;i<challenge_settingsdata.length;i++){
if(challenge_settingsdata[i].checked===true) { if(challenge_settingsdata[i].checked===true) {
mact=mact+1;
var myint = (challenge_settingsdata[i].challenge_exp / Proportion) * ionsp; var myint = (challenge_settingsdata[i].challenge_exp / Proportion) * ionsp;
challenge_settingsdata[i].challenge_score = myint.toFixed(2); challenge_settingsdata[i].challenge_score = myint.toFixed(1);
expzs=parseFloat(myint.toFixed(1))+parseFloat(expzs);
}else{
challenge_settingsdata[i].challenge_score =0;
}
}
var expzsy=0;
var bool= true;
if(ionsp - expzs>0){
expzsy=parseFloat(ionsp.toFixed(1)) - parseFloat(expzs.toFixed(1));
expzsy=Math.abs(expzsy);
bool=true;
}else{
expzsy= parseFloat(ionsp.toFixed(1)) - parseFloat(expzs.toFixed(1));
expzsy= Math.abs(expzsy);
bool=false;
}
var macts=0;
for (var i=0;i<challenge_settingsdata.length;i++){
if(challenge_settingsdata[i].checked===true) {
macts= macts+1;
if(mact===macts){
if(bool===true){
challenge_settingsdata[i].challenge_score = (parseFloat(challenge_settingsdata[i].challenge_score)+parseFloat(expzsy.toFixed(1))).toFixed(1);
console.log(parseFloat(challenge_settingsdata[i].challenge_score)+parseFloat(expzsy.toFixed(1)));
console.log(parseFloat(expzsy.toFixed(1)));
}else {
challenge_settingsdata[i].challenge_score = (parseFloat(challenge_settingsdata[i].challenge_score)-parseFloat(expzsy.toFixed(1))).toFixed(1);
console.log(parseFloat(challenge_settingsdata[i].challenge_score)-parseFloat(expzsy.toFixed(1)));
console.log(parseFloat(expzsy.toFixed(1)));
}
}
}else{ }else{
challenge_settingsdata[i].challenge_score =0; challenge_settingsdata[i].challenge_score =0;
} }
} }
} }
} }
} }
@ -873,10 +930,10 @@ class Trainingjobsetting extends Component {
}) })
//均分比例 //均分比例
if(this.state.proportion==="均分比例"){ if(this.state.proportion==="均分比例"){
this.Equalproportion(); this.Equalproportion(20);
}else if(this.state.proportion==="经验值比例"){ }else if(this.state.proportion==="经验值比例"){
this.Empiricalvalueratio(); this.Empiricalvalueratio(20);
} }
@ -889,10 +946,10 @@ class Trainingjobsetting extends Component {
}) })
//均分比例 //均分比例
if(this.state.proportion==="均分比例"){ if(this.state.proportion==="均分比例"){
this.Equalproportion(); this.Equalproportion(0);
}else if(this.state.proportion==="经验值比例"){ }else if(this.state.proportion==="经验值比例"){
this.Empiricalvalueratio(); this.Empiricalvalueratio(0);
} }
} }
@ -959,6 +1016,14 @@ class Trainingjobsetting extends Component {
this.setState({ this.setState({
latedeductiontwo: value, latedeductiontwo: value,
}) })
//均分比例
if(this.state.proportion==="均分比例"){
this.Equalproportion(value);
}else if(this.state.proportion==="经验值比例"){
this.Empiricalvalueratio(value);
}
} }
@ -993,7 +1058,7 @@ class Trainingjobsetting extends Component {
var challenge_settings = this.state.challenge_settings; var challenge_settings = this.state.challenge_settings;
for (var i = 0; i < challenge_settings.length; i++) { for (var i = 0; i < challenge_settings.length; i++) {
if (i === index) { if (i === index) {
challenge_settings[i].challenge_score = parseInt(value); challenge_settings[i].challenge_score = value;
} }
} }
@ -1183,7 +1248,7 @@ class Trainingjobsetting extends Component {
this.setState({ this.setState({
publish_time:moment(handleDateString(dateString)) publish_time:moment(handleDateString(dateString))
}) })
if(this.state.allowreplenishment === "允许补交") { if(this.state.allowreplenishment === true) {
this.setState({ this.setState({
end_time:moment(handleDateString(dateString)).add(1, 'months'), end_time:moment(handleDateString(dateString)).add(1, 'months'),
deadline:moment(handleDateString(dateString)).add(1, 'months').format('YYYY-MM-DD HH:mm'), deadline:moment(handleDateString(dateString)).add(1, 'months').format('YYYY-MM-DD HH:mm'),
@ -1247,7 +1312,7 @@ class Trainingjobsetting extends Component {
end_time:moment(handleDateString(dateString)) end_time:moment(handleDateString(dateString))
}) })
// this.onChangedata('end_time', value, dateString); // this.onChangedata('end_time', value, dateString);
if(this.state.allowreplenishment === "允许补交"){ if(this.state.allowreplenishment === true){
this.setState({ this.setState({
deadline:moment(handleDateString(dateString)).format('YYYY-MM-DD HH:mm'), deadline:moment(handleDateString(dateString)).format('YYYY-MM-DD HH:mm'),
late_time:moment(handleDateString(dateString)).add(2, 'months'), late_time:moment(handleDateString(dateString)).add(2, 'months'),
@ -1524,7 +1589,7 @@ class Trainingjobsetting extends Component {
if(moment(this.state.late_time,"YYYY-MM-DD HH:mm")<=moment()){ if(moment(this.state.late_time,"YYYY-MM-DD HH:mm")<=moment()){
endtime=false; endtime=false;
} }
if(this.state.allowreplenishment === "禁止补交"){ if(this.state.allowreplenishment === false){
whethertopays=false; whethertopays=false;
} }
this.setState({ this.setState({
@ -1619,18 +1684,19 @@ class Trainingjobsetting extends Component {
if(response.data.messages === "100"){ if(response.data.messages === "100"){
// 已超出文件导出的上限数量100 ),建议: // 已超出文件导出的上限数量100 ),建议:
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:100 DownloadMessageval:100
}) })
}else { }else {
//因附件资料超过500M //因附件资料超过500M
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:500 DownloadMessageval:500
}) })
} }
}else { }else {
window.open(url, '_blank'); this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -1643,18 +1709,40 @@ class Trainingjobsetting extends Component {
DownloadMessageval:undefined DownloadMessageval:undefined
}) })
} }
testscripttip =(e)=>{
if(e === 0){
this.setState({
testscripttiptype:true,
})
}else {
this.setState({
testscripttiptype:false,
})
}
}
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() { render() {
const dataformat = 'YYYY-MM-DD HH:mm'; const dataformat = 'YYYY-MM-DD HH:mm';
let {flagPageEdit,flagPageEdits,flagPageEditstwo,flagPageEditsbox,whethertopay,handclass,flagPageEditsthrees, flagPageEditsfor,rules,rulest,unifiedsetting,group_settings, course_group,unit_e_tip, borreds,borredss,unit_p_tip, end_time, late_time, score_open, publish_time, starttimetype, modalsType, modalsTopval, loadtype, modalSave, endtimetype, latetimetype, allowlate, latepenaltytype, jobsettingsdata, endOpen, mystyle, mystyles} = this.state; let {flagPageEdit,testscripttiptype,flagPageEdits,flagPageEditstwo,flagPageEditsbox,whethertopay,handclass,flagPageEditsthrees, flagPageEditsfor,rules,rulest,unifiedsetting,group_settings, course_group,unit_e_tip, borreds,borredss,unit_p_tip, end_time, late_time, score_open, publish_time, starttimetype, modalsType, modalsTopval, loadtype, modalSave, endtimetype, latetimetype, allowlate, latepenaltytype, jobsettingsdata, endOpen, mystyle, mystyles} = this.state;
const radioStyle = { const radioStyle = {
display: 'block', display: 'block',
height: '30px', height: '30px',
lineHeight: '30px', lineHeight: '30px',
color:"#666666" color:"#666666"
}; };
const radioStyles = {
display: 'block',
height: '30px',
lineHeight: '30px',
color:"#666666",
marginLeft:'38px',
};
// const startDate=moment(this.state.publish_time).format('YYYY-MM-DD HH:mm'); // const startDate=moment(this.state.publish_time).format('YYYY-MM-DD HH:mm');
// const endDate =moment(this.state.publish_time).add('months',1).format('YYYY-MM-DD HH:mm'); // const endDate =moment(this.state.publish_time).add('months',1).format('YYYY-MM-DD HH:mm');
@ -1668,7 +1756,7 @@ class Trainingjobsetting extends Component {
// console.log(this.props.isAdmin()) // console.log(this.props.isAdmin())
// console.log(this.state.code_review===false) // console.log(this.state.code_review===false)
return ( return (
<div className="newMain clearfix " ref='targetElementTrainingjobsetting'> <div className=" clearfix " ref='targetElementTrainingjobsetting' style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{this.state.showmodel===true?<ShixunWorkModal {this.state.showmodel===true?<ShixunWorkModal
{...this.props} {...this.props}
visible={this.state.showmodel} visible={this.state.showmodel}
@ -1711,43 +1799,12 @@ class Trainingjobsetting extends Component {
modalSave={modalSave} modalSave={modalSave}
></Modals> ></Modals>
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div className="educontent mb30">
<p className="clearfix mb20 mt10">
<ActionBtn className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/students`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<ActionBtn
className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn className="fl">作业详情</WordsBtn>
</p>
</div>
<div className="educontent mb30">
<p className=" fl color-black summaryname mt5" style={{heigth:"33px"}}>
{jobsettingsdata === undefined ? "" : jobsettingsdata.data.homework_name}
</p>
<CoursesListType
typelist={jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status}
/>
<a className="color-grey-9 fr font-16 summaryname ml20 mr20" href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" :jobsettingsdata.data.category.category_id}`}>返回</a>
<a className="color-grey-9 fr font-16 mr20" href={`/shixuns/${jobsettingsdata===undefined?"":jobsettingsdata.data.shixun_identifier}/challenges`} target={"_blank"}>实训详情</a>
</div>
<div className="edu-back-white"> <div className="edu-back-white">
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list"> <div className=" clearfix edu-back-white poll_list">
{this.props.isAdmin() === true ? <Link <a onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/list`}>作品列表</Link> : <Link <a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/openlist`}>作品列表</Link> {this.props.isAdmin()?this.state.code_review===true||jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0]==="未发布"?"": <a onClick={(e)=>this.ChangeTab(2)}>代码查重</a> : ""}
}
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link>
{this.props.isAdmin()?this.state.code_review===true||jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0]==="未发布"?"": <Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/student_work`}>代码查重</Link> : ""}
<style>{ <style>{
` `
.poll_list a.active:after { .poll_list a.active:after {
@ -1761,12 +1818,9 @@ class Trainingjobsetting extends Component {
} }
` `
}</style> }</style>
<Link className="active" <a className="active"
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`} onClick={(e)=>this.ChangeTab(3)}
>设置</Link> >设置</a>
{/*<Link className="ml30" to={`/courses/${this.state.props.match.params.coursesId}/shixun_homeworks/${this.state.props.match.params.homeworkid}/shixun_work_report`}>*/}
{/*<a className="color-blue">查看实训报告</a>*/}
{/*</Link>*/}
<style>{` <style>{`
.drop_down_menu li a { .drop_down_menu li a {
padding: 0px; padding: 0px;
@ -1797,13 +1851,13 @@ class Trainingjobsetting extends Component {
</ul> </ul>
</li>: ""} </li>: ""}
{this.props.isAdmin() ?jobsettingsdata&&jobsettingsdata.data.end_immediately===true? {this.props.isAdmin() ?jobsettingsdata&&jobsettingsdata.data.end_immediately===true?
<a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a> : "": ""} <a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a>
: "": ""}
{this.props.isAdmin() ?jobsettingsdata&&jobsettingsdata.data.publish_immediately===true? {this.props.isAdmin() ?jobsettingsdata&&jobsettingsdata.data.publish_immediately===true?
<a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a>: "" : ""} <a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a>: "" : ""}
{this.props.isAdmin()? {this.props.isAdmin()?
this.state.code_review===true?<a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a> jobsettingsdata&&jobsettingsdata.data.code_review===true?
: "":""} <a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a>: "":""}
</div> </div>
</div> </div>
{/*发布设置*/} {/*发布设置*/}
@ -1813,8 +1867,8 @@ class Trainingjobsetting extends Component {
<span className="font-16 fl "style={{"color":"#05101A"}}>发布设置 <span className="ml15 color-grey-9" style={{"font-size":"14px","text-align":"left"}}></span></span> <span className="font-16 fl "style={{"color":"#05101A"}}>发布设置 <span className="ml15 color-grey-9" style={{"font-size":"14px","text-align":"left"}}></span></span>
{ {
!flagPageEdit && this.props.isAdmin() === true ? !flagPageEdit && this.props.isAdmin() === true ?
<a className="fr" onClick={this.editSetting}><Tooltip title="编辑"><i <a className="fr" onClick={this.editSetting}><i
className="iconfont icon-bianjidaibeijing font-20 color-green pr20 "></i></Tooltip></a> className="iconfont font-16 pr20 " style={{color:"#333333"}}>编辑</i></a>
: "" : ""
} }
</p> </p>
@ -1824,7 +1878,7 @@ class Trainingjobsetting extends Component {
<Checkbox className="ml15 font-16" style={{"color":"#666666"}} onChange={this.onChange} <Checkbox className="ml15 font-16" style={{"color":"#666666"}} onChange={this.onChange}
checked={this.state.unifiedsetting} checked={this.state.unifiedsetting}
defaultChecked={this.state.boolUnite} disabled={!flagPageEdit}>统一设置<span defaultChecked={this.state.boolUnite} disabled={!flagPageEdit}>统一设置<span
className={"font-14 ml15"} style={{"color":"#999999","text-align":"left"}}>(选中则所有分班使用相同的发布设置否则各个分班单独设置)</span></Checkbox> className={"font-14 ml15 color-grey-c"} style={{"text-align":"left"}}>(选中则所有分班使用相同的发布设置否则各个分班单独设置)</span></Checkbox>
</div> </div>
:<div></div> :<div></div>
} }
@ -1864,7 +1918,7 @@ class Trainingjobsetting extends Component {
/> />
</div> </div>
</Tooltip> </Tooltip>
<span className="ml20 fl mt10" style={{"color":"#999999","text-align":"left","font-size":"14px"}}>(学生收到作业的时间)</span> <span className="ml20 fl mt10 color-grey-c" style={{"text-align":"left","font-size":"14px"}}>(学生收到作业的时间)</span>
</div> </div>
<p className="color-red lineh-25 clearfix" style={{height:"25px"}}> <p className="color-red lineh-25 clearfix" style={{height:"25px"}}>
{ {
@ -1898,7 +1952,7 @@ class Trainingjobsetting extends Component {
</div> </div>
</Tooltip> </Tooltip>
<span className=" ml20 fl mt10 color-grey-9" style={{"text-align":"left","font-size":"14px"}}>(学生按时提交作品的时间截点)</span> <span className=" ml20 fl mt10 color-grey-c" style={{"text-align":"left","font-size":"14px"}}>(学生按时提交作品的时间截点)</span>
</div> </div>
<p className="color-red lineh-25 clearfix" style={{height:"25px"}}> <p className="color-red lineh-25 clearfix" style={{height:"25px"}}>
{ {
@ -1928,13 +1982,13 @@ class Trainingjobsetting extends Component {
<div className=" clearfix edu-back-white poll_list mt10"> <div className=" clearfix edu-back-white poll_list mt10">
<div className={"font-16 color-dark fl pl20 mt10 "} style={{"color":"#05101A"}}>补交设置</div> <div className={"font-16 color-dark fl pl20 mt10 "} style={{"color":"#05101A"}}>补交设置</div>
</div> </div>
{/*value={this.state.allowreplenishment}*/}
<div className="ml40 mt10"
>
<Checkbox style={radioStyle} value={"允许补交"} checked={this.state.allowreplenishment} onChange={this.onChanges} disabled={!flagPageEdit}>开启补交 <span
className={"font-14 ml10 color-grey-c"} style={{"text-align":"left","font-size":"14px"}} >(选中则允许学生延时提交作品)</span></Checkbox>
<RadioGroup className="ml40 mt10" onChange={this.onChanges} <div className={"h21 mb30 mt20"}>
value={this.state.allowreplenishment}>
<Radio style={radioStyle} value={"允许补交"} disabled={!flagPageEdit}>允许补交 <span
className={"font-14 ml10 color-grey-9"} style={{"text-align":"left","font-size":"14px"}} >(选中则允许学生延时提交作品)</span></Radio>
<div className={"h21 mb30 ml30 mt20"}>
<span style={{"width": "100px","color":"#999999"}}>迟交扣分</span> <span style={{"width": "100px","color":"#999999"}}>迟交扣分</span>
<style> <style>
{ {
@ -1952,11 +2006,11 @@ class Trainingjobsetting extends Component {
style={{"color":"#999999","height": "40px"}} style={{"color":"#999999","height": "40px"}}
value={this.state.latededuction}/> value={this.state.latededuction}/>
<span className="ml10 color-grey-9" ></span> <span className="ml10 color-grey-9" ></span>
<span className="ml15 color-grey-9" style={{"text-align":"left","font-size":"14px"}}>(延时提交作品时学生成绩将被扣减的分值)</span> <span className="ml15 color-grey-c" style={{"text-align":"left","font-size":"14px"}}>(延时提交作品时学生成绩将被扣减的分值)</span>
{/*{latepenaltytype===true?<div className={"color-red ml40"}></div>:""}*/} {/*{latepenaltytype===true?<div className={"color-red ml40"}></div>:""}*/}
</div> </div>
<div className={"h20 mb50 ml30"}> <div className={"h20 mb20 "}>
<span style={{"width": "100px","color":"#999999"}}>结束时间</span> <span style={{"width": "100px","color":"#999999"}}>结束时间</span>
<DatePicker <DatePicker
showToday={false} showToday={false}
@ -1975,7 +2029,7 @@ class Trainingjobsetting extends Component {
dropdownClassName="hideDisable" dropdownClassName="hideDisable"
className={handclass} className={handclass}
/> />
<span className="ml15 color-grey-9" style={{"text-align":"left","font-size":"14px"}}>(学生延时提交作品的时间截点)</span> <span className="ml15 color-grey-c" style={{"text-align":"left","font-size":"14px"}}>(学生延时提交作品的时间截点)</span>
{/*{latetimetype===true?<div className={"color-red "}>结束时间不能小于截止时间</div>:""}*/} {/*{latetimetype===true?<div className={"color-red "}>结束时间不能小于截止时间</div>:""}*/}
<style> <style>
{ {
@ -1992,8 +2046,8 @@ class Trainingjobsetting extends Component {
} }
</p> </p>
</div> </div>
<Radio style={radioStyle} value={"禁止补交"} disabled={!flagPageEdit}>禁止补交</Radio> {/*<Radio style={radioStyle} value={"禁止补交"} disabled={!flagPageEdit}>禁止补交</Radio>*/}
</RadioGroup> </div>
<div className="h20 mb10 "></div> <div className="h20 mb10 "></div>
</div> </div>
{/*评分设置*/} {/*评分设置*/}
@ -2001,26 +2055,23 @@ class Trainingjobsetting extends Component {
<div className=" clearfix edu-back-white poll_list mt20"> <div className=" clearfix edu-back-white poll_list mt20">
<div className={"font-16 color-dark fl pl20 "} style={{"color":"#05101A"}}>评分设置</div> <div className={"font-16 color-dark fl pl20 "} style={{"color":"#05101A"}}>评分设置</div>
</div> </div>
<p className="ml40 mt20 c_grey font-13 " style={{"color":"#666666"}}> 查看参考答案才通过评测的关卡扣分规则<span <div className="yslflexhomes">
className=" font-14 color-grey-9 ml15" style={{"text-align":"left"}}>(学生通过评测后再查看参考答案不对成绩产生影响)</span></p> <div style={{width:"700px"}}>
<div className="ml20 mt10 mt20">
<RadioGroup className="ml60 mt20" onChange={this.onChangeslevel} value={this.state.level}> <span className="c_grey font-13" style={{"color":"#333333"}}> 关卡任务的选择和分值设置 </span><span className="ml15 font-14 color-grey-c" style={{"text-align":"left"}}>( = + )</span>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey" value={"扣分"}>按查看答案级别扣分<span
className="color-grey-9 font-14 ml15" style={{"text-align":"left"}}>根据学员选择查看的实训答案级别(解题思路完整答案)扣减相应的分值</span></Radio>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt15"
value={"满分"}>不扣分 </Radio>
</RadioGroup>
<div className="ml40 mt10 mt20">
<span className="c_grey font-13" style={{"color":"#333333"}}> 关卡任务的选择和分值设置 </span><span className="ml15 font-14 color-grey-9" style={{"text-align":"left"}}>( = + )</span>
</div> </div>
<div className=" clearfix edu-back-white poll_list mt10" style={{marginLeft:" 40px"}}>
<div className=" clearfix edu-back-white poll_list mt10"> <Checkbox disabled={!flagPageEdit} className=" font-13 mt10"
<Checkbox disabled={!flagPageEdit} className="ml60 font-13 mt20"
onChange={this.onChangeeffectiveness} onChange={this.onChangeeffectiveness}
checked={this.state.completionefficiencyscore} style={{"color":"#666666"}}>效率分<span checked={this.state.completionefficiencyscore} style={{"color":"#666666"}}>效率分<span
className={"font-14 color-grey-9 font-14 ml15"} style={{"text-align":"left"}}>(选中则学生最终成绩包含效率分)</span></Checkbox> className={"font-14 color-grey-c font-14 ml15"} style={{"text-align":"left"}}>(选中则学生最终成绩包含效率分)</span>
</Checkbox>
<div>
</div> </div>
<div className="ml85 mt30">
</div>
<div className=" mt20" style={{marginLeft:"75px"}}>
<span className="c_grey mr10" style={{"color":"#999999"}}>分值</span> <span className="c_grey mr10" style={{"color":"#999999"}}>分值</span>
<InputNumber min={0} disabled={!flagPageEdit} max={100} className="ml10 h40 mr10 color-grey-9" <InputNumber min={0} disabled={!flagPageEdit} max={100} className="ml10 h40 mr10 color-grey-9"
style={{width: "100px","color":"#999999"}} style={{width: "100px","color":"#999999"}}
@ -2029,29 +2080,75 @@ class Trainingjobsetting extends Component {
<span className="ml10" style={{"color":"#999999"}}></span> <span className="ml10" style={{"color":"#999999"}}></span>
<span className={"font-14 color-grey-9 "} style={{"color":"#999999"}}></span> <span className={"font-14 color-grey-9 "} style={{"color":"#999999"}}></span>
</div> </div>
<RadioGroup className="ml60 mt10" onChange={this.onChangeslevelproportion} </div>
value={this.state.proportion}> <div>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt20" <div className="yslflexhomes invite-tipysl" style={{marginTop: "45px"}} >
value={"均分比例"} style={{"color":"#666666"}}>均分比例<span <span className="to-back-left"></span>
className="color-grey-9 font-10 ml15" style={{"color":"#999999"}}>(根据任务数平均分配) 例如实训任务5关每一关分值为 1 / 5 * 100 = 20</span></Radio> <div className="padding20 invitecontent clearfix" style={{backgroundColor:" #FAFAFA"}}>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt20" <p className="font-12 edu-txt-left">
value={"经验值比例"} style={{"color":"#666666"}}>经验值比例 <span 学生工作效率= log(实训总得分/实训总耗时)<br/>
className="color-grey-9 font-10 ml15" style={{"color":"#999999"}}>(根据任务经验值在实训总经验值的比例进行分配) 例如实训总经验值1500某一关经验值为600则这一关的分值为600 / 1500 * 100 = 40 学生效率分 = 学生工作效率 / 课堂学生最高工作效率 * 分值<br/>
</span></Radio> </p>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt20" </div>
value={"自定义分值"} style={{"color":"#666666"}}>自定义分值 <span </div>
className="color-grey-9 font-10 ml15" style={{"color":"#999999"}}>(手动设置关卡分值)</span></Radio> </div>
</RadioGroup> </div>
<p className="ml95 mt15 c_grey font-13 " style={{"color":"#666666"}}> 关卡名称<span <div className="yslflexhome">
className="color-grey-9 font-10 ml30s" style={{"color":"#999999"}}>(选中的关卡将计入评分计算范围暂时不支持跳关选择)</span><span <div >
className="color-grey-9 ml90" style={{"color":"#666666"}}>分值</span></p> <div className="ml20 mt40 mt20" >
<div className="ml95 mt15"> <span className="c_grey font-13" style={{"color":"#333333"}}> 关卡任务分值设置规则 </span> <span> <RadioGroup className="ml50" onChange={this.onChangeslevelproportion} value={this.state.proportion}>
<Radio style={{ display: 'block',
height: '30px',
lineHeight: '30px',
color:"#666666",
}} disabled={!flagPageEdit} className="c_grey mt20 "
value={"均分比例"} style={{"color":"#666666"}}>均分比例</Radio>
<Radio style={{ display: 'block',
height: '30px',
lineHeight: '30px',
color:"#666666",
}} disabled={!flagPageEdit} className="c_grey ml30"
value={"经验值比例"} style={{"color":"#666666"}}>难易度</Radio>
<Radio style={{ display: 'block',
height: '30px',
lineHeight: '30px',
color:"#666666",
}} disabled={!flagPageEdit} className="c_grey mt20 ml30"
value={"自定义分值"} style={{"color":"#666666"}}>自定义分值
<a onClick={()=>this.testscripttip(0)}><img style={{marginBottom:"3px",marginLeft:"10px"}} src={getImageUrl("images/educoder/problem.png") }/></a>
{testscripttiptype===true?
<div className="invite-tip clearfix " id="test_script_tip" style={{left: '140px',width: '322px',zIndex: '10'}}>
<span className="right-black-trangles"></span>
<div className="padding20 invitecontent clearfix">
<p className="font-12 edu-txt-left">
若完成效率分值 = 10, <br/>
均分比例: 根据任务数平均分配<br/>
: 实训任务3关, 每关分值: 1/3*(100-10)=30<br/>
<br/>
难易度: 根据关卡经验值的高低确定关卡分值<br/>
: 实训总经验值1200, 某关经验值200,<br/>
则其分值:200/1200*(100-10)=15<br/>
<br/>
自定义分值: 手动设置关卡分值<br/>
</p>
</div>
<p className="inviteTipbtn with100 fl">
<a onClick={()=>this.testscripttip(1)}>知道了</a>
</p>
</div>
:""}
</Radio>
</RadioGroup></span>
</div>
<p className="ml20 mt15 c_grey font-13 " style={{"color":"#666666"}}> 关卡名称<span
className="color-grey-c font-10 ml10">(需要学生完成的任务请选中)</span></p>
<div className="ml40 mt15" >
{this.state.challenge_settings === undefined ? "" : this.state.challenge_settings.map((object, index) => { {this.state.challenge_settings === undefined ? "" : this.state.challenge_settings.map((object, index) => {
return ( return (
<li> <li>
<Checkbox className="ml110 mt20 " <Checkbox className="ml110 mt20 "
disabled={!flagPageEditsbox} disabled={!flagPageEditsbox}
style={{"width": "400px","color":"#05101A"}} style={{"width": "480px","color":"#05101A"}}
checked={object.checked} checked={object.checked}
onChange={(value) => this.onChangedatasheet(value, index)} onChange={(value) => this.onChangedatasheet(value, index)}
>{object.challenge_name}</Checkbox> >{object.challenge_name}</Checkbox>
@ -2060,12 +2157,25 @@ class Trainingjobsetting extends Component {
onChange={(value) => this.hangeTopicNametwodatasheet(value, index)} onChange={(value) => this.hangeTopicNametwodatasheet(value, index)}
value={object.challenge_score} value={object.challenge_score}
/> />
<span className="ml10" style={{"color":"#999999"}}></span>
</li> </li>
) )
})} })}
</div> </div>
</div> </div>
</div>
<p className="ml20 mt40 c_grey font-13 " style={{"color":"#333333"}}> 查看参考答案才通过评测的关卡扣分规则<span
className=" font-14 color-grey-c ml15" style={{textAlign:"left",marginLeft:"40px"}}>(学生通过评测后再查看参考答案不对成绩产生影响)</span></p>
<RadioGroup className="ml40 mt20" onChange={this.onChangeslevel} value={this.state.level}>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey" value={"扣分"}>按查看答案级别扣分<span
className="color-grey-c font-14 ml15" style={{"text-align":"left"}}>根据学员选择查看的实训答案级别(解题思路完整答案)扣减相应的分值</span></Radio>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt15"
value={"满分"}>不扣分 </Radio>
</RadioGroup>
</div>
{/*公开设置*/} {/*公开设置*/}
<div className="stud-class-set bor-top-greyE edu-back-white mt35 pb5 "> <div className="stud-class-set bor-top-greyE edu-back-white mt35 pb5 ">
<div className=" clearfix edu-back-white poll_list mt20"> <div className=" clearfix edu-back-white poll_list mt20">
@ -2074,7 +2184,7 @@ class Trainingjobsetting extends Component {
<div className={"mb20 mt15"}> <div className={"mb20 mt15"}>
<Checkbox disabled={!flagPageEdit} className="ml40" onChange={this.onChangepublicwork} <Checkbox disabled={!flagPageEdit} className="ml40" onChange={this.onChangepublicwork}
checked={this.state.publicwork} style={{"color":"#666666"}}>公开成绩</Checkbox> checked={this.state.publicwork} style={{"color":"#666666"}}>公开成绩</Checkbox>
<span className={"font-14 color-grey-9 font-14 "} style={{"text-align":"left"}}>(选中则在作业截止/补交结束时间之后已提交作品的学生可以查看其它学生的成绩否则只能查看自己的成绩)</span> <span className="font-14 color-grey-c font-14 " style={{"text-align":"left"}}>(选中则在作业截止/补交结束时间之后已提交作品的学生可以查看其它学生的成绩否则只能查看自己的成绩)</span>
</div> </div>
</div> </div>

@ -23,7 +23,6 @@ import {
import {Link, Switch, Route, Redirect} from 'react-router-dom'; import {Link, Switch, Route, Redirect} from 'react-router-dom';
import moment from 'moment'; import moment from 'moment';
import 'moment/locale/zh-cn'; import 'moment/locale/zh-cn';
import {Base64} from 'js-base64';
import axios from 'axios'; import axios from 'axios';
import '../css/members.css' import '../css/members.css'
import "../common/formCommon.css" import "../common/formCommon.css"
@ -82,6 +81,8 @@ class Workquestionandanswer extends Component {
} }
componentDidMount() { componentDidMount() {
console.log("Workquestionandanswer");
console.log("componentDidMount");
var homeworkid = this.props.match.params.homeworkid; var homeworkid = this.props.match.params.homeworkid;
// console.log(homeworkid) // console.log(homeworkid)
this.Gettitleinformation(homeworkid) this.Gettitleinformation(homeworkid)
@ -109,6 +110,7 @@ class Workquestionandanswer extends Component {
jobsettingsdata: result, jobsettingsdata: result,
...result.data ...result.data
}) })
this.props.Getdataback(result,result.data);
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -322,18 +324,19 @@ class Workquestionandanswer extends Component {
if(response.data.messages === "100"){ if(response.data.messages === "100"){
// 已超出文件导出的上限数量100 ),建议: // 已超出文件导出的上限数量100 ),建议:
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:100 DownloadMessageval:100
}) })
}else { }else {
//因附件资料超过500M //因附件资料超过500M
this.setState({ this.setState({
DownloadType:false, DownloadType:true,
DownloadMessageval:500 DownloadMessageval:500
}) })
} }
}else { }else {
window.open(url, '_blank'); this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -345,6 +348,9 @@ class Workquestionandanswer extends Component {
DownloadMessageval:undefined DownloadMessageval:undefined
}) })
} }
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() { render() {
const dateFormat = 'YYYY-MM-DD HH:mm:ss'; const dateFormat = 'YYYY-MM-DD HH:mm:ss';
let { let {
@ -364,7 +370,7 @@ class Workquestionandanswer extends Component {
return ( return (
<div className="newMain clearfix "> <div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{this.state.showmodel === true ? <ShixunWorkModal {this.state.showmodel === true ? <ShixunWorkModal
{...this.props} {...this.props}
visible={this.state.showmodel} visible={this.state.showmodel}
@ -400,58 +406,22 @@ class Workquestionandanswer extends Component {
typs={this.state.typs} typs={this.state.typs}
/> />
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div className="educontent mb30">
<p className="clearfix mb20 mt10">
<ActionBtn className=" btn colorgrey fl hovercolorblue "
to={"/courses/" + this.props.match.params.coursesId + "/students"}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.course_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<ActionBtn
className=" btn colorgrey fl hovercolorblue "
to={`/courses/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id}`}>{jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_name}</ActionBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn className="fl">作业详情</WordsBtn>
</p>
</div>
<div className="educontent mb30">
<p className=" fl color-black summaryname" style={{heigth:"33px"}}>
{jobsettingsdata === undefined ? "" : jobsettingsdata.data.homework_name}
</p>
<CoursesListType
typelist={jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status}
/>
<a className="color-grey-9 fr font-16 summaryname ml20 mr20"
href={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.category.category_id}`}>返回</a>
<a className="color-grey-9 fr font-16 mr20"
href={`/shixuns/${jobsettingsdata === undefined ? "" : jobsettingsdata.data.shixun_identifier}/challenges`}
target={"_blank"}>实训详情</a>
</div>
<div className="edu-back-white"> <div className="edu-back-white">
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list"> <div className=" clearfix edu-back-white poll_list">
{this.props.isAdmin() === true ? <Link <a onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/list`}>作品列表</Link> :
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/openlist`}>作品列表</Link>
// :<Link
// to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/noopenlist`}>作品列表(学生完成)</Link>
}
<Link <a className="active" onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
className="active"
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link>
{this.props.isAdmin() ? {this.props.isAdmin() ?
this.state.code_review === true || jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0] === "未发布" ? "" : this.state.code_review === true || jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0] === "未发布" ? "" :
<Link <a
// to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/student_work`} // to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/student_work`}
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/student_work`}> onClick={(e)=>this.ChangeTab(2)}>
代码查重</Link> : ""} 代码查重</a> : ""}
<Link <a
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`} onClick={(e)=>this.ChangeTab(3)}
>设置</Link> >设置</a>
{/*<a className="fr color-blue font-16" href={`/api/homework_commons/${this.props.match.params.coursesId}/works_list.xls`}>导出成绩</a>*/}
<style>{` <style>{`
.drop_down_menu li a { .drop_down_menu li a {
padding: 0px; padding: 0px;
@ -483,13 +453,17 @@ class Workquestionandanswer extends Component {
</ul> </ul>
</li> : ""} </li> : ""}
{this.props.isAdmin() ? jobsettingsdata && jobsettingsdata.data.end_immediately === true ? {this.props.isAdmin() ? jobsettingsdata && jobsettingsdata.data.end_immediately === true ?
<a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a> : "" : ""} <a className="fr color-blue font-16" onClick={this.homeworkends}>立即截止</a>
:""
: ""}
{this.props.isAdmin() ? jobsettingsdata && jobsettingsdata.data.publish_immediately === true ? {this.props.isAdmin() ? jobsettingsdata && jobsettingsdata.data.publish_immediately === true ?
<a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a> : "" : ""} <a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a>
: ""
: ""}
{this.props.isAdmin() ? {this.props.isAdmin() ?
this.state.code_review === true ? jobsettingsdata && jobsettingsdata.data.code_review === true ?
<a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a> <a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a>
: "" : ""} : "" : ""}
@ -509,7 +483,7 @@ class Workquestionandanswer extends Component {
} }
</style> </style>
<div className={"font-16 color-dark fl pl20 "}> <div className={"font-16 color-dark fl pl20 "}>
<div <div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.description).replace(/▁/g, "▁▁▁")}}></div> dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.description).replace(/▁/g, "▁▁▁")}}></div>
{/* /!*{}}></div> {/* /!*{}}></div>
{/* /!*{jobsettingsdata.data.description}*!/*/} {/* /!*{jobsettingsdata.data.description}*!/*/}
@ -556,10 +530,10 @@ class Workquestionandanswer extends Component {
description={jobsettingsdata === undefined ? "" : jobsettingsdata === null ? "" : jobsettingsdata === "null" ? "" : jobsettingsdata.data.explanation === undefined ? "" : jobsettingsdata.data.explanation === null ? "" : jobsettingsdata.data.explanation}></Homeworddescription> description={jobsettingsdata === undefined ? "" : jobsettingsdata === null ? "" : jobsettingsdata === "null" ? "" : jobsettingsdata.data.explanation === undefined ? "" : jobsettingsdata.data.explanation === null ? "" : jobsettingsdata.data.explanation}></Homeworddescription>
</div> </div>
: :
<div className="pl20 " style={{"padding": "10px 10px 10px 20px"}}> <div className="pl20 markdown-body" style={{"padding": "10px 10px 10px 20px"}}>
{jobsettingsdata === undefined ? "无" : jobsettingsdata === null ? "无" : jobsettingsdata === "null" ? "无" : {jobsettingsdata === undefined ? "无" : jobsettingsdata === null ? "无" : jobsettingsdata === "null" ? "无" :
jobsettingsdata.data.explanation === undefined ? "无" : jobsettingsdata.data.explanation === null ? "无" : jobsettingsdata.data.explanation === undefined ? "无" : jobsettingsdata.data.explanation === null ? "无" :
<div <div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.explanation).replace(/▁/g, "▁▁▁")}}></div> dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.explanation).replace(/▁/g, "▁▁▁")}}></div>
} }

@ -57,9 +57,10 @@ class OfficialAcademicTranscript extends Component {
title: '任务名称', title: '任务名称',
dataIndex: 'taskname', dataIndex: 'taskname',
key: 'taskname', key: 'taskname',
className:"TaskForms",
render: (text, record) => ( render: (text, record) => (
<span> <span>
<span className={"task-hide"} style={{color:"#676767"}}><a className="tasknameName font-14" onClick={()=>this.myjumptopic("id"+record.customs)} >{record.taskname.name}</a></span> <span className={"task-hide"} style={{color:"#676767"}}><a className="tasknameName font-14" onClick={()=>this.myjumptopic("id"+record.customs)} title={record.taskname.name} >{record.taskname.name}</a></span>
{record.taskname.complete_status===2?<span className={"tasknamebox ml10"}>延时</span>:record.taskname.complete_status===3?<span className={"tasknameboxs ml10"}></span>:""} {record.taskname.complete_status===2?<span className={"tasknamebox ml10"}>延时</span>:record.taskname.complete_status===3?<span className={"tasknameboxs ml10"}></span>:""}
</span> </span>
), ),
@ -162,7 +163,20 @@ class OfficialAcademicTranscript extends Component {
} }
.tasknameName:link{color:#676767} .tasknameName:link{color:#676767}
.tasknameName:hover{color:#4CACFF} .tasknameName:hover{color:#4CACFF}
.tasknameName{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 500px;
text-align: left !important;
}
.TaskForms{
width: 500px;
}
.TaskForms.ant-table-header-column{
width: 100%;
text-align: center;
}
`} `}
</style> </style>
{datas===undefined?"":<Table {datas===undefined?"":<Table

@ -67,7 +67,7 @@ class StudentHomework extends Component{
</div> </div>
</div> </div>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={this.handleSubmit} className={"edu-back-white newcourses exercise"}> <Form onSubmit={this.handleSubmit} className={"edu-back-white newcourses exercise"}>
{/*内容*/} {/*内容*/}
<div className="stud-class-set bor-bottom-greyE pd20 exerciselist"> <div className="stud-class-set bor-bottom-greyE pd20 exerciselist">

@ -116,9 +116,9 @@ class EducoderLogin extends Component {
}) })
} else if(e===2) { } else if(e===2) {
this.setState({ this.setState({
showbool: 2,
namezh:name, namezh:name,
passmm:pass, passmm:pass,
showbool: 2,
}) })
}else if(e===3){ }else if(e===3){
this.setState({ this.setState({

@ -5,7 +5,8 @@
height: 420px; height: 420px;
} }
#DialogID{ #DialogID{
z-index: 20000; /* 影响notification */
/* z-index: 20000; */
} }
#DialogID .dialogBox { #DialogID .dialogBox {
width: 402px; width: 402px;

@ -317,7 +317,9 @@ class LoginDialog extends Component {
}); });
} }
handleDialogClose = () => { handleDialogClose = () => {
if(this.props.match.path==="/"){ if(this.props.match===undefined){
window.location.href="/";
}else if(this.props.match.path==="/"){
this.setState({ this.setState({
isRender: false isRender: false
}) })

@ -212,7 +212,7 @@ class Index extends Component {
<MainContentContainer <MainContentContainer
onDrawerButtonClick={this.onDrawerButtonClick} onDrawerButtonClick={this.onDrawerButtonClick}
grade={context.grade} grade={context.grade}
allowed_unlock={context.allowed_unlock}
user={context.user} user={context.user}
power={context.power} power={context.power}
myshixun_manager={context.myshixun_manager} myshixun_manager={context.myshixun_manager}

@ -58,6 +58,14 @@ class MainContent extends Component {
font-family: 微软雅黑,宋体 !important; font-family: 微软雅黑,宋体 !important;
overflow: hidden !important; overflow: hidden !important;
} }
.can-drag {
width: 100%;
height: 100%;
z-index: 100;
position: fixed;
cursor: col-resize;
top: 0px;
}
`}</style> `}</style>
<div className="-layout -stretch -fit labelN" id="game_show_content"> <div className="-layout -stretch -fit labelN" id="game_show_content">
<div className="split-panel--first -layout -vertical -flex -relative -flex-basic40" <div className="split-panel--first -layout -vertical -flex -relative -flex-basic40"
@ -67,7 +75,7 @@ class MainContent extends Component {
{/* 左侧任务说明等功能的区域 */} {/* 左侧任务说明等功能的区域 */}
<LeftViewContainer {...newProps}></LeftViewContainer> <LeftViewContainer {...newProps}></LeftViewContainer>
</div> </div>
{showIframeContent && vnc_url && <div id="can-drag" className="can-drag" style={{display: 'none'}}></div>}
<div className="b-label -layout" style={{left: '687px'}}> <div className="b-label -layout" style={{left: '687px'}}>
<div className="resize-helper "> <div className="resize-helper ">
<Button variant="fab" aria-label="Swap" mini onClick={this.onResizeButtonClick}> <Button variant="fab" aria-label="Swap" mini onClick={this.onResizeButtonClick}>

@ -13,6 +13,7 @@ class VNCDisplay extends Component {
// When this function is called we have // When this function is called we have
// successfully connected to a server // successfully connected to a server
function connectedToServer(e) { function connectedToServer(e) {
$('#top_bar').hide()
status("Connected to " + desktopName); status("Connected to " + desktopName);
} }
// This function is called when we are disconnected // This function is called when we are disconnected
@ -120,6 +121,9 @@ class VNCDisplay extends Component {
canvas canvas
*/ */
rfb.scaleViewport = readQueryVariable('scale', false); rfb.scaleViewport = readQueryVariable('scale', false);
rfb.resizeSession = true
window.__rfb == rfb;
} }
render() { render() {
@ -127,7 +131,7 @@ class VNCDisplay extends Component {
return ( return (
<div className=""> <div className="" style={{height: '100%'}}>
<style>{` <style>{`
#top_bar { #top_bar {
background-color: #6e84a3; background-color: #6e84a3;
@ -148,6 +152,7 @@ class VNCDisplay extends Component {
cursor: pointer; cursor: pointer;
} }
#screen { #screen {
height: 100%;
flex: 1; /* fill remaining space */ flex: 1; /* fill remaining space */
overflow: hidden; overflow: hidden;
} }

@ -91,7 +91,7 @@ class UpdateDrawer extends Component {
// const url = `/myshixuns/${myshixun.identifier}/stages/${game.identifier}/system_update` // const url = `/myshixuns/${myshixun.identifier}/stages/${game.identifier}/system_update`
// const url = `/api/v1/games/${game.identifier}/system_update?myshixun_id=${myshixun.id}` // const url = `/api/v1/games/${game.identifier}/system_update?myshixun_id=${myshixun.id}`
const url = `/tasks/${game.identifier}/system_update?myshixun_id=${myshixun.id}` const url = `/tasks/${game.identifier}/system_update.json?myshixun_id=${myshixun.id}`
this.setState({ loading: true }) this.setState({ loading: true })
axios.get(url, { axios.get(url, {
// withCredentials: true, // withCredentials: true,

@ -14,16 +14,11 @@ export function ImageLayerOfCommentHOC(options = {}) {
imageSrc: '' imageSrc: ''
} }
} }
componentDidMount() { onDelegateClick = (event) => {
// commentsDelegateParent #game_left_contents #tab_con_4
setTimeout(() => {
$(options.parentSelector || ".commentsDelegateParent")
.delegate(options.imgSelector || ".J_Comment_Reply .comment_content img, .J_Comment_Reply .childrenCommentsView img","click", (event) => {
const imageSrc = event.target.src || event.target.getAttribute('src') || event.target.getAttribute('href') const imageSrc = event.target.src || event.target.getAttribute('src') || event.target.getAttribute('href')
// 判断imageSrc是否是图片 // 判断imageSrc是否是图片
const fileName = event.target.innerHTML.trim() const fileName = event.target.innerHTML.trim()
if (isImageExtension(imageSrc.trim()) || isImageExtension(fileName)) { if (isImageExtension(imageSrc.trim()) || isImageExtension(fileName) || event.target.tagName == 'IMG') {
// 非回复里的头像图片; 非emoticons // 非回复里的头像图片; 非emoticons
if (imageSrc.indexOf('/images/avatars/User') === -1 && if (imageSrc.indexOf('/images/avatars/User') === -1 &&
imageSrc.indexOf('kindeditor/plugins/emoticons') === -1 ) { imageSrc.indexOf('kindeditor/plugins/emoticons') === -1 ) {
@ -39,11 +34,19 @@ export function ImageLayerOfCommentHOC(options = {}) {
// event.originalEvent.cancelBubble = true // event.originalEvent.cancelBubble = true
return false; return false;
} }
});
}, 3000)
} }
// jQuery._data( $('.newMain')[0], "events" )
componentDidMount() {
// commentsDelegateParent #game_left_contents #tab_con_4
setTimeout(() => {
$(options.parentSelector || ".commentsDelegateParent")
.delegate(options.imgSelector || ".J_Comment_Reply .comment_content img, .J_Comment_Reply .childrenCommentsView img","click", this.onDelegateClick);
}, 1200)
}
componentWillUnmount() {
$(options.parentSelector || ".commentsDelegateParent", 'click', this.onDelegateClick)
}
onImageLayerClose = () => { onImageLayerClose = () => {
this.setState({ this.setState({
showImage: false, showImage: false,

@ -41,9 +41,10 @@
align-items: center; align-items: center;
display: -webkit-flex; display: -webkit-flex;
height: 100%; height: 100%;
text-align: center;
} }
.passImg{ .passImg{
max-width: 100%; max-width: 86%;
max-height: 100%; max-height: 100%;
} }
/* ImageLayer ----------------- End */ /* ImageLayer ----------------- End */

@ -159,7 +159,7 @@ class CodeEvaluateView extends Component {
let headIconClass = ''; let headIconClass = '';
let _headLockIconClass = ''; let _headLockIconClass = '';
if (item.is_public === 0) { if (item.is_public == 0) {
if (game.test_sets_view === true || power === 1){ if (game.test_sets_view === true || power === 1){
_headLockIconClass = 'fas fa-unlock-alt' _headLockIconClass = 'fas fa-unlock-alt'
} else { } else {
@ -175,7 +175,7 @@ class CodeEvaluateView extends Component {
testSetsComponentArray.push( testSetsComponentArray.push(
<div className="-task-ces-top clearfix" onClick={ this.onTestSetHeaderClick.bind(this, index) } <div className="-task-ces-top clearfix" onClick={ this.onTestSetHeaderClick.bind(this, index) }
style={{cursor:'pointer'}} key={index+'-0'}> style={{cursor:'pointer', 'margin-top':index == 0 ? '4px' : ''}} key={index+'-0'}>
<p className="clearfix"> <p className="clearfix">
<i className={`fa ${ 'fa-caret-right'} mr8 font-16`} <i className={`fa ${ 'fa-caret-right'} mr8 font-16`}
style={isExpanded ? {transform: 'rotate(90deg)'} : {}}></i> style={isExpanded ? {transform: 'rotate(90deg)'} : {}}></i>
@ -234,8 +234,8 @@ class CodeEvaluateView extends Component {
</React.Fragment> </React.Fragment>
) : ) :
<p className="color-orange -task-testline pl20"> <p className="color-orange -task-testline pl20">
{ allowed_unlock === true ? '隐藏测试集,暂不支持解锁和查看。' : '此为隐藏测试项。'} { !allowed_unlock ? '隐藏测试集,暂不支持解锁和查看。' : '此为隐藏测试项。'}
{ power === 0 ? <a href="javascript:void(0)" className="color_white test_set_data" { (power === 0 && allowed_unlock == true) ? <a href="javascript:void(0)" className="color_white test_set_data"
onClick={()=>showDialog({ contentText, callback: testSetUnlock , moreButtonsRender})} onClick={()=>showDialog({ contentText, callback: testSetUnlock , moreButtonsRender})}
style={{"textDecoration": "underline"}}>解锁</a> : '' } style={{"textDecoration": "underline"}}>解锁</a> : '' }
</p> </p>

@ -283,6 +283,9 @@ class LeftView extends Component {
color: #CDCDCD; color: #CDCDCD;
flex: 0 0 45px; flex: 0 0 45px;
} }
.markdown-body ol, .markdown-body ul {
padding-left: 2.5em;
}
`}</style> `}</style>
<div className="multiLevelAnswer"> <div className="multiLevelAnswer">
@ -293,7 +296,7 @@ class LeftView extends Component {
<div className="name">{item.name}</div> <div className="name">{item.name}</div>
<div className="status">已解锁</div> <div className="status">已解锁</div>
</div> </div>
<div className="contents" dangerouslySetInnerHTML={{__html: markdownToHTML(item.contents)}}> <div className="contents markdown-body" dangerouslySetInnerHTML={{__html: markdownToHTML(item.contents)}}>
</div> </div>
</div> </div>
})} })}

@ -81,10 +81,10 @@ class LeftViewContainer extends Component {
if ( tabIndex === 2 && this.state.gameAnswer === '') { // 参考答案 if ( tabIndex === 2 && this.state.gameAnswer === '') { // 参考答案
// 多级答案后换了接口 // 多级答案后换了接口
// 选择题(st === 1)还是走以前的接口 // 选择题(st === 1)还是走以前的接口
if (true || (this.props.st === 0)) { if ((this.props.st === 0)) {
this.fetchIfCouldGetAnswerWithoutGoldForMultiLevelAnswer() this.fetchIfCouldGetAnswerWithoutGoldForMultiLevelAnswer()
} else if (this.props.st === 1) { } else if (this.props.st === 1) {
this.fetchIfCouldGetAnswerWithoutGold(); this.fetchIfCouldGetAnswerWithoutGoldForChoose();
} }
return; return;
} }
@ -337,7 +337,41 @@ class LeftViewContainer extends Component {
console.log(error); console.log(error);
}); });
} }
fetchIfCouldGetAnswerWithoutGold() { // 选择题查看答案
fetchIfCouldGetAnswerWithoutGoldForChoose() {
const url = `/tasks/${this.props.game.identifier}/get_choose_answer.json`
axios.get(url, {
// withCredentials: true,
})
.then((response) => {
if (response.data.status == 0) {
this.props.showSnackbar(response.data.message)
return;
}
/*
将扣除XXX点金币是否确认查看答案     
已经过职业认证的教师可以免金币查看答案哟
继续查看 立即认证新开页
*/
// 答案测试 TODO
// if (false && response.data.view_answer === true) {
if (response.data.choose_answers) {
this.showAnswer(response.data.choose_answers)
} else if (response.data.status == 1) {
// 三个角色 普通用户、未认证教师、已认证教师,这里要区分普通用户和未认证教师用户
this.setState({
dialogOpen: true,
})
}
})
.catch(function (error) {
console.log(error);
});
return;
// 查看是否有权限直接查看true可以直接查看false需要扣金币查看 // 查看是否有权限直接查看true可以直接查看false需要扣金币查看
// var getAnswerUrl = `/api/v1/games/${this.props.game.identifier}/answer`; // var getAnswerUrl = `/api/v1/games/${this.props.game.identifier}/answer`;
var getAnswerUrl = `/tasks/${this.props.game.identifier}/answer.json` var getAnswerUrl = `/tasks/${this.props.game.identifier}/answer.json`
@ -445,6 +479,7 @@ class LeftViewContainer extends Component {
const challenge_score = this.props.challenge.score const challenge_score = this.props.challenge.score
// 前端计算扣除金币数 // 前端计算扣除金币数
let goldToMinuse = 0 let goldToMinuse = 0
if (this.state.isMultiLevelAnswer) {
for (let i = 0; i < lockedAnswers.length; i++) { for (let i = 0; i < lockedAnswers.length; i++) {
let answer = lockedAnswers[i]; let answer = lockedAnswers[i];
goldToMinuse = goldToMinuse + answer.score * challenge_score / 100; goldToMinuse = goldToMinuse + answer.score * challenge_score / 100;
@ -452,6 +487,9 @@ class LeftViewContainer extends Component {
break; break;
} }
} }
} else {
goldToMinuse = challenge_score
}
this.props.readGameAnswer({ this.props.readGameAnswer({
grade: this.props.grade - goldToMinuse grade: this.props.grade - goldToMinuse
@ -474,24 +512,12 @@ class LeftViewContainer extends Component {
console.log(error); console.log(error);
}); });
} }
handleDialogReadAnswer(selectID) { getChooseAnswer = () => {
const url = `/tasks/${this.props.game.identifier}/unlock_choose_answer.json`
this.handleMultiLevelAnswer(selectID || this.state.singleAnswerId) axios.get(url, {
return ;
if (this.state.isMultiLevelAnswer) {
}
if (selectID) {
}
// var getAnswerUrl = `/api/v1/games/${this.props.game.identifier}/answer_grade`
var getAnswerUrl = `/tasks/${this.props.game.identifier}/answer_grade.json`
axios.get(getAnswerUrl, {
// withCredentials: true, // withCredentials: true,
}) })
.then((response) => { .then((response) => {
// {message: "您没有足够的金币", status: -1} // {message: "您没有足够的金币", status: -1}
if (response.data.status == 0) { if (response.data.status == 0) {
@ -499,14 +525,13 @@ class LeftViewContainer extends Component {
return; return;
} }
const gameAnswer = response.data.choose_answers;
const gameAnswer = response.data.answer; // const final_score = response.data.final_score;
const final_score = response.data.final_score;
const grade = response.data.grade; const grade = response.data.grade;
this.props.readGameAnswer({ this.props.readGameAnswer({
final_score, // final_score,
grade, grade: this.props.grade - this.props.challenge.score
}) })
this.showAnswer(gameAnswer) this.showAnswer(gameAnswer)
@ -516,6 +541,14 @@ class LeftViewContainer extends Component {
console.log(error); console.log(error);
}); });
} }
handleDialogReadAnswer(selectID) {
if (this.props.st === 1) {
// 选择题
this.getChooseAnswer()
} else {
this.handleMultiLevelAnswer(selectID || this.state.singleAnswerId)
}
}
createNewComment = (page) => { createNewComment = (page) => {
const flag = this.props.createNewComment(page) const flag = this.props.createNewComment(page)
if (flag === true) { if (flag === true) {

@ -342,7 +342,7 @@ class PathDetailIndex extends Component{
<div className="color-grey-6 clearfix"> <div className="color-grey-6 clearfix">
<div id="shixuns_propaedeutics" className="new_li fl" style={{"padding":" 0px","textAlign": "justify;"}}> <div id="shixuns_propaedeutics" className="new_li fl" style={{"padding":" 0px","textAlign": "justify;"}}>
{detailInfoList === undefined ? "" :detailInfoList.description===null?"": {detailInfoList === undefined ? "" :detailInfoList.description===null?"":
<div dangerouslySetInnerHTML={{__html: markdownToHTML(detailInfoList.description).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(detailInfoList.description).replace(/▁/g,"▁▁▁")}}></div>
} }
</div> </div>
</div> </div>

@ -195,10 +195,10 @@ export default class TPManswer extends Component {
this.setState({ answers: newAnswers}) this.setState({ answers: newAnswers})
} }
answerOnChange = (val, index) => { answerOnChange = (val, index) => {
// if (!this.state.answers[index]) { if (!this.state.answers[index]) {
// // 1、2、3删除2会走到这里 // 1、2、3删除2会走到这里
// return; return;
// } }
const newAnswer = Object.assign({}, this.state.answers[index]) const newAnswer = Object.assign({}, this.state.answers[index])
newAnswer.contents = val newAnswer.contents = val
const newAnswers = this.state.answers.slice(0) const newAnswers = this.state.answers.slice(0)
@ -314,7 +314,7 @@ export default class TPManswer extends Component {
{ {
answers.map((answer, index) => { answers.map((answer, index) => {
return <div className="levelSection" id={`levelSection${index}`}> return <div className="levelSection" id={`levelSection${index}`} style={{ clear: 'both' }}>
<span className="mr4 color-orange pt10">*</span> <span className="mr4 color-orange pt10">*</span>
<p className="color-grey-6 font-16 mb30 mt10" style={{ display: "inline" }}>级别{index + 1}</p> <p className="color-grey-6 font-16 mb30 mt10" style={{ display: "inline" }}>级别{index + 1}</p>
<a className="fr sample_icon_remove mr30 mt8" onClick={()=>this.delanswers(index)}> <a className="fr sample_icon_remove mr30 mt8" onClick={()=>this.delanswers(index)}>

@ -304,7 +304,7 @@ class Challenges extends Component {
id="challenge_editorMd_description"> id="challenge_editorMd_description">
<p id="ReactMarkdown" style={{overflow:'hidden'}}> <p id="ReactMarkdown" style={{overflow:'hidden'}}>
{ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"": {ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":
<div dangerouslySetInnerHTML={{__html: markdownToHTML(ChallengesDataList.description).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(ChallengesDataList.description).replace(/▁/g,"▁▁▁")}}></div>
} }
</p> </p>

@ -25,7 +25,7 @@ class ShixunSearchBar extends Component {
super(props) super(props)
this.state = { this.state = {
status: undefined, status: undefined,
diff: undefined, diff: 0,
InputValue: undefined, InputValue: undefined,
shixunhoverData: [], shixunhoverData: [],
shixunchildValues:'', shixunchildValues:'',
@ -238,6 +238,7 @@ render() {
<li className={shixunsearchAllvalue==="a"?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value= "a" onClick={this.shixunsearchall}>全部</li> <li className={shixunsearchAllvalue==="a"?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value= "a" onClick={this.shixunsearchall}>全部</li>
{ {
shixunhoverData.map((item,key)=>{ shixunhoverData.map((item,key)=>{
return( return(
<li key={key} className={parseInt(shixunsearchAllvalue)===item.id?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value={item.id} onClick={this.shixunsearchAll}> <li key={key} className={parseInt(shixunsearchAllvalue)===item.id?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value={item.id} onClick={this.shixunsearchAll}>
{item.name} {item.name}
@ -269,21 +270,48 @@ render() {
</div> </div>
<div className="clearfix"> <div className="clearfix">
<span className="shaiTitle fl mt6">筛选</span> <span className="shaiTitle fl mt6">筛选</span>
<div className="fl" onMouseLeave={this.openStatusOptions} id={"area"}> {
{/*<Select className="statusSelect" defaultValue="0" style={{ width: 120 }} onChange={this.status_search} onMouseEnter={this.openStatusOption} open={openStatus}>*/} <style>
{/*<Option value="0" type="status">全部状态</Option>*/} {`
{/*<Option value="1" type="status">已发布</Option>*/} .shaiItems{
{/*<Option value="2" type="status">未发布</Option>*/} padding: 3px 15px;
{/*<Option value="3" type="status">已关闭</Option>*/} float: left;
{/*</Select>*/} border-radius: 4px;
<Select defaultValue="0" style={{ width: 120 }} onChange={this.diff_search} onMouseEnter={this.openLevelOption} open={openLevel} getPopupContainer={() => document.getElementById("area")}> color: #4C4C4C;
<Option value="0">全部难度</Option> cursor: pointer;
<Option value="1">初级学员</Option> margin-right: 15px;
<Option value="2">中级学员</Option> display: block;
<Option value="3">高级学员</Option> float:left;
<Option value="4">顶级学员</Option> }
</Select> .shaiItems.active {
background-color: #4CACFF!important;
color: #fff!important;
}
`}
</style>
}
<div className="fl pr shaiAllItem mt1">
<li className={this.state.diff===0?"shaiItems shixun_repertoire active":"shaiItems shixun_repertoire"} onClick={()=>this.diff_search(0)}>全部难度</li>
<li className={this.state.diff===1?"shaiItems shixun_repertoire active":"shaiItems shixun_repertoire"} onClick={()=>this.diff_search(1)}>初级学员</li>
<li className={this.state.diff===2?"shaiItems shixun_repertoire active":"shaiItems shixun_repertoire"} onClick={()=>this.diff_search(2)}>中级学员</li>
<li className={this.state.diff===3?"shaiItems shixun_repertoire active":"shaiItems shixun_repertoire"} onClick={()=>this.diff_search(3)}>高级学员</li>
<li className={this.state.diff===4?"shaiItems shixun_repertoire active":"shaiItems shixun_repertoire"} onClick={()=>this.diff_search(4)}>顶级学员</li>
</div> </div>
{/*<div className="fl" onMouseLeave={this.openStatusOptions} id={"area"}>*/}
{/*/!*<Select className="statusSelect" defaultValue="0" style={{ width: 120 }} onChange={this.status_search} onMouseEnter={this.openStatusOption} open={openStatus}>*!/*/}
{/*/!*<Option value="0" type="status">全部状态</Option>*!/*/}
{/*/!*<Option value="1" type="status">已发布</Option>*!/*/}
{/*/!*<Option value="2" type="status">未发布</Option>*!/*/}
{/*/!*<Option value="3" type="status">已关闭</Option>*!/*/}
{/*/!*</Select>*!/*/}
{/*<Select defaultValue="0" style={{ width: 120 }} onChange={this.diff_search} onMouseEnter={this.openLevelOption} open={openLevel} getPopupContainer={() => document.getElementById("area")}>*/}
{/*<Option value="0">全部难度</Option>*/}
{/*<Option value="1">初级学员</Option>*/}
{/*<Option value="2">中级学员</Option>*/}
{/*<Option value="3">高级学员</Option>*/}
{/*<Option value="4">顶级学员</Option>*/}
{/*</Select>*/}
{/*</div>*/}
{/*<div className="fr mt3">*/} {/*<div className="fr mt3">*/}
{/*<Search*/} {/*<Search*/}
{/*style={{ width: 300 }}*/} {/*style={{ width: 300 }}*/}

@ -122,7 +122,8 @@ class InterestpageComponent extends Component {
interest_ids: ints, interest_ids: ints,
}).then((response) => { }).then((response) => {
if (response !== undefined) { if (response !== undefined) {
this.Jumptotheinterestpage(); // this.Jumptotheinterestpage();
window.location.href = "/"
} }

@ -26,6 +26,7 @@ a:hover,a:active{color:#026434;}
.ml10{ margin-left:10px;} .ml10{ margin-left:10px;}
.ml15{ margin-left:15px;} .ml15{ margin-left:15px;}
.ml30{margin-left: 30px;} .ml30{margin-left: 30px;}
.ml38{margin-left: 38px;}
.ml50{margin-left: 50px;} .ml50{margin-left: 50px;}
.mr5{ margin-right:5px;} .mr5{ margin-right:5px;}
.mr10{ margin-right:15px;} .mr10{ margin-right:15px;}

@ -455,6 +455,7 @@ li.li-width7{width: 7%;text-align: left}
.top-black-trangle{display: block;border-width: 8px;position: absolute;top: -16px;right: 4px;border-style: dashed solid dashed dashed;border-color: transparent transparent rgba(5,16,26,0.6) transparent;font-size: 0;line-height: 0;} .top-black-trangle{display: block;border-width: 8px;position: absolute;top: -16px;right: 4px;border-style: dashed solid dashed dashed;border-color: transparent transparent rgba(5,16,26,0.6) transparent;font-size: 0;line-height: 0;}
.right-black-trangle{display: block;border-width: 8px;position: absolute;top: 10px;right: -16px;border-style: dashed solid dashed dashed;border-color: transparent transparent transparent rgba(5,16,26,0.6);font-size: 0;line-height: 0;} .right-black-trangle{display: block;border-width: 8px;position: absolute;top: 10px;right: -16px;border-style: dashed solid dashed dashed;border-color: transparent transparent transparent rgba(5,16,26,0.6);font-size: 0;line-height: 0;}
.activity-nav.active{color: #4CACFF!important;} .activity-nav.active{color: #4CACFF!important;}
.yslinvitetip{right: 140px;color: #fff; box-sizing: border-box;width: 170px;text-align: center;border-radius: 2px;background-color: rgba(5,16,26,0.6)}
.courseNewNum{display: block;background: #FF6800;border-radius:30px;padding:0px 2px;color: #fff!important;font-size: 11px; .courseNewNum{display: block;background: #FF6800;border-radius:30px;padding:0px 2px;color: #fff!important;font-size: 11px;

Loading…
Cancel
Save