caishi 6 years ago
commit 57ddb15bcc

@ -6,7 +6,7 @@
"@flatten/array": "^1.1.7",
"@icedesign/base": "^0.2.5",
"@novnc/novnc": "^1.1.0",
"antd": "^3.6.5",
"antd": "^3.20.1",
"array-flatten": "^2.1.2",
"autoprefixer": "7.1.6",
"axios": "^0.18.0",
@ -42,8 +42,6 @@
"immutability-helper": "^2.6.6",
"install": "^0.12.2",
"jest": "20.0.4",
"js-base64": "^2.5.1",
"js-file-download": "^0.4.7",
"lodash": "^4.17.5",
"loglevel": "^1.6.1",
"material-ui": "^1.0.0-beta.40",
@ -165,8 +163,6 @@
"babel-plugin-import": "^1.11.0",
"concat": "^1.0.3",
"happypack": "^5.0.1",
"js-base64": "^2.5.1",
"videojs-for-react": "^0.0.3",
"webpack-bundle-analyzer": "^3.0.3",
"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 {
margin-top: 54px;
}
.yslflexhome {
display: flex;
flex-direction: row;
}
.yslflexhomes {
display: flex;
flex-direction: row;
}
#games_repository_contents,
.cm-s-railscasts .CodeMirror-gutters,
.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;}
.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;}
.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;
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}>
<LoginDialog></LoginDialog>
<LoginDialog {...this.props} {...this.state}></LoginDialog>
{/*{*/}
{/* isRender === true?*/}
{/* <LoginDialog></LoginDialog> : ""*/}

