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

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

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

@ -1,314 +1,314 @@
import React,{Component} from "React";
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 locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn, MarkdownToHtml, markdownToHTML, ImageLayer2 } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal";
import CheckAllGroup from '../common/button/CheckAllGroup'
import moment from 'moment';
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'
import LeaderIcon from './common/LeaderIcon'
const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
const $ = window.$;
const Search = Input.Search;
const RadioGroup = Radio.Group;
class CommonWorkAppraise extends Component{
constructor(props){
super(props)
this.state={
course_name:"",
homework_name:"",
search: '',
attachments: [],
revise_attachments: [],
}
}
getWork = () => {
let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId;
// https://www.showdoc.cc/127895880302646?page_id=1957586480118445
const url = `/student_works/${studentWorkId}.json`
axios.get(url).then((result)=> {
if (result.data.course_id) {
this.setState({
...result.data
})
}
}).catch((error)=>{
console.log(error)
})
}
getSupplyAttachments = () => {
let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId;
const url = `/student_works/${studentWorkId}/supply_attachments.json`
axios.get(url).then((result)=> {
if (result.data.course_id) {
this.setState({
...result.data
})
}
}).catch((error)=>{
console.log(error)
})
}
getReviseAttachments = () => {
let studentWorkId =this.props.match.params.studentWorkId;
const url = `/student_works/${studentWorkId}/supply_attachments.json`;
axios.get(url).then((result)=> {
if (result.data.revise_attachments) {
this.setState({
...result.data
})
}
}).catch((error)=>{
console.log(error)
})
}
componentDidUpdate(prevProps, prevState) {
if (this.props.match.params.studentWorkId != prevProps.match.params.studentWorkId) {
this.getWork();
this.getReviseAttachments()
this.commonWorkAppraiseReply && this.commonWorkAppraiseReply.fetchAllComments()
}
}
componentDidMount() {
this.getWork();
this.getReviseAttachments()
let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId;
// const url = `/student_works/${studentWorkId}/comment_list.json`
// axios.get(url).then((result)=> {
// if (result.data.course_id) {
// this.setState({
// ...result.data
// })
// }
// }).catch((error)=>{
// console.log(error)
// })
}
onAttachmentRemove = (id) => {
this.setState({
Modalstype:true,
// Modalstopval:'确定要删除这个附件吗?',
Modalstopval: '是否确认删除?',
ModalSave: ()=>this.deleteAttachment(id),
ModalCancel:this.cancelAttachment
})
}
deleteAttachment = (id) => {
const url = `/attachments/${id}.json`
axios.delete(url, {
})
.then((response) => {
if (response.data) {
const { status } = response.data;
if (status == 0) {
this.getWork()
this.getReviseAttachments();
this.cancelAttachment();
}
}
})
.catch(function (error) {
console.log(error);
});
}
cancelAttachment=()=>{
this.setState({
Modalstype:false,
Modalstopval:'',
ModalSave:"",
ModalCancel:""
})
}
onReplySuccess = () => {
this.getReviseAttachments();
}
render(){
const dateFormat = 'YYYY-MM-DD HH:mm';
let {course_name, homework_name, search, page, loadingstate, homework_status, reference_answer,
attachments, homework_id, project_info, work_members, is_evaluation,
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,
Modalstype,Modalstopval,ModalCancel,ModalSave,loadtype, is_leader_work
} =this.state;
let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id;
let studentWorkId=this.props.match.params.studentWorkId;
const isAdmin = this.props.isAdmin()
document.title=course_name&&course_name;
return(
<WorkDetailPageHeader
{...this.props} {...this.state}
noTab={true}
moduleName={'作业详情'}
getReviseAttachments={this.getReviseAttachments}
>
{/*提示*/}
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalCancel={ModalCancel}
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;
}
`}</style>
<ImageLayer2 parentSel=".workAppraise" childSel="a.imageTarget"></ImageLayer2>
<div className={"workAppraise"}>
{(description || (attachments && attachments.length != 0)) && <div className={"stud-class-set edu-back-white padding20-30"}>
<div className={"color-grey-6 mb15 font-16"}>
内容
</div>
<div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: markdownToHTML(description)}}>
</div>
{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" title={`${item.title && item.title.length > 40 ? item.title : ''}`}>
{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 " 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'}} */}
</div>
)
})}
<div className={"color-grey-6 h20 ml20"}>
{ update_time &&
<React.Fragment>
<span className={"color9B9B fr"}>更新</span>
<span className={"fr font-14 mr10 ml10"}>{update_user_name}</span>
<span className={"color9B9B fr"}>
{moment(update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(update_time).format('YYYY-MM-DD HH:mm')}
</span>
</React.Fragment> }
{ commit_time &&
<React.Fragment>
<span className={"color9B9B fr mr30"}>提交</span>
<span className={"fr font-14 mr10 ml10"}>{commit_user_name}</span>
<span className={" color9B9B fr"}>
{moment(commit_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(commit_time).format('YYYY-MM-DD HH:mm')}
</span>
</React.Fragment> }
</div>
</div> }
<CommonWorkAppraiseReviseAttachments {...this.state}
onAttachmentRemove={this.onAttachmentRemove}
></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"}>
关联项目
</div>
<div className={"ml20"}>
<a className="color-blue" href={`/projects/${project_info.id}`}>{project_info.name}</a>
</div>
</div>
}
{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>
<div className={"ml20 color-grey-6"}>
<div className="">
当前组员{author_name} {is_leader_work && <LeaderIcon small={true} ></LeaderIcon>}
</div>
<div>
其他组员
{work_members.map((item, index) => {
return <React.Fragment>
{isAdmin ?
<a className={`color-blue ${index == 0 ? '' : 'ml12'}`} href="javascript:void(0)"
onClick={() => this.props.toWorkDetailPage(this.props.match.params, null, item.work_id)}
>
{item.user_name}
</a> : <span className={`${index == 0 ? '' : 'ml12'}`} >{item.user_name}</span>}
{item.is_leader && <LeaderIcon small={true} ></LeaderIcon>}
</React.Fragment>
})}
</div>
{isAdmin && <div className="font-12 color-grey-9">
<span >温馨提示</span>
点击其他组员的姓名可以快速评阅TA的作品
</div>}
</div>
</div>
}
</div>
{/* task_type={datalist&&datalist.task_type} */}
<CommonWorkAppraiseReply {...this.props} task_id={studentWorkId}
onReplySuccess={this.onReplySuccess} {...this.state}
wrappedComponentRef={(ref) => {this.commonWorkAppraiseReply = ref}}
></CommonWorkAppraiseReply>
</div>
</WorkDetailPageHeader>
)
}
}
export default CommonWorkAppraise;
import React,{Component} from "react";
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 locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn, MarkdownToHtml, markdownToHTML, ImageLayer2 } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
import CoursesListType from '../coursesPublic/CoursesListType';
import HomeworkModal from "../coursesPublic/HomeworkModal";
import CheckAllGroup from '../common/button/CheckAllGroup'
import moment from 'moment';
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'
import LeaderIcon from './common/LeaderIcon'
const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
const $ = window.$;
const Search = Input.Search;
const RadioGroup = Radio.Group;
class CommonWorkAppraise extends Component{
constructor(props){
super(props)
this.state={
course_name:"",
homework_name:"",
search: '',
attachments: [],
revise_attachments: [],
}
}
getWork = () => {
let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId;
// https://www.showdoc.cc/127895880302646?page_id=1957586480118445
const url = `/student_works/${studentWorkId}.json`
axios.get(url).then((result)=> {
if (result.data.course_id) {
this.setState({
...result.data
})
}
}).catch((error)=>{
console.log(error)
})
}
getSupplyAttachments = () => {
let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId;
const url = `/student_works/${studentWorkId}/supply_attachments.json`
axios.get(url).then((result)=> {
if (result.data.course_id) {
this.setState({
...result.data
})
}
}).catch((error)=>{
console.log(error)
})
}
getReviseAttachments = () => {
let studentWorkId =this.props.match.params.studentWorkId;
const url = `/student_works/${studentWorkId}/supply_attachments.json`;
axios.get(url).then((result)=> {
if (result.data.revise_attachments) {
this.setState({
...result.data
})
}
}).catch((error)=>{
console.log(error)
})
}
componentDidUpdate(prevProps, prevState) {
if (this.props.match.params.studentWorkId != prevProps.match.params.studentWorkId) {
this.getWork();
this.getReviseAttachments()
this.commonWorkAppraiseReply && this.commonWorkAppraiseReply.fetchAllComments()
}
}
componentDidMount() {
this.getWork();
this.getReviseAttachments()
let workId =this.props.match.params.workId;
let studentWorkId =this.props.match.params.studentWorkId;
// const url = `/student_works/${studentWorkId}/comment_list.json`
// axios.get(url).then((result)=> {
// if (result.data.course_id) {
// this.setState({
// ...result.data
// })
// }
// }).catch((error)=>{
// console.log(error)
// })
}
onAttachmentRemove = (id) => {
this.setState({
Modalstype:true,
// Modalstopval:'确定要删除这个附件吗?',
Modalstopval: '是否确认删除?',
ModalSave: ()=>this.deleteAttachment(id),
ModalCancel:this.cancelAttachment
})
}
deleteAttachment = (id) => {
const url = `/attachments/${id}.json`
axios.delete(url, {
})
.then((response) => {
if (response.data) {
const { status } = response.data;
if (status == 0) {
this.getWork()
this.getReviseAttachments();
this.cancelAttachment();
}
}
})
.catch(function (error) {
console.log(error);
});
}
cancelAttachment=()=>{
this.setState({
Modalstype:false,
Modalstopval:'',
ModalSave:"",
ModalCancel:""
})
}
onReplySuccess = () => {
this.getReviseAttachments();
}
render(){
const dateFormat = 'YYYY-MM-DD HH:mm';
let {course_name, homework_name, search, page, loadingstate, homework_status, reference_answer,
attachments, homework_id, project_info, work_members, is_evaluation,
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,
Modalstype,Modalstopval,ModalCancel,ModalSave,loadtype, is_leader_work
} =this.state;
let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id;
let studentWorkId=this.props.match.params.studentWorkId;
const isAdmin = this.props.isAdmin()
document.title=course_name&&course_name;
return(
<WorkDetailPageHeader
{...this.props} {...this.state}
noTab={true}
moduleName={'作业详情'}
getReviseAttachments={this.getReviseAttachments}
>
{/*提示*/}
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalCancel={ModalCancel}
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;
}
`}</style>
<ImageLayer2 parentSel=".workAppraise" childSel="a.imageTarget"></ImageLayer2>
<div className={"workAppraise"}>
{(description || (attachments && attachments.length != 0)) && <div className={"stud-class-set edu-back-white padding20-30"}>
<div className={"color-grey-6 mb15 font-16"}>
内容
</div>
<div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: markdownToHTML(description)}}>
</div>
{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" title={`${item.title && item.title.length > 40 ? item.title : ''}`}>
{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 " 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'}} */}
</div>
)
})}
<div className={"color-grey-6 h20 ml20"}>
{ update_time &&
<React.Fragment>
<span className={"color9B9B fr"}>更新</span>
<span className={"fr font-14 mr10 ml10"}>{update_user_name}</span>
<span className={"color9B9B fr"}>
{moment(update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(update_time).format('YYYY-MM-DD HH:mm')}
</span>
</React.Fragment> }
{ commit_time &&
<React.Fragment>
<span className={"color9B9B fr mr30"}>提交</span>
<span className={"fr font-14 mr10 ml10"}>{commit_user_name}</span>
<span className={" color9B9B fr"}>
{moment(commit_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(commit_time).format('YYYY-MM-DD HH:mm')}
</span>
</React.Fragment> }
</div>
</div> }
<CommonWorkAppraiseReviseAttachments {...this.state}
onAttachmentRemove={this.onAttachmentRemove}
></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"}>
关联项目
</div>
<div className={"ml20"}>
<a className="color-blue" href={`/projects/${project_info.id}`}>{project_info.name}</a>
</div>
</div>
}
{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>
<div className={"ml20 color-grey-6"}>
<div className="">
当前组员{author_name} {is_leader_work && <LeaderIcon small={true} ></LeaderIcon>}
</div>
<div>
其他组员
{work_members.map((item, index) => {
return <React.Fragment>
{isAdmin ?
<a className={`color-blue ${index == 0 ? '' : 'ml12'}`} href="javascript:void(0)"
onClick={() => this.props.toWorkDetailPage(this.props.match.params, null, item.work_id)}
>
{item.user_name}
</a> : <span className={`${index == 0 ? '' : 'ml12'}`} >{item.user_name}</span>}
{item.is_leader && <LeaderIcon small={true} ></LeaderIcon>}
</React.Fragment>
})}
</div>
{isAdmin && <div className="font-12 color-grey-9">
<span >温馨提示</span>
点击其他组员的姓名可以快速评阅TA的作品
</div>}
</div>
</div>
}
</div>
{/* task_type={datalist&&datalist.task_type} */}
<CommonWorkAppraiseReply {...this.props} task_id={studentWorkId}
onReplySuccess={this.onReplySuccess} {...this.state}
wrappedComponentRef={(ref) => {this.commonWorkAppraiseReply = ref}}
></CommonWorkAppraiseReply>
</div>
</WorkDetailPageHeader>
)
}
}
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 {Link} from 'react-router-dom';
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 {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -73,7 +73,7 @@ class CommonWorkSetting extends Component{
lineHeight: '30px',
};
return(
<React.Fragment>
{ <div>
@ -102,12 +102,12 @@ class CommonWorkSetting extends Component{
<div className="stud-class-set bor-bottom-greyE">
<div className="mt10 clearfix edu-back-white poll_list pl20">
<Link
<Link
className="active"
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
<Link
style={{paddingLeft:'38px'}}
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>}
@ -132,4 +132,4 @@ class CommonWorkSetting extends Component{
}
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 {Link} from 'react-router-dom';
import axios from 'axios';
@ -36,7 +36,7 @@ class CommonWorkPost extends Component{
selectobjct:undefined,
Loadtype:false,
limit:20,
memberNumMin: 2,
memberNumMax: 5,
@ -44,7 +44,7 @@ class CommonWorkPost extends Component{
}
componentDidMount(){
const studentWorkId = this.props.match.params.studentWorkId
const studentWorkId = this.props.match.params.studentWorkId
this.isEdit = !!studentWorkId
window.location.pathname.indexOf('post_edit') != -1
let coursesId=this.props.match.params.coursesId;
@ -59,7 +59,7 @@ class CommonWorkPost extends Component{
url = `/student_works/${studentWorkId}/edit.json`
axios.get(url).then((response)=>{
if(response.data.course_id){
// TODO
// response.data.attachments
const _fileList = response.data.attachments.map(item => {
@ -83,14 +83,14 @@ class CommonWorkPost extends Component{
memberNumMin: response.data.min_num,
memberNumMax: response.data.max_num,
})
this.mine = _memebers.length ? _memebers[0] : null
this.mine = _memebers.length ? _memebers[0] : null
// 分组
// this.setState({
// task_status:checkedValues,
// selectmemberslist:selects
// })
this.props.form.setFieldsValue({
description: response.data.description,
description: response.data.description,
}, () => {});
this.mdRef.current.setValue(response.data.description)
}
@ -105,7 +105,7 @@ class CommonWorkPost extends Component{
user_name: response.data.user_name,
student_id: response.data.user_student_id,
group_name: response.data.group_name,
}
this.mine = mine
// 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)=>{
let id=this.props.match.params.workId;
let workId=this.props.match.params.workId;
// let url="/graduation_tasks/"+id+"/graduation_works/search_member_list.json";
@ -451,7 +451,7 @@ class CommonWorkPost extends Component{
funtaskstatus=(checkedValues)=>{
/**
比较 checkedValues this.state.selectmemberslist
比较 checkedValues this.state.selectmemberslist
checkedValues length > this.state.task_status.length 是新增 反之是删除
比较找到不同的id
去除重复的checkedValues留下的是新增task_status留下的是删除
@ -472,7 +472,7 @@ class CommonWorkPost extends Component{
_selectmemberslist.push( this.state.members.filter(item => item.user_id == _checkedValues[0])[0])
} else if (_task_status.length) { // 删除
_.remove(_selectmemberslist, (item)=> item.user_id == _task_status[0])
}
}
// let{members}=this.state;
@ -526,13 +526,13 @@ class CommonWorkPost extends Component{
if (item.user_id == id) {
deleteOldMemberIndex = index;
return true
}
}
})
if (deleteOldMemberIndex == -1) {
this.doDelete(id)
return;
} else {
}
}
@ -619,7 +619,7 @@ render(){
const moduleName = this.props.getModuleName()
const moduleCHName = this.props.getModuleName(true)
const isGroup = this.props.isGroup()
return(
<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>*/}
{/*<span className="color-grey-9 ml3 mr3">&gt;</span>*/}
{/*</WordsBtn>*/}
<span>{`${current_user ? current_user.real_name : ''} ${ this.isEdit ? '编辑' : '提交'}作品` }</span>
</p>
@ -667,7 +667,7 @@ render(){
.ant-upload-list-item:hover .ant-upload-list-item-info{
background-color:#fff;
}
.upload_1 .ant-upload-list {
width: 350px;
}
@ -793,7 +793,7 @@ render(){
{item.user_name}{ item.user_name.length <= 5 && _is_leader && <LeaderIcon className="leaderIcon" small={true}></LeaderIcon>}
</div>
</ConditionToolTip>
<div className={"fl ml20 color-grey-9 overflowHidden1"} style={{ maxWidth: '147px' }}
title={item.group_name && item.group_name.length > 9 ? item.group_name : ''}
>{item.group_name}</div>
@ -801,9 +801,9 @@ render(){
title={item.student_id && item.student_id.length > 12 ? item.student_id : ''}
>{item.student_id}</div>
{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>:""}
</div>
)
})}
@ -842,4 +842,4 @@ render(){
}
}
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 {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -63,7 +63,7 @@ class CommonWorkQuestion extends Component{
on('commonwork_fetch_all', this.fetchAllListener)
}
componentWillUnmount() {
off('commonwork_fetch_all', this.fetchAllListener)
off('commonwork_fetch_all', this.fetchAllListener)
}
fetchAllListener = () => {
this.fetchData()
@ -81,10 +81,10 @@ class CommonWorkQuestion extends Component{
let category_id=this.props.match.params.category_id;
let task_Id=this.props.match.params.task_Id;
const isGroup = this.props.isGroup()
return(
<React.Fragment>
{/* 内容区 */}
<div className="padding40 memoContent new_li">
<MarkdownToHtml content={description} selector="work_content" className="mb10"></MarkdownToHtml>
@ -110,8 +110,8 @@ class CommonWorkQuestion extends Component{
{/* <div>各小组必须在educoder平台创建项目</div> */}
</div>
</div>}
</div>
</div>
{ homework_id && <CommonReply
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 {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -53,7 +53,7 @@ class CommonWorkSetting extends Component{
this.publishModal = React.createRef();
this.endModal = React.createRef();
this.fetchMoment = moment()
this.state={
unified_setting: true,
rules: [],
@ -64,12 +64,12 @@ class CommonWorkSetting extends Component{
homework_status: [],
anonymous_comment: false,
ta_mode: 1,
ta_mode: 1,
evaluation_num: 3,
absence_penalty: 2,
appeal_penalty: 2,
te_proportion: 50,
te_proportion: 50,
ta_proportion: 30,
st_proportion: 20,
@ -100,13 +100,13 @@ class CommonWorkSetting extends Component{
// endtype=true
// }
//
//
let disable_unified_setting = false
let rules = []
if (result.data.unified_setting == false) {
rules = result.data.group_settings.filter(item => item.publish_time).map(item => {
if (disable_unified_setting == false && moment(item.publish_time) < moment()) {
// 已经有规则发不过了,不能修改统一设置
disable_unified_setting = true
@ -140,12 +140,12 @@ class CommonWorkSetting extends Component{
init_evaluation_start: result.data.evaluation_start,
init_evaluation_end: result.data.evaluation_end,
init_appeal_time: result.data.appeal_time,
rules,
ta_proportion: result.data.ta_proportion * 100,
te_proportion: result.data.te_proportion * 100,
st_proportion: result.data.st_proportion * 100,
})
this.props.initWorkDetailCommonState && this.props.initWorkDetailCommonState( Object.assign({...result.data}, {
moduleName: '设置'
@ -174,7 +174,7 @@ class CommonWorkSetting extends Component{
}
}
componentWillUnmount() {
off('commonwork_fetch_all', this.fetchAllListener)
off('commonwork_fetch_all', this.fetchAllListener)
}
fetchAllListener = () => {
this.fetchData()
@ -233,7 +233,7 @@ class CommonWorkSetting extends Component{
}
onChangeTimepublish= (date, dateString) => {
// console.log('startValue', dateString);
@ -264,7 +264,7 @@ class CommonWorkSetting extends Component{
}
onChangeTimelatetime=(date, dateString)=>{
this.setState({
late_time: handleDateString(dateString)
})
@ -340,7 +340,7 @@ class CommonWorkSetting extends Component{
const anonymous_appeal = e.target.checked
let appeal_time, appeal_penalty = this.state.appeal_penalty
const currentEndTime = this._getCurrentEndTime()
if (anonymous_appeal) {
appeal_penalty = 2
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;
rules.map(item => {
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
@ -523,11 +523,11 @@ class CommonWorkSetting extends Component{
let {assigngroups,hascommit,minnums,max_nums}=this.state;
const {homework_status, homework_id, homework_name, homework_type, publish_immediately, end_immediately
,
publish_time, 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,
appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion,
,
publish_time, 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,
appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion,
unified_setting,
publish_time_type, end_time_type
} = this.state;
@ -544,7 +544,7 @@ class CommonWorkSetting extends Component{
}
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)) {
max_un_unified_setting_end_time = item.end_time;
max_un_unified_setting_end_time = item.end_time;
}
return {
group_id: item.course_group_id,
@ -568,8 +568,8 @@ class CommonWorkSetting extends Component{
scrollTo('.publicTimeTip')
return false
}
let temp_publish_time
let temp_publish_time
let temp_end_time
if (unified_setting) {
temp_publish_time = publish_time
@ -584,14 +584,14 @@ class CommonWorkSetting extends Component{
} else {
temp_end_time = max_un_unified_setting_end_time
}
// 已发布的不检查
const isUnPublish= homework_status.indexOf(STATUS_UN_PUBLISH) != -1
const isAdmin = this.props.isAdmin()
const current = moment();
const publish_time_editable = isUnPublish;
const end_time_editable = isAdmin || !end_time || moment(end_time) > current;
if (unified_setting) {
if (publish_time_editable && temp_publish_time && moment(temp_publish_time) < moment()) {
this.setState({
@ -700,7 +700,7 @@ class CommonWorkSetting extends Component{
this.setState({ appeal_penalty_tip: '' })
}
}
@ -712,14 +712,14 @@ class CommonWorkSetting extends Component{
return false
}
/**
/**
"group_settings": [
{
"group_id": [820, 821],
"publish_time": "2018-04-18 10:00:00",
"end_time": "2018-04-20 10:00:00"
},
* */
* */
// axios
let course_id=this.props.match.params.coursesId;
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, // 补交截止时间
anonymous_comment: anonymous_comment, // true: 启用匿评 false:未启用匿评
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, // 匿评数
absence_penalty: absence_penalty, // 匿评扣分
anonymous_appeal: anonymous_appeal, // true: 启用匿评申诉, false:未启用
appeal_time: appeal_time ? new Date(appeal_time) : appeal_time, // 申诉结束时间
appeal_penalty: appeal_penalty, // 违规匿评扣分
appeal_penalty: appeal_penalty, // 违规匿评扣分
ta_mode: ta_mode, // 1:普通模式 0:复审模式
final_mode: final_mode, // true: 单项评分优先, false: 多项评分配比
te_proportion: te_proportion / 100,
ta_proportion: ta_proportion / 100,
st_proportion: st_proportion / 100,
work_public: work_public, //公开作品
work_public: work_public, //公开作品
score_open: score_open, // 公开成绩
answer_public: answer_public,
@ -920,15 +920,15 @@ class CommonWorkSetting extends Component{
commenttimevalue,
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,
anonymous_comment, anonymous_appeal, evaluation_start, evaluation_end, evaluation_num, absence_penalty, appeal_time,
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,
appeal_penalty, ta_mode, final_mode, te_proportion, ta_proportion, st_proportion, anonymous_comment_time_tip, appeal_time_tip,
final_mode_false_tip,
startEditFlag,
publish_time_type, end_time_type, rules, disable_unified_setting,
work_statuses, work_id,
accessoryVisible,
init_late_time, init_evaluation_start, init_evaluation_end, init_appeal_time
} =this.state;
@ -971,7 +971,7 @@ class CommonWorkSetting extends Component{
const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx`
const noAuth = !isAdmin || !startEditFlag;
return(
<React.Fragment>
@ -1004,7 +1004,7 @@ class CommonWorkSetting extends Component{
onToPublishClick={this.onToPublishClick}
></PublishRightnow>
<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>{`
.settingForm .ant-radio-group, .settingForm.ant-form {
@ -1021,7 +1021,7 @@ class CommonWorkSetting extends Component{
.settingForm .color-grey-9 {
color: #ccc !important;
}
`}</style>
<Form className={'settingForm'}>
<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">
<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}) }}>
编辑设置
{/*<Tooltip title="编辑"><i className="iconfont icon-bianjidaibeijing font-20 color-green"></i></Tooltip>*/}
@ -1049,7 +1049,7 @@ class CommonWorkSetting extends Component{
>统一设置</Checkbox>
</ConditionToolTip>
<span className="color-grey-9">选中则所有分班使用相同的发布设置仅课堂管理员可修改否则各个分班允许单独设置</span>
</p>}
@ -1078,8 +1078,8 @@ class CommonWorkSetting extends Component{
// disabled={this.props.isSuperAdmin()?false:publish_time_type===true?true:false}
disabled={moment(this.state.init_publish_time) < moment() || noAuth}
// disabledDate={ (publish_time) => {
// return publish_time && publish_time < moment().add(-1, 'days'); }
// disabledDate={ (publish_time) => {
// return publish_time && publish_time < moment().add(-1, 'days'); }
// }
/>
</span>
@ -1109,15 +1109,15 @@ class CommonWorkSetting extends Component{
disabled={this.props.isSuperAdmin()?false:end_time_type===true?true:false}
disabled={moment(this.state.init_end_time) < moment() || noAuth}
disabledDate={disabledDateFunc}
// disabledDate={ (end_time) =>
// {
// disabledDate={ (end_time) =>
// {
// const publish_time = this.state.publish_time
// if (!publish_time) {
// return end_time && end_time < moment();
// }
// if (!publish_time || !end_time) { return false; }
// return end_time.valueOf() < moment(publish_time, dateFormat).valueOf(); }
// if (!publish_time || !end_time) { return false; }
// return end_time.valueOf() < moment(publish_time, dateFormat).valueOf(); }
// }
/>
</span>
@ -1127,7 +1127,7 @@ class CommonWorkSetting extends Component{
</div>
{<div className={"publicTimeTip color-red ml30"}>{publicTimeTip}</div>}
</React.Fragment> :
</React.Fragment> :
adaptered_group_settings && !!adaptered_group_settings.length && <PollDetailTabForthRules
{...this.props}
{...this.state}
@ -1139,8 +1139,8 @@ class CommonWorkSetting extends Component{
moduleName="作业"
></PollDetailTabForthRules>
}
{/*
{/*
flagPageEdit={flagPageEdit}
*/}
@ -1148,7 +1148,7 @@ class CommonWorkSetting extends Component{
</div>
<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>
</div>
@ -1164,7 +1164,7 @@ class CommonWorkSetting extends Component{
<span className={"font-14 color-grey-9 "}>延时提交作品时学生成绩将被扣减的分值</span>
{latepenaltytype===true?<div className={"color-red ml40"}>{latepenaltyvalue}</div>:""}
</div>
<div className={" mb10 ml30"}>
<span>结束时间</span>
{/* <ConditionToolTip condition={moment(init_late_time) < this.fetchMoment} title={""}>
@ -1185,15 +1185,15 @@ class CommonWorkSetting extends Component{
// || moment(init_late_time) < moment()
disabled={!allow_late || noAuth }
disabledDate={disabledDateFunc}
// disabledDate={ (late_time) =>
// {
// disabledDate={ (late_time) =>
// {
// const end_time = this.state.end_time
// if (!end_time || !late_time) { return false; }
// return late_time < moment(end_time, dateFormat).add(-1, 'days'); }
// if (!end_time || !late_time) { return false; }
// return late_time < moment(end_time, dateFormat).add(-1, 'days'); }
// }
/>
</span>
<span className={"font-14 color-grey-9 ml10"}>学生延时提交作品的时间截点</span>
{<div className={"latetimetype color-red "}>{latetimetype}</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={" font-16 color-dark h20 mb20"}>匿评设置 </div>
<div className={"mb20"}>
<Checkbox className="ml30" checked={anonymous_comment} onChange={this.anonymous_comment_change}
disabled={noAuth || moment(init_evaluation_start) < moment()}
@ -1233,11 +1233,11 @@ class CommonWorkSetting extends Component{
value={!evaluation_start ?"":moment(evaluation_start, dateFormat)}
onChange={this.onChangeEvaluationStart}
disabled={ (anonymous_comment && !noAuth ? false : true) || moment(init_evaluation_start) < moment() }
// disabledDate={ (evaluation_start) =>
// {
// disabledDate={ (evaluation_start) =>
// {
// const end_time = this.state.end_time
// if (!end_time || !evaluation_start) { return false; }
// return evaluation_start.valueOf() < moment(end_time, dateFormat).valueOf(); }
// if (!end_time || !evaluation_start) { return false; }
// return evaluation_start.valueOf() < moment(end_time, dateFormat).valueOf(); }
// }
/>
</span>
@ -1268,11 +1268,11 @@ class CommonWorkSetting extends Component{
disabled={(anonymous_comment && !noAuth ? false : true) || moment(init_evaluation_end) < moment()}
disabledDate={disabledDateFunc}
// disabledDate={ (evaluation_end) =>
// {
// disabledDate={ (evaluation_end) =>
// {
// const evaluation_start = this.state.evaluation_start
// if (!evaluation_start || !evaluation_end) { return false; }
// return evaluation_end.valueOf() < moment(evaluation_start, dateFormat).valueOf(); }
// if (!evaluation_start || !evaluation_end) { return false; }
// return evaluation_end.valueOf() < moment(evaluation_start, dateFormat).valueOf(); }
// }
/>
@ -1314,8 +1314,8 @@ class CommonWorkSetting extends Component{
</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>
<div className={"mb20"}>
<Checkbox className="ml30" checked={anonymous_appeal} onChange={this.anonymous_appeal_change}
@ -1328,9 +1328,9 @@ class CommonWorkSetting extends Component{
`}</style>
<PopInstruction width={458} id={1}>
<p className="font-14 edu-txt-left pop-instruction">
允许学生对自己作品的匿评评分进行申诉由教师和助教处理申诉<br/>
<br/>
1接受学生的合理申诉<br/>
<p className="p">被申诉的评分记录无效不参与最终成绩的计算</p>
@ -1340,12 +1340,12 @@ class CommonWorkSetting extends Component{
2拒绝学生的不合理申诉<br/>
<p className="p">被申诉的评分记录有效不允许学生对该评分记录进行二次申诉</p>
<p className="p">被申诉的评阅人的作品成绩不会扣除违规匿评分</p>
</p>
</PopInstruction>
{/* <span className={"font-14 color-grey-9"}>提交作品少于2个时匿评开启将失败请在作品数量达标后重新进行匿评设置</span> */}
</div>
{/* 启用匿评申述 结束时间: */}
{/* 启用匿评申述 结束时间: */}
<div className={"h20 mb30 ml60"}>
<span>结束时间</span>
{/* <Tooltip placement="bottom" title={this.props.isSuperAdmin()?"":starttimetype===true?"":""}>
@ -1369,7 +1369,7 @@ class CommonWorkSetting extends Component{
/>
</span>
</ConditionToolTip>
<span className={"font-14 color-grey-9 ml10"}>学生提交匿评申诉的时间截点</span>
</div>
@ -1398,13 +1398,13 @@ class CommonWorkSetting extends Component{
<div className={"mb20 ml30"}>
<span className={"font-16 "}>助教评分</span>
</div>
<div className={"mb30 ml60"}>
<Tooltip placement="bottom" title={starttimetype===true?this.props.isAdmin()?"发布时间已过,则不能修改":"":""}>
<RadioGroup onChange={this.ta_mode_change} value={ta_mode}>
<Radio style={radioStyle} value={1} disabled={noAuth}>
普通模式<span className={"font-14 color-grey-9 ml10"}>选中则取各助教最终评分的平均分</span>
</Radio>
</Radio>
<Radio style={radioStyle} value={0} disabled={noAuth}>
复审模式<span className={"font-14 color-grey-9 ml10"}>选中则只取最新的助教评分</span>
</Radio>
@ -1423,7 +1423,7 @@ class CommonWorkSetting extends Component{
<PopInstruction width={512} id={2}>
<p className="font-14 edu-txt-left pop-instruction">
计算说明<br/>
教师评分 * 其百分比 + 助教评分 * 其百分比 + 学生匿评平均分 * 其百分比 - ( <br/>
迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/><br/>
注意<br/>
@ -1431,30 +1431,30 @@ class CommonWorkSetting extends Component{
评分选项上<br/>
教师评分40% + 助教评分35% + 学生匿评25%学生A没有教师评分记<br/>
则其最终成绩按照助教评分55% + 学生匿评45%进行计算
</p>
</PopInstruction>
</Radio>
<div className={"h21 mb10 ml30 mt20"}>
<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}
/>
%
</div>
<div className={"h21 mb10 ml30"}>
<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}
/>
%
%
</div>
<div className={"h21 mb10 ml30 mb20"}>
<span>学生匿评</span>
<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}/>
</ConditionToolTip>
%
@ -1465,7 +1465,7 @@ class CommonWorkSetting extends Component{
<PopInstruction width={500} id={3}>
<p className="font-14 edu-txt-left pop-instruction">
计算说明<br/>
优先顺序排前的非零评分 * 100% - <br/>
( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/>
有教师评分则教师评分100%否则教辅评分100%依次类推
@ -1477,11 +1477,11 @@ class CommonWorkSetting extends Component{
非零百分比的评分选项在没有评分记录的情况下其百分比平摊到另外的评<br/>
分选项上例如教师评分40% + 助教评分35% + 学生匿评25%学生A没<br/>
有得到教师评分则最终成绩将按照助教评分55% + 学生匿评45%进行计算 */}
</p>
</PopInstruction>
</Radio>
</RadioGroup>
<div className={"font-16"} style={{ marginLeft: '25px' }}>
<span>教师评分 教辅评分 学生匿评评分</span>
@ -1526,10 +1526,10 @@ class CommonWorkSetting extends Component{
>取消</a>
</div>:""}
</React.Fragment>
)
}
}
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 = {}) {
let icon = null;
const { className, style } = props;
const _className = `font-8 blueFull Actionbtn ${className}`
if (props.small) {
icon = <div className={_className} style={{
icon = <div className={_className} style={{
height: '14px',
'line-height': '14px',
// width: '24px',
@ -16,7 +16,7 @@ export default function LeaderIcon(props = {}) {
'vertical-align': 'middle', }}>组长</div>
} else {
icon = <div className={_className} style={{ height: '16px', 'line-height': '16px', transform: 'scale(0.833)'}}>组长</div>
}
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 {Link} from 'react-router-dom';
import { WordsBtn, MarkdownToHtml } from 'educoder';
@ -22,7 +22,7 @@ class TabRightComponents extends Component{
this.publishModal = React.createRef();
this.endModal = React.createRef();
this.state={
accessoryVisible: false,
DownloadType:false,
@ -110,18 +110,18 @@ class TabRightComponents extends Component{
let exportUrl = `/api/homework_commons/${workId}/works_list.zip`
const exportResultUrl = `/api/homework_commons/${workId}/works_list.xlsx`
return(
<React.Fragment>
{isAdmin ?
{isAdmin ?
<React.Fragment>
<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}
onToPublishClick={this.onToPublishClick}
></PublishRightnow>
<PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={false} doWhenSuccess={this.props.doWhenSuccess}></PublishRightnow>
<PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]}
isPublish={false} doWhenSuccess={this.props.doWhenSuccess}></PublishRightnow>
</div>
<DownloadMessageysl
{...this.props}
@ -163,7 +163,7 @@ class TabRightComponents extends Component{
{/*<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>}
</React.Fragment> :
</React.Fragment> :
<React.Fragment>
{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)}}
@ -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)"}
onClick={() => { this.props.toWorkPostPage(this.props.match.params, null, true, work_id)}}
>修改作品</a>}
{work_statuses && work_statuses.indexOf('补交附件') != -1 &&
{work_statuses && work_statuses.indexOf('补交附件') != -1 &&
<React.Fragment>
<AccessoryModal
{...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 {Link} from 'react-router-dom';
import locale from 'antd/lib/date-picker/locale/zh_CN';
@ -32,12 +32,12 @@ class WorkDetailPageHeader extends Component{
goback = () => {
let workId=this.props.match.params.workId;
if ( window.location.pathname.indexOf('appraise') == -1) {
let category_id= this.props.category.category_id;
this.props.toListPage(this.props.match.params, category_id)
} 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.history.goBack()
@ -67,7 +67,7 @@ class WorkDetailPageHeader extends Component{
let courseId=this.props.match.params.coursesId;
let category_id= category && category.category_id;
let category_name= category && category.category_name;
let workId=this.props.match.params.workId;
const studentWorkId = this.props.match.params.studentWorkId
@ -108,7 +108,7 @@ class WorkDetailPageHeader extends Component{
typelist={homework_status}
typesylename={"mt3"}
/>
{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">
<div className="mt10 clearfix edu-back-white poll_list pl5">
<Link
<Link
className={`${childModuleName == '作品列表' ? 'active' : '' } `}
to={`/courses/${courseId}/${moduleEngName}/${workId}/list`}>作品列表</Link>
<Link
<Link
className={`${childModuleName == '作业描述' ? 'active' : '' } `}
to={`/courses/${courseId}/${moduleEngName}/${workId}/question`}>作业描述</Link>
{view_answer == true && <Link
{view_answer == true && <Link
className={`${childModuleName == '参考答案' ? 'active' : '' } `}
to={`/courses/${courseId}/${moduleEngName}/${workId}/answer`}>参考答案</Link>}
@ -149,9 +149,9 @@ class WorkDetailPageHeader extends Component{
className={`${childModuleName == '设置' ? 'active' : '' } `}
style={{paddingLeft:this.props.isAdmin()?'38px':'20px'}}
to={`/courses/${courseId}/${moduleEngName}/${workId}/setting`}>{this.props.isAdmin()?"设置":"得分规则"}</Link>
{ this.props.tabRightComponents }
{ this.props.tabRightComponents }
</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 locale from 'antd/lib/date-picker/locale/zh_CN';
@ -244,4 +244,4 @@ class Ecercisemount extends Component{
}
}
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 {Link} from 'react-router-dom';
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 {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
@ -852,4 +853,4 @@ render(){
}
}
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 {Link} from 'react-router-dom';
import { WordsBtn,markdownToHTML } from 'educoder';
@ -330,7 +330,7 @@ class GraduationTasksappraise extends Component{
</div>
}
</div>
<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 {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
@ -436,7 +436,7 @@ class GraduationTasksedit extends Component{
.upload_1 .ant-upload-list {
width: 350px;
}
`}</style>
<Form.Item
label="内容"
@ -574,4 +574,4 @@ class GraduationTasksedit extends Component{
}
}
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 {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
@ -190,7 +190,7 @@ class GraduationTasksnew extends Component {
},
});
return false;
}
}
@ -279,7 +279,7 @@ class GraduationTasksnew extends Component {
callback();
}
}
render() {
const {getFieldDecorator} = this.props.form;
let {
@ -453,7 +453,7 @@ class GraduationTasksnew extends Component {
.ant-form-item{
margin-bottom:0px
}
`}</style>
<Form.Item
label="内容"
@ -530,4 +530,4 @@ class GraduationTasksnew extends Component {
}
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 {Link} from 'react-router-dom';
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)){
this.editSetting()
}
let tab = this.props.tab;
this.props.setTab && this.props.setTab(tab);
try{
this.props.triggerRef(this)
}catch(e){
}
}
@ -1296,7 +1296,7 @@ debugger
{/*<Link to={"/courses/"+courseId+"/graduation_tasks/"+position+"/"+category_id+coursesearch} className="defalutCancelbtn fl">取消</Link>*/}
<a onClick={this.isgoback} className="defalutCancelbtn fl">取消</a>
</div>:"":""}
</div>:""}
</React.Fragment>
@ -1305,4 +1305,4 @@ debugger
}
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 {Link} from 'react-router-dom';
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 {Link} from 'react-router-dom';
import { WordsBtn,markdownToHTML,AttachmentList} from 'educoder';
@ -39,7 +39,7 @@ class GraduationTasksquestions extends Component{
try{
this.props.triggerRef(this)
}catch(e){
}
}
@ -372,7 +372,7 @@ class GraduationTasksquestions extends Component{
<div className={"mt20 course-message"} style={{background: '#fff'}}>
<GraduationTaskssettingReply
memo={{id: task_Id,
memo={{id: task_Id,
user_id: questionslist && questionslist.user_id}}
course_id={courseId} {...this.props}>
</GraduationTaskssettingReply>

@ -26,7 +26,7 @@ const buildColumns = (that,isParent) => {
let showSorter = isParent==true
const courseId = that.props.match.params.coursesId
const columns=[{
title: '序号1',
title: '序号',
dataIndex: 'id',
key: 'id',
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 ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal';
import axios from 'axios';
@ -686,8 +686,8 @@ class CoursesNew extends Component {
width: 65px !important;
background-color: #fafafa!important;
}
`
}</style>
<Form.Item label="课程名称">
@ -740,7 +740,7 @@ class CoursesNew extends Component {
width: 655px !important;
}
.yslzxueshiskmc .ant-input-group{
width: 704px !important;
}
@ -798,7 +798,7 @@ class CoursesNew extends Component {
}
.yslzxueshi .ant-input-group {
width: 280px !important;
}
.yslzxueshi .ant-input-group-addon{
width: 44px !important;
@ -984,4 +984,4 @@ class CoursesNew extends Component {
}
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 ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal';
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 locale from 'antd/lib/date-picker/locale/zh_CN';
@ -243,4 +243,4 @@ class StudentHomework extends Component{
}
}
const StudentHomeworkApp = Form.create({ name: 'coursesNew' })(StudentHomework);
export default StudentHomeworkApp;
export default StudentHomeworkApp;

Loading…
Cancel
Save