Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

issues25489
daiao 5 years ago
commit c3d5b02d13

140
.gitignore vendored

@ -1,68 +1,72 @@
# See https://help.github.com/articles/ignoring-files for more about ignoring files. # See https://help.github.com/articles/ignoring-files for more about ignoring files.
# #
# If you find yourself ignoring temporary files generated by your text editor # If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead: # or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global' # git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config. # Ignore bundler config.
/.bundle /.bundle
# mac # Ignore lock config file
*.DS_Store *.lock
*.log
# Ignore all logfiles and tempfiles.
/log/* # mac
/tmp/* *.DS_Store
!/log/.keep
!/tmp/.keep # Ignore all logfiles and tempfiles.
/log/*
# Ignore uploaded files in development /tmp/*
/storage/* !/log/.keep
!/tmp/.keep
/node_modules
/yarn-error.log # Ignore uploaded files in development
/storage/*
# /public/assets
.byebug_history /node_modules
/yarn-error.log
# Ignore master key for decrypting credentials and more.
/config/master.key # /public/assets
/config/database.yml .byebug_history
/.idea/*
# Ignore master key for decrypting credentials and more.
# Ignore react node_modules /config/master.key
/public/react/.cache /config/database.yml
/public/react/build /.idea/*
/public/react/build/
/public/react/node_modules/ # Ignore react node_modules
/public/react/config/stats.json /public/react/.cache
/public/react/stats.json /public/react/build
/public/react/.idea/* /public/react/build/
/public/react/node_modules/
/public/npm-debug.log /public/react/config/stats.json
/public/react/stats.json
# avatars /public/react/.idea/*
/public/images/avatars
/public/npm-debug.log
/config/secrets.yml
/config/redis.yml # avatars
/config/elasticsearch.yml /public/images/avatars
/config/aliyun_vod.yml
/config/secrets.yml
public/upload.html /config/redis.yml
/config/configuration.yml /config/elasticsearch.yml
/config/environments/production.rb /config/aliyun_vod.yml
/config/initializers/gitlab_config.rb
/db/schema.rb public/upload.html
.vscode/ /config/configuration.yml
vendor/bundle/ /config/environments/production.rb
.ruby-version /config/initializers/gitlab_config.rb
.ruby-gemset /db/schema.rb
.vscode/
/Users vendor/bundle/
/files .ruby-version
/public/images/avatars .ruby-gemset
/public/files
/workspace /Users
/log /files
/public/admin /public/images/avatars
/public/files
/workspace
/log
/public/admin

@ -235,13 +235,16 @@ class CompetitionCommon extends Component{
this.props.showProfileCompleteDialog() this.props.showProfileCompleteDialog()
return return
} }
if(url===undefined){ if(url===undefined){
let {data,signupdata}=this.state; let {data,signupdata}=this.state;
if(signupdata.enrolled===true){ // if(signupdata.enrolled===true){
this.props.history.replace(`/courses/${data.course_id}`); // this.props.history.replace(`/courses/${data.course_id}`);
}else{ // }else{ }
if (data.member_of_course === true) { if (data.member_of_course === true) {
this.props.history.replace(`/courses/${data.course_id}`); // this.props.history.replace(`/courses/${data.course_id}`);
window.open(`/courses/${data.course_id}`)
} else { } else {
// 以学生身份调用加入课堂 进入课堂首页 // 以学生身份调用加入课堂 进入课堂首页
let url = "/courses/apply_to_join_course.json" let url = "/courses/apply_to_join_course.json"
@ -251,15 +254,18 @@ class CompetitionCommon extends Component{
} }
).then((response) => { ).then((response) => {
if (response.data.status === 0) { if (response.data.status === 0) {
this.props.history.replace(`/courses/${data.course_id}`); // this.props.history.replace();
this.Personalregistration(`/courses/${data.course_id}`)
} }
}) })
} }
}
}else{ }else{
if (url === "personal") { if (url === "personal") {
this.Personalregistration() let urls = `/competitions/${this.props.match.params.identifier}/enroll`;
this.Personalregistration(urls)
} else { } else {
this.props.history.replace(url); this.props.history.replace(url);
} }
@ -268,10 +274,10 @@ class CompetitionCommon extends Component{
} }
Personalregistration = () => { Personalregistration = (urls) => {
let {signupdata} = this.state; let {signupdata} = this.state;
let urls = `/competitions/${this.props.match.params.identifier}/enroll`;
if (signupdata.enroll_ended === true) { if (signupdata.enroll_ended === true) {
//已截止 //已截止
this.props.showNotification(`报名已截止`); this.props.showNotification(`报名已截止`);
@ -286,7 +292,8 @@ class CompetitionCommon extends Component{
if (response) { if (response) {
if (response.data) { if (response.data) {
this.props.showNotification(`报名成功,预祝您夺得桂冠!`); this.props.showNotification(`报名成功,预祝您夺得桂冠!`);
this.props.history.replace(urls); // this.props.history.replace(urls);
window.open(urls)
} }
} }
}).catch((error) => { }).catch((error) => {

@ -1,113 +1,113 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn, MarkdownToHtml, on, off } from 'educoder'; import { WordsBtn, MarkdownToHtml, on, off } from 'educoder';
import axios from 'axios'; import axios from 'axios';
import Modals from '../../modals/Modals'; import Modals from '../../modals/Modals';
import CoursesListType from '../coursesPublic/CoursesListType'; import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal"; import HomeworkModal from "../coursesPublic/HomeworkModal";
import CheckAllGroup from '../common/button/CheckAllGroup' import CheckAllGroup from '../common/button/CheckAllGroup'
import moment from 'moment'; import moment from 'moment';
import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal' import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal'
import NoneData from '../coursesPublic/NoneData' import NoneData from '../coursesPublic/NoneData'
import '../css/Courses.css' import '../css/Courses.css'
import WorkDetailPageHeader from './common/WorkDetailPageHeader' import WorkDetailPageHeader from './common/WorkDetailPageHeader'
import TabRightComponents from './common/TabRightComponents' import TabRightComponents from './common/TabRightComponents'
const { Option} = Select; const { Option} = Select;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm; const confirm = Modal.confirm;
let GraduationTasksnewtype=true; let GraduationTasksnewtype=true;
const $ = window.$; const $ = window.$;
const Search = Input.Search; const Search = Input.Search;
const RadioGroup = Radio.Group; const RadioGroup = Radio.Group;
class CommonWorkAnswer extends Component{ class CommonWorkAnswer extends Component{
constructor(props){ constructor(props){
super(props) super(props)
this.state={ this.state={
course_name:"", course_name:"",
homework_name:"", homework_name:"",
search: '' search: ''
} }
} }
fetchData = () => { fetchData = () => {
let workId=this.props.match.params.workId; let workId=this.props.match.params.workId;
const url = `/homework_commons/${workId}/reference_answer.json` const url = `/homework_commons/${workId}/reference_answer.json`
axios.get(url).then((result)=> { axios.get(url).then((result)=> {
if (result.data.course_id) { if (result.data.course_id) {
this.setState({ this.setState({
...result.data ...result.data
}, () => { }, () => {
}) })
this.props.initWorkDetailCommonState && this.props.initWorkDetailCommonState( Object.assign({...result.data}, { this.props.initWorkDetailCommonState && this.props.initWorkDetailCommonState( Object.assign({...result.data}, {
moduleName: '参考答案' moduleName: '参考答案'
})) }))
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error) console.log(error)
}) })
} }
componentDidMount() { componentDidMount() {
this.fetchData() this.fetchData()
try { try {
this.props.triggerRef(this); this.props.triggerRef(this);
}catch (e) { }catch (e) {
} }
on('commonwork_fetch_all', this.fetchAllListener) on('commonwork_fetch_all', this.fetchAllListener)
} }
componentWillUnmount() { componentWillUnmount() {
off('commonwork_fetch_all', this.fetchAllListener) off('commonwork_fetch_all', this.fetchAllListener)
} }
fetchAllListener = () => { fetchAllListener = () => {
this.fetchData() this.fetchData()
} }
render(){ render(){
const dateFormat = 'YYYY-MM-DD HH:mm'; const dateFormat = 'YYYY-MM-DD HH:mm';
let {course_name, homework_name, search, page, loadingstate, homework_status, reference_answer, let {course_name, homework_name, search, page, loadingstate, homework_status, reference_answer,
attachments attachments
} =this.state; } =this.state;
let courseId=this.props.match.params.coursesId; let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id; let category_id=this.props.match.params.category_id;
let workId=this.props.match.params.workId; let workId=this.props.match.params.workId;
const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx` const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx`
return( return(
<React.Fragment <React.Fragment
> >
{/* 内容区 */} {/* 内容区 */}
<div className="padding40 memoContent new_li"> <div className="padding40 memoContent new_li">
{reference_answer ? <MarkdownToHtml content={reference_answer || "还未设置答案。"}></MarkdownToHtml> : {reference_answer ? <MarkdownToHtml content={reference_answer || "还未设置答案。"}></MarkdownToHtml> :
reference_answer === undefined ? '' : ((!attachments || attachments.length == 0) && <NoneData></NoneData>)} reference_answer === undefined ? '' : ((!attachments || attachments.length == 0) && <NoneData></NoneData>)}
{ attachments && attachments.map((item) => { { attachments && attachments.map((item) => {
return ( <div className="color-grey"> return ( <div className="color-grey">
<a className="color-grey"> <a className="color-grey">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> <i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a> </a>
<a href={item.url} className="mr12" length="58">{item.title}</a> <a href={item.url} className="mr12" length="58">{item.title}</a>
<span className="color-grey mt2 color-grey-6 font-12">{item.filesize}</span> <span className="color-grey mt2 color-grey-6 font-12">{item.filesize}</span>
</div> ) </div> )
}) } }) }
</div> </div>
</React.Fragment> </React.Fragment>
) )
} }
} }
export default CommonWorkAnswer; export default CommonWorkAnswer;