@ -18,7 +18,7 @@ function locationurl(list){
}
// TODO 开发期多个身份切换
const debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' :
const debugType =window.location.search.indexOf('debug=t') != -1 ? 'teacher' :
window.location.search.indexOf('debug=s') != -1 ? 'student' : 'admin'
window._debugType = debugType;
export function initAxiosInterceptors(props) {

@ -1,83 +1,83 @@
import React,{ Component } from "react";
import TPMMDEditor from '../../../modules/tpm/challengesnew/TPMMDEditor'
import {markdownToHTML} from 'educoder'
import './DMDEditor.css'
// 需要父组件通过toShowMode、toMDMode 来控制一次只能打开一个DMDEditor
class DMDEditor extends Component{
constructor(props){
super(props);
this.mdRef = React.createRef()
this.state={
mdMode: false,
// value: this.props.initValue
}
}
componentDidUpdate(prevProps, prevState) {
}
componentDidMount() {
// if(this.props.initValue != this.mdRef.current.getValue()) {
// this.mdRef.current.setValue(this.props.initValue)
// }
}
toMDMode = () => {
this.setState({mdMode: true}, () => {
this.mdRef.current.resize()
this.mdRef.current.setValue(this.props.initValue)
})
this.props.toMDMode(this)
}
toShowMode = () => {
this.setState({mdMode: false})
this.props.toShowMode && this.props.toShowMode(this)
}
onCMBlur = () => {
this.toShowMode()
}
onChange = (val) => {
// this.setState({ value: val })
this.props.onChange(val)
if (this.state.showError == true) {
this.setState({showError: false})
}
}
showError = () => {
this.mdRef.current.showError()
this.setState({showError: true})
}
render(){
const { mdMode, showError } = this.state;
const { initValue } = this.props;
let _style = {}
if (showError) {
_style.border = '1px solid red'
}
_style = Object.assign(_style, {display: mdMode == true ? 'none' : '', color: initValue? '': '#999', alignItems: 'center', wordBreak: 'break-all'})
return(
<React.Fragment>
<style>{`
`}</style>
<div id="content_editorMd_show" className="new_li content_editorMd_show"
style={_style}
dangerouslySetInnerHTML={{__html: initValue ? markdownToHTML(initValue):this.props.placeholder}}
onClick={this.toMDMode}
>
</div>
{/*
onCMBlur={this.onCMBlur} */}
<TPMMDEditor
ref={this.mdRef}
{...this.props}
initValue={initValue}
className={`${this.props.className} ${mdMode == true ? '' : 'hideMd'}`}
onChange={this.onChange}
></TPMMDEditor>
</React.Fragment>
)
}
}
import React,{ Component } from "react";
import TPMMDEditor from '../../../modules/tpm/challengesnew/TPMMDEditor'
import {markdownToHTML} from 'educoder'
import './DMDEditor.css'
// 需要父组件通过toShowMode、toMDMode 来控制一次只能打开一个DMDEditor
class DMDEditor extends Component{
constructor(props){
super(props);
this.mdRef = React.createRef()
this.state={
mdMode: false,
// value: this.props.initValue
}
}
componentDidUpdate(prevProps, prevState) {
}
componentDidMount() {
// if(this.props.initValue != this.mdRef.current.getValue()) {
// this.mdRef.current.setValue(this.props.initValue)
// }
}
toMDMode = () => {
this.setState({mdMode: true}, () => {
this.mdRef.current.resize()
this.mdRef.current.setValue(this.props.initValue)
})
this.props.toMDMode(this)
}
toShowMode = () => {
this.setState({mdMode: false})
this.props.toShowMode && this.props.toShowMode(this)
}
onCMBlur = () => {
this.toShowMode()
}
onChange = (val) => {
// this.setState({ value: val })
this.props.onChange(val)
if (this.state.showError == true) {
this.setState({showError: false})
}
}
showError = () => {
this.mdRef.current.showError()
this.setState({showError: true})
}
render(){
const { mdMode, showError } = this.state;
const { initValue } = this.props;
let _style = {}
if (showError) {
_style.border = '1px solid red'
}
_style = Object.assign(_style, {display: mdMode == true ? 'none' : '', color: initValue? '': '#999', alignItems: 'center', wordBreak: 'break-all'})
return(
<React.Fragment>
<style>{`
`}</style>
<div id="content_editorMd_show" className="new_li content_editorMd_show markdown-body"
style={_style}
dangerouslySetInnerHTML={{__html: initValue ? markdownToHTML(initValue):this.props.placeholder}}
onClick={this.toMDMode}
>
</div>
{/*
onCMBlur={this.onCMBlur} */}
<TPMMDEditor
ref={this.mdRef}
{...this.props}
initValue={initValue}
className={`${this.props.className} ${mdMode == true ? '' : 'hideMd'}`}
onChange={this.onChange}
></TPMMDEditor>
</React.Fragment>
)
}
}
export default DMDEditor;

File diff suppressed because one or more lines are too long

@ -1,46 +1,46 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import './indexPlus.css';
import App from './App';
// 加之前main.js 18.1MB
// import { message } from 'antd';
import message from 'antd/lib/message';
import 'antd/lib/message/style/css';
import { AppContainer } from 'react-hot-loader';
import registerServiceWorker from './registerServiceWorker';
import { configureUrlQuery } from 'react-url-query';
import history from './history';
// link the history used in our app to url-query so it can update the URL with it.
configureUrlQuery({ history });
// ----------------------------------------------------------------------------------- 请求配置
window.__useKindEditor = false;
const render = (Component) => {
ReactDOM.render(
<AppContainer>
<Component />
</AppContainer>,
document.getElementById('root')
);
}
// ReactDOM.render(
// ,
// document.getElementById('root'));
// registerServiceWorker();
render(App);
if (module.hot) {
module.hot.accept('./App', () => { render(App) });
}
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import './indexPlus.css';
import App from './App';
// 加之前main.js 18.1MB
// import { message } from 'antd';
import message from 'antd/lib/message';
import 'antd/lib/message/style/css';
import { AppContainer } from 'react-hot-loader';
import registerServiceWorker from './registerServiceWorker';
import { configureUrlQuery } from 'react-url-query';
import history from './history';
// link the history used in our app to url-query so it can update the URL with it.
configureUrlQuery({ history });
// ----------------------------------------------------------------------------------- 请求配置
window.__useKindEditor = false;
const render = (Component) => {
ReactDOM.render(
<AppContainer {...this.props} {...this.state}>
<Component {...this.props} {...this.state}/>
</AppContainer>,
document.getElementById('root')
);
}
// ReactDOM.render(
// ,
// document.getElementById('root'));
// registerServiceWorker();
render(App);
if (module.hot) {
module.hot.accept('./App', () => { render(App) });
}

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

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

@ -13,6 +13,9 @@ import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal'
import '../css/Courses.css'
import WorkDetailPageHeader from './common/WorkDetailPageHeader'
import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply'
import Example from './TestHooks'
import CommonWorkAppraiseReviseAttachments from './CommonWorkAppraiseReviseAttachments'
const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
@ -174,12 +177,12 @@ class CommonWorkAppraise extends Component{
modalSave={ModalSave}
loadtype={loadtype}
/>
{/* 内容区 */}
{/* <div className="padding40 memoContent new_li">
</div> */}
<div className={"appraise imageLayerParent "} style={{}}>
<style>{`
.workAppraise>div:last-child {
border-bottom: none !important;
@ -234,42 +237,7 @@ class CommonWorkAppraise extends Component{
</div> }
{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>
<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>}
<CommonWorkAppraiseReviseAttachments {...this.state}></CommonWorkAppraiseReviseAttachments>
{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"}>

@ -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>
<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}
{/* <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{homework_name}</Link> */}
</span>

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

@ -70,7 +70,7 @@ function buildColumns(that, student_works) {
render: (text, record, index) => {
return (
<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>
)},
}, {

@ -92,8 +92,16 @@ class CommonWorkPost extends Component{
} else {
axios.get(url).then((response)=>{
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({
...response.data,
selectmemberslist: [mine],
memberNumMin: response.data.min_num,
memberNumMax: response.data.max_num,
})
@ -102,30 +110,6 @@ class CommonWorkPost extends Component{
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)=>{
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>
</div>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} >
{/* */}
<Form >
<div className="stud-class-set pd20 coursenavbox edu-back-white">
<style>{`
.uploadBtn.ant-btn {

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

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

@ -68,7 +68,7 @@ class Ecercisemount extends Component{
</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">

@ -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>
<div>
{/*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>*/}
</div>

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

@ -113,24 +113,26 @@ class Testpapersettinghomepage extends Component{
experiment=(url)=>{
axios.get(url).then((response) => {
console.log(response);
debugger
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:false,
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:500
})
}
}else {
window.open(url, '_blank');
window.open("/api"+url, '_blank');
}
}).catch((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"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<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(`/api/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(`/exercises/${this.props.match.params.Id}/exercise_lists.xlsx`)}>学生成绩</a></li>
<li><a onClick={()=>this.experiment(`/exercises/${this.props.match.params.Id}/export_exercise`)} >空白试卷</a></li>
<li><a onClick={()=>this.experiment(`/zip/export_exercises?exercise_id=${this.props.match.params.Id}${this.state.groupyslsval}`)}>学生答题试卷</a></li>
</ul>
</li>:""}
</div>

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

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

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

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

@ -5,16 +5,11 @@ import locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn,getUrl ,handleDateString} from 'educoder';
import axios from 'axios';
import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage';
import CoursesListType from '../../coursesPublic/CoursesListType';
import PublishModals from "../../coursesPublic/PublishModals";
import HomeworkModal from "../../coursesPublic/HomeworkModal";
import moment from 'moment';
const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
let GraduationTasksnewtype=true;
// const $ = window.$;
const Search = Input.Search;
const RadioGroup = Radio.Group;
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(){
const { getFieldDecorator } = this.props.form;
const dateFormat = 'YYYY-MM-DD HH:mm';
@ -969,7 +997,12 @@ class GraduationTaskssettingapp extends Component{
{/*course_groups={course_groups}*/}
{/*skipTop={this.skipTop}*/}
{/*/>*/}
<DownloadMessage
{...this.props}
value={this.state.DownloadMessageval}
modalCancel={this.Downloadcal}
modalsType={this.state.DownloadType}
/>
<HomeworkModal
starttimes={this.state.starttimes}
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"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<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 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.xlsx")} className="color-dark">导出成绩</a></li>
<li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li>
</ul>
</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 ?
<a className="fr mt20 mr40" onClick={this.editSetting}><Tooltip title="编辑"><i

@ -6,7 +6,7 @@ import axios from 'axios';
import moment from 'moment';
import HomeworkModal from "../../coursesPublic/HomeworkModal";
import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage';
import CoursesListType from '../../coursesPublic/CoursesListType';
import ModulationModal from "../../coursesPublic/ModulationModal";
@ -73,14 +73,14 @@ class GraduationTaskssettinglist extends Component{
//get 数组
axios.get(url,{
params: {
teacher_comment:teacher_comment,
task_status:task_status,
course_group:course_group,
cross_comment:cross_comment,
order:order,
b_order:b_order,
search:search,
page:pages,
teacher_comment:teacher_comment===null?undefined:teacher_comment,
task_status:task_status===null?undefined:task_status,
course_group:course_group===null?undefined:course_group,
cross_comment:cross_comment===null?undefined:cross_comment,
order:order===null?undefined:order,
b_order:b_order===null?undefined:b_order,
search:search===null?undefined:search,
page:pages===null?undefined:pages,
limit:20,
},
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;
this.setState({
teacher_comment:list.length===key?null:list,
teacher_comment:list.length===key?undefined:list[0],
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);
}
/// 确认是否下载
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(){
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}
categoryid={taskslistdata.work_id}
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">
<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"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<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 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.xlsx")} className="color-dark">学生成绩</a></li>
<li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">作品附件</a></li>
</ul>
</li>:""}

@ -4,6 +4,7 @@ import {Link} from 'react-router-dom';
import { WordsBtn,markdownToHTML} from 'educoder';
import axios from 'axios';
import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage';
import HomeworkModal from "../../coursesPublic/HomeworkModal";
import CoursesListType from '../../coursesPublic/CoursesListType';
import moment from 'moment';
@ -187,6 +188,41 @@ class GraduationTasksquestions extends Component{
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(){
let { Modalstype,Modalstopval,ModalCancel,ModalSave,questionslist} =this.state;
@ -218,7 +254,12 @@ class GraduationTasksquestions extends Component{
{/*modalSave={ModalSave}*/}
{/*loadtype={Loadtype}*/}
{/*/>*/}
<DownloadMessage
{...this.props}
value={this.state.DownloadMessageval}
modalCancel={this.Downloadcal}
modalsType={this.state.DownloadType}
/>
<HomeworkModal
starttimes={this.state.starttimes}
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"}}>
导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<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 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.xlsx")} className="color-dark">导出成绩</a></li>
<li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li>
</ul>
</li>:""}
@ -335,7 +376,7 @@ class GraduationTasksquestions extends Component{
width: '100%',
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>:""
}

@ -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 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 = {}
if (course_group_id) {
params.group_id = course_group_id

@ -1,7 +1,8 @@
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 NoneData from "../coursesPublic/NoneData"
import Titlesearchsection from '../common/titleSearch/TitleSearchSection'
import ColorCountText from '../common/titleSearch/ColorCountText'
@ -20,25 +21,31 @@ import { from } from "array-flatten";
// import AddStudentModal from './modal/AddStudentModal'
import AddGraduationGroupModal from './modal/AddGraduationGroupModal'
import AddAdminModal from './modal/AddAdminModal'
import CourseGroupChooserModal from './modal/CourseGroupChooserModal'
import { ROLE_TEACHER_NUM, ROLE_ASSISTANT_NUM } from './common'
import CourseGroupChooser from './CourseGroupChooser'
const Search = Input.Search;
const ROLE_ADMIN = "管理员"
const ROLE_TEACHER = "教师"
const ROLE_TEACHER_ASSISTANT = "助教"
const pageSize = 20;
function buildColumns(that) {
let sortedInfo = that.state.sortedInfo || {}
const isAdmin = that.props.isAdmin()
const isAdminOrCreator = that.props.isAdminOrCreator();
const isAdminOrTeacher = that.props.isAdminOrTeacher()
const { course_groups } = that.state
const { course_groups, filterKey } = that.state
const showSorter = filterKey == '1'
const columns = [{
title: '序号',
dataIndex: 'name',
key: 'index',
render: (content, item, index) => {
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>
return index + 1
// 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',
width: 120,
key: 'name',
sorter: showSorter,
sortOrder: sortedInfo.columnKey === 'name' && sortedInfo.order,
render: (name, record) => {
return <a href={`/login/${record.login}`} target="_blank" className="overflowHidden1" style={{ maxWidth: '110px'}}
title={`${name.length > 4 ? name : ''}`}>{name}</a>
@ -63,6 +72,11 @@ function buildColumns(that) {
title: '角色',
dataIndex: '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({
title: <Tooltip title="仅能批阅指定分班的作品">管理权限</Tooltip>,
@ -84,49 +98,12 @@ function buildColumns(that) {
{ isAdmin &&
<React.Fragment>
<i className="iconfont icon-xiajiantou font-12 ml2"></i>
{!noGroups && <ul className="drop_down_menu" style={{"lef":"tunset", minWidth: '262px'}}>
{
course_groups && course_groups.length > 10?
(<p className="drop_down_search">
<Input placeholder="搜索" value={that.state.groupSearchValue} onChange={(e) => {that.setState({groupSearchValue: e.target.value})}} allowClear/>
</p>):
''
}
{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>}
{!noGroups && <CourseGroupChooser
{...{course_groups, isAdminOrCreator, item, index, arg_course_groups,
checkAllValue: that.state.checkAllArray[index],
joinCourseGroup: that.joinCourseGroup,
onCheckAllChange: that.onCheckAllChange}}
></CourseGroupChooser>}
</React.Fragment> }
</span>
</ConditionToolTip>)
@ -138,8 +115,11 @@ function buildColumns(that) {
columns.push({
title: '答辩组',
// width: 90,
sorter: showSorter,
key: 'graduation_group',
dataIndex: 'graduation_group',
sortOrder: sortedInfo.columnKey === 'graduation_group' && sortedInfo.order,
render: text => (
<span>
{text}
@ -200,6 +180,7 @@ class studentsList extends Component{
this.state={
headIndex:"1",
page:1,
sortedInfo: { columnKey: 'role', order: 'ascend'},
totalPage:undefined,
searchValue:"",
order: ORDER_BY_DATE,
@ -209,7 +190,8 @@ class studentsList extends Component{
checkBoxValues: [],
isSpin:false,
application_list: [],
checkAllArray: []
checkAllArray: [],
filterKey: 1, // 1 已审批 2 待审批
}
}
onCheckAllChange = (e, item, index) => {
@ -230,24 +212,39 @@ class studentsList extends Component{
}
// approval 2 - 拒绝
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
let url = `/courses/${courseId}/teacher_application_review.json`
axios.post(url, {
user_id: record.user_id,
application_id: record.application_id,
approval: approval
})
.then((response) => {
if (response.data.status == 0) {
this.props.showNotification(`${approval == 1? '同意' : '拒绝'}`)
this.fetchAll(1)
this.props.confirm({
content: `是否确认${ approval == 1 ? '同意' : '拒绝'}TA的加入`,
onOk: () => {
axios.post(url, {
user_id: record.user_id,
application_id: record.application_id,
approval: approval
})
.then((response) => {
if (response.data.status == 0) {
this.props.showNotification(`${approval == 1? '同意' : '拒绝'}`)
this.fetchAll(1)
}
})
.catch(function (error) {
console.log(error);
});
}
})
.catch(function (error) {
console.log(error);
});
}
onRefuse = (record) => {
this.onAgree(record, 2)
@ -312,7 +309,7 @@ class studentsList extends Component{
});
}
joinCourseGroup = (ids, item, index) => {
console.log('join ', ids, item)
// console.log('join ', ids, item)
const courseId = this.props.match.params.coursesId
@ -339,7 +336,7 @@ class studentsList extends Component{
console.log(error);
});
}
fetchAll=(argPage)=>{
fetchAll = async (argPage) => {
this.setState({
isSpin:true
})
@ -347,28 +344,57 @@ class studentsList extends Component{
if (argPage) {
this.setState({ page: argPage })
}
const sortedInfo = this.state.sortedInfo;
let page = argPage || this.state.page
let { order, searchValue }=this.state
let url=`/courses/${id}/teachers.json?order=${order}&page=${page}`;
let { searchValue, filterKey }=this.state
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!=""){
url+='&search='+searchValue;
}
axios.get((url)).then((result)=>{
const result = await axios.get(url)
// axios.get((url)).then((result)=>{
if (result.data.teacher_list) {
this.setState({
teachers: result.data.teacher_list,
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,
apply_size: result.data.apply_size,
isSpin:false
})
} else if (result.data.application_list) {
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
})
}
}).catch((error)=>{
console.log(error);
this.setState({
isSpin:false
})
})
// }).catch((error)=>{
// console.log(error);
// this.setState({
// isSpin:false
// })
// })
}
getGroupList(){
let id = this.props.match.params.coursesId
@ -529,13 +555,37 @@ class studentsList extends Component{
})
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(){
const isAdmin = this.props.isAdmin()
const columns = buildColumns(this)
let {
searchValue, checkBoxValues, checkAllValue,
groupList, total_count, teachers, order, page
searchValue, checkBoxValues, checkAllValue, course_groups,
groupList, total_count, teachers, order, page, apply_size, filterKey
}=this.state
let currentOrderName = '加入时间排序'
@ -544,12 +594,13 @@ class studentsList extends Component{
} else if (order == ORDER_BY_GRADUATION_GROUP) {
currentOrderName = '答辩组排序'
}
const combineArray = teachers.slice(0)
if (page == 1) {
this.state.application_list && this.state.application_list.slice(0).reverse().forEach(item => {
item.isApply = true
combineArray.unshift(item)
})
let combineArray = teachers.slice(0)
if (page == 1 && filterKey == '2') {
// this.state.application_list && this.state.application_list.slice(0).reverse().forEach(item => {
// item.isApply = true
// combineArray.unshift(item)
// })
combineArray = this.state.application_list
}
const isAdminOrTeacher = this.props.isAdminOrTeacher()
const hasGraduationModule = this.hasGraduationModule()
@ -585,21 +636,48 @@ class studentsList extends Component{
</React.Fragment>
}
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}
></Titlesearchsection>
<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 {
float: none;
text-align: center;
}
`}</style>
<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> }
{ <div className="studentList_operation_ul">
{ filterKey == '1' && <div className="studentList_operation_ul">
{ hasGraduationModule && isAdminOrTeacher && <li className="li_line drop_down">
加入答辩组<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"0px","left":"unset", minWidth: '222px'}}>
@ -627,22 +705,24 @@ class studentsList extends Component{
</p>
</ul>
</li> }
<li className="drop_down">
{/* <li className="drop_down">
{currentOrderName} <i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_normal">
<li onClick={() => this.onSortTypeChange(ORDER_BY_NAME)} >姓名排序</li>
<li onClick={() => this.onSortTypeChange(ORDER_BY_DATE)} style={{width: '125px'}}>加入时间排序</li>
{this.hasGraduationModule() && <li onClick={() => this.onSortTypeChange(ORDER_BY_GRADUATION_GROUP)} >答辩组排序</li>}
</ul>
</li>
</li> */}
</div> }
</div>
</div>}
<Spin size="large" spinning={this.state.isSpin}>
<div className="clearfix stu_table">
{combineArray.length ?
<Checkbox.Group style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={checkBoxValues}>
{/* pagination={{ current: page, total: total_count, pageSize:20, onChange: this.onPageChange }} */}
<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 , //数据总数量
pageSize: page == 1 && this.state.application_list.length ? this.state.application_list.length + 20 : 20, //显示几条一页
current: page,
@ -650,6 +730,8 @@ class studentsList extends Component{
} : false}
></Table>
</Checkbox.Group>
:
<NoneData></NoneData>}
</div>
</Spin>
</div>

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

File diff suppressed because it is too large Load Diff

@ -1,342 +1,357 @@
/* 单选或多选 */
.ant-form{
color:#05101A;
}
.ant-radio-disabled + span,.ant-checkbox-disabled + span{
color: #666!important;
cursor: default
}
.ant-radio-wrapper {
color: #666!important;
}
.ant-checkbox-wrapper + .ant-checkbox-wrapper{
margin-left: 0px!important;
}
/* 下拉 */
.ant-select-selection,.ant-select-selection-selected-value{
min-height: 40px;
min-line-height: 40px;
}
/* 选答 */
.chooseAnswer{
display: inline-block;
width: 68px;
text-align: center;
height: 24px;
line-height: 24px;
background: #EDEDED;
color: #666;
margin-left: 10px;
border-radius: 12px;
}
.problemShow{
padding:30px;
border-bottom: 1px solid #eee;
}
.problemShow:last-child{
border-bottom: none;
}
/* 问卷详情 */
/* 答题列表 */
.unlimit{
height: 24px;
line-height: 24px;
padding:0px 10px;
border-radius: 12px;
cursor: pointer;
border:1px solid #cdcdcd;
color:#666;
}
.unlimit.active{
background-color: #4CACFF;
border:1px solid #4CACFF;
color: #fff;
}
.edu-table thead th,.edu-table tbody tr:last-child td{
border-bottom: none!important;
}
.edu-table tbody tr:hover td{
background-color: #fff!important;
}
/* 统计结果 */
.countList p.countHeader{
background-color: #f8f8f8;
color: #666;
height: 38px;
font-size: 16px;
justify-content: center;
align-items: center;
display: -webkit-flex;
}
.countList p.countHeader ul{
width: 100%;
padding:0px 30px
}
.countList p.countHeader span,.countList div.countBody span{
float: left;
}
.countList div.countBody{
margin:0px 30px;
border-bottom:1px solid #EBEBEB;
padding:12px 0px;
}
.countList div.countBody:last-child{
border-bottom: none;
}
.countList p.countHeader span:nth-child(1),.countList div.countBody span:nth-child(1){
width: 50%;
text-align: left;
}
.countList p.countHeader span:nth-child(2),.countList div.countBody span:nth-child(2){
width:15%;
text-align: center;
}
.countList p.countHeader span:nth-child(3),.countList div.countBody span:nth-child(3){
width:35%;
text-align: left;
}
.percentForm{
width: 340px;
height: 11px;
background: #F5F5F5;
border-radius: 6px;
position: relative;
margin-top: 7px;
}
.percentValue{
position: absolute;
top:0px;
left: 0px;
height: 11px;
background: #29BD8B;
border-radius: 6px;
}
.answerTxt{
max-height: 500px;
background-color: #F2F9FF;
width: 100%;
margin-top: 10px;
padding:10px;
box-sizing: border-box;
color: #4c4c4c;
}
.otherTxt{
border:none!important;
border-bottom: 1px solid #eee!important;
background: transparent!important;
flex:1;
height: 20px!important;
line-height: 20px!important;
}
.otherTxt.ant-input:hover,.otherTxt.ant-input:focus{
border:none!important;
border-bottom: 1px solid #eee!important;
background: #F8F8F8!important;
}
/* 必答 */
.mustAnswer{
padding:0px 10px;
border-radius: 15px;
height: 22px;
line-height: 22px;
background: #eaeaea;
color: #999;
font-size: 14px;
}
/* 问卷内容 */
.previewList{
border-bottom: 1px solid #ebebeb;
}
.previewList:last-child{
border-bottom:none;
}
.textLine{
flex: 1;
height:22px;
border-bottom: 1px solid #ebebeb;
}
.answerList{
box-sizing: border-box;
width: 100%;
margin-bottom: 20px;
}
.answerList li{
padding:10px 30px;
box-sizing: border-box;
line-height:20px;
width: 100%;
}
.answerList li:hover{
background: #F8F8F8;
}
textarea:read-only{
background: #f3f3f3;
}
.ant-calendar-picker-input{
height: 40px;
}
/* 问卷答题 */
.questionsNo{
position: relative;
padding: 30px;
border-bottom: 1px solid #ebebeb;
}
.questionsfixed{
position: fixed;
padding: 30px;
z-index: 12;
top: 60px;
width: 1200px;
background: #fff;
}
.answered,.unanswer,.answerTure,.answerFalse,.answerHalf{
position: relative;
}
.answered::after{
position: absolute;
right:35px;
top:4px;
width: 12px;
height: 12px;
border-radius: 50%;
background: #CBCBCB;
content: "";
}
.unanswer::after{
position: absolute;
right:35px;
top:4px;
width: 12px;
height: 12px;
border-radius: 50%;
background: #fff;
content: "";
border:1px solid rgba(203,203,203,1);
}
.answerTure::after{
position: absolute;
right:35px;
top:4px;
width: 20px;
height: 10px;
border-radius: 5px;
background: #29BD8B;
content: "";
}
.answerFalse::after{
position: absolute;
right:35px;
top:4px;
width: 20px;
height: 10px;
border-radius: 5px;
background: #FF3756;
content: "";
}
.color-red{color: #FF3756!important}
.answerHalf::after{
position: absolute;
left:-25px;
top:4px;
width: 20px;
height: 10px;
border-radius: 5px;
background: #FF6800;
content: "";
}
.leaderNav,.leaderMainNav{
margin-top: 20px;
}
.leaderNav a,.leaderMainNav a{
display: block;
float: left;
margin-right: 10px;
border-radius: 50%;
border:1px solid #CBCBCB;
height: 40px;
line-height: 40px;
width: 40px;
text-align: center;
color: #999999;
cursor: pointer;
margin-bottom: 5px;
}
.leaderMainNav a{
background: #FF3756;
color: #fff;
border:1px solid #FF3756;
}
.leaderNav a.acted{
background:rgba(203,203,203,1);
color: #fff;
}
.leaderMainNav a.acted{
background-color: #29BD8B;
color: #fff;
border:1px solid #29BD8B;
}
.leaderMainNav a.half{
background-color: #FF6800;
color: #fff;
border:1px solid #FF6800;
}
/* 问卷设置 */
.pollForm .ant-form-item-control{
line-height: 20px;
}
.pollForm.ant-form-item{
margin-bottom: 0px
}
.setInfo .ant-select-selection__rendered{
line-height: 40px;
}
/* 下拉搜索框 */
.ant-select-dropdown-menu .ant-select-dropdown-menu-item{
padding:5px 15px;
}
.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon{
right: 15px;
}
.noticeTip{
border:1px solid #FF0000;
border-radius: 5px;
}
/* 试卷 */
.setScoreInput{
width: 60px!important;height: 30px!important;box-sizing: border-box;
text-align: center!important;
background: #F8F8F8;
color:#666;
}
.setScoreInput:focus{
background: #fff;
color:#FF6800
}
.standardAnswer p{
line-height: 20px!important;
}
/* 倒计时 */
.remainingTime li{
float: left;
width: 40px;
line-height: 40px;
background-color: #111C24;
color: #fff;
border-radius: 4px;
text-align: center
}
.remainingTime span{
float: left;
width: 20px;
line-height: 40px;
text-align: center;
}
/* 单选或多选 */
.ant-form{
color:#05101A;
}
.ant-radio-disabled + span,.ant-checkbox-disabled + span{
color: #666!important;
cursor: default
}
.ant-radio-wrapper {
color: #666!important;
}
.ant-checkbox-wrapper + .ant-checkbox-wrapper{
margin-left: 0px!important;
}
/* 下拉 */
.ant-select-selection,.ant-select-selection-selected-value{
min-height: 40px;
min-line-height: 40px;
}
/* 选答 */
.chooseAnswer{
display: inline-block;
width: 68px;
text-align: center;
height: 24px;
line-height: 24px;
background: #EDEDED;
color: #666;
margin-left: 10px;
border-radius: 12px;
}
.problemShow{
padding:30px;
border-bottom: 1px solid #eee;
}
.problemShow:last-child{
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{
height: 24px;
line-height: 24px;
padding:0px 10px;
border-radius: 12px;
cursor: pointer;
border:1px solid #cdcdcd;
color:#666;
}
.unlimit.active{
background-color: #4CACFF;
border:1px solid #4CACFF;
color: #fff;
}
.edu-table thead th,.edu-table tbody tr:last-child td{
border-bottom: none!important;
}
.edu-table tbody tr:hover td{
background-color: #fff!important;
}
/* 统计结果 */
.countList p.countHeader{
background-color: #f8f8f8;
color: #666;
height: 38px;
font-size: 16px;
justify-content: center;
align-items: center;
display: -webkit-flex;
}
.countList p.countHeader ul{
width: 100%;
padding:0px 30px
}
.countList p.countHeader span,.countList div.countBody span{
float: left;
}
.countList div.countBody{
margin:0px 30px;
border-bottom:1px solid #EBEBEB;
padding:12px 0px;
}
.countList div.countBody:last-child{
border-bottom: none;
}
.countList p.countHeader span:nth-child(1),.countList div.countBody span:nth-child(1){
width: 50%;
text-align: left;
}
.countList p.countHeader span:nth-child(2),.countList div.countBody span:nth-child(2){
width:15%;
text-align: center;
}
.countList p.countHeader span:nth-child(3),.countList div.countBody span:nth-child(3){
width:35%;
text-align: left;
}
.percentForm{
width: 340px;
height: 11px;
background: #F5F5F5;
border-radius: 6px;
position: relative;
margin-top: 7px;
}
.percentValue{
position: absolute;
top:0px;
left: 0px;
height: 11px;
background: #29BD8B;
border-radius: 6px;
}
.answerTxt{
max-height: 500px;
background-color: #F2F9FF;
width: 100%;
margin-top: 10px;
padding:10px;
box-sizing: border-box;
color: #4c4c4c;
}
.otherTxt{
border:none!important;
border-bottom: 1px solid #eee!important;
background: transparent!important;
flex:1;
height: 20px!important;
line-height: 20px!important;
}
.otherTxt.ant-input:hover,.otherTxt.ant-input:focus{
border:none!important;
border-bottom: 1px solid #eee!important;
background: #F8F8F8!important;
}
/* 必答 */
.mustAnswer{
padding:0px 10px;
border-radius: 15px;
height: 22px;
line-height: 22px;
background: #eaeaea;
color: #999;
font-size: 14px;
}
/* 问卷内容 */
.previewList{
border-bottom: 1px solid #ebebeb;
}
.previewList:last-child{
border-bottom:none;
}
.textLine{
flex: 1;
height:22px;
border-bottom: 1px solid #ebebeb;
}
.answerList{
box-sizing: border-box;
width: 100%;
margin-bottom: 20px;
}
.answerList li{
padding:10px 30px;
box-sizing: border-box;
line-height:20px;
width: 100%;
}
.answerList li:hover{
background: #F8F8F8;
}
textarea:read-only{
background: #f3f3f3;
}
.ant-calendar-picker-input{
height: 40px;
}
/* 问卷答题 */
.questionsNo{
position: relative;
padding: 30px;
border-bottom: 1px solid #ebebeb;
}
.questionsfixed{
position: fixed;
padding: 30px;
z-index: 12;
top: 60px;
width: 1200px;
background: #fff;
}
.answered,.unanswer,.answerTure,.answerFalse,.answerHalf{
position: relative;
}
.answered::after{
position: absolute;
right:35px;
top:4px;
width: 12px;
height: 12px;
border-radius: 50%;
background: #CBCBCB;
content: "";
}
.unanswer::after{
position: absolute;
right:35px;
top:4px;
width: 12px;
height: 12px;
border-radius: 50%;
background: #fff;
content: "";
border:1px solid rgba(203,203,203,1);
}
.answerTure::after{
position: absolute;
right:35px;
top:4px;
width: 20px;
height: 10px;
border-radius: 5px;
background: #29BD8B;
content: "";
}
.answerFalse::after{
position: absolute;
right:35px;
top:4px;
width: 20px;
height: 10px;
border-radius: 5px;
background: #FF3756;
content: "";
}
.color-red{color: #FF3756!important}
.answerHalf::after{
position: absolute;
left:-25px;
top:4px;
width: 20px;
height: 10px;
border-radius: 5px;
background: #FF6800;
content: "";
}
.leaderNav,.leaderMainNav{
margin-top: 20px;
}
.leaderNav a,.leaderMainNav a{
display: block;
float: left;
margin-right: 10px;
border-radius: 50%;
border:1px solid #CBCBCB;
height: 40px;
line-height: 40px;
width: 40px;
text-align: center;
color: #999999;
cursor: pointer;
margin-bottom: 5px;
}
.leaderMainNav a{
background: #FF3756;
color: #fff;
border:1px solid #FF3756;
}
.leaderNav a.acted{
background:rgba(203,203,203,1);
color: #fff;
}
.leaderMainNav a.acted{
background-color: #29BD8B;
color: #fff;
border:1px solid #29BD8B;
}
.leaderMainNav a.half{
background-color: #FF6800;
color: #fff;
border:1px solid #FF6800;
}
/* 问卷设置 */
.pollForm .ant-form-item-control{
line-height: 20px;
}
.pollForm.ant-form-item{
margin-bottom: 0px
}
.setInfo .ant-select-selection__rendered{
line-height: 40px;
}
/* 下拉搜索框 */
.ant-select-dropdown-menu .ant-select-dropdown-menu-item{
padding:5px 15px;
}
.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon{
right: 15px;
}
.noticeTip{
border:1px solid #FF0000;
border-radius: 5px;
}
/* 试卷 */
.setScoreInput{
width: 60px!important;height: 30px!important;box-sizing: border-box;
text-align: center!important;
background: #F8F8F8;
color:#666;
}
.setScoreInput:focus{
background: #fff;
color:#FF6800
}
.standardAnswer p{
line-height: 20px!important;
}
/* 倒计时 */
.remainingTime li{
float: left;
width: 40px;
line-height: 40px;
background-color: #111C24;
color: #fff;
border-radius: 4px;
text-align: center
}
.remainingTime span{
float: left;
width: 20px;
line-height: 40px;
text-align: center;
}
.myyslwidth {
min-width:1200px
}

@ -98,7 +98,7 @@ class CommitSummary extends Component{
// console.log("提交总结接口")
// console.log(JSON.stringify(result))
// 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) => {
console.log(error)
@ -115,7 +115,7 @@ class CommitSummary extends Component{
return (
<div>
<div className="newMain clearfix">
{/*<Form labelCol={{span: 5}} wrapperCol={{span: 12}} onSubmit={this.handleSubmit}>*/}
{/*<Form onSubmit={this.handleSubmit}>*/}
<div className={"educontent mb20"}>
<div style={{
width:'100%',
@ -136,7 +136,7 @@ class CommitSummary extends Component{
</div>
<div>
<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>
{/*educontentbox*/}
<div className="stud-class-set pt40 pb40">
@ -148,7 +148,7 @@ class CommitSummary extends Component{
内容</span>
</div>
<div className="new-wrap">
<Form labelCol={{span: 5}}layout='vertical' onSubmit={this.handleSubmit} wrapperCol={{span: 12}}>
<Form layout='vertical' onSubmit={this.handleSubmit} >
<Form.Item
>
<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个字符',
}],
})(
<TPMMDEditor ref={this.mdRef} placeholder={'请在此输入帖子详情,最大限制为5000个字符'}
<TPMMDEditor ref={this.mdRef} placeholder={'请在此输入总结内容,最多5000个字符'}
mdID={'courseMessageMD'} initValue={this.state.description} className="courseMessageMD"></TPMMDEditor>
)}
</div>
</Form.Item>
<Form.Item wrapperCol={{span: 12, offset: 5}}>
<Form.Item>
<div className="clearfix mt40 mb30">
<Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20" >
提交
</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>
</Form.Item>
</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 HomeworkModal from "../coursesPublic/HomeworkModal";
import DownloadMessage from '../../modals/DownloadMessage';
import {Base64} from 'js-base64';
import {Internshipreportsy} from './Httpdownloads'
import {
Form,
Select,
@ -339,13 +337,6 @@ class Listofworks extends Component {
render: (text, record) => (
record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</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"
onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a>
</span>
@ -592,13 +583,6 @@ class Listofworks extends Component {
render: (text, record) => (
record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</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"
onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a>
</span>
@ -612,6 +596,8 @@ class Listofworks extends Component {
}
componentDidMount() {
console.log("Listofworks");
console.log("componentDidMount");
var homeworkid = this.props.match.params.homeworkid;
// console.log(homeworkid)
// this.Gettitleinformation(homeworkid);
@ -633,6 +619,7 @@ class Listofworks extends Component {
// 获取作品列表
Getalistofworks = (homeworkid) => {
// console.log("获取作品列表");7009
let urll = `/homework_commons/${homeworkid}/works_list.json`;
// console.log(homeworkid);
@ -651,6 +638,8 @@ class Listofworks extends Component {
limit:20,
}
axios.post(urll, data).then((result) => {
if(this.props.isNotMember()===false){
if (result !== undefined) {
// console.log(url)
// console.log("作品列表6789077")
@ -668,8 +657,9 @@ class Listofworks extends Component {
code_review: result.data.code_review,
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);
}
} }
}).catch((error) => {
console.log(error)
this.setState({
@ -687,55 +677,58 @@ class Listofworks extends Component {
//debug=t 是老师的意思
// console.log(ordervlue)7009
var homeworkid = this.props.match.params.homeworkid;
let urll = `/homework_commons/${homeworkid}/works_list.json?`;
var order = "asc";
if (ordervlue === "update_time") {
order = "desc";
}
var checkedValuesines = checkedValuesine;
var checkedValuesineinfos = checkedValuesineinfo;
var searchtexts = searchtext
var data = {
search: searchtexts,
order: ordervlue,
b_order: order,
work_status: checkedValuesines,
course_group: checkedValuesineinfos,
page: page,
limit: limit,
}
// console.log("Startsorting");
// console.log(data);
axios.post(urll, data).then((result) => {
// if (result.status === 200) {/]
// console.log(url)
// console.log("作品列表______________________")
// console.log(JSON.stringify(result))
if (result !== undefined) {
var homeworkid = this.props.match.params.homeworkid;
let urll = `/homework_commons/${homeworkid}/works_list.json?`;
var order = "asc";
if (ordervlue === "update_time") {
order = "desc";
}
var checkedValuesines = checkedValuesine;
var checkedValuesineinfos = checkedValuesineinfo;
var searchtexts = searchtext
var data = {
search: searchtexts,
order: ordervlue,
b_order: order,
work_status: checkedValuesines,
course_group: checkedValuesineinfos,
page: page,
limit: limit,
}
// console.log("Startsorting");
// console.log(data);
axios.post(urll, data).then((result) => {
// if (result.status === 200) {/]
// console.log(url)
// console.log("作品列表______________________")
// console.log(JSON.stringify(result))
if(this.props.isNotMember()===false){
if (result !== undefined) {
this.setState({
teacherdata: result.data,
task_status: result.data.task_status,
course_group_info: result.data.course_group_info,
loadingstate: false,
jobsettingsdata: result,
allow_late:result.data.allow_late,
publish_immediately: result.data.publish_immediately,
work_efficiency: result.data.work_efficiency,
end_immediately: result.data.end_immediately,
code_review: result.data.code_review,
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);
}
}
// }
}).catch((error) => {
console.log(error)
this.setState({
teacherdata: result.data,
task_status: result.data.task_status,
course_group_info: result.data.course_group_info,
loadingstate: false,
jobsettingsdata: result,
allow_late:result.data.allow_late,
publish_immediately: result.data.publish_immediately,
work_efficiency: result.data.work_efficiency,
end_immediately: result.data.end_immediately,
code_review: result.data.code_review,
challenges_count:result.data.challenges_count,
loadingstate: false
})
this.seacthdata(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,page);
}
// }
}).catch((error) => {
console.log(error)
this.setState({
loadingstate: false
})
})
}
@ -1348,18 +1341,19 @@ class Listofworks extends Component {
// 已超出文件导出的上限数量100 ),建议:
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:500
})
}
}else {
window.open(url, '_blank');
this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
}
}).catch((error) => {
console.log(error)
@ -1372,6 +1366,10 @@ class Listofworks extends Component {
DownloadMessageval:undefined
})
}
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() {
// console.log("Listofworks.js000")
@ -1381,7 +1379,7 @@ class Listofworks extends Component {
// console.log(course_group_info)
// console.log(JSON.stringify(this.props));
return (
<div className="newMain clearfix ">
<div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{visible === true ? <ModulationModal
visible={visible}
Cancel={this.cancelModulationModel}
@ -1455,50 +1453,21 @@ class Listofworks extends Component {
typs={this.state.typs}
/>
<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="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list">
<Link className="active"
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}/questions`}>作业问答</Link>
<a className="active" onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
<a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
{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.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>
onClick={(e)=>this.ChangeTab(2)}>
代码查重</a> : ""}
<a
onClick={(e)=>this.ChangeTab(3)}
>设置</a>
{/*{this.props.isAdmin() ? <a*/}
{/* className="fr color-blue font-16"*/}
{/* href={`/api/homework_commons/${this.props.match.params.coursesId}/works_list.xlsx`}*/}
@ -1533,18 +1502,18 @@ class Listofworks extends Component {
</li>:""}
{this.props.isAdmin() ?
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() ?
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.state.code_review === false ?
""
: <a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a> : ""}
teacherdata && teacherdata.code_review === true ?
<a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a>
: "": ""}
</div>
</div>
@ -1764,4 +1733,32 @@ 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',
align: "center",
className:'font-14',
width:'100px',
render: (text, record) => (
<span>
{record.name === undefined ?
@ -158,7 +159,7 @@ class Listofworksstudentone extends Component {
dataIndex: 'classroom',
align: "center",
className:'font-14',
width:'288px',
width:'260px',
render: (text, record) => (
<span>
<span style={{
@ -176,13 +177,13 @@ class Listofworksstudentone extends Component {
className:'font-14',
render: (text, record) => (
<span>
<span style={record.submitstate === "延时提交" ? {
"color": '#DD1717',
"text-align": "center"
} : record.submitstate === "按时提交" ? {"color": '#29BD8B', "text-align": "center"} : {
"color": '#747A7F',
"text-align": "center"
}}>{record.submitstate === undefined ? "--" : record.submitstate === "" ? "--" : record.submitstate === null ? "--" : record.submitstate}</span>
<span style={record.submitstate === "延时提交" ? {
"color": '#DD1717',
"text-align": "center"
} : record.submitstate === "按时提交" ? {"color": '#29BD8B', "text-align": "center"} : {
"color": '#747A7F',
"text-align": "center"
}}>{record.submitstate === undefined ? "--" : record.submitstate === "" ? "--" : record.submitstate === null ? "--" : record.submitstate}</span>
</span>
),
@ -214,6 +215,57 @@ class Listofworksstudentone extends Component {
</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: '最终成绩',
dataIndex: 'levelscore',
@ -258,12 +310,14 @@ class Listofworksstudentone extends Component {
),
},
],
work_efficiency:true,
}
//
}
componentDidMount() {
console.log("Listofworksstudentone");
console.log("componentDidMount");
var homeworkid = this.props.match.params.homeworkid;
this.Getalistofworks(homeworkid);
let query = this.props.location.pathname;
@ -294,28 +348,35 @@ class Listofworksstudentone extends Component {
course_group: "",
}
axios.post(urll, data).then((result) => {
if (result.status === 200) {
this.setState({
teacherdata: result.data,
task_status: result.data.task_status,
course_group_info: result.data.course_group_info,
student_works: result.data.student_works,
jobsettingsdata: result,
publish_immediately: result.data.publish_immediately,
end_immediately: result.data.end_immediately,
id: result.data.id,
work_efficiency: result.data.work_efficiency,
code_review: result.data.code_review,
challenges_count:result.data.challenges_count,
view_report:result.data.view_report,
})
if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") {
this.seacthdata(result.data);
} else {
this.seacthdatas(result.data,result.data.student_works);
}
if(result === undefined){
return
}
if (result.status === 200) {
if(this.props.isNotMember()===false) {
this.setState({
teacherdata: result.data,
task_status: result.data.task_status,
course_group_info: result.data.course_group_info,
student_works: result.data.student_works,
jobsettingsdata: result,
publish_immediately: result.data.publish_immediately,
end_immediately: result.data.end_immediately,
id: result.data.id,
work_efficiency: result.data.work_efficiency,
code_review: result.data.code_review,
challenges_count: result.data.challenges_count,
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) === "[]") {
this.seacthdata(result.data);
} else {
this.seacthdatas(result.data, result.data.student_works);
}
}
}
}).catch((error) => {
console.log(error)
})
@ -364,6 +425,7 @@ class Listofworksstudentone extends Component {
challenges_count:result.data.challenges_count,
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) === "[]") {
this.seacthdata(result.data);
} else {
@ -387,14 +449,20 @@ class Listofworksstudentone extends Component {
}
seacthdatas = (teacherdata,student_works) => {
let {page, limit} = this.state;
let {page, limit,work_efficiency} = this.state;
let datalist = [];
let datalists = [];
var styletable = {"display": "none"}
var arr =[];
for(var i=0;i<this.state.columns.length;i++){
var item = this.state.columns[i];
if(this.props.isNotMember()===true&&item.title==="学号") {
if (work_efficiency === false) {
if(item.title==="关卡得分"){
}
else if(item.title==="效率分"){
}
}
if(this.props.isNotMember()===true&&item.title==="学号") {
}else{
arr.push(item);
@ -475,7 +543,7 @@ class Listofworksstudentone extends Component {
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,
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,
operating: "查看",
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({
@ -514,7 +577,14 @@ class Listofworksstudentone extends Component {
var arr =[];
for(var i=0;i<this.state.columns.length;i++){
var item = this.state.columns[i];
if(this.props.isNotMember()===true&&item.title==="学号") {
if (this.state.work_efficiency === false) {
if (item.title === "关卡得分") {
} else if (item.title === "效率分") {
}
}
if(this.props.isNotMember()===true&&item.title==="学号") {
}else{
arr.push(item);
@ -577,6 +647,8 @@ class Listofworksstudentone extends Component {
}
// console.log("datalistdatalist文件");
// console.log(datalist);
// console.log("645");
// console.log(columns2);
this.setState({
data: datalist,
teacherlist: teacherlist,
@ -703,6 +775,7 @@ class Listofworksstudentone extends Component {
if (result !== undefined) {
// console.log("学生公开的作品列表")
// console.log(JSON.stringify(result))
if(this.props.isNotMember()===false) {
this.setState({
teacherdata: result.data,
task_status: result.data.task_status,
@ -717,7 +790,9 @@ class Listofworksstudentone extends Component {
challenges_count:result.data.challenges_count,
view_report:result.data.view_report,
})
this.seacthdata(result.data);
this.props.Getdataback(result,result.data);
this.seacthdata(result.data);
}
}
}).catch((error) => {
console.log(error)
@ -768,13 +843,18 @@ class Listofworksstudentone extends Component {
});
}
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() {
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 (
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>
{`
.startbox{
@ -844,44 +924,18 @@ class Listofworksstudentone extends Component {
}
<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="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list">
<Link className="active"
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}/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"}
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${teacherdata === undefined ? "" : teacherdata.id}/shixun_work_report`}>
<a className="active" onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
<a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
<a
onClick={(e)=>this.ChangeTab(3)}
>设置</a>
{this.state.view_report===true?<a className="fr color-blue font-16" target={"_blank"}
href={`/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>*/}
{
teacherdata === undefined ? ""
@ -953,7 +1007,7 @@ class Listofworksstudentone extends Component {
}
`}</style>
<div className="edu-table edu-back-white ">
{data === undefined ? "" : <Table
{data === undefined ? "222222" : <Table
dataSource={data}
columns={columns}
pagination={false}
@ -1025,13 +1079,9 @@ class Listofworksstudentone extends Component {
<div className="edu-back-white">
<div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list">
<Link className="active"
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}/questions`}>作业问答</Link>
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`}
>设置</Link>
<Link className="active" onClick={(e)=>this.ChangeTab(0)}>作品列表</Link>
<Link onClick={(e)=>this.ChangeTab(1)}>作业问答</Link>
<Link onClick={(e)=>this.ChangeTab(3)}>设置</Link>
{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`}>
查看实训报告
@ -1132,7 +1182,7 @@ class Listofworksstudentone extends Component {
<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>
{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}>
计算成绩
</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 moment from 'moment';
import 'moment/locale/zh-cn';
import {Base64} from 'js-base64';
const Search = Input.Search;
const CheckboxGroup = Checkbox.Group;
@ -74,6 +73,8 @@ class ShixunStudentWork extends Component {
}
componentDidMount() {
console.log("ShixunStudentWork");
console.log("componentDidMount");
this.getupdata();
this.getTrainingjobsetting();
}
@ -88,6 +89,8 @@ class ShixunStudentWork extends Component {
jobsettingsdata: result,
})
this.props.Getdataback(result,result.data);
}
})
}
@ -135,6 +138,10 @@ class ShixunStudentWork extends Component {
this.setState({
duplicatechecking: true
})
notification.open({
message:"提示",
description: response.data.message
});
}
if (response.data.status === -1) {
@ -144,6 +151,8 @@ class ShixunStudentWork extends Component {
});
}
}).catch((error) => {
console.log(error)
});
@ -197,6 +206,10 @@ class ShixunStudentWork extends Component {
this.setState({
duplicatechecking: true
})
notification.open({
message:"提示",
description: response.data.message
});
}
if (response.data.status === -1) {
@ -468,18 +481,19 @@ class ShixunStudentWork extends Component {
// 已超出文件导出的上限数量100 ),建议:
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:500
})
}
}else {
window.open(url, '_blank');
this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
}
}).catch((error) => {
console.log(error)
@ -492,6 +506,9 @@ class ShixunStudentWork extends Component {
DownloadMessageval:undefined
})
}
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() {
let {
data,
@ -572,7 +589,7 @@ class ShixunStudentWork extends Component {
}
return (
<div className="newMain clearfix ">
<div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{this.state.showmodel===true?<ShixunWorkModal
{...this.props}
visible={this.state.showmodel}
@ -609,57 +626,14 @@ class ShixunStudentWork extends Component {
typs={this.state.typs}
/>
<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="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list">
{/*<Link*/}
{/* to={`/courses/${this.state.props.match.params.coursesId}/${this.state.props.match.params.homeworkid}/listofworks`}>作品列表(教师)</Link>*/}
{this.props.isAdmin() === true?
<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>
<a onClick={(e)=>this.ChangeTab(0)}>作品列表</a>:
<a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
{this.props.isAdmin()?<a className="active" onClick={(e)=>this.ChangeTab(2)}>代码查重</a>:""}
<a onClick={(e)=>this.ChangeTab(3)}>设置</a>
<style>{`
.drop_down_menu li a {
padding: 0px;
@ -691,15 +665,11 @@ class ShixunStudentWork extends Component {
</li> : ""}
{this.props.isAdmin()?
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()?
data&&data.publish_immediately===true?
<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>*/}
{/*:"":""}*/}
<a className="fr color-blue font-16" onClick={this.homeworkstart}>立即发布</a> : "": ""}
</div>
</div>
<style>
@ -741,7 +711,7 @@ class ShixunStudentWork extends Component {
</style>
{data&&data?
<div>
<div style={{display:duplicatechecking===false?"":"none"}}>
<ul className="clearfix" style={{padding: '20px 16px 10px'}}>
<li className="clearfix ">

@ -95,7 +95,7 @@ class ShixunWorkDetails extends Component {
</div>
<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="fr mt4">

@ -1,5 +1,5 @@
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 {Link,Switch,Route,Redirect} from 'react-router-dom';
import axios from 'axios';
@ -13,14 +13,11 @@ import 'codemirror/mode/cmake/cmake';
import 'codemirror/mode/xml/xml';
import 'codemirror/mode/javascript/javascript';
import 'codemirror/mode/clike/clike';
import '../css/members.css';
import "../common/formCommon.css";
import '../css/Courses.css';
import './style.css';
import moment from 'moment';
import 'moment/locale/zh-cn';
import {Base64} from 'js-base64';
class ShixunWorkReport extends Component {
@ -41,18 +38,19 @@ class ShixunWorkReport extends Component {
// 已超出文件导出的上限数量100 ),建议:
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:500
})
}
}else {
window.open(url, '_blank');
this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
}
}).catch((error) => {
console.log(error)
@ -119,7 +117,7 @@ class ShixunWorkReport extends Component {
<span className={"color-grey-9"}>{data&&data.category.category_name}</span>
</WordsBtn>
<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>
<WordsBtn className="fl">{data&&data.username}</WordsBtn>
</p>
@ -142,7 +140,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set bor-bottom-greyE">
<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
data={data}
@ -154,7 +152,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set">
<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
data={data}
@ -168,11 +166,10 @@ class ShixunWorkReport extends Component {
style={{display:data&&data.work_description===null?"none":""}}
>
<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>
{`
.personalsummary{
height:115px;
border:1px solid rgba(235,235,235,1);
border-radius:2px;
}
@ -194,7 +191,9 @@ class ShixunWorkReport extends Component {
</style>
<div className={"pad040"}>
<div className={"personalsummary"}>
{data&&data.work_description}
<div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(data&&data.work_description).replace(/▁/g, "▁▁▁")}}></div>
</div>
</div>
</div>
@ -202,7 +201,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set bor-bottom-greyE">
<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
data={data}
/>
@ -212,7 +211,7 @@ class ShixunWorkReport extends Component {
<div className="stud-class-set bor-bottom-greyE">
<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>
{`
.poll_list a{

@ -294,19 +294,19 @@ class ShixunhomeWorkItem extends Component{
{/*/courses/1309/9373/listofworks*/}
{/*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>:""
}
{
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>:""
}
{
this.props.isNotMember===true? this.props.discussMessage.private_icon===true?
<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>:""
}
@ -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"}}>
<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>:""}
<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>:""}

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

@ -180,14 +180,15 @@ class ShixunWorkModal extends Component{
group_ids: group_ids,
})
.then((response) => {
// console.log(this.props)
if (response.data.status === 0) {
this.props.updatas()
this.props.issCancel()
notification.open({
message:"提示",
description: response.data.message
});
console.log(this.props)
// notification.open({
// message:"提示",
// description: response.data.message
// });
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){
notification.open({
message:"提示",
@ -223,7 +224,7 @@ class ShixunWorkModal extends Component{
let {course_groups,group_ids,onChangetype,group_list}=this.state;
// let {data}=this.props;
// console.log(group_list)
console.log(group_list)
// console.log(group_list)
return(
<div>
<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>
</div>
{/*<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>
{/*这里到时候要做判断*/}

@ -1,10 +1,9 @@
import React, {Component} from "react";
import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal";
import {WordsBtn, ActionBtn, handleDateString} from 'educoder';
import {WordsBtn, ActionBtn, handleDateString,getImageUrl} from 'educoder';
import PollDetailTabForthRules from '../poll/PollDetailTabForthRules';
import ShixunWorkModal from './Shixunworkdetails/ShixunWorkModal';
import {Base64} from 'js-base64';
import {
Button,
Checkbox,
@ -13,7 +12,7 @@ import {
DatePicker,
Radio,
Tooltip,
notification
notification,
} from "antd";
import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -113,7 +112,8 @@ class Trainingjobsetting extends Component {
group_settings:undefined,
rulesdata:[],
showmodel:false,
code_review:false
code_review:false,
testscripttiptype:false,
}
// console.log("获取到的值")
// console.log("Trainingjobsetting")
@ -125,6 +125,8 @@ class Trainingjobsetting extends Component {
}
componentDidMount() {
console.log("Trainingjobsetting");
console.log("componentDidMount");
this.getTrainingjobsetting();
let query = this.props.location.pathname;
const type = query.split('/');
@ -143,46 +145,52 @@ class Trainingjobsetting extends Component {
// console.log(homeworkid)
let url = `/homework_commons/${homeworkid}/settings.json`;
axios.get(url).then((result) => {
console.log(url);
console.log(result);
if (result!=undefined) {
// console.log(result.data.code_review)
this.props.Getdataback(result,result.data);
// console.log(result.data.code_review)
// console.log("设置页")
// console.log(JSON.stringify(result))
let array=[];
let arrays=[];
var rulesdatas=[];
if(result.data.group_settings.length === 0){
array.push({
course_group_id:[],
course_group_name:[],
publish_time:undefined,
end_time:undefined,
publish_flag:"",
end_flag:"",
class_flag:"",
course_search:"",
open:false
})
}else {
for(var i=0;i<result.data.group_settings.length;i++) {
if(result.data.group_settings[i].publish_time === null &&result.data.group_settings[i].end_time === null){
}else {
array.push({
course_group_id: result.data.group_settings[i].group_id,
course_group_name: result.data.group_settings[i].group_name,
publish_time: result.data.group_settings[i].publish_time,
end_time: result.data.group_settings[i].end_time,
publish_flag: "",
end_flag: "",
class_flag: "",
course_search: "",
open: false
})
if(result.data.group_settings !== undefined){
if(result.data.group_settings.length === 0){
array.push({
course_group_id:[],
course_group_name:[],
publish_time:undefined,
end_time:undefined,
publish_flag:"",
end_flag:"",
class_flag:"",
course_search:"",
open:false
})
}else {
for(var i=0;i<result.data.group_settings.length;i++) {
if(result.data.group_settings[i].publish_time === null &&result.data.group_settings[i].end_time === null){
}else {
array.push({
course_group_id: result.data.group_settings[i].group_id,
course_group_name: result.data.group_settings[i].group_name,
publish_time: result.data.group_settings[i].publish_time,
end_time: result.data.group_settings[i].end_time,
publish_flag: "",
end_flag: "",
class_flag: "",
course_search: "",
open: false
})
}
}
}
}
for(var i=0;i<result.data.group_settings.length;i++){
if(result.data.group_settings!== undefined){
for(var i=0;i<result.data.group_settings.length;i++){
arrays.push({
course_group_id:result.data.group_settings[i].group_id,
@ -192,20 +200,22 @@ class Trainingjobsetting extends Component {
course_choosed:0,
})
if(result.data.group_settings[i].group_id instanceof Array ) {
rulesdatas.push({
group_id:result.data.group_settings[i].group_id,
publish_time: moment( result.data.group_settings[i].publish_time).format('YYYY-MM-DD HH:mm') ,
end_time: moment(result.data.group_settings[i].end_time ).format('YYYY-MM-DD HH:mm'),
})
}else {
rulesdatas.push({
group_id:[result.data.group_settings[i].group_id],
publish_time: moment( result.data.group_settings[i].publish_time).format('YYYY-MM-DD HH:mm') ,
end_time: moment(result.data.group_settings[i].end_time ).format('YYYY-MM-DD HH:mm'),
})
if(result.data.group_settings[i].group_id instanceof Array ) {
rulesdatas.push({
group_id:result.data.group_settings[i].group_id,
publish_time: moment( result.data.group_settings[i].publish_time).format('YYYY-MM-DD HH:mm') ,
end_time: moment(result.data.group_settings[i].end_time ).format('YYYY-MM-DD HH:mm'),
})
}else {
rulesdatas.push({
group_id:[result.data.group_settings[i].group_id],
publish_time: moment( result.data.group_settings[i].publish_time).format('YYYY-MM-DD HH:mm') ,
end_time: moment(result.data.group_settings[i].end_time ).format('YYYY-MM-DD HH:mm'),
})
}
}
}
this.setState({
rules:array,
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,
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,
allowreplenishment: result.data.allow_late === true ? "允许补交" : "禁止补交",
allowreplenishment: result.data.allow_late,
latededuction: result.data.late_penalty,
level: result.data.answer_open_evaluation === true ? "满分" : "扣分",
completionefficiencyscore: result.data.work_efficiency,
@ -232,10 +242,6 @@ class Trainingjobsetting extends Component {
challenge_settings: result.data.challenge_settings,
code_review:result.data.code_review
})
}
})
@ -263,7 +269,7 @@ class Trainingjobsetting extends Component {
if (datas[i].checked === true) {
var object = {
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);
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 === "") {
@ -410,7 +416,7 @@ class Trainingjobsetting extends Component {
if (this.state.allowreplenishment === "允许补交") {
if (this.state.allowreplenishment === true) {
if (this.state.latededuction === undefined) {
this.props.showNotification(`请输入迟交扣分数`);
@ -531,7 +537,7 @@ class Trainingjobsetting extends Component {
unified_setting: this.state.unifiedsetting, //统一配置
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'), //截止时间
allow_late: this.state.allowreplenishment === "允许补交" ? true : false, //补交
allow_late: this.state.allowreplenishment, //补交
late_penalty: parseInt(this.state.latededuction), //迟交扣分
late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间
answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项
@ -547,7 +553,7 @@ class Trainingjobsetting extends Component {
data = {
unified_setting: this.state.unifiedsetting, //非统一配置
group_settings: this.state.rulesdata,
allow_late: this.state.allowreplenishment === "允许补交" ? true : false, //补交
allow_late: this.state.allowreplenishment, //补交
late_penalty: parseInt(this.state.latededuction), //迟交扣分
late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间
answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项
@ -652,9 +658,8 @@ class Trainingjobsetting extends Component {
//允许补交
onChanges = (e) => {
// console.log("640");
// 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){
// console.log(this.state.end_time);
// var times = this.state.deadline.format('YYYY-MM-DD HH:mm');
@ -666,16 +671,19 @@ class Trainingjobsetting extends Component {
this.setState({
allowreplenishment: e.target.value,
allowreplenishment: e.target.checked,
latededuction:5,
whethertopay:true,
})
}else {
this.setState({
allowreplenishment: e.target.value,
allowreplenishment: e.target.checked,
latededuction:0,
whethertopay:false,
hand__e_tip: "",
hand_flags: false,
handclass:"",
})
}
@ -693,11 +701,11 @@ class Trainingjobsetting extends Component {
this.state.proportion=e.target.value
if (e.target.value === "均分比例") {
this.Equalproportion();
this.Equalproportion(this.state.latedeductiontwo);
}
if (e.target.value === "经验值比例") {
this.Empiricalvalueratio();
this.Empiricalvalueratio(this.state.latedeductiontwo);
}
if (e.target.value === "自定义分值") {
@ -717,11 +725,11 @@ class Trainingjobsetting extends Component {
}
onChangeslevelproportiontwo=(value)=>{
if (value === "均分比例") {
this.Equalproportion();
this.Equalproportion(this.state.latedeductiontwo);
}
if (value === "经验值比例") {
this.Empiricalvalueratio();
this.Empiricalvalueratio(this.state.latedeductiontwo);
}
if (value=== "自定义分值") {
@ -739,9 +747,9 @@ class Trainingjobsetting extends Component {
})
}
//均分比例
Equalproportion = () => {
Equalproportion = (latedeductiontwo) => {
var challenge_settingsdata=this.state.challenge_settings;
var latedeductiontwos=this.state.latedeductiontwo;
var latedeductiontwos=latedeductiontwo;
if(latedeductiontwos === undefined || latedeductiontwos===null || latedeductiontwos===""){
latedeductiontwos=0;
}
@ -774,15 +782,22 @@ class Trainingjobsetting extends Component {
var intkks=0;
if(srbool==true){
// 奇数
var exams = Math.round(Proportion)
var exams = parseFloat(Proportion.toFixed(1));
var intk = srorelength*exams;
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 {
// 偶数
var examsy = Math.round(Proportion)
var examsy =parseFloat(Proportion.toFixed(1));
intkks=oushution - (examsy*srorelength);
console.log("偶数");
console.log(oushution);
console.log((examsy*srorelength));
}
var mact=0;
@ -790,20 +805,23 @@ class Trainingjobsetting extends Component {
for (var i=0;i<challenge_settingsdata.length;i++){
if(challenge_settingsdata[i].checked === true) {
if(srbool===false){
console.log(intkks);
mact=mact+1;
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 {
challenge_settingsdata[i].challenge_score = Math.round(Proportion);
challenge_settingsdata[i].challenge_score = Proportion.toFixed(1);
}
}else{
console.log(intkk);
mact=mact+1;
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 {
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 challenge_settingsdata=this.state.challenge_settings;
var latedeductiontwos=this.state.latedeductiontwo;
var latedeductiontwos=latedeductiontwo;
if(latedeductiontwos === undefined || latedeductiontwos===null || latedeductiontwos===""){
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++){
if(challenge_settingsdata[i].checked===true) {
mact=mact+1;
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{
challenge_settingsdata[i].challenge_score =0;
}
}
}
}
}
@ -873,10 +930,10 @@ class Trainingjobsetting extends Component {
})
//均分比例
if(this.state.proportion==="均分比例"){
this.Equalproportion();
this.Equalproportion(20);
}else if(this.state.proportion==="经验值比例"){
this.Empiricalvalueratio();
this.Empiricalvalueratio(20);
}
@ -889,10 +946,10 @@ class Trainingjobsetting extends Component {
})
//均分比例
if(this.state.proportion==="均分比例"){
this.Equalproportion();
this.Equalproportion(0);
}else if(this.state.proportion==="经验值比例"){
this.Empiricalvalueratio();
this.Empiricalvalueratio(0);
}
}
@ -959,6 +1016,14 @@ class Trainingjobsetting extends Component {
this.setState({
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;
for (var i = 0; i < challenge_settings.length; i++) {
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({
publish_time:moment(handleDateString(dateString))
})
if(this.state.allowreplenishment === "允许补交") {
if(this.state.allowreplenishment === true) {
this.setState({
end_time:moment(handleDateString(dateString)).add(1, 'months'),
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))
})
// this.onChangedata('end_time', value, dateString);
if(this.state.allowreplenishment === "允许补交"){
if(this.state.allowreplenishment === true){
this.setState({
deadline:moment(handleDateString(dateString)).format('YYYY-MM-DD HH:mm'),
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()){
endtime=false;
}
if(this.state.allowreplenishment === "禁止补交"){
if(this.state.allowreplenishment === false){
whethertopays=false;
}
this.setState({
@ -1619,18 +1684,19 @@ class Trainingjobsetting extends Component {
if(response.data.messages === "100"){
// 已超出文件导出的上限数量100 ),建议:
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:500
})
}
}else {
window.open(url, '_blank');
this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
}
}).catch((error) => {
console.log(error)
@ -1643,18 +1709,40 @@ class Trainingjobsetting extends Component {
DownloadMessageval:undefined
})
}
testscripttip =(e)=>{
if(e === 0){
this.setState({
testscripttiptype:true,
})
}else {
this.setState({
testscripttiptype:false,
})
}
}
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() {
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 = {
display: 'block',
height: '30px',
lineHeight: '30px',
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 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.state.code_review===false)
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.props}
visible={this.state.showmodel}
@ -1711,43 +1799,12 @@ class Trainingjobsetting extends Component {
modalSave={modalSave}
></Modals>
<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="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list">
{this.props.isAdmin() === true ? <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.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> : ""}
<a onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
<a onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
{this.props.isAdmin()?this.state.code_review===true||jobsettingsdata === undefined ? [""] : jobsettingsdata.data.homework_status[0]==="未发布"?"": <a onClick={(e)=>this.ChangeTab(2)}>代码查重</a> : ""}
<style>{
`
.poll_list a.active:after {
@ -1761,12 +1818,9 @@ class Trainingjobsetting extends Component {
}
`
}</style>
<Link className="active"
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`}
>设置</Link>
{/*<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>*/}
<a className="active"
onClick={(e)=>this.ChangeTab(3)}
>设置</a>
<style>{`
.drop_down_menu li a {
padding: 0px;
@ -1797,13 +1851,13 @@ class Trainingjobsetting extends Component {
</ul>
</li>: ""}
{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?
<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.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>
{/*发布设置*/}
@ -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>
{
!flagPageEdit && this.props.isAdmin() === true ?
<a className="fr" onClick={this.editSetting}><Tooltip title="编辑"><i
className="iconfont icon-bianjidaibeijing font-20 color-green pr20 "></i></Tooltip></a>
<a className="fr" onClick={this.editSetting}><i
className="iconfont font-16 pr20 " style={{color:"#333333"}}>编辑</i></a>
: ""
}
</p>
@ -1824,7 +1878,7 @@ class Trainingjobsetting extends Component {
<Checkbox className="ml15 font-16" style={{"color":"#666666"}} onChange={this.onChange}
checked={this.state.unifiedsetting}
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>
}
@ -1864,7 +1918,7 @@ class Trainingjobsetting extends Component {
/>
</div>
</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>
<p className="color-red lineh-25 clearfix" style={{height:"25px"}}>
{
@ -1898,7 +1952,7 @@ class Trainingjobsetting extends Component {
</div>
</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>
<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={"font-16 color-dark fl pl20 mt10 "} style={{"color":"#05101A"}}>补交设置</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}
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"}>
<div className={"h21 mb30 mt20"}>
<span style={{"width": "100px","color":"#999999"}}>迟交扣分</span>
<style>
{
@ -1952,11 +2006,11 @@ class Trainingjobsetting extends Component {
style={{"color":"#999999","height": "40px"}}
value={this.state.latededuction}/>
<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>:""}*/}
</div>
<div className={"h20 mb50 ml30"}>
<div className={"h20 mb20 "}>
<span style={{"width": "100px","color":"#999999"}}>结束时间</span>
<DatePicker
showToday={false}
@ -1975,7 +2029,7 @@ class Trainingjobsetting extends Component {
dropdownClassName="hideDisable"
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>:""}*/}
<style>
{
@ -1992,8 +2046,8 @@ class Trainingjobsetting extends Component {
}
</p>
</div>
<Radio style={radioStyle} value={"禁止补交"} disabled={!flagPageEdit}>禁止补交</Radio>
</RadioGroup>
{/*<Radio style={radioStyle} value={"禁止补交"} disabled={!flagPageEdit}>禁止补交</Radio>*/}
</div>
<div className="h20 mb10 "></div>
</div>
{/*评分设置*/}
@ -2001,26 +2055,23 @@ class Trainingjobsetting extends Component {
<div className=" clearfix edu-back-white poll_list mt20">
<div className={"font-16 color-dark fl pl20 "} style={{"color":"#05101A"}}>评分设置</div>
</div>
<p className="ml40 mt20 c_grey font-13 " style={{"color":"#666666"}}> 查看参考答案才通过评测的关卡扣分规则<span
className=" font-14 color-grey-9 ml15" style={{"text-align":"left"}}>(学生通过评测后再查看参考答案不对成绩产生影响)</span></p>
<RadioGroup className="ml60 mt20" onChange={this.onChangeslevel} value={this.state.level}>
<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 className="yslflexhomes">
<div style={{width:"700px"}}>
<div className="ml20 mt10 mt20">
<span className="c_grey font-13" style={{"color":"#333333"}}> 关卡任务的选择和分值设置 </span><span className="ml15 font-14 color-grey-c" style={{"text-align":"left"}}>( = + )</span>
</div>
<div className=" clearfix edu-back-white poll_list mt10" style={{marginLeft:" 40px"}}>
<Checkbox disabled={!flagPageEdit} className=" font-13 mt10"
onChange={this.onChangeeffectiveness}
checked={this.state.completionefficiencyscore} style={{"color":"#666666"}}>效率分<span
className={"font-14 color-grey-c font-14 ml15"} style={{"text-align":"left"}}>(选中则学生最终成绩包含效率分)</span>
</Checkbox>
<div>
</div>
<div className=" clearfix edu-back-white poll_list mt10">
<Checkbox disabled={!flagPageEdit} className="ml60 font-13 mt20"
onChange={this.onChangeeffectiveness}
checked={this.state.completionefficiencyscore} style={{"color":"#666666"}}>效率分<span
className={"font-14 color-grey-9 font-14 ml15"} style={{"text-align":"left"}}>(选中则学生最终成绩包含效率分)</span></Checkbox>
</div>
<div className="ml85 mt30">
<div className=" mt20" style={{marginLeft:"75px"}}>
<span className="c_grey mr10" style={{"color":"#999999"}}>分值</span>
<InputNumber min={0} disabled={!flagPageEdit} max={100} className="ml10 h40 mr10 color-grey-9"
style={{width: "100px","color":"#999999"}}
@ -2029,29 +2080,75 @@ class Trainingjobsetting extends Component {
<span className="ml10" style={{"color":"#999999"}}></span>
<span className={"font-14 color-grey-9 "} style={{"color":"#999999"}}></span>
</div>
<RadioGroup className="ml60 mt10" onChange={this.onChangeslevelproportion}
value={this.state.proportion}>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt20"
value={"均分比例"} style={{"color":"#666666"}}>均分比例<span
className="color-grey-9 font-10 ml15" style={{"color":"#999999"}}>(根据任务数平均分配) 例如实训任务5关每一关分值为 1 / 5 * 100 = 20</span></Radio>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt20"
value={"经验值比例"} style={{"color":"#666666"}}>经验值比例 <span
className="color-grey-9 font-10 ml15" style={{"color":"#999999"}}>(根据任务经验值在实训总经验值的比例进行分配) 例如实训总经验值1500某一关经验值为600则这一关的分值为600 / 1500 * 100 = 40
</span></Radio>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt20"
value={"自定义分值"} style={{"color":"#666666"}}>自定义分值 <span
className="color-grey-9 font-10 ml15" style={{"color":"#999999"}}>(手动设置关卡分值)</span></Radio>
</RadioGroup>
<p className="ml95 mt15 c_grey font-13 " style={{"color":"#666666"}}> 关卡名称<span
className="color-grey-9 font-10 ml30s" style={{"color":"#999999"}}>(选中的关卡将计入评分计算范围暂时不支持跳关选择)</span><span
className="color-grey-9 ml90" style={{"color":"#666666"}}>分值</span></p>
<div className="ml95 mt15">
</div>
<div>
<div className="yslflexhomes invite-tipysl" style={{marginTop: "45px"}} >
<span className="to-back-left"></span>
<div className="padding20 invitecontent clearfix" style={{backgroundColor:" #FAFAFA"}}>
<p className="font-12 edu-txt-left">
学生工作效率= log(实训总得分/实训总耗时)<br/>
学生效率分 = 学生工作效率 / 课堂学生最高工作效率 * 分值<br/>
</p>
</div>
</div>
</div>
</div>
<div className="yslflexhome">
<div >
<div className="ml20 mt40 mt20" >
<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) => {
return (
<li>
<Checkbox className="ml110 mt20 "
disabled={!flagPageEditsbox}
style={{"width": "400px","color":"#05101A"}}
style={{"width": "480px","color":"#05101A"}}
checked={object.checked}
onChange={(value) => this.onChangedatasheet(value, index)}
>{object.challenge_name}</Checkbox>
@ -2060,11 +2157,24 @@ class Trainingjobsetting extends Component {
onChange={(value) => this.hangeTopicNametwodatasheet(value, index)}
value={object.challenge_score}
/>
<span className="ml10" style={{"color":"#999999"}}></span>
</li>
)
})}
</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 ">
@ -2074,7 +2184,7 @@ class Trainingjobsetting extends Component {
<div className={"mb20 mt15"}>
<Checkbox disabled={!flagPageEdit} className="ml40" onChange={this.onChangepublicwork}
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>

@ -23,7 +23,6 @@ import {
import {Link, Switch, Route, Redirect} from 'react-router-dom';
import moment from 'moment';
import 'moment/locale/zh-cn';
import {Base64} from 'js-base64';
import axios from 'axios';
import '../css/members.css'
import "../common/formCommon.css"
@ -82,6 +81,8 @@ class Workquestionandanswer extends Component {
}
componentDidMount() {
console.log("Workquestionandanswer");
console.log("componentDidMount");
var homeworkid = this.props.match.params.homeworkid;
// console.log(homeworkid)
this.Gettitleinformation(homeworkid)
@ -109,6 +110,7 @@ class Workquestionandanswer extends Component {
jobsettingsdata: result,
...result.data
})
this.props.Getdataback(result,result.data);
}
}).catch((error) => {
console.log(error)
@ -322,18 +324,19 @@ class Workquestionandanswer extends Component {
if(response.data.messages === "100"){
// 已超出文件导出的上限数量100 ),建议:
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:100
})
}else {
//因附件资料超过500M
this.setState({
DownloadType:false,
DownloadType:true,
DownloadMessageval:500
})
}
}else {
window.open(url, '_blank');
this.props.showNotification(`正在下载中`);
window.open("/api"+url, '_blank');
}
}).catch((error) => {
console.log(error)
@ -345,6 +348,9 @@ class Workquestionandanswer extends Component {
DownloadMessageval:undefined
})
}
ChangeTab=(e)=>{
this.props.ChangeTab(e);
}
render() {
const dateFormat = 'YYYY-MM-DD HH:mm:ss';
let {
@ -364,7 +370,7 @@ class Workquestionandanswer extends Component {
return (
<div className="newMain clearfix ">
<div className=" clearfix " style={{margin: "auto" ,paddingBottom: "235px", minWidth:"1200px"}}>
{this.state.showmodel === true ? <ShixunWorkModal
{...this.props}
visible={this.state.showmodel}
@ -400,58 +406,22 @@ class Workquestionandanswer extends Component {
typs={this.state.typs}
/>
<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="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white poll_list">
{this.props.isAdmin() === true ? <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.shixuntypes}/${this.state.props.match.params.homeworkid}/noopenlist`}>作品列表(学生完成)</Link>
}
<Link
className="active"
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/questions`}>作业问答</Link>
<a onClick={(e)=>this.ChangeTab(0)}>作品列表</a>
<a className="active" onClick={(e)=>this.ChangeTab(1)}>作业问答</a>
{this.props.isAdmin() ?
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.shixuntypes}/${this.state.props.match.params.homeworkid}/student_work`}>
代码查重</Link> : ""}
onClick={(e)=>this.ChangeTab(2)}>
代码查重</a> : ""}
<Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`}
>设置</Link>
{/*<a className="fr color-blue font-16" href={`/api/homework_commons/${this.props.match.params.coursesId}/works_list.xls`}>导出成绩</a>*/}
<a
onClick={(e)=>this.ChangeTab(3)}
>设置</a>
<style>{`
.drop_down_menu li a {
padding: 0px;
@ -483,15 +453,19 @@ class Workquestionandanswer extends Component {
</ul>
</li> : ""}
{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 ?
<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.state.code_review === true ?
jobsettingsdata && jobsettingsdata.data.code_review === true ?
<a className="fr color-blue font-16" onClick={this.workshowmodel}>代码查重</a>
: "" : ""}
: "" : ""}
</div>
</div>
@ -509,7 +483,7 @@ class Workquestionandanswer extends Component {
}
</style>
<div className={"font-16 color-dark fl pl20 "}>
<div
<div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.description).replace(/▁/g, "▁▁▁")}}></div>
{/* /!*{}}></div>
{/* /!*{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>
</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.data.explanation === undefined ? "无" : jobsettingsdata.data.explanation === null ? "无" :
<div
<div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.explanation).replace(/▁/g, "▁▁▁")}}></div>
}

@ -57,9 +57,10 @@ class OfficialAcademicTranscript extends Component {
title: '任务名称',
dataIndex: 'taskname',
key: 'taskname',
className:"TaskForms",
render: (text, record) => (
<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>:""}
</span>
),
@ -152,17 +153,30 @@ class OfficialAcademicTranscript extends Component {
font-size:14px;
}
.task-hide{
max-width: 345px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 345px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ant-table-tbody > tr{
height:64px;
}
.tasknameName:link{color:#676767}
.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>
{datas===undefined?"":<Table

@ -67,7 +67,7 @@ class StudentHomework extends Component{
</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">

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

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

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

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

@ -58,6 +58,14 @@ class MainContent extends Component {
font-family: 微软雅黑,宋体 !important;
overflow: hidden !important;
}
.can-drag {
width: 100%;
height: 100%;
z-index: 100;
position: fixed;
cursor: col-resize;
top: 0px;
}
`}</style>
<div className="-layout -stretch -fit labelN" id="game_show_content">
<div className="split-panel--first -layout -vertical -flex -relative -flex-basic40"
@ -67,7 +75,7 @@ class MainContent extends Component {
{/* 左侧任务说明等功能的区域 */}
<LeftViewContainer {...newProps}></LeftViewContainer>
</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="resize-helper ">
<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
// successfully connected to a server
function connectedToServer(e) {
$('#top_bar').hide()
status("Connected to " + desktopName);
}
// This function is called when we are disconnected
@ -120,6 +121,9 @@ class VNCDisplay extends Component {
canvas
*/
rfb.scaleViewport = readQueryVariable('scale', false);
rfb.resizeSession = true
window.__rfb == rfb;
}
render() {
@ -127,7 +131,7 @@ class VNCDisplay extends Component {
return (
<div className="">
<div className="" style={{height: '100%'}}>
<style>{`
#top_bar {
background-color: #6e84a3;
@ -148,6 +152,7 @@ class VNCDisplay extends Component {
cursor: pointer;
}
#screen {
height: 100%;
flex: 1; /* fill remaining space */
overflow: hidden;
}

@ -91,7 +91,7 @@ class UpdateDrawer extends Component {
// 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 = `/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 })
axios.get(url, {
// withCredentials: true,

@ -14,36 +14,39 @@ export function ImageLayerOfCommentHOC(options = {}) {
imageSrc: ''
}
}
onDelegateClick = (event) => {
const imageSrc = event.target.src || event.target.getAttribute('src') || event.target.getAttribute('href')
// 判断imageSrc是否是图片
const fileName = event.target.innerHTML.trim()
if (isImageExtension(imageSrc.trim()) || isImageExtension(fileName) || event.target.tagName == 'IMG') {
// 非回复里的头像图片; 非emoticons
if (imageSrc.indexOf('/images/avatars/User') === -1 &&
imageSrc.indexOf('kindeditor/plugins/emoticons') === -1 ) {
this.setState({
showImage: true,
imageSrc,
})
}
event.stopPropagation()
event.preventDefault && event.preventDefault()
event.originalEvent.preventDefault()
// event.originalEvent.stopPropagation()
// event.originalEvent.cancelBubble = true
return false;
}
}
// 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", (event) => {
const imageSrc = event.target.src || event.target.getAttribute('src') || event.target.getAttribute('href')
// 判断imageSrc是否是图片
const fileName = event.target.innerHTML.trim()
if (isImageExtension(imageSrc.trim()) || isImageExtension(fileName)) {
// 非回复里的头像图片; 非emoticons
if (imageSrc.indexOf('/images/avatars/User') === -1 &&
imageSrc.indexOf('kindeditor/plugins/emoticons') === -1 ) {
this.setState({
showImage: true,
imageSrc,
})
}
event.stopPropagation()
event.preventDefault && event.preventDefault()
event.originalEvent.preventDefault()
// event.originalEvent.stopPropagation()
// event.originalEvent.cancelBubble = true
return false;
}
});
}, 3000)
.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 = () => {
this.setState({
showImage: false,

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

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

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

@ -81,10 +81,10 @@ class LeftViewContainer extends Component {
if ( tabIndex === 2 && this.state.gameAnswer === '') { // 参考答案
// 多级答案后换了接口
// 选择题(st === 1)还是走以前的接口
if (true || (this.props.st === 0)) {
if ((this.props.st === 0)) {
this.fetchIfCouldGetAnswerWithoutGoldForMultiLevelAnswer()
} else if (this.props.st === 1) {
this.fetchIfCouldGetAnswerWithoutGold();
this.fetchIfCouldGetAnswerWithoutGoldForChoose();
}
return;
}
@ -337,7 +337,41 @@ class LeftViewContainer extends Component {
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需要扣金币查看
// var getAnswerUrl = `/api/v1/games/${this.props.game.identifier}/answer`;
var getAnswerUrl = `/tasks/${this.props.game.identifier}/answer.json`
@ -445,12 +479,16 @@ class LeftViewContainer extends Component {
const challenge_score = this.props.challenge.score
// 前端计算扣除金币数
let goldToMinuse = 0
for (let i = 0; i < lockedAnswers.length; i++) {
let answer = lockedAnswers[i];
goldToMinuse = goldToMinuse + answer.score * challenge_score / 100;
if (answer.id == paramSelectID) {
break;
if (this.state.isMultiLevelAnswer) {
for (let i = 0; i < lockedAnswers.length; i++) {
let answer = lockedAnswers[i];
goldToMinuse = goldToMinuse + answer.score * challenge_score / 100;
if (answer.id == paramSelectID) {
break;
}
}
} else {
goldToMinuse = challenge_score
}
this.props.readGameAnswer({
@ -474,39 +512,26 @@ class LeftViewContainer extends Component {
console.log(error);
});
}
handleDialogReadAnswer(selectID) {
this.handleMultiLevelAnswer(selectID || this.state.singleAnswerId)
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, {
getChooseAnswer = () => {
const url = `/tasks/${this.props.game.identifier}/unlock_choose_answer.json`
axios.get(url, {
// withCredentials: true,
})
.then((response) => {
// {message: "您没有足够的金币", status: -1}
if (response.data.status == 0) {
this.props.showSnackbar(response.data.message)
this.props.showSnackbar(response.data.message)
return;
}
const gameAnswer = response.data.answer;
const final_score = response.data.final_score;
const gameAnswer = response.data.choose_answers;
// const final_score = response.data.final_score;
const grade = response.data.grade;
this.props.readGameAnswer({
final_score,
grade,
// final_score,
grade: this.props.grade - this.props.challenge.score
})
this.showAnswer(gameAnswer)
@ -516,6 +541,14 @@ class LeftViewContainer extends Component {
console.log(error);
});
}
handleDialogReadAnswer(selectID) {
if (this.props.st === 1) {
// 选择题
this.getChooseAnswer()
} else {
this.handleMultiLevelAnswer(selectID || this.state.singleAnswerId)
}
}
createNewComment = (page) => {
const flag = this.props.createNewComment(page)
if (flag === true) {

@ -342,7 +342,7 @@ class PathDetailIndex extends Component{
<div className="color-grey-6 clearfix">
<div id="shixuns_propaedeutics" className="new_li fl" style={{"padding":" 0px","textAlign": "justify;"}}>
{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>

@ -195,10 +195,10 @@ export default class TPManswer extends Component {
this.setState({ answers: newAnswers})
}
answerOnChange = (val, index) => {
// if (!this.state.answers[index]) {
// // 1、2、3删除2会走到这里
// return;
// }
if (!this.state.answers[index]) {
// 1、2、3删除2会走到这里
return;
}
const newAnswer = Object.assign({}, this.state.answers[index])
newAnswer.contents = val
const newAnswers = this.state.answers.slice(0)
@ -314,7 +314,7 @@ export default class TPManswer extends Component {
{
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>
<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)}>

@ -304,7 +304,7 @@ class Challenges extends Component {
id="challenge_editorMd_description">
<p id="ReactMarkdown" style={{overflow:'hidden'}}>
{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>

@ -25,7 +25,7 @@ class ShixunSearchBar extends Component {
super(props)
this.state = {
status: undefined,
diff: undefined,
diff: 0,
InputValue: undefined,
shixunhoverData: [],
shixunchildValues:'',
@ -238,6 +238,7 @@ render() {
<li className={shixunsearchAllvalue==="a"?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value= "a" onClick={this.shixunsearchall}>全部</li>
{
shixunhoverData.map((item,key)=>{
return(
<li key={key} className={parseInt(shixunsearchAllvalue)===item.id?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value={item.id} onClick={this.shixunsearchAll}>
{item.name}
@ -269,21 +270,48 @@ render() {
</div>
<div className="clearfix">
<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}>*/}
{/*<Option value="0" type="status">全部状态</Option>*/}
{/*<Option value="1" type="status">已发布</Option>*/}
{/*<Option value="2" type="status">未发布</Option>*/}
{/*<Option value="3" type="status">已关闭</Option>*/}
{
<style>
{`
.shaiItems{
padding: 3px 15px;
float: left;
border-radius: 4px;
color: #4C4C4C;
cursor: pointer;
margin-right: 15px;
display: block;
float:left;
}
.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 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>*/}
<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>*/}
{/*<div className="fr mt3">*/}
{/*<Search*/}
{/*style={{ width: 300 }}*/}

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

@ -1,167 +1,168 @@
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0; padding:0;}
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体"; font-size:12px;line-height:1.9; background:#fff;}
div,img,tr,td,table{ border:0;}
table,tr,td{border:0;cellspacing:0; cellpadding:0;}
ol,ul,li{ list-style-type:none}
a:link,a:visited{color:#333;text-decoration:none;}
a:hover,a:active{color:#026434;}
/* 公共 */
.clear:after {content:".";height:0;visibility:hidden;display:block;clear:both;}
.f12{font-size: 12px;}
.fl{ float:left;}
.fr{ float:right;}
.cl{ clear:both; overflow:hidden;}
.fb{ font-weight: bold;}
.mt5{ margin-top:5px;}
.mt10{ margin-top:10px;}
.mt20{ margin-top:20px;}
.mt30{ margin-top:30px;}
.mt50{ margin-top:50px;}
.mb5{ margin-bottom:5px;}
.mb10{ margin-bottom:10px;}
.mb20{ margin-bottom:20px;}
.mb30{ margin-bottom:30px;}
.mb50{ margin-bottom:50px;}
.ml5{ margin-left:5px;}
.ml10{ margin-left:10px;}
.ml15{ margin-left:15px;}
.ml30{margin-left: 30px;}
.ml50{margin-left: 50px;}
.mr5{ margin-right:5px;}
.mr10{ margin-right:15px;}
.mr15{ margin-right:10px;}
.mr45{ margin-right:45px;}
.mr30{ margin-right:30px;}
.mr50{ margin-right:50px;}
.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.clearfix{clear:both;zoom:1}
a.new-btn{display: inline-block;border:none; padding:0 10px;color: #666;background: #e1e1e1; text-align:center;font-size: 12px; height: 30px;border-radius: 3px; line-height: 30px;}
a.new-btn:hover{background: #c3c3c3; color: #333;}
a.new-btn-green{background: #3b94d6; color: #fff;}
a.new-btn-green:hover{background: #2384cd; color: #fff;}
a.new-btn-blue{background: #6a8abe; color: #fff;}
a.new-btn-blue:hover{background:#5f7cab; }
a.new-bigbtn{display: inline-block;border:none; padding:2px 30px;color: #666;background: #e1e1e1; text-align:center;font-size: 14px; height: 30px;line-height: 30px; border-radius: 3px;}
a:hover.new-bigbtn{background: #c3c3c3; color: #333;}
a.new-bigbtn-green{display: block; background:#60B25E; color:#fff; border-radius:5px; text-align:center; font-size:18px; padding: 5px 20px; width: 220px;}
a.new-bigbtn-green:hover{background: #51a74f; color: #fff;}
/* 头部 */
.header{ width:100%; min-width: 1200px; height:51px;background:#46484c; }
.header_con{ width:1200px; height:50px; margin:0 auto; }
.new-logo img{ width: 32px; height:32px; margin-top:10px;}
.new-logo p{ font-size: 18px; color:#fff; line-height: 50px; }
a.new-nav-a{ display: block; font-size: 14px; line-height: 50px; color:#fff;}
a:hover.new-nav-a{ color:#ff7500;}
input.new-search{border-radius:3px; width:300px; height:30px; margin-top: 10px; padding:0 5px; border-style: none; border: solid 1px #ccc;}
/* 登录注册 */
.new_login{ width:100%; height:450px;background:url(../images/bigdata/slider-bg-1.jpg) 0 0 no-repeat;}
.new_login_con{ width:1200px; height:450px; margin:0 auto; }
.new_login_box{width:320px; padding:10px 30px; border-radius:5px; margin:0 auto; border:solid 1px #fff;}
.new_login_h2{ font-size:18px; color:#fff; border-bottom:1px solid #fff; font-weight:normal; padding-bottom:5px; margin-bottom:30px;}
.new_login_h2 a{font-size:12px; color:#fff;background:url(images/icons_login.png) 0 -69px no-repeat; padding-left:10px;}
input.new_register_input{ -webkit-box-shadow: 0 0 0px 1000px white inset; margin-left:5px; width:305px; height:45px; border:none;outline: none;}
input.new_loggin_input{ -webkit-box-shadow: 0 0 0px 1000px white inset; margin-left:5px; width:305px; height:45px; border:none;outline: none;}
.new_loggin_users{width:320px;height:45px;border-radius:5px; border:none; background:#fff url(images/icons_login.png) 8px 9px no-repeat;}
.new_login_lock{background:#fff url(images/icons_login.png) 8px -28px no-repeat; width:320px; height:45px; border-radius:5px; border:none;}
.new_register_li{background:#fff; width:320px; height:45px; border-radius:5px; border:none;}
.new_login_form ul li{ margin-bottom:30px;}
.new_login_error{ color:#3b94d6;}
.new_login_submit_disable{ width:265px; height:40px; line-height: 40px; background:#ccc; color:#fff; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
a.new_login_submit{ width:320px; height:40px; display:block;line-height: 40px; background:#3b94d6; color:#fff; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
a.new_login_submit:hover{background: #2384cd;}
.new_login_check{ width:15px; height:15px; border:1px solid #fff; border-style:none; margin-right:5px; vertical-align: -2px;}
.new_login_form label{ color:#fff;}
.new_login_form a{ color:#fff; text-decoration:underline;}
.new_register{ width:100%; min-width:1200px; height:550px; background:#46484c; padding-top:80px;}
.new_register_con{width:1200px; height:550px; margin:0 auto; }
.new_login_txt{width:450px; height:140px; padding:30px 12px 0; color:#fff; margin:100px 0 0 100px;}
.new_login_txt h3{ font-size:24px; text-align:center; margin-bottom:20px;}
.new_login_txt p{ line-height:2.0; font-size: 16px;}
.new_register_left{ margin-top:150px;}
.new_login_tishi{ color: #fff; }
/* 展示内容 */
.new-container{ width: 100%; min-width:1200px;}
.new-container-inner{width:1200px; margin:0px auto; padding:100px 0;}
.inner-txt{ width:300px;}
.inner-txt-h3{ font-size: 18px; color: #333; margin-bottom:20px;}
.inner-txt-p{font-size: 14px; color: #666; margin-bottom:20px;}
.back-color-grey{ background:#f5f5f5;}
.guanzhu-box{ position: relative;}
.img-guanzhu{ position: absolute; top:0; left: 0;}
.guanzhu-img-box{ display: none;}
.guanzhu-box li:hover ul{display:block; }
/* 底部 */
.footer{width:100%; height:100px; background-color:#fff; }
.footer_con{ width:1200px; height:100px; margin:0 auto; text-align: center; padding:20px 0; }
.footer_con-inner{ width: 300px; margin:0px auto;}
.footer_con-inner li{ }
.footer_con-inner li a{ font-size: 14px; color: #888;display: block;padding:0 15px; border-right: solid 1px #888;}
.footer_con-inner li a:hover{text-decoration: underline;}
.footer_con-p{ color: #888; margin-top:10px;}
/* 新版内页 */
.innner-nav li{ float: left; margin-right: 25px;}
.inner-banner{ background:url(/images/inner/banner-inner.jpg) 0px 0px repeat-x; width: 100%; min-width:1200px; height: 550px; padding-top:50px; position:relative;}
.inner-banner-con{ width: 1200px; margin: 0px auto; color:#fff; text-align: center;}
.inner-man{ position: absolute; right:100px; top:115px;}
.inner-man img{width:200px; }
.inner-banner-con h2{ font-size: 60px; font-weight: normal;}
.inner-banner-con-h3{font-size: 24px; font-weight: normal; color: #fff;}
.inner-banner-con-h3 a{color: #fff;}
.inner-c_blue{ color:#3b94d6;}
a.btn-blue{ display: block; background:#3b94d6; color:#fff; border-radius:5px; text-align:center;border: 3px solid #3b94d6; font-size:18px; padding: 5px 20px; width: 220px; }
a:hover.btn-blue{background: #2384cd; border: 3px solid #2384cd;}
a.btn-blue-line{ display: block; border: 3px solid #3b94d6; color:#3b94d6; border-radius:5px; text-align:center; font-size:18px; padding: 5px 20px; width: 220px; }
a:hover.btn-blue-line{background: #3b94d6; color:#fff;}
.inner-btnbox{ width: 580px; margin: 30px auto;}
.innner-banner-bottom{ width: 300px; text-align: left; float: left; margin-top: 50px; font-size: 14px;}
.inner-border{ display: block; width: 50px; border-top:3px solid #fff; margin-bottom: 15px;}
.new-container-inner-h3{ font-size:40px; font-weight: normal; color: #333; text-align: center; margin-bottom: 20px;}
.innerbox-txt{ width:300px;}
.back-color-black{ background:#47494d;}
.inner-t-c{ text-align: center;}
.inner-footer{ width: 100%; min-width:1200px; background:#323232; height:155px;}
.inner-footer_con{ width: 1200px; margin: 0 auto;}
.inner-footer-nav{ height: 50px; border-bottom:1px solid #47494d;}
.inner-footer-nav li a{ float: left; margin-right:15px; font-size: 14px; color: #888; line-height: 50px;}
.saoma-box{ position: relative;}
.saoma-img-box{ position: absolute; top:-300px; left: -95px; border-radius:3px; background:#fff; padding:15px;box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); display: none;}
.saoma-box li:hover ul{display:block; }
.img-show{ width:50px; height:50px; border-radius:50px; }
.saoma-img-box font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top:289px;left: 110px; border-style:solid; border-color:#fff transparent transparent transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.inner-footer-p-big{ display: block; height: 50px; line-height: 50px; color:#888; font-size: 16px; border-left:2px solid #888; padding-left:15px;}
.inner-btnbox02{ width:270px; margin: 30px auto 0;}
.new-container-inner02{width:1200px; margin:0px auto; padding:50px 0;}
.inner-nav-mes{ font-size:28px; color: #fff; position: relative; margin-top:3px; margin-right:35px;}
.inner-nav-cir{ position: absolute; top:0px; left:15px; background:#3b94d6; color:#fff; border-radius:15px;padding:0 5px; display: inline-block; font-size: 10px;}
.inner-nav-user{ width: 55px; height: 40px; margin-top:5px; position: relative;}
.inner-nav-user-img{ width: 40px; height: 40px; border-radius:50px;}
.inner-nav-user font{border: 1px solid #dddddd; display: block; border-width: 6px; position: absolute; top:18px;left:45px; border-style:solid; border-color:#fff transparent transparent transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5);}
/*消息弹框*/
.shadowbox_news{ width:305px; background-color:#fff; border-radius: 3px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); position:absolute; font-size: 12px; top:50px; left:-135px;display: none; z-index:999;}
.shadowbox_news_title{ height:40px; line-height:40px;padding-left:10px; font-size:12px; color:#333;border-bottom:1px solid #eee;}
.shadowbox_news font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top: -15px;left: 140px; border-style:solid; border-color: transparent transparent #fff transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.shadowbox_news_list{ max-height:200px; overflow:hidden;}
.shadowbox_news_list a{ color:#999;}
.shadowbox_news_list li{ height:40px; border-bottom:1px dashed #ebebeb; line-height:40px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; padding:0 10px;}
.shadowbox_news_list li:hover{ background-color:#eee;}
span.shadowbox_news_user{ color:#3b94d6;}
a.shadowbox_news_all{ display:block; width:305px; height:40px; line-height:40px; color:#3b94d6; text-align:center;border-top:1px solid #eee;}
.inner-nav-mes li:hover ul{ display: block;}
a.menuGreyNew {color:#808080;}
a.menuGreyNew:hover {color:#297fb8;}
/*头像下拉弹框*/
.my_account_info{ width:160px; background-color:#fff; border-radius: 3px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); position:absolute; font-size: 14px; top:46px; left:-97px;display: none; z-index:999;}
.my_account_info li a{ color: #888;}
.my_account_info font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top: -15px;left: 140px; border-style:solid; border-color: transparent transparent #fff transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.my_account_info li{ padding-left: 5px; line-height: 1.5;}
.li_bottom_border{ border-bottom:1px solid #eee;}
.inner-user-info{ border-radius:3px; background:#fff; padding:15px;box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); width:305px; display:block; width:300px; display: none;}
.inner-user-info font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top:289px;left: 110px; border-style:solid; border-color:transparent transparent #fff transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.inner-user-info li a{ display: block; height: 30px; line-height: 30px; color: #fff; width: 200px; }
.inner-img02{ width: 1000px; margin:0 auto;}
.inner-txtbox02{width: 800px; margin:0 auto;}
.inner-txtbox02 p{ display: block; width: 200px; font-size: 20px; float: left; margin-top:30px; text-align: center; color:#666;}
.innerbox-txt-h3{ font-size:28px; color: #333; margin-bottom:20px;}
.innerbox-txt-p{font-size: 20px; color: #666;}
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0; padding:0;}
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体"; font-size:12px;line-height:1.9; background:#fff;}
div,img,tr,td,table{ border:0;}
table,tr,td{border:0;cellspacing:0; cellpadding:0;}
ol,ul,li{ list-style-type:none}
a:link,a:visited{color:#333;text-decoration:none;}
a:hover,a:active{color:#026434;}
/* 公共 */
.clear:after {content:".";height:0;visibility:hidden;display:block;clear:both;}
.f12{font-size: 12px;}
.fl{ float:left;}
.fr{ float:right;}
.cl{ clear:both; overflow:hidden;}
.fb{ font-weight: bold;}
.mt5{ margin-top:5px;}
.mt10{ margin-top:10px;}
.mt20{ margin-top:20px;}
.mt30{ margin-top:30px;}
.mt50{ margin-top:50px;}
.mb5{ margin-bottom:5px;}
.mb10{ margin-bottom:10px;}
.mb20{ margin-bottom:20px;}
.mb30{ margin-bottom:30px;}
.mb50{ margin-bottom:50px;}
.ml5{ margin-left:5px;}
.ml10{ margin-left:10px;}
.ml15{ margin-left:15px;}
.ml30{margin-left: 30px;}
.ml38{margin-left: 38px;}
.ml50{margin-left: 50px;}
.mr5{ margin-right:5px;}
.mr10{ margin-right:15px;}
.mr15{ margin-right:10px;}
.mr45{ margin-right:45px;}
.mr30{ margin-right:30px;}
.mr50{ margin-right:50px;}
.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.clearfix{clear:both;zoom:1}
a.new-btn{display: inline-block;border:none; padding:0 10px;color: #666;background: #e1e1e1; text-align:center;font-size: 12px; height: 30px;border-radius: 3px; line-height: 30px;}
a.new-btn:hover{background: #c3c3c3; color: #333;}
a.new-btn-green{background: #3b94d6; color: #fff;}
a.new-btn-green:hover{background: #2384cd; color: #fff;}
a.new-btn-blue{background: #6a8abe; color: #fff;}
a.new-btn-blue:hover{background:#5f7cab; }
a.new-bigbtn{display: inline-block;border:none; padding:2px 30px;color: #666;background: #e1e1e1; text-align:center;font-size: 14px; height: 30px;line-height: 30px; border-radius: 3px;}
a:hover.new-bigbtn{background: #c3c3c3; color: #333;}
a.new-bigbtn-green{display: block; background:#60B25E; color:#fff; border-radius:5px; text-align:center; font-size:18px; padding: 5px 20px; width: 220px;}
a.new-bigbtn-green:hover{background: #51a74f; color: #fff;}
/* 头部 */
.header{ width:100%; min-width: 1200px; height:51px;background:#46484c; }
.header_con{ width:1200px; height:50px; margin:0 auto; }
.new-logo img{ width: 32px; height:32px; margin-top:10px;}
.new-logo p{ font-size: 18px; color:#fff; line-height: 50px; }
a.new-nav-a{ display: block; font-size: 14px; line-height: 50px; color:#fff;}
a:hover.new-nav-a{ color:#ff7500;}
input.new-search{border-radius:3px; width:300px; height:30px; margin-top: 10px; padding:0 5px; border-style: none; border: solid 1px #ccc;}
/* 登录注册 */
.new_login{ width:100%; height:450px;background:url(../images/bigdata/slider-bg-1.jpg) 0 0 no-repeat;}
.new_login_con{ width:1200px; height:450px; margin:0 auto; }
.new_login_box{width:320px; padding:10px 30px; border-radius:5px; margin:0 auto; border:solid 1px #fff;}
.new_login_h2{ font-size:18px; color:#fff; border-bottom:1px solid #fff; font-weight:normal; padding-bottom:5px; margin-bottom:30px;}
.new_login_h2 a{font-size:12px; color:#fff;background:url(images/icons_login.png) 0 -69px no-repeat; padding-left:10px;}
input.new_register_input{ -webkit-box-shadow: 0 0 0px 1000px white inset; margin-left:5px; width:305px; height:45px; border:none;outline: none;}
input.new_loggin_input{ -webkit-box-shadow: 0 0 0px 1000px white inset; margin-left:5px; width:305px; height:45px; border:none;outline: none;}
.new_loggin_users{width:320px;height:45px;border-radius:5px; border:none; background:#fff url(images/icons_login.png) 8px 9px no-repeat;}
.new_login_lock{background:#fff url(images/icons_login.png) 8px -28px no-repeat; width:320px; height:45px; border-radius:5px; border:none;}
.new_register_li{background:#fff; width:320px; height:45px; border-radius:5px; border:none;}
.new_login_form ul li{ margin-bottom:30px;}
.new_login_error{ color:#3b94d6;}
.new_login_submit_disable{ width:265px; height:40px; line-height: 40px; background:#ccc; color:#fff; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
a.new_login_submit{ width:320px; height:40px; display:block;line-height: 40px; background:#3b94d6; color:#fff; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
a.new_login_submit:hover{background: #2384cd;}
.new_login_check{ width:15px; height:15px; border:1px solid #fff; border-style:none; margin-right:5px; vertical-align: -2px;}
.new_login_form label{ color:#fff;}
.new_login_form a{ color:#fff; text-decoration:underline;}
.new_register{ width:100%; min-width:1200px; height:550px; background:#46484c; padding-top:80px;}
.new_register_con{width:1200px; height:550px; margin:0 auto; }
.new_login_txt{width:450px; height:140px; padding:30px 12px 0; color:#fff; margin:100px 0 0 100px;}
.new_login_txt h3{ font-size:24px; text-align:center; margin-bottom:20px;}
.new_login_txt p{ line-height:2.0; font-size: 16px;}
.new_register_left{ margin-top:150px;}
.new_login_tishi{ color: #fff; }
/* 展示内容 */
.new-container{ width: 100%; min-width:1200px;}
.new-container-inner{width:1200px; margin:0px auto; padding:100px 0;}
.inner-txt{ width:300px;}
.inner-txt-h3{ font-size: 18px; color: #333; margin-bottom:20px;}
.inner-txt-p{font-size: 14px; color: #666; margin-bottom:20px;}
.back-color-grey{ background:#f5f5f5;}
.guanzhu-box{ position: relative;}
.img-guanzhu{ position: absolute; top:0; left: 0;}
.guanzhu-img-box{ display: none;}
.guanzhu-box li:hover ul{display:block; }
/* 底部 */
.footer{width:100%; height:100px; background-color:#fff; }
.footer_con{ width:1200px; height:100px; margin:0 auto; text-align: center; padding:20px 0; }
.footer_con-inner{ width: 300px; margin:0px auto;}
.footer_con-inner li{ }
.footer_con-inner li a{ font-size: 14px; color: #888;display: block;padding:0 15px; border-right: solid 1px #888;}
.footer_con-inner li a:hover{text-decoration: underline;}
.footer_con-p{ color: #888; margin-top:10px;}
/* 新版内页 */
.innner-nav li{ float: left; margin-right: 25px;}
.inner-banner{ background:url(/images/inner/banner-inner.jpg) 0px 0px repeat-x; width: 100%; min-width:1200px; height: 550px; padding-top:50px; position:relative;}
.inner-banner-con{ width: 1200px; margin: 0px auto; color:#fff; text-align: center;}
.inner-man{ position: absolute; right:100px; top:115px;}
.inner-man img{width:200px; }
.inner-banner-con h2{ font-size: 60px; font-weight: normal;}
.inner-banner-con-h3{font-size: 24px; font-weight: normal; color: #fff;}
.inner-banner-con-h3 a{color: #fff;}
.inner-c_blue{ color:#3b94d6;}
a.btn-blue{ display: block; background:#3b94d6; color:#fff; border-radius:5px; text-align:center;border: 3px solid #3b94d6; font-size:18px; padding: 5px 20px; width: 220px; }
a:hover.btn-blue{background: #2384cd; border: 3px solid #2384cd;}
a.btn-blue-line{ display: block; border: 3px solid #3b94d6; color:#3b94d6; border-radius:5px; text-align:center; font-size:18px; padding: 5px 20px; width: 220px; }
a:hover.btn-blue-line{background: #3b94d6; color:#fff;}
.inner-btnbox{ width: 580px; margin: 30px auto;}
.innner-banner-bottom{ width: 300px; text-align: left; float: left; margin-top: 50px; font-size: 14px;}
.inner-border{ display: block; width: 50px; border-top:3px solid #fff; margin-bottom: 15px;}
.new-container-inner-h3{ font-size:40px; font-weight: normal; color: #333; text-align: center; margin-bottom: 20px;}
.innerbox-txt{ width:300px;}
.back-color-black{ background:#47494d;}
.inner-t-c{ text-align: center;}
.inner-footer{ width: 100%; min-width:1200px; background:#323232; height:155px;}
.inner-footer_con{ width: 1200px; margin: 0 auto;}
.inner-footer-nav{ height: 50px; border-bottom:1px solid #47494d;}
.inner-footer-nav li a{ float: left; margin-right:15px; font-size: 14px; color: #888; line-height: 50px;}
.saoma-box{ position: relative;}
.saoma-img-box{ position: absolute; top:-300px; left: -95px; border-radius:3px; background:#fff; padding:15px;box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); display: none;}
.saoma-box li:hover ul{display:block; }
.img-show{ width:50px; height:50px; border-radius:50px; }
.saoma-img-box font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top:289px;left: 110px; border-style:solid; border-color:#fff transparent transparent transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.inner-footer-p-big{ display: block; height: 50px; line-height: 50px; color:#888; font-size: 16px; border-left:2px solid #888; padding-left:15px;}
.inner-btnbox02{ width:270px; margin: 30px auto 0;}
.new-container-inner02{width:1200px; margin:0px auto; padding:50px 0;}
.inner-nav-mes{ font-size:28px; color: #fff; position: relative; margin-top:3px; margin-right:35px;}
.inner-nav-cir{ position: absolute; top:0px; left:15px; background:#3b94d6; color:#fff; border-radius:15px;padding:0 5px; display: inline-block; font-size: 10px;}
.inner-nav-user{ width: 55px; height: 40px; margin-top:5px; position: relative;}
.inner-nav-user-img{ width: 40px; height: 40px; border-radius:50px;}
.inner-nav-user font{border: 1px solid #dddddd; display: block; border-width: 6px; position: absolute; top:18px;left:45px; border-style:solid; border-color:#fff transparent transparent transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5);}
/*消息弹框*/
.shadowbox_news{ width:305px; background-color:#fff; border-radius: 3px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); position:absolute; font-size: 12px; top:50px; left:-135px;display: none; z-index:999;}
.shadowbox_news_title{ height:40px; line-height:40px;padding-left:10px; font-size:12px; color:#333;border-bottom:1px solid #eee;}
.shadowbox_news font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top: -15px;left: 140px; border-style:solid; border-color: transparent transparent #fff transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.shadowbox_news_list{ max-height:200px; overflow:hidden;}
.shadowbox_news_list a{ color:#999;}
.shadowbox_news_list li{ height:40px; border-bottom:1px dashed #ebebeb; line-height:40px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; padding:0 10px;}
.shadowbox_news_list li:hover{ background-color:#eee;}
span.shadowbox_news_user{ color:#3b94d6;}
a.shadowbox_news_all{ display:block; width:305px; height:40px; line-height:40px; color:#3b94d6; text-align:center;border-top:1px solid #eee;}
.inner-nav-mes li:hover ul{ display: block;}
a.menuGreyNew {color:#808080;}
a.menuGreyNew:hover {color:#297fb8;}
/*头像下拉弹框*/
.my_account_info{ width:160px; background-color:#fff; border-radius: 3px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); position:absolute; font-size: 14px; top:46px; left:-97px;display: none; z-index:999;}
.my_account_info li a{ color: #888;}
.my_account_info font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top: -15px;left: 140px; border-style:solid; border-color: transparent transparent #fff transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.my_account_info li{ padding-left: 5px; line-height: 1.5;}
.li_bottom_border{ border-bottom:1px solid #eee;}
.inner-user-info{ border-radius:3px; background:#fff; padding:15px;box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); width:305px; display:block; width:300px; display: none;}
.inner-user-info font{ border: 1px solid #dddddd; display: block; border-width: 8px; position: absolute; top:289px;left: 110px; border-style:solid; border-color:transparent transparent #fff transparent;font-size: 0;line-height: 0; box-shadow:2px rgba(146, 153, 169, 0.5); }
.inner-user-info li a{ display: block; height: 30px; line-height: 30px; color: #fff; width: 200px; }
.inner-img02{ width: 1000px; margin:0 auto;}
.inner-txtbox02{width: 800px; margin:0 auto;}
.inner-txtbox02 p{ display: block; width: 200px; font-size: 20px; float: left; margin-top:30px; text-align: center; color:#666;}
.innerbox-txt-h3{ font-size:28px; color: #333; margin-bottom:20px;}
.innerbox-txt-p{font-size: 20px; color: #666;}

@ -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;}
.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;}
.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;

Loading…
Cancel
Save