@ -1,314 +1,314 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn, MarkdownToHtml, markdownToHTML, ImageLayer2 } from 'educoder'; import { WordsBtn, MarkdownToHtml, markdownToHTML, ImageLayer2 } from 'educoder';
import axios from 'axios'; import axios from 'axios';
import Modals from '../../modals/Modals'; import Modals from '../../modals/Modals';
import CoursesListType from '../coursesPublic/CoursesListType'; import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal"; import HomeworkModal from "../coursesPublic/HomeworkModal";
import CheckAllGroup from '../common/button/CheckAllGroup' import CheckAllGroup from '../common/button/CheckAllGroup'
import moment from 'moment'; import moment from 'moment';
import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal' import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal'
import '../css/Courses.css' import '../css/Courses.css'
import WorkDetailPageHeader from './common/WorkDetailPageHeader' import WorkDetailPageHeader from './common/WorkDetailPageHeader'
import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply' import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply'
import Example from './TestHooks' import Example from './TestHooks'
import CommonWorkAppraiseReviseAttachments from './CommonWorkAppraiseReviseAttachments' import CommonWorkAppraiseReviseAttachments from './CommonWorkAppraiseReviseAttachments'
import LeaderIcon from './common/LeaderIcon' import LeaderIcon from './common/LeaderIcon'
const { Option} = Select; const { Option} = Select;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm; const confirm = Modal.confirm;
const $ = window.$; const $ = window.$;
const Search = Input.Search; const Search = Input.Search;
const RadioGroup = Radio.Group; const RadioGroup = Radio.Group;
class CommonWorkAppraise extends Component{ class CommonWorkAppraise extends Component{
constructor(props){ constructor(props){
super(props) super(props)
this.state={ this.state={
course_name:"", course_name:"",
homework_name:"", homework_name:"",
search: '', search: '',
attachments: [], attachments: [],
revise_attachments: [], revise_attachments: [],
} }
} }
getWork = () => { getWork = () => {
let workId =this.props.match.params.workId; let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId; let studentWorkId =this.props.match.params.studentWorkId;
// https://www.showdoc.cc/127895880302646?page_id=1957586480118445 // https://www.showdoc.cc/127895880302646?page_id=1957586480118445
const url = `/student_works/${studentWorkId}.json` const url = `/student_works/${studentWorkId}.json`
axios.get(url).then((result)=> { axios.get(url).then((result)=> {
if (result.data.course_id) { if (result.data.course_id) {
this.setState({ this.setState({
...result.data ...result.data
}) })
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error) console.log(error)
}) })
} }
getSupplyAttachments = () => { getSupplyAttachments = () => {
let workId =this.props.match.params.workId; let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId; let studentWorkId =this.props.match.params.studentWorkId;
const url = `/student_works/${studentWorkId}/supply_attachments.json` const url = `/student_works/${studentWorkId}/supply_attachments.json`
axios.get(url).then((result)=> { axios.get(url).then((result)=> {
if (result.data.course_id) { if (result.data.course_id) {
this.setState({ this.setState({
...result.data ...result.data
}) })
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error) console.log(error)
}) })
} }
getReviseAttachments = () => { getReviseAttachments = () => {
let studentWorkId =this.props.match.params.studentWorkId; let studentWorkId =this.props.match.params.studentWorkId;
const url = `/student_works/${studentWorkId}/supply_attachments.json`; const url = `/student_works/${studentWorkId}/supply_attachments.json`;
axios.get(url).then((result)=> { axios.get(url).then((result)=> {
if (result.data.revise_attachments) { if (result.data.revise_attachments) {
this.setState({ this.setState({
...result.data ...result.data
}) })
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error) console.log(error)
}) })
} }
componentDidUpdate(prevProps, prevState) { componentDidUpdate(prevProps, prevState) {
if (this.props.match.params.studentWorkId != prevProps.match.params.studentWorkId) { if (this.props.match.params.studentWorkId != prevProps.match.params.studentWorkId) {
this.getWork(); this.getWork();
this.getReviseAttachments() this.getReviseAttachments()
this.commonWorkAppraiseReply && this.commonWorkAppraiseReply.fetchAllComments() this.commonWorkAppraiseReply && this.commonWorkAppraiseReply.fetchAllComments()
} }
} }
componentDidMount() { componentDidMount() {
this.getWork(); this.getWork();
this.getReviseAttachments() this.getReviseAttachments()
let workId =this.props.match.params.workId; let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId; let studentWorkId =this.props.match.params.studentWorkId;
// const url = `/student_works/${studentWorkId}/comment_list.json` // const url = `/student_works/${studentWorkId}/comment_list.json`
// axios.get(url).then((result)=> { // axios.get(url).then((result)=> {
// if (result.data.course_id) { // if (result.data.course_id) {
// this.setState({ // this.setState({
// ...result.data // ...result.data
// }) // })
// } // }
// }).catch((error)=>{ // }).catch((error)=>{
// console.log(error) // console.log(error)
// }) // })
} }
onAttachmentRemove = (id) => { onAttachmentRemove = (id) => {
this.setState({ this.setState({
Modalstype:true, Modalstype:true,
// Modalstopval:'确定要删除这个附件吗?', // Modalstopval:'确定要删除这个附件吗?',
Modalstopval: '是否确认删除?', Modalstopval: '是否确认删除?',
ModalSave: ()=>this.deleteAttachment(id), ModalSave: ()=>this.deleteAttachment(id),
ModalCancel:this.cancelAttachment ModalCancel:this.cancelAttachment
}) })
} }
deleteAttachment = (id) => { deleteAttachment = (id) => {
const url = `/attachments/${id}.json` const url = `/attachments/${id}.json`
axios.delete(url, { axios.delete(url, {
}) })
.then((response) => { .then((response) => {
if (response.data) { if (response.data) {
const { status } = response.data; const { status } = response.data;
if (status == 0) { if (status == 0) {
this.getWork() this.getWork()
this.getReviseAttachments(); this.getReviseAttachments();
this.cancelAttachment(); this.cancelAttachment();
} }
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} }
cancelAttachment=()=>{ cancelAttachment=()=>{
this.setState({ this.setState({
Modalstype:false, Modalstype:false,
Modalstopval:'', Modalstopval:'',
ModalSave:"", ModalSave:"",
ModalCancel:"" ModalCancel:""
}) })
} }
onReplySuccess = () => { onReplySuccess = () => {
this.getReviseAttachments(); this.getReviseAttachments();
} }
render(){ render(){
const dateFormat = 'YYYY-MM-DD HH:mm'; const dateFormat = 'YYYY-MM-DD HH:mm';
let {course_name, homework_name, search, page, loadingstate, homework_status, reference_answer, let {course_name, homework_name, search, page, loadingstate, homework_status, reference_answer,
attachments, homework_id, project_info, work_members, is_evaluation, attachments, homework_id, project_info, work_members, is_evaluation,
description, update_user_name, commit_user_name, update_time, commit_time, author_name, description, update_user_name, commit_user_name, update_time, commit_time, author_name,
revise_attachments, revise_reason, atta_update_user, atta_update_time, atta_update_user_login, revise_attachments, revise_reason, atta_update_user, atta_update_time, atta_update_user_login,
Modalstype,Modalstopval,ModalCancel,ModalSave,loadtype, is_leader_work Modalstype,Modalstopval,ModalCancel,ModalSave,loadtype, is_leader_work
} =this.state; } =this.state;
let courseId=this.props.match.params.coursesId; let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id; let category_id=this.props.match.params.category_id;
let studentWorkId=this.props.match.params.studentWorkId; let studentWorkId=this.props.match.params.studentWorkId;
const isAdmin = this.props.isAdmin() const isAdmin = this.props.isAdmin()
document.title=course_name&&course_name; document.title=course_name&&course_name;
return( return(
<WorkDetailPageHeader <WorkDetailPageHeader
{...this.props} {...this.state} {...this.props} {...this.state}
noTab={true} noTab={true}
moduleName={'作业详情'} moduleName={'作业详情'}
getReviseAttachments={this.getReviseAttachments} getReviseAttachments={this.getReviseAttachments}
> >
{/*提示*/} {/*提示*/}
<Modals <Modals
modalsType={Modalstype} modalsType={Modalstype}
modalsTopval={Modalstopval} modalsTopval={Modalstopval}
modalCancel={ModalCancel} modalCancel={ModalCancel}
modalSave={ModalSave} modalSave={ModalSave}
loadtype={loadtype} loadtype={loadtype}
/> />
{/* 内容区 */} {/* 内容区 */}
{/* <div className="padding40 memoContent new_li"> {/* <div className="padding40 memoContent new_li">
</div> */} </div> */}
<div className={"appraise imageLayerParent "} style={{}}> <div className={"appraise imageLayerParent "} style={{}}>
<style>{` <style>{`
.workAppraise>div:last-child { .workAppraise>div:last-child {
border-bottom: none !important; border-bottom: none !important;
} }
`}</style> `}</style>
<ImageLayer2 parentSel=".workAppraise" childSel="a.imageTarget"></ImageLayer2> <ImageLayer2 parentSel=".workAppraise" childSel="a.imageTarget"></ImageLayer2>
<div className={"workAppraise"}> <div className={"workAppraise"}>
{(description || (attachments && attachments.length != 0)) && <div className={"stud-class-set edu-back-white padding20-30"}> {(description || (attachments && attachments.length != 0)) && <div className={"stud-class-set edu-back-white padding20-30"}>
<div className={"color-grey-6 mb15 font-16"}> <div className={"color-grey-6 mb15 font-16"}>
内容 内容
</div> </div>
<div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: markdownToHTML(description)}}> <div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: markdownToHTML(description)}}>
</div> </div>
{attachments.map((item,key)=>{ {attachments.map((item,key)=>{
return( return(
<div className="color-grey" key={key}> <div className="color-grey" key={key}>
<a className="color-grey ml20"> <a className="color-grey ml20">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> <i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a> </a>
<a href={item.url} <a href={item.url}
className="mr12 color9B9B imageTarget" length="58" title={`${item.title && item.title.length > 40 ? item.title : ''}`}> className="mr12 color9B9B imageTarget" length="58" title={`${item.title && item.title.length > 40 ? item.title : ''}`}>
{item.title} {item.title}
</a> </a>
<span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span> <span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span>
{/*{item.delete===true?<i className="font-14 iconfont icon-guanbi " id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}*/} {/*{item.delete===true?<i className="font-14 iconfont icon-guanbi " id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}*/}
{item.delete===true?<i className="font-14 iconfont icon-guanbi " id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""} {item.delete===true?<i className="font-14 iconfont icon-guanbi " id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}
{/* style={{display: 'none'}} */} {/* style={{display: 'none'}} */}
</div> </div>
) )
})} })}
<div className={"color-grey-6 h20 ml20"}> <div className={"color-grey-6 h20 ml20"}>
{ update_time && { update_time &&
<React.Fragment> <React.Fragment>
<span className={"color9B9B fr"}>更新</span> <span className={"color9B9B fr"}>更新</span>
<span className={"fr font-14 mr10 ml10"}>{update_user_name}</span> <span className={"fr font-14 mr10 ml10"}>{update_user_name}</span>
<span className={"color9B9B fr"}> <span className={"color9B9B fr"}>
{moment(update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(update_time).format('YYYY-MM-DD HH:mm')} {moment(update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(update_time).format('YYYY-MM-DD HH:mm')}
</span> </span>
</React.Fragment> } </React.Fragment> }
{ commit_time && { commit_time &&
<React.Fragment> <React.Fragment>
<span className={"color9B9B fr mr30"}>提交</span> <span className={"color9B9B fr mr30"}>提交</span>
<span className={"fr font-14 mr10 ml10"}>{commit_user_name}</span> <span className={"fr font-14 mr10 ml10"}>{commit_user_name}</span>
<span className={" color9B9B fr"}> <span className={" color9B9B fr"}>
{moment(commit_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(commit_time).format('YYYY-MM-DD HH:mm')} {moment(commit_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(commit_time).format('YYYY-MM-DD HH:mm')}
</span> </span>
</React.Fragment> } </React.Fragment> }
</div> </div>
</div> } </div> }
<CommonWorkAppraiseReviseAttachments {...this.state} <CommonWorkAppraiseReviseAttachments {...this.state}
onAttachmentRemove={this.onAttachmentRemove} onAttachmentRemove={this.onAttachmentRemove}
></CommonWorkAppraiseReviseAttachments> ></CommonWorkAppraiseReviseAttachments>
{is_evaluation != true && project_info && project_info.name && <div className={"stud-class-set bor-top-greyE edu-back-white padding20-30"}> {is_evaluation != true && project_info && project_info.name && <div className={"stud-class-set bor-top-greyE edu-back-white padding20-30"}>
<div className={"color-grey-6 mb10"}> <div className={"color-grey-6 mb10"}>
关联项目 关联项目
</div> </div>
<div className={"ml20"}> <div className={"ml20"}>
<a className="color-blue" href={`/projects/${project_info.id}`}>{project_info.name}</a> <a className="color-blue" href={`/projects/${project_info.id}`}>{project_info.name}</a>
</div> </div>
</div> </div>
} }
{is_evaluation != true && work_members && !!work_members.length && <div className={"stud-class-set bor-top-greyE edu-back-white padding20-30"}> {is_evaluation != true && work_members && !!work_members.length && <div className={"stud-class-set bor-top-greyE edu-back-white padding20-30"}>
<div className={"color-grey-6 mb10"}> <div className={"color-grey-6 mb10"}>
全部组员 全部组员
</div> </div>
<div className={"ml20 color-grey-6"}> <div className={"ml20 color-grey-6"}>
<div className=""> <div className="">
当前组员{author_name} {is_leader_work && <LeaderIcon small={true} ></LeaderIcon>} 当前组员{author_name} {is_leader_work && <LeaderIcon small={true} ></LeaderIcon>}
</div> </div>
<div> <div>
其他组员 其他组员
{work_members.map((item, index) => { {work_members.map((item, index) => {
return <React.Fragment> return <React.Fragment>
{isAdmin ? {isAdmin ?
<a className={`color-blue ${index == 0 ? '' : 'ml12'}`} href="javascript:void(0)" <a className={`color-blue ${index == 0 ? '' : 'ml12'}`} href="javascript:void(0)"
onClick={() => this.props.toWorkDetailPage(this.props.match.params, null, item.work_id)} onClick={() => this.props.toWorkDetailPage(this.props.match.params, null, item.work_id)}
> >
{item.user_name} {item.user_name}
</a> : <span className={`${index == 0 ? '' : 'ml12'}`} >{item.user_name}</span>} </a> : <span className={`${index == 0 ? '' : 'ml12'}`} >{item.user_name}</span>}
{item.is_leader && <LeaderIcon small={true} ></LeaderIcon>} {item.is_leader && <LeaderIcon small={true} ></LeaderIcon>}
</React.Fragment> </React.Fragment>
})} })}
</div> </div>
{isAdmin && <div className="font-12 color-grey-9"> {isAdmin && <div className="font-12 color-grey-9">
<span >温馨提示</span> <span >温馨提示</span>
点击其他组员的姓名可以快速评阅TA的作品 点击其他组员的姓名可以快速评阅TA的作品
</div>} </div>}
</div> </div>
</div> </div>
} }
</div> </div>
{/* task_type={datalist&&datalist.task_type} */} {/* task_type={datalist&&datalist.task_type} */}
<CommonWorkAppraiseReply {...this.props} task_id={studentWorkId} <CommonWorkAppraiseReply {...this.props} task_id={studentWorkId}
onReplySuccess={this.onReplySuccess} {...this.state} onReplySuccess={this.onReplySuccess} {...this.state}
wrappedComponentRef={(ref) => {this.commonWorkAppraiseReply = ref}} wrappedComponentRef={(ref) => {this.commonWorkAppraiseReply = ref}}
></CommonWorkAppraiseReply> ></CommonWorkAppraiseReply>
</div> </div>
</WorkDetailPageHeader> </WorkDetailPageHeader>
) )
} }
} }
export default CommonWorkAppraise; export default CommonWorkAppraise;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip,Spin, Pagination} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip,Spin, Pagination} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -73,7 +73,7 @@ class CommonWorkSetting extends Component{
lineHeight: '30px', lineHeight: '30px',
}; };
return( return(
<React.Fragment> <React.Fragment>
{ <div> { <div>
@ -102,12 +102,12 @@ class CommonWorkSetting extends Component{
<div className="stud-class-set bor-bottom-greyE"> <div className="stud-class-set bor-bottom-greyE">
<div className="mt10 clearfix edu-back-white poll_list pl20"> <div className="mt10 clearfix edu-back-white poll_list pl20">
<Link <Link
className="active" className="active"
to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/list"}>作品列表</Link> to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/list"}>作品列表</Link>
<Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/questions"}>作业描述</Link> <Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/questions"}>作业描述</Link>
<Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/questions"}>参考答案</Link> <Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/questions"}>参考答案</Link>
<Link <Link
style={{paddingLeft:'38px'}} style={{paddingLeft:'38px'}}
to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/setting"}>设置</Link> to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id+"/"+task_Id+"/setting"}>设置</Link>
@ -119,7 +119,7 @@ class CommonWorkSetting extends Component{
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>} </div>}
@ -132,4 +132,4 @@ class CommonWorkSetting extends Component{
} }
const CommonWorkSettingForm = Form.create({ name: 'commonworkSettingForm' })(CommonWorkSetting); const CommonWorkSettingForm = Form.create({ name: 'commonworkSettingForm' })(CommonWorkSetting);
export default CommonWorkSettingForm; export default CommonWorkSettingForm;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
@ -36,7 +36,7 @@ class CommonWorkPost extends Component{
selectobjct:undefined, selectobjct:undefined,
Loadtype:false, Loadtype:false,
limit:20, limit:20,
memberNumMin: 2, memberNumMin: 2,
memberNumMax: 5, memberNumMax: 5,
@ -44,7 +44,7 @@ class CommonWorkPost extends Component{
} }
componentDidMount(){ componentDidMount(){
const studentWorkId = this.props.match.params.studentWorkId const studentWorkId = this.props.match.params.studentWorkId
this.isEdit = !!studentWorkId this.isEdit = !!studentWorkId
window.location.pathname.indexOf('post_edit') != -1 window.location.pathname.indexOf('post_edit') != -1
let coursesId=this.props.match.params.coursesId; let coursesId=this.props.match.params.coursesId;
@ -59,7 +59,7 @@ class CommonWorkPost extends Component{
url = `/student_works/${studentWorkId}/edit.json` url = `/student_works/${studentWorkId}/edit.json`
axios.get(url).then((response)=>{ axios.get(url).then((response)=>{
if(response.data.course_id){ if(response.data.course_id){
// TODO // TODO
// response.data.attachments // response.data.attachments
const _fileList = response.data.attachments.map(item => { const _fileList = response.data.attachments.map(item => {
@ -83,14 +83,14 @@ class CommonWorkPost extends Component{
memberNumMin: response.data.min_num, memberNumMin: response.data.min_num,
memberNumMax: response.data.max_num, memberNumMax: response.data.max_num,
}) })
this.mine = _memebers.length ? _memebers[0] : null this.mine = _memebers.length ? _memebers[0] : null
// 分组 // 分组
// this.setState({ // this.setState({
// task_status:checkedValues, // task_status:checkedValues,
// selectmemberslist:selects // selectmemberslist:selects
// }) // })
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
description: response.data.description, description: response.data.description,
}, () => {}); }, () => {});
this.mdRef.current.setValue(response.data.description) this.mdRef.current.setValue(response.data.description)
} }
@ -105,7 +105,7 @@ class CommonWorkPost extends Component{
user_name: response.data.user_name, user_name: response.data.user_name,
student_id: response.data.user_student_id, student_id: response.data.user_student_id,
group_name: response.data.group_name, group_name: response.data.group_name,
} }
this.mine = mine this.mine = mine
// const _memebers = response.data.members.slice(0); // const _memebers = response.data.members.slice(0);
@ -207,7 +207,7 @@ class CommonWorkPost extends Component{
} }
}); });
@ -403,7 +403,7 @@ class CommonWorkPost extends Component{
} }
searchList=(search,page,limit)=>{ searchList=(search,page,limit)=>{
let id=this.props.match.params.workId; let id=this.props.match.params.workId;
let workId=this.props.match.params.workId; let workId=this.props.match.params.workId;
// let url="/graduation_tasks/"+id+"/graduation_works/search_member_list.json"; // let url="/graduation_tasks/"+id+"/graduation_works/search_member_list.json";
@ -451,7 +451,7 @@ class CommonWorkPost extends Component{
funtaskstatus=(checkedValues)=>{ funtaskstatus=(checkedValues)=>{
/** /**
比较 checkedValues this.state.selectmemberslist 比较 checkedValues this.state.selectmemberslist
checkedValues length > this.state.task_status.length 是新增 反之是删除 checkedValues length > this.state.task_status.length 是新增 反之是删除
比较找到不同的id 比较找到不同的id
去除重复的checkedValues留下的是新增task_status留下的是删除 去除重复的checkedValues留下的是新增task_status留下的是删除
@ -472,7 +472,7 @@ class CommonWorkPost extends Component{
_selectmemberslist.push( this.state.members.filter(item => item.user_id == _checkedValues[0])[0]) _selectmemberslist.push( this.state.members.filter(item => item.user_id == _checkedValues[0])[0])
} else if (_task_status.length) { // 删除 } else if (_task_status.length) { // 删除
_.remove(_selectmemberslist, (item)=> item.user_id == _task_status[0]) _.remove(_selectmemberslist, (item)=> item.user_id == _task_status[0])
} }
// let{members}=this.state; // let{members}=this.state;
@ -526,13 +526,13 @@ class CommonWorkPost extends Component{
if (item.user_id == id) { if (item.user_id == id) {
deleteOldMemberIndex = index; deleteOldMemberIndex = index;
return true return true
} }
}) })
if (deleteOldMemberIndex == -1) { if (deleteOldMemberIndex == -1) {
this.doDelete(id) this.doDelete(id)
return; return;
} else { } else {
} }
} }
@ -619,7 +619,7 @@ render(){
const moduleName = this.props.getModuleName() const moduleName = this.props.getModuleName()
const moduleCHName = this.props.getModuleName(true) const moduleCHName = this.props.getModuleName(true)
const isGroup = this.props.isGroup() const isGroup = this.props.isGroup()
return( return(
<React.Fragment> <React.Fragment>
@ -644,7 +644,7 @@ render(){
{/*<Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id} className="color-grey-6">{workslist&&workslist.task_name}</Link>*/} {/*<Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id} className="color-grey-6">{workslist&&workslist.task_name}</Link>*/}
{/*<span className="color-grey-9 ml3 mr3">&gt;</span>*/} {/*<span className="color-grey-9 ml3 mr3">&gt;</span>*/}
{/*</WordsBtn>*/} {/*</WordsBtn>*/}
<span>{`${current_user ? current_user.real_name : ''} ${ this.isEdit ? '编辑' : '提交'}作品` }</span> <span>{`${current_user ? current_user.real_name : ''} ${ this.isEdit ? '编辑' : '提交'}作品` }</span>
</p> </p>
@ -667,7 +667,7 @@ render(){
.ant-upload-list-item:hover .ant-upload-list-item-info{ .ant-upload-list-item:hover .ant-upload-list-item-info{
background-color:#fff; background-color:#fff;
} }
.upload_1 .ant-upload-list { .upload_1 .ant-upload-list {
width: 350px; width: 350px;
} }
@ -793,7 +793,7 @@ render(){
{item.user_name}{ item.user_name.length <= 5 && _is_leader && <LeaderIcon className="leaderIcon" small={true}></LeaderIcon>} {item.user_name}{ item.user_name.length <= 5 && _is_leader && <LeaderIcon className="leaderIcon" small={true}></LeaderIcon>}
</div> </div>
</ConditionToolTip> </ConditionToolTip>
<div className={"fl ml20 color-grey-9 overflowHidden1"} style={{ maxWidth: '147px' }} <div className={"fl ml20 color-grey-9 overflowHidden1"} style={{ maxWidth: '147px' }}
title={item.group_name && item.group_name.length > 9 ? item.group_name : ''} title={item.group_name && item.group_name.length > 9 ? item.group_name : ''}
>{item.group_name}</div> >{item.group_name}</div>
@ -801,9 +801,9 @@ render(){
title={item.student_id && item.student_id.length > 12 ? item.student_id : ''} title={item.student_id && item.student_id.length > 12 ? item.student_id : ''}
>{item.student_id}</div> >{item.student_id}</div>
{item.user_id != this.props.current_user.user_id ? {item.user_id != this.props.current_user.user_id ?
<div className={"fr"}><i className={"iconfont icon-shanchudiao fl "} <div className={"fr"}><i className={"iconfont icon-shanchudiao fl "}
style={{marginTop:'-4px'}} onClick={()=>this.delecttask_status(item.user_id)}></i></div>:""} style={{marginTop:'-4px'}} onClick={()=>this.delecttask_status(item.user_id)}></i></div>:""}
</div> </div>
) )
})} })}
@ -842,4 +842,4 @@ render(){
} }
} }
const CommonWorkPostApp = Form.create({ name: 'coursesNew' })(CommonWorkPost); const CommonWorkPostApp = Form.create({ name: 'coursesNew' })(CommonWorkPost);
export default CommonWorkPostApp; export default CommonWorkPostApp;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -63,7 +63,7 @@ class CommonWorkQuestion extends Component{
on('commonwork_fetch_all', this.fetchAllListener) on('commonwork_fetch_all', this.fetchAllListener)
} }
componentWillUnmount() { componentWillUnmount() {
off('commonwork_fetch_all', this.fetchAllListener) off('commonwork_fetch_all', this.fetchAllListener)
} }
fetchAllListener = () => { fetchAllListener = () => {
this.fetchData() this.fetchData()
@ -81,10 +81,10 @@ class CommonWorkQuestion extends Component{
let category_id=this.props.match.params.category_id; let category_id=this.props.match.params.category_id;
let task_Id=this.props.match.params.task_Id; let task_Id=this.props.match.params.task_Id;
const isGroup = this.props.isGroup() const isGroup = this.props.isGroup()
return( return(
<React.Fragment> <React.Fragment>
{/* 内容区 */} {/* 内容区 */}
<div className="padding40 memoContent new_li"> <div className="padding40 memoContent new_li">
<MarkdownToHtml content={description} selector="work_content" className="mb10"></MarkdownToHtml> <MarkdownToHtml content={description} selector="work_content" className="mb10"></MarkdownToHtml>
@ -110,8 +110,8 @@ class CommonWorkQuestion extends Component{
{/* <div>各小组必须在educoder平台创建项目</div> */} {/* <div>各小组必须在educoder平台创建项目</div> */}
</div> </div>
</div>} </div>}
</div> </div>
{ homework_id && <CommonReply { homework_id && <CommonReply
memo={{ memo={{
@ -127,4 +127,4 @@ class CommonWorkQuestion extends Component{
} }
} }
export default CommonWorkQuestion; export default CommonWorkQuestion;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -53,7 +53,7 @@ class CommonWorkSetting extends Component{
this.publishModal = React.createRef(); this.publishModal = React.createRef();
this.endModal = React.createRef(); this.endModal = React.createRef();
this.fetchMoment = moment() this.fetchMoment = moment()
this.state={ this.state={
unified_setting: true, unified_setting: true,
rules: [], rules: [],
@ -64,12 +64,12 @@ class CommonWorkSetting extends Component{
homework_status: [], homework_status: [],
anonymous_comment: false, anonymous_comment: false,
ta_mode: 1, ta_mode: 1,
evaluation_num: 3, evaluation_num: 3,
absence_penalty: 2, absence_penalty: 2,
appeal_penalty: 2, appeal_penalty: 2,
te_proportion: 50, te_proportion: 50,
ta_proportion: 30, ta_proportion: 30,
st_proportion: 20, st_proportion: 20,
@ -100,13 +100,13 @@ class CommonWorkSetting extends Component{
// endtype=true // endtype=true
// } // }
// //
let disable_unified_setting = false let disable_unified_setting = false
let rules = [] let rules = []
if (result.data.unified_setting == false) { if (result.data.unified_setting == false) {
rules = result.data.group_settings.filter(item => item.publish_time).map(item => { rules = result.data.group_settings.filter(item => item.publish_time).map(item => {
if (disable_unified_setting == false && moment(item.publish_time) < moment()) { if (disable_unified_setting == false && moment(item.publish_time) < moment()) {
// 已经有规则发不过了,不能修改统一设置 // 已经有规则发不过了,不能修改统一设置
disable_unified_setting = true disable_unified_setting = true
@ -140,12 +140,12 @@ class CommonWorkSetting extends Component{
init_evaluation_start: result.data.evaluation_start, init_evaluation_start: result.data.evaluation_start,
init_evaluation_end: result.data.evaluation_end, init_evaluation_end: result.data.evaluation_end,
init_appeal_time: result.data.appeal_time, init_appeal_time: result.data.appeal_time,
rules, rules,
ta_proportion: result.data.ta_proportion * 100, ta_proportion: result.data.ta_proportion * 100,
te_proportion: result.data.te_proportion * 100, te_proportion: result.data.te_proportion * 100,
st_proportion: result.data.st_proportion * 100, st_proportion: result.data.st_proportion * 100,
}) })
this.props.initWorkDetailCommonState && this.props.initWorkDetailCommonState( Object.assign({...result.data}, { this.props.initWorkDetailCommonState && this.props.initWorkDetailCommonState( Object.assign({...result.data}, {
moduleName: '设置' moduleName: '设置'
@ -174,7 +174,7 @@ class CommonWorkSetting extends Component{
} }
} }
componentWillUnmount() { componentWillUnmount() {
off('commonwork_fetch_all', this.fetchAllListener) off('commonwork_fetch_all', this.fetchAllListener)
} }
fetchAllListener = () => { fetchAllListener = () => {
this.fetchData() this.fetchData()
@ -233,7 +233,7 @@ class CommonWorkSetting extends Component{
} }
onChangeTimepublish= (date, dateString) => { onChangeTimepublish= (date, dateString) => {
// console.log('startValue', dateString); // console.log('startValue', dateString);
@ -264,7 +264,7 @@ class CommonWorkSetting extends Component{
} }
onChangeTimelatetime=(date, dateString)=>{ onChangeTimelatetime=(date, dateString)=>{
this.setState({ this.setState({
late_time: handleDateString(dateString) late_time: handleDateString(dateString)
}) })
@ -340,7 +340,7 @@ class CommonWorkSetting extends Component{
const anonymous_appeal = e.target.checked const anonymous_appeal = e.target.checked
let appeal_time, appeal_penalty = this.state.appeal_penalty let appeal_time, appeal_penalty = this.state.appeal_penalty
const currentEndTime = this._getCurrentEndTime() const currentEndTime = this._getCurrentEndTime()
if (anonymous_appeal) { if (anonymous_appeal) {
appeal_penalty = 2 appeal_penalty = 2
if (this.state.allow_late && this.state.late_time) { if (this.state.allow_late && this.state.late_time) {
@ -511,7 +511,7 @@ class CommonWorkSetting extends Component{
let max_un_unified_setting_end_time = null; let max_un_unified_setting_end_time = null;
rules.map(item => { rules.map(item => {
if (!max_un_unified_setting_end_time || moment(item.end_time) > moment(max_un_unified_setting_end_time)) { if (!max_un_unified_setting_end_time || moment(item.end_time) > moment(max_un_unified_setting_end_time)) {
max_un_unified_setting_end_time = item.end_time; max_un_unified_setting_end_time = item.end_time;
} }
}) })
return max_un_unified_setting_end_time return max_un_unified_setting_end_time
@ -523,11 +523,11 @@ class CommonWorkSetting extends Component{
let {assigngroups,hascommit,minnums,max_nums}=this.state; let {assigngroups,hascommit,minnums,max_nums}=this.state;
const {homework_status, homework_id, homework_name, homework_type, publish_immediately, end_immediately const {homework_status, homework_id, homework_name, homework_type, publish_immediately, end_immediately
, ,
publish_time, end_time, publish_time, end_time,
allow_late, late_penalty, late_time, work_public, score_open, answer_public, group_settings, allow_late, late_penalty, late_time, work_public, score_open, answer_public, group_settings,
anonymous_comment, anonymous_appeal, evaluation_start, evaluation_end, evaluation_num, absence_penalty, appeal_time, anonymous_comment, anonymous_appeal, evaluation_start, evaluation_end, evaluation_num, absence_penalty, appeal_time,
appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion, appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion,
unified_setting, unified_setting,
publish_time_type, end_time_type publish_time_type, end_time_type
} = this.state; } = this.state;
@ -544,7 +544,7 @@ class CommonWorkSetting extends Component{
} }
group_settings_param = result.rules.map(item => { group_settings_param = result.rules.map(item => {
if (!max_un_unified_setting_end_time || moment(item.end_time) > moment(max_un_unified_setting_end_time)) { if (!max_un_unified_setting_end_time || moment(item.end_time) > moment(max_un_unified_setting_end_time)) {
max_un_unified_setting_end_time = item.end_time; max_un_unified_setting_end_time = item.end_time;
} }
return { return {
group_id: item.course_group_id, group_id: item.course_group_id,
@ -568,8 +568,8 @@ class CommonWorkSetting extends Component{
scrollTo('.publicTimeTip') scrollTo('.publicTimeTip')
return false return false
} }
let temp_publish_time let temp_publish_time
let temp_end_time let temp_end_time
if (unified_setting) { if (unified_setting) {
temp_publish_time = publish_time temp_publish_time = publish_time
@ -584,14 +584,14 @@ class CommonWorkSetting extends Component{
} else { } else {
temp_end_time = max_un_unified_setting_end_time temp_end_time = max_un_unified_setting_end_time
} }
// 已发布的不检查 // 已发布的不检查
const isUnPublish= homework_status.indexOf(STATUS_UN_PUBLISH) != -1 const isUnPublish= homework_status.indexOf(STATUS_UN_PUBLISH) != -1
const isAdmin = this.props.isAdmin() const isAdmin = this.props.isAdmin()
const current = moment(); const current = moment();
const publish_time_editable = isUnPublish; const publish_time_editable = isUnPublish;
const end_time_editable = isAdmin || !end_time || moment(end_time) > current; const end_time_editable = isAdmin || !end_time || moment(end_time) > current;
if (unified_setting) { if (unified_setting) {
if (publish_time_editable && temp_publish_time && moment(temp_publish_time) < moment()) { if (publish_time_editable && temp_publish_time && moment(temp_publish_time) < moment()) {
this.setState({ this.setState({
@ -700,7 +700,7 @@ class CommonWorkSetting extends Component{
this.setState({ appeal_penalty_tip: '' }) this.setState({ appeal_penalty_tip: '' })
} }
} }
@ -712,14 +712,14 @@ class CommonWorkSetting extends Component{
return false return false
} }
/** /**
"group_settings": [ "group_settings": [
{ {
"group_id": [820, 821], "group_id": [820, 821],
"publish_time": "2018-04-18 10:00:00", "publish_time": "2018-04-18 10:00:00",
"end_time": "2018-04-20 10:00:00" "end_time": "2018-04-20 10:00:00"
}, },
* */ * */
// axios // axios
let course_id=this.props.match.params.coursesId; let course_id=this.props.match.params.coursesId;
const url = `/homework_commons/${workId}/update_settings.json` const url = `/homework_commons/${workId}/update_settings.json`
@ -735,18 +735,18 @@ class CommonWorkSetting extends Component{
late_time: late_time ? new Date(late_time) : late_time, // 补交截止时间 late_time: late_time ? new Date(late_time) : late_time, // 补交截止时间
anonymous_comment: anonymous_comment, // true: 启用匿评 false:未启用匿评 anonymous_comment: anonymous_comment, // true: 启用匿评 false:未启用匿评
evaluation_start: evaluation_start ? new Date(evaluation_start) : evaluation_start, //匿评开始时间 evaluation_start: evaluation_start ? new Date(evaluation_start) : evaluation_start, //匿评开始时间
evaluation_end: evaluation_end ? new Date(evaluation_end) : evaluation_end, evaluation_end: evaluation_end ? new Date(evaluation_end) : evaluation_end,
evaluation_num: evaluation_num, // 匿评数 evaluation_num: evaluation_num, // 匿评数
absence_penalty: absence_penalty, // 匿评扣分 absence_penalty: absence_penalty, // 匿评扣分
anonymous_appeal: anonymous_appeal, // true: 启用匿评申诉, false:未启用 anonymous_appeal: anonymous_appeal, // true: 启用匿评申诉, false:未启用
appeal_time: appeal_time ? new Date(appeal_time) : appeal_time, // 申诉结束时间 appeal_time: appeal_time ? new Date(appeal_time) : appeal_time, // 申诉结束时间
appeal_penalty: appeal_penalty, // 违规匿评扣分 appeal_penalty: appeal_penalty, // 违规匿评扣分
ta_mode: ta_mode, // 1:普通模式 0:复审模式 ta_mode: ta_mode, // 1:普通模式 0:复审模式
final_mode: final_mode, // true: 单项评分优先, false: 多项评分配比 final_mode: final_mode, // true: 单项评分优先, false: 多项评分配比
te_proportion: te_proportion / 100, te_proportion: te_proportion / 100,
ta_proportion: ta_proportion / 100, ta_proportion: ta_proportion / 100,
st_proportion: st_proportion / 100, st_proportion: st_proportion / 100,
work_public: work_public, //公开作品 work_public: work_public, //公开作品
score_open: score_open, // 公开成绩 score_open: score_open, // 公开成绩
answer_public: answer_public, answer_public: answer_public,
@ -920,15 +920,15 @@ class CommonWorkSetting extends Component{
commenttimevalue, commenttimevalue,
homework_status, homework_id, homework_name, homework_type, publish_immediately, end_immediately, unified_setting, publish_time, homework_status, homework_id, homework_name, homework_type, publish_immediately, end_immediately, unified_setting, publish_time,
end_time, allow_late, late_penalty, late_time, work_public, score_open, answer_public, group_settings, end_time, allow_late, late_penalty, late_time, work_public, score_open, answer_public, group_settings,
anonymous_comment, anonymous_appeal, evaluation_start, evaluation_end, evaluation_num, absence_penalty, appeal_time, anonymous_comment, anonymous_appeal, evaluation_start, evaluation_end, evaluation_num, absence_penalty, appeal_time,
appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion, anonymous_comment_time_tip, appeal_time_tip, appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion, anonymous_comment_time_tip, appeal_time_tip,
final_mode_false_tip, final_mode_false_tip,
startEditFlag, startEditFlag,
publish_time_type, end_time_type, rules, disable_unified_setting, publish_time_type, end_time_type, rules, disable_unified_setting,
work_statuses, work_id, work_statuses, work_id,
accessoryVisible, accessoryVisible,
init_late_time, init_evaluation_start, init_evaluation_end, init_appeal_time init_late_time, init_evaluation_start, init_evaluation_end, init_appeal_time
} =this.state; } =this.state;
@ -971,7 +971,7 @@ class CommonWorkSetting extends Component{
const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx` const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx`
const noAuth = !isAdmin || !startEditFlag; const noAuth = !isAdmin || !startEditFlag;
return( return(
<React.Fragment> <React.Fragment>
@ -1004,7 +1004,7 @@ class CommonWorkSetting extends Component{
onToPublishClick={this.onToPublishClick} onToPublishClick={this.onToPublishClick}
></PublishRightnow> ></PublishRightnow>
<PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} action={this.fetchData} <PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} action={this.fetchData}
isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow> isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow>
<style>{` <style>{`
.settingForm .ant-radio-group, .settingForm.ant-form { .settingForm .ant-radio-group, .settingForm.ant-form {
@ -1021,7 +1021,7 @@ class CommonWorkSetting extends Component{
.settingForm .color-grey-9 { .settingForm .color-grey-9 {
color: #ccc !important; color: #ccc !important;
} }
`}</style> `}</style>
<Form className={'settingForm'}> <Form className={'settingForm'}>
<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36"> <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36">
@ -1033,7 +1033,7 @@ class CommonWorkSetting extends Component{
<p className="mb30 clearfix"> <p className="mb30 clearfix">
<span className="font-16 fl color-dark">发布设置</span> <span className="font-16 fl color-dark">发布设置</span>
{ {
!startEditFlag && isAdmin ? !startEditFlag && isAdmin ?
<a className="fr white-btn edu-blueline-btn mr10 mr6 lineh-24" onClick={() => { this.setState({startEditFlag: true}) }}> <a className="fr white-btn edu-blueline-btn mr10 mr6 lineh-24" onClick={() => { this.setState({startEditFlag: true}) }}>
编辑设置 编辑设置
{/*<Tooltip title="编辑"><i className="iconfont icon-bianjidaibeijing font-20 color-green"></i></Tooltip>*/} {/*<Tooltip title="编辑"><i className="iconfont icon-bianjidaibeijing font-20 color-green"></i></Tooltip>*/}
@ -1049,7 +1049,7 @@ class CommonWorkSetting extends Component{
>统一设置</Checkbox> >统一设置</Checkbox>
</ConditionToolTip> </ConditionToolTip>
<span className="color-grey-9">选中则所有分班使用相同的发布设置仅课堂管理员可修改否则各个分班允许单独设置</span> <span className="color-grey-9">选中则所有分班使用相同的发布设置仅课堂管理员可修改否则各个分班允许单独设置</span>
</p>} </p>}
@ -1078,8 +1078,8 @@ class CommonWorkSetting extends Component{
// disabled={this.props.isSuperAdmin()?false:publish_time_type===true?true:false} // disabled={this.props.isSuperAdmin()?false:publish_time_type===true?true:false}
disabled={moment(this.state.init_publish_time) < moment() || noAuth} disabled={moment(this.state.init_publish_time) < moment() || noAuth}
// disabledDate={ (publish_time) => { // disabledDate={ (publish_time) => {
// return publish_time && publish_time < moment().add(-1, 'days'); } // return publish_time && publish_time < moment().add(-1, 'days'); }
// } // }
/> />
</span> </span>
@ -1109,15 +1109,15 @@ class CommonWorkSetting extends Component{
disabled={this.props.isSuperAdmin()?false:end_time_type===true?true:false} disabled={this.props.isSuperAdmin()?false:end_time_type===true?true:false}
disabled={moment(this.state.init_end_time) < moment() || noAuth} disabled={moment(this.state.init_end_time) < moment() || noAuth}
disabledDate={disabledDateFunc} disabledDate={disabledDateFunc}
// disabledDate={ (end_time) => // disabledDate={ (end_time) =>
// { // {
// const publish_time = this.state.publish_time // const publish_time = this.state.publish_time
// if (!publish_time) { // if (!publish_time) {
// return end_time && end_time < moment(); // return end_time && end_time < moment();
// } // }
// if (!publish_time || !end_time) { return false; } // if (!publish_time || !end_time) { return false; }
// return end_time.valueOf() < moment(publish_time, dateFormat).valueOf(); } // return end_time.valueOf() < moment(publish_time, dateFormat).valueOf(); }
// } // }
/> />
</span> </span>
@ -1127,7 +1127,7 @@ class CommonWorkSetting extends Component{
</div> </div>
{<div className={"publicTimeTip color-red ml30"}>{publicTimeTip}</div>} {<div className={"publicTimeTip color-red ml30"}>{publicTimeTip}</div>}
</React.Fragment> : </React.Fragment> :
adaptered_group_settings && !!adaptered_group_settings.length && <PollDetailTabForthRules adaptered_group_settings && !!adaptered_group_settings.length && <PollDetailTabForthRules
{...this.props} {...this.props}
{...this.state} {...this.state}
@ -1139,8 +1139,8 @@ class CommonWorkSetting extends Component{
moduleName="作业" moduleName="作业"
></PollDetailTabForthRules> ></PollDetailTabForthRules>
} }
{/* {/*
flagPageEdit={flagPageEdit} flagPageEdit={flagPageEdit}
*/} */}
@ -1148,7 +1148,7 @@ class CommonWorkSetting extends Component{
</div> </div>
<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36"> <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36">
<div className={" font-16 color-dark h20 mb20"}>补交设置 <div className={" font-16 color-dark h20 mb20"}>补交设置
<span className={"ml15 font-14 color-grey-9 "}>选中则允许学生延时提交作品</span> <span className={"ml15 font-14 color-grey-9 "}>选中则允许学生延时提交作品</span>
</div> </div>
@ -1164,7 +1164,7 @@ class CommonWorkSetting extends Component{
<span className={"font-14 color-grey-9 "}>延时提交作品时学生成绩将被扣减的分值</span> <span className={"font-14 color-grey-9 "}>延时提交作品时学生成绩将被扣减的分值</span>
{latepenaltytype===true?<div className={"color-red ml40"}>{latepenaltyvalue}</div>:""} {latepenaltytype===true?<div className={"color-red ml40"}>{latepenaltyvalue}</div>:""}
</div> </div>
<div className={" mb10 ml30"}> <div className={" mb10 ml30"}>
<span>结束时间</span> <span>结束时间</span>
{/* <ConditionToolTip condition={moment(init_late_time) < this.fetchMoment} title={""}> {/* <ConditionToolTip condition={moment(init_late_time) < this.fetchMoment} title={""}>
@ -1185,15 +1185,15 @@ class CommonWorkSetting extends Component{
// || moment(init_late_time) < moment() // || moment(init_late_time) < moment()
disabled={!allow_late || noAuth } disabled={!allow_late || noAuth }
disabledDate={disabledDateFunc} disabledDate={disabledDateFunc}
// disabledDate={ (late_time) => // disabledDate={ (late_time) =>
// { // {
// const end_time = this.state.end_time // const end_time = this.state.end_time
// if (!end_time || !late_time) { return false; } // if (!end_time || !late_time) { return false; }
// return late_time < moment(end_time, dateFormat).add(-1, 'days'); } // return late_time < moment(end_time, dateFormat).add(-1, 'days'); }
// } // }
/> />
</span> </span>
<span className={"font-14 color-grey-9 ml10"}>学生延时提交作品的时间截点</span> <span className={"font-14 color-grey-9 ml10"}>学生延时提交作品的时间截点</span>
{<div className={"latetimetype color-red "}>{latetimetype}</div>} {<div className={"latetimetype color-red "}>{latetimetype}</div>}
</div> </div>
@ -1207,7 +1207,7 @@ class CommonWorkSetting extends Component{
<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36"> <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36">
<div className={" font-16 color-dark h20 mb20"}>匿评设置 </div> <div className={" font-16 color-dark h20 mb20"}>匿评设置 </div>
<div className={"mb20"}> <div className={"mb20"}>
<Checkbox className="ml30" checked={anonymous_comment} onChange={this.anonymous_comment_change} <Checkbox className="ml30" checked={anonymous_comment} onChange={this.anonymous_comment_change}
disabled={noAuth || moment(init_evaluation_start) < moment()} disabled={noAuth || moment(init_evaluation_start) < moment()}
@ -1233,11 +1233,11 @@ class CommonWorkSetting extends Component{
value={!evaluation_start ?"":moment(evaluation_start, dateFormat)} value={!evaluation_start ?"":moment(evaluation_start, dateFormat)}
onChange={this.onChangeEvaluationStart} onChange={this.onChangeEvaluationStart}
disabled={ (anonymous_comment && !noAuth ? false : true) || moment(init_evaluation_start) < moment() } disabled={ (anonymous_comment && !noAuth ? false : true) || moment(init_evaluation_start) < moment() }
// disabledDate={ (evaluation_start) => // disabledDate={ (evaluation_start) =>
// { // {
// const end_time = this.state.end_time // const end_time = this.state.end_time
// if (!end_time || !evaluation_start) { return false; } // if (!end_time || !evaluation_start) { return false; }
// return evaluation_start.valueOf() < moment(end_time, dateFormat).valueOf(); } // return evaluation_start.valueOf() < moment(end_time, dateFormat).valueOf(); }
// } // }
/> />
</span> </span>
@ -1268,11 +1268,11 @@ class CommonWorkSetting extends Component{
disabled={(anonymous_comment && !noAuth ? false : true) || moment(init_evaluation_end) < moment()} disabled={(anonymous_comment && !noAuth ? false : true) || moment(init_evaluation_end) < moment()}
disabledDate={disabledDateFunc} disabledDate={disabledDateFunc}
// disabledDate={ (evaluation_end) => // disabledDate={ (evaluation_end) =>
// { // {
// const evaluation_start = this.state.evaluation_start // const evaluation_start = this.state.evaluation_start
// if (!evaluation_start || !evaluation_end) { return false; } // if (!evaluation_start || !evaluation_end) { return false; }
// return evaluation_end.valueOf() < moment(evaluation_start, dateFormat).valueOf(); } // return evaluation_end.valueOf() < moment(evaluation_start, dateFormat).valueOf(); }
// } // }
/> />
@ -1314,8 +1314,8 @@ class CommonWorkSetting extends Component{
</div> </div>
{this.state.absence_penalty_tip && <div className={" absence_penalty_tip color-red ml60"} style={{marginTop: '-6px'}}>{this.state.absence_penalty_tip}</div>} {this.state.absence_penalty_tip && <div className={" absence_penalty_tip color-red ml60"} style={{marginTop: '-6px'}}>{this.state.absence_penalty_tip}</div>}
{ anonymous_comment && { anonymous_comment &&
<React.Fragment> <React.Fragment>
<div className={"mb20"}> <div className={"mb20"}>
<Checkbox className="ml30" checked={anonymous_appeal} onChange={this.anonymous_appeal_change} <Checkbox className="ml30" checked={anonymous_appeal} onChange={this.anonymous_appeal_change}
@ -1328,9 +1328,9 @@ class CommonWorkSetting extends Component{
`}</style> `}</style>
<PopInstruction width={458} id={1}> <PopInstruction width={458} id={1}>
<p className="font-14 edu-txt-left pop-instruction"> <p className="font-14 edu-txt-left pop-instruction">
允许学生对自己作品的匿评评分进行申诉由教师和助教处理申诉<br/> 允许学生对自己作品的匿评评分进行申诉由教师和助教处理申诉<br/>
<br/> <br/>
1接受学生的合理申诉<br/> 1接受学生的合理申诉<br/>
<p className="p">被申诉的评分记录无效不参与最终成绩的计算</p> <p className="p">被申诉的评分记录无效不参与最终成绩的计算</p>
@ -1340,12 +1340,12 @@ class CommonWorkSetting extends Component{
2拒绝学生的不合理申诉<br/> 2拒绝学生的不合理申诉<br/>
<p className="p">被申诉的评分记录有效不允许学生对该评分记录进行二次申诉</p> <p className="p">被申诉的评分记录有效不允许学生对该评分记录进行二次申诉</p>
<p className="p">被申诉的评阅人的作品成绩不会扣除违规匿评分</p> <p className="p">被申诉的评阅人的作品成绩不会扣除违规匿评分</p>
</p> </p>
</PopInstruction> </PopInstruction>
{/* <span className={"font-14 color-grey-9"}>提交作品少于2个时匿评开启将失败请在作品数量达标后重新进行匿评设置</span> */} {/* <span className={"font-14 color-grey-9"}>提交作品少于2个时匿评开启将失败请在作品数量达标后重新进行匿评设置</span> */}
</div> </div>
{/* 启用匿评申述 结束时间: */} {/* 启用匿评申述 结束时间: */}
<div className={"h20 mb30 ml60"}> <div className={"h20 mb30 ml60"}>
<span>结束时间</span> <span>结束时间</span>
{/* <Tooltip placement="bottom" title={this.props.isSuperAdmin()?"":starttimetype===true?"":""}> {/* <Tooltip placement="bottom" title={this.props.isSuperAdmin()?"":starttimetype===true?"":""}>
@ -1369,7 +1369,7 @@ class CommonWorkSetting extends Component{
/> />
</span> </span>
</ConditionToolTip> </ConditionToolTip>
<span className={"font-14 color-grey-9 ml10"}>学生提交匿评申诉的时间截点</span> <span className={"font-14 color-grey-9 ml10"}>学生提交匿评申诉的时间截点</span>
</div> </div>
@ -1398,13 +1398,13 @@ class CommonWorkSetting extends Component{
<div className={"mb20 ml30"}> <div className={"mb20 ml30"}>
<span className={"font-16 "}>助教评分</span> <span className={"font-16 "}>助教评分</span>
</div> </div>
<div className={"mb30 ml60"}> <div className={"mb30 ml60"}>
<Tooltip placement="bottom" title={starttimetype===true?this.props.isAdmin()?"发布时间已过,则不能修改":"":""}> <Tooltip placement="bottom" title={starttimetype===true?this.props.isAdmin()?"发布时间已过,则不能修改":"":""}>
<RadioGroup onChange={this.ta_mode_change} value={ta_mode}> <RadioGroup onChange={this.ta_mode_change} value={ta_mode}>
<Radio style={radioStyle} value={1} disabled={noAuth}> <Radio style={radioStyle} value={1} disabled={noAuth}>
普通模式<span className={"font-14 color-grey-9 ml10"}>选中则取各助教最终评分的平均分</span> 普通模式<span className={"font-14 color-grey-9 ml10"}>选中则取各助教最终评分的平均分</span>
</Radio> </Radio>
<Radio style={radioStyle} value={0} disabled={noAuth}> <Radio style={radioStyle} value={0} disabled={noAuth}>
复审模式<span className={"font-14 color-grey-9 ml10"}>选中则只取最新的助教评分</span> 复审模式<span className={"font-14 color-grey-9 ml10"}>选中则只取最新的助教评分</span>
</Radio> </Radio>
@ -1423,7 +1423,7 @@ class CommonWorkSetting extends Component{
<PopInstruction width={512} id={2}> <PopInstruction width={512} id={2}>
<p className="font-14 edu-txt-left pop-instruction"> <p className="font-14 edu-txt-left pop-instruction">
计算说明<br/> 计算说明<br/>
教师评分 * 其百分比 + 助教评分 * 其百分比 + 学生匿评平均分 * 其百分比 - ( <br/> 教师评分 * 其百分比 + 助教评分 * 其百分比 + 学生匿评平均分 * 其百分比 - ( <br/>
迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/><br/> 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/><br/>
注意<br/> 注意<br/>
@ -1431,30 +1431,30 @@ class CommonWorkSetting extends Component{
评分选项上<br/> 评分选项上<br/>
教师评分40% + 助教评分35% + 学生匿评25%学生A没有教师评分记<br/> 教师评分40% + 助教评分35% + 学生匿评25%学生A没有教师评分记<br/>
则其最终成绩按照助教评分55% + 学生匿评45%进行计算 则其最终成绩按照助教评分55% + 学生匿评45%进行计算
</p> </p>
</PopInstruction> </PopInstruction>
</Radio> </Radio>
<div className={"h21 mb10 ml30 mt20"}> <div className={"h21 mb10 ml30 mt20"}>
<span>教师评分</span> <span>教师评分</span>
<Input type="number" className="mr10" min={0} max={100} style={{width:"100px" }} <Input type="number" className="mr10" min={0} max={100} style={{width:"100px" }}
value={te_proportion} onInput={this.te_proportion_change} disabled={final_mode || noAuth} value={te_proportion} onInput={this.te_proportion_change} disabled={final_mode || noAuth}
/> />
% %
</div> </div>
<div className={"h21 mb10 ml30"}> <div className={"h21 mb10 ml30"}>
<span>助教评分</span> <span>助教评分</span>
<Input type="number" className="mr10" min={0} max={100} style={{width:"100px" }} <Input type="number" className="mr10" min={0} max={100} style={{width:"100px" }}
value={ta_proportion} onInput={this.ta_proportion_change} disabled={final_mode || noAuth} value={ta_proportion} onInput={this.ta_proportion_change} disabled={final_mode || noAuth}
/> />
% %
</div> </div>
<div className={"h21 mb10 ml30 mb20"}> <div className={"h21 mb10 ml30 mb20"}>
<span>学生匿评</span> <span>学生匿评</span>
<ConditionToolTip title="未开启匿评,不能修改" condition={!anonymous_comment}> <ConditionToolTip title="未开启匿评,不能修改" condition={!anonymous_comment}>
<Input type="number" className="mr10" min={0} max={100} style={{width:"100px" }} value={st_proportion} <Input type="number" className="mr10" min={0} max={100} style={{width:"100px" }} value={st_proportion}
onInput={this.st_proportion_change} disabled={final_mode || !anonymous_comment || noAuth}/> onInput={this.st_proportion_change} disabled={final_mode || !anonymous_comment || noAuth}/>
</ConditionToolTip> </ConditionToolTip>
% %
@ -1465,7 +1465,7 @@ class CommonWorkSetting extends Component{
<PopInstruction width={500} id={3}> <PopInstruction width={500} id={3}>
<p className="font-14 edu-txt-left pop-instruction"> <p className="font-14 edu-txt-left pop-instruction">
计算说明<br/> 计算说明<br/>
优先顺序排前的非零评分 * 100% - <br/> 优先顺序排前的非零评分 * 100% - <br/>
( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/> ( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/>
有教师评分则教师评分100%否则教辅评分100%依次类推 有教师评分则教师评分100%否则教辅评分100%依次类推
@ -1477,11 +1477,11 @@ class CommonWorkSetting extends Component{
非零百分比的评分选项在没有评分记录的情况下其百分比平摊到另外的评<br/> 非零百分比的评分选项在没有评分记录的情况下其百分比平摊到另外的评<br/>
分选项上例如教师评分40% + 助教评分35% + 学生匿评25%学生A没<br/> 分选项上例如教师评分40% + 助教评分35% + 学生匿评25%学生A没<br/>
有得到教师评分则最终成绩将按照助教评分55% + 学生匿评45%进行计算 */} 有得到教师评分则最终成绩将按照助教评分55% + 学生匿评45%进行计算 */}
</p> </p>
</PopInstruction> </PopInstruction>
</Radio> </Radio>
</RadioGroup> </RadioGroup>
<div className={"font-16"} style={{ marginLeft: '25px' }}> <div className={"font-16"} style={{ marginLeft: '25px' }}>
<span>教师评分 教辅评分 学生匿评评分</span> <span>教师评分 教辅评分 学生匿评评分</span>
@ -1526,10 +1526,10 @@ class CommonWorkSetting extends Component{
>取消</a> >取消</a>
</div>:""} </div>:""}
</React.Fragment> </React.Fragment>
) )
} }
} }
const CommonWorkSettingForm = Form.create({ name: 'commonworkSettingForm' })(CommonWorkSetting); const CommonWorkSettingForm = Form.create({ name: 'commonworkSettingForm' })(CommonWorkSetting);
export default CommonWorkSettingForm; export default CommonWorkSettingForm;

@ -1,11 +1,11 @@
import React,{Component} from "React"; import React,{Component} from "react";
export default function LeaderIcon(props = {}) { export default function LeaderIcon(props = {}) {
let icon = null; let icon = null;
const { className, style } = props; const { className, style } = props;
const _className = `font-8 blueFull Actionbtn ${className}` const _className = `font-8 blueFull Actionbtn ${className}`
if (props.small) { if (props.small) {
icon = <div className={_className} style={{ icon = <div className={_className} style={{
height: '14px', height: '14px',
'line-height': '14px', 'line-height': '14px',
// width: '24px', // width: '24px',
@ -16,7 +16,7 @@ export default function LeaderIcon(props = {}) {
'vertical-align': 'middle', }}>组长</div> 'vertical-align': 'middle', }}>组长</div>
} else { } else {
icon = <div className={_className} style={{ height: '16px', 'line-height': '16px', transform: 'scale(0.833)'}}>组长</div> icon = <div className={_className} style={{ height: '16px', 'line-height': '16px', transform: 'scale(0.833)'}}>组长</div>
} }
return icon return icon
} }

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import { WordsBtn, MarkdownToHtml } from 'educoder'; import { WordsBtn, MarkdownToHtml } from 'educoder';
@ -22,7 +22,7 @@ class TabRightComponents extends Component{
this.publishModal = React.createRef(); this.publishModal = React.createRef();
this.endModal = React.createRef(); this.endModal = React.createRef();
this.state={ this.state={
accessoryVisible: false, accessoryVisible: false,
DownloadType:false, DownloadType:false,
@ -110,18 +110,18 @@ class TabRightComponents extends Component{
let exportUrl = `/api/homework_commons/${workId}/works_list.zip` let exportUrl = `/api/homework_commons/${workId}/works_list.zip`
const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx` const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx`
return( return(
<React.Fragment> <React.Fragment>
{isAdmin ? {isAdmin ?
<React.Fragment> <React.Fragment>
<div style={{display: 'inline', float: 'right'}}> <div style={{display: 'inline', float: 'right'}}>
<PublishRightnow ref={this.publishModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} <PublishRightnow ref={this.publishModal} showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={true} doWhenSuccess={this.props.doWhenSuccess} checkBeforePost={this.props.saveWorkSetting} isPublish={true} doWhenSuccess={this.props.doWhenSuccess} checkBeforePost={this.props.saveWorkSetting}
onToPublishClick={this.onToPublishClick} onToPublishClick={this.onToPublishClick}
></PublishRightnow> ></PublishRightnow>
<PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} <PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={false} doWhenSuccess={this.props.doWhenSuccess}></PublishRightnow> isPublish={false} doWhenSuccess={this.props.doWhenSuccess}></PublishRightnow>
</div> </div>
<DownloadMessageysl <DownloadMessageysl
{...this.props} {...this.props}
@ -163,7 +163,7 @@ class TabRightComponents extends Component{
{/*<a className={"fr color-blue font-16"}>项目在线质量检测</a>*/} {/*<a className={"fr color-blue font-16"}>项目在线质量检测</a>*/}
{isAdmin && <a className={"fr color-blue font-16"} onClick={() => this.props.toEditPage(this.props.match.params, workId)}>编辑作业</a>} {isAdmin && <a className={"fr color-blue font-16"} onClick={() => this.props.toEditPage(this.props.match.params, workId)}>编辑作业</a>}
</React.Fragment> : </React.Fragment> :
<React.Fragment> <React.Fragment>
{work_statuses && work_statuses.indexOf('提交作品') != -1 && <a className={"fr color-blue font-16"} href={"javascript:void(0)"} {work_statuses && work_statuses.indexOf('提交作品') != -1 && <a className={"fr color-blue font-16"} href={"javascript:void(0)"}
onClick={() => { this.props.toWorkPostPage(this.props.match.params)}} onClick={() => { this.props.toWorkPostPage(this.props.match.params)}}
@ -171,7 +171,7 @@ class TabRightComponents extends Component{
{work_statuses && work_statuses.indexOf('修改作品') != -1 && <a className={"fr color-blue font-16"} href={"javascript:void(0)"} {work_statuses && work_statuses.indexOf('修改作品') != -1 && <a className={"fr color-blue font-16"} href={"javascript:void(0)"}
onClick={() => { this.props.toWorkPostPage(this.props.match.params, null, true, work_id)}} onClick={() => { this.props.toWorkPostPage(this.props.match.params, null, true, work_id)}}
>修改作品</a>} >修改作品</a>}
{work_statuses && work_statuses.indexOf('补交附件') != -1 && {work_statuses && work_statuses.indexOf('补交附件') != -1 &&
<React.Fragment> <React.Fragment>
<AccessoryModal <AccessoryModal
{...this.props} {...this.props}
@ -195,4 +195,4 @@ class TabRightComponents extends Component{
} }
} }
export default TabRightComponents; export default TabRightComponents;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -32,12 +32,12 @@ class WorkDetailPageHeader extends Component{
goback = () => { goback = () => {
let workId=this.props.match.params.workId; let workId=this.props.match.params.workId;
if ( window.location.pathname.indexOf('appraise') == -1) { if ( window.location.pathname.indexOf('appraise') == -1) {
let category_id= this.props.category.category_id; let category_id= this.props.category.category_id;
this.props.toListPage(this.props.match.params, category_id) this.props.toListPage(this.props.match.params, category_id)
} else { } else {
this.props.toWorkListPage(this.props.match.params, workId) this.props.toWorkListPage(this.props.match.params, workId)
// this.props.match.params.category_id // this.props.match.params.category_id
} }
// this.props.history.goBack() // this.props.history.goBack()
@ -67,7 +67,7 @@ class WorkDetailPageHeader extends Component{
let courseId=this.props.match.params.coursesId; let courseId=this.props.match.params.coursesId;
let category_id= category && category.category_id; let category_id= category && category.category_id;
let category_name= category && category.category_name; let category_name= category && category.category_name;
let workId=this.props.match.params.workId; let workId=this.props.match.params.workId;
const studentWorkId = this.props.match.params.studentWorkId const studentWorkId = this.props.match.params.studentWorkId
@ -108,7 +108,7 @@ class WorkDetailPageHeader extends Component{
typelist={homework_status} typelist={homework_status}
typesylename={"mt3"} typesylename={"mt3"}
/> />
{category && <a className="color-grey-6 fr font-16 ml30 mr30 lineh-25" onClick={this.goback}>返回</a>} {category && <a className="color-grey-6 fr font-16 ml30 mr30 lineh-25" onClick={this.goback}>返回</a>}
@ -135,13 +135,13 @@ class WorkDetailPageHeader extends Component{
{ noTab !== true && <div className="stud-class-set bor-bottom-greyE"> { noTab !== true && <div className="stud-class-set bor-bottom-greyE">
<div className="mt10 clearfix edu-back-white poll_list pl5"> <div className="mt10 clearfix edu-back-white poll_list pl5">
<Link <Link
className={`${childModuleName == '作品列表' ? 'active' : '' } `} className={`${childModuleName == '作品列表' ? 'active' : '' } `}
to={`/courses/${courseId}/${moduleEngName}/${workId}/list`}>作品列表</Link> to={`/courses/${courseId}/${moduleEngName}/${workId}/list`}>作品列表</Link>
<Link <Link
className={`${childModuleName == '作业描述' ? 'active' : '' } `} className={`${childModuleName == '作业描述' ? 'active' : '' } `}
to={`/courses/${courseId}/${moduleEngName}/${workId}/question`}>作业描述</Link> to={`/courses/${courseId}/${moduleEngName}/${workId}/question`}>作业描述</Link>
{view_answer == true && <Link {view_answer == true && <Link
className={`${childModuleName == '参考答案' ? 'active' : '' } `} className={`${childModuleName == '参考答案' ? 'active' : '' } `}
to={`/courses/${courseId}/${moduleEngName}/${workId}/answer`}>参考答案</Link>} to={`/courses/${courseId}/${moduleEngName}/${workId}/answer`}>参考答案</Link>}
@ -149,9 +149,9 @@ class WorkDetailPageHeader extends Component{
className={`${childModuleName == '设置' ? 'active' : '' } `} className={`${childModuleName == '设置' ? 'active' : '' } `}
style={{paddingLeft:this.props.isAdmin()?'38px':'20px'}} style={{paddingLeft:this.props.isAdmin()?'38px':'20px'}}
to={`/courses/${courseId}/${moduleEngName}/${workId}/setting`}>{this.props.isAdmin()?"设置":"得分规则"}</Link> to={`/courses/${courseId}/${moduleEngName}/${workId}/setting`}>{this.props.isAdmin()?"设置":"得分规则"}</Link>
{ this.props.tabRightComponents }
{ this.props.tabRightComponents }
</div> </div>
</div> } </div> }
@ -169,4 +169,4 @@ class WorkDetailPageHeader extends Component{
} }
} }
export default WorkDetailPageHeader; export default WorkDetailPageHeader;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,DatePicker} from "antd"; import { Form, Select, Input, Button,Checkbox,DatePicker} from "antd";
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -244,4 +244,4 @@ class Ecercisemount extends Component{
} }
} }
const EcercisemountApp = Form.create({ name: 'coursesNew' })(Ecercisemount); const EcercisemountApp = Form.create({ name: 'coursesNew' })(Ecercisemount);
export default EcercisemountApp; export default EcercisemountApp;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Spin,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Spin,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';

@ -1,4 +1,5 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip,Spin} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip,Spin} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
@ -852,4 +853,4 @@ render(){
} }
} }
const GraduationTasksSubmitnewApp = Form.create({ name: 'coursesNew' })(GraduationTasksSubmitnew); const GraduationTasksSubmitnewApp = Form.create({ name: 'coursesNew' })(GraduationTasksSubmitnew);
export default GraduationTasksSubmitnewApp; export default GraduationTasksSubmitnewApp;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import { WordsBtn,markdownToHTML } from 'educoder'; import { WordsBtn,markdownToHTML } from 'educoder';
@ -330,7 +330,7 @@ class GraduationTasksappraise extends Component{
</div> </div>
} }
</div> </div>
<GraduationTasksappraiseReply {...this.props} task_id={datalist&&datalist.task_id} task_type={datalist&&datalist.task_type}></GraduationTasksappraiseReply> <GraduationTasksappraiseReply {...this.props} task_id={datalist&&datalist.task_id} task_type={datalist&&datalist.task_type}></GraduationTasksappraiseReply>
@ -346,4 +346,4 @@ class GraduationTasksappraise extends Component{
} }
} }
export default GraduationTasksappraise; export default GraduationTasksappraise;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
@ -436,7 +436,7 @@ class GraduationTasksedit extends Component{
.upload_1 .ant-upload-list { .upload_1 .ant-upload-list {
width: 350px; width: 350px;
} }
`}</style> `}</style>
<Form.Item <Form.Item
label="内容" label="内容"
@ -574,4 +574,4 @@ class GraduationTasksedit extends Component{
} }
} }
const GraduationTaskseditApp = Form.create({ name: 'coursesNew' })(GraduationTasksedit); const GraduationTaskseditApp = Form.create({ name: 'coursesNew' })(GraduationTasksedit);
export default GraduationTaskseditApp; export default GraduationTaskseditApp;

@ -1,4 +1,4 @@
import React, {Component} from "React"; import React, {Component} from "react";
import {Form, Select, Input, Button, Checkbox, Upload, Icon, message, Modal} from "antd"; import {Form, Select, Input, Button, Checkbox, Upload, Icon, message, Modal} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
@ -190,7 +190,7 @@ class GraduationTasksnew extends Component {
}, },
}); });
return false; return false;
} }
} }
@ -279,7 +279,7 @@ class GraduationTasksnew extends Component {
callback(); callback();
} }
} }
render() { render() {
const {getFieldDecorator} = this.props.form; const {getFieldDecorator} = this.props.form;
let { let {
@ -453,7 +453,7 @@ class GraduationTasksnew extends Component {
.ant-form-item{ .ant-form-item{
margin-bottom:0px margin-bottom:0px
} }
`}</style> `}</style>
<Form.Item <Form.Item
label="内容" label="内容"
@ -530,4 +530,4 @@ class GraduationTasksnew extends Component {
} }
const GraduationTasksnewApp = Form.create({name: 'coursesNew'})(GraduationTasksnew); const GraduationTasksnewApp = Form.create({name: 'coursesNew'})(GraduationTasksnew);
export default GraduationTasksnewApp; export default GraduationTasksnewApp;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -160,13 +160,13 @@ class GraduationTaskssettingapp extends Component{
if(this.props.isAdmin()===true&&isNaN(id)){ if(this.props.isAdmin()===true&&isNaN(id)){
this.editSetting() this.editSetting()
} }
let tab = this.props.tab; let tab = this.props.tab;
this.props.setTab && this.props.setTab(tab); this.props.setTab && this.props.setTab(tab);
try{ try{
this.props.triggerRef(this) this.props.triggerRef(this)
}catch(e){ }catch(e){
} }
} }
@ -1296,7 +1296,7 @@ debugger
{/*<Link to={"/courses/"+courseId+"/graduation_tasks/"+position+"/"+category_id+coursesearch} className="defalutCancelbtn fl">取消</Link>*/} {/*<Link to={"/courses/"+courseId+"/graduation_tasks/"+position+"/"+category_id+coursesearch} className="defalutCancelbtn fl">取消</Link>*/}
<a onClick={this.isgoback} className="defalutCancelbtn fl">取消</a> <a onClick={this.isgoback} className="defalutCancelbtn fl">取消</a>
</div>:"":""} </div>:"":""}
</div>:""} </div>:""}
</React.Fragment> </React.Fragment>
@ -1305,4 +1305,4 @@ debugger
} }
const GraduationTaskssetting = Form.create({ name: 'coursesNew' })(GraduationTaskssettingapp); const GraduationTaskssetting = Form.create({ name: 'coursesNew' })(GraduationTaskssettingapp);
export default GraduationTaskssetting; export default GraduationTaskssetting;

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Pagination, Table, Divider, Tag,Tooltip} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Pagination, Table, Divider, Tag,Tooltip} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import {getImageUrl, NoneData, sortDirections} from 'educoder'; import {getImageUrl, NoneData, sortDirections} from 'educoder';

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import { WordsBtn,markdownToHTML,AttachmentList} from 'educoder'; import { WordsBtn,markdownToHTML,AttachmentList} from 'educoder';
@ -39,7 +39,7 @@ class GraduationTasksquestions extends Component{
try{ try{
this.props.triggerRef(this) this.props.triggerRef(this)
}catch(e){ }catch(e){
} }
} }
@ -372,7 +372,7 @@ class GraduationTasksquestions extends Component{
<div className={"mt20 course-message"} style={{background: '#fff'}}> <div className={"mt20 course-message"} style={{background: '#fff'}}>
<GraduationTaskssettingReply <GraduationTaskssettingReply
memo={{id: task_Id, memo={{id: task_Id,
user_id: questionslist && questionslist.user_id}} user_id: questionslist && questionslist.user_id}}
course_id={courseId} {...this.props}> course_id={courseId} {...this.props}>
</GraduationTaskssettingReply> </GraduationTaskssettingReply>

@ -26,7 +26,7 @@ const buildColumns = (that,isParent) => {
let showSorter = isParent==true let showSorter = isParent==true
const courseId = that.props.match.params.coursesId const courseId = that.props.match.params.coursesId
const columns=[{ const columns=[{
title: '序号1', title: '序号',
dataIndex: 'id', dataIndex: 'id',
key: 'id', key: 'id',
align:'center', align:'center',

@ -1,4 +1,4 @@
import React, {Component} from "React"; import React, {Component} from "react";
import {Form, Select, Input, Button, Checkbox, DatePicker,Spin,Icon,AutoComplete,InputNumber,Breadcrumb} from "antd"; import {Form, Select, Input, Button, Checkbox, DatePicker,Spin,Icon,AutoComplete,InputNumber,Breadcrumb} from "antd";
import ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal'; import ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal';
import axios from 'axios'; import axios from 'axios';
@ -686,8 +686,8 @@ class CoursesNew extends Component {
width: 65px !important; width: 65px !important;
background-color: #fafafa!important; background-color: #fafafa!important;
} }
` `
}</style> }</style>
<Form.Item label="课程名称"> <Form.Item label="课程名称">
@ -740,7 +740,7 @@ class CoursesNew extends Component {
width: 655px !important; width: 655px !important;
} }
.yslzxueshiskmc .ant-input-group{ .yslzxueshiskmc .ant-input-group{
width: 704px !important; width: 704px !important;
} }
@ -798,7 +798,7 @@ class CoursesNew extends Component {
} }
.yslzxueshi .ant-input-group { .yslzxueshi .ant-input-group {
width: 280px !important; width: 280px !important;
} }
.yslzxueshi .ant-input-group-addon{ .yslzxueshi .ant-input-group-addon{
width: 44px !important; width: 44px !important;
@ -984,4 +984,4 @@ class CoursesNew extends Component {
} }
const WrappedCoursesNewApp = Form.create({name: 'coursesNew'})(CoursesNew); const WrappedCoursesNewApp = Form.create({name: 'coursesNew'})(CoursesNew);
export default WrappedCoursesNewApp; export default WrappedCoursesNewApp;

@ -1,4 +1,4 @@
import React, {Component} from "React"; import React, {Component} from "react";
import {Form, Select, Input, Button, Checkbox, DatePicker,Spin,Icon,AutoComplete,InputNumber,Breadcrumb} from "antd"; import {Form, Select, Input, Button, Checkbox, DatePicker,Spin,Icon,AutoComplete,InputNumber,Breadcrumb} from "antd";
import ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal'; import ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal';
import axios from 'axios'; import axios from 'axios';

@ -1,4 +1,4 @@
import React,{Component} from "React"; import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,DatePicker} from "antd"; import { Form, Select, Input, Button,Checkbox,DatePicker} from "antd";
import locale from 'antd/lib/date-picker/locale/zh_CN'; import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -243,4 +243,4 @@ class StudentHomework extends Component{
} }
} }
const StudentHomeworkApp = Form.create({ name: 'coursesNew' })(StudentHomework); const StudentHomeworkApp = Form.create({ name: 'coursesNew' })(StudentHomework);
export default StudentHomeworkApp; export default StudentHomeworkApp;

Loading…
Cancel
Save