Merge remote-tracking branch 'origin/master'

# Conflicts:
#	public/react/src/modules/login/Trialapplication.js
dev_forum
杨树林 6 years ago
commit 2b35669267

@ -3,10 +3,9 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@novnc/novnc": "^1.1.0",
"@flatten/array": "^1.1.7", "@flatten/array": "^1.1.7",
"@icedesign/base": "^0.2.5", "@icedesign/base": "^0.2.5",
"@novnc/novnc": "^1.1.0",
"antd": "^3.6.5", "antd": "^3.6.5",
"array-flatten": "^2.1.2", "array-flatten": "^2.1.2",
"autoprefixer": "7.1.6", "autoprefixer": "7.1.6",
@ -41,6 +40,7 @@
"fs-extra": "3.0.1", "fs-extra": "3.0.1",
"html-webpack-plugin": "2.29.0", "html-webpack-plugin": "2.29.0",
"immutability-helper": "^2.6.6", "immutability-helper": "^2.6.6",
"install": "^0.12.2",
"jest": "20.0.4", "jest": "20.0.4",
"js-file-download": "^0.4.7", "js-file-download": "^0.4.7",
"lodash": "^4.17.5", "lodash": "^4.17.5",

@ -10,6 +10,17 @@ export function getImageUrl(path) {
return `/${path}`; return `/${path}`;
} }
export function setImagesUrl(path){
const local = 'http://47.96.87.25:48080'
let firstStr=path.substr(0,1);
console.log(firstStr);
if(firstStr=="/"){
return isDev?`${local}${path}`:`${path}`;
}else{
return isDev?`${local}/${path}`:`/${path}`;
}
}
export function getUrl(path, goTest) { export function getUrl(path, goTest) {
// https://www.educoder.net // https://www.educoder.net
// https://testbdweb.trustie.net // https://testbdweb.trustie.net

@ -2,7 +2,7 @@ import { from } from '_array-flatten@2.1.2@array-flatten';
// export { default as OrderStateUtil } from '../routes/Order/components/OrderStateUtil'; // export { default as OrderStateUtil } from '../routes/Order/components/OrderStateUtil';
export { getImageUrl as getImageUrl, getUrl as getUrl, getUploadActionUrl as getUploadActionUrl } from './UrlTool'; export { getImageUrl as getImageUrl, getUrl as getUrl,setImagesUrl as setImagesUrl, getUploadActionUrl as getUploadActionUrl } from './UrlTool';
export { default as queryString } from './UrlTool2'; export { default as queryString } from './UrlTool2';
export { SnackbarHOC as SnackbarHOC } from './SnackbarHOC'; export { SnackbarHOC as SnackbarHOC } from './SnackbarHOC';

@ -545,8 +545,8 @@ class CommonWorkSetting extends Component{
let temp_publish_time let temp_publish_time
let temp_end_time let temp_end_time
if (unified_setting) { if (unified_setting) {
let temp_publish_time = publish_time temp_publish_time = publish_time
let temp_end_time = end_time temp_end_time = end_time
if (!temp_publish_time) { if (!temp_publish_time) {
const publish_time_moment = getNextHalfHourOfMoment(moment()); const publish_time_moment = getNextHalfHourOfMoment(moment());
temp_publish_time = publish_time_moment.format(dateFormat); temp_publish_time = publish_time_moment.format(dateFormat);

@ -278,7 +278,8 @@ class Testpapersettinghomepage extends Component{
className={"btn fr color-blue font-16 mt20 mr20"} className={"btn fr color-blue font-16 mt20 mr20"}
checkBoxValues={[parseInt(this.props.match.params.Id)]} checkBoxValues={[parseInt(this.props.match.params.Id)]}
Exercisetype={"exercise"} Exercisetype={"exercise"}
action={this.Commonheadofthetestpaper} action={this.Commonheadofthetestpaper}
single={true}
></ImmediatelyEnd>:"":""} ></ImmediatelyEnd>:"":""}
{isAdmin === true?Commonheadofthetestpaper!==undefined&&Commonheadofthetestpaper.user_permission.exercise_unpublish_count>0? <ImmediatelyPublish {isAdmin === true?Commonheadofthetestpaper!==undefined&&Commonheadofthetestpaper.user_permission.exercise_unpublish_count>0? <ImmediatelyPublish
{...this.props} {...this.props}
@ -286,7 +287,8 @@ class Testpapersettinghomepage extends Component{
className={"btn fr color-blue font-16 mt20 mr20"} className={"btn fr color-blue font-16 mt20 mr20"}
checkBoxValues={[parseInt(this.props.match.params.Id)]} checkBoxValues={[parseInt(this.props.match.params.Id)]}
Exercisetype={"exercise"} Exercisetype={"exercise"}
action={this.Commonheadofthetestpaper} action={this.Commonheadofthetestpaper}
single={true}
></ImmediatelyPublish> ></ImmediatelyPublish>
:"":""} :"":""}
{isAdmin === true? <Link className="fr color-blue font-16 mt20 mr20" to={`/courses/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/edit`}>编辑试卷</Link>:""} {isAdmin === true? <Link className="fr color-blue font-16 mt20 mr20" to={`/courses/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/edit`}>编辑试卷</Link>:""}

@ -163,13 +163,13 @@ class GraduationTasksappraise extends Component{
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<p className="clearfix mt10"> <p className="clearfix mt10">
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId} className="color-grey-6">{datalist&&datalist.course_name}</Link></WordsBtn> <Link to={"/courses/"+courseId} className="color-grey-9 fl">{datalist&&datalist.course_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+graduation_id} className="color-grey-6">{datalist&&datalist.graduation_name}</Link></WordsBtn> <Link to={"/courses/"+courseId+"/graduation_tasks/"+graduation_id} className="color-grey-9 fl">{datalist&&datalist.graduation_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+graduation_id+"/"+task_id+"/list"} className="color-grey-6">任务详情</Link></WordsBtn> <Link to={"/courses/"+courseId+"/graduation_tasks/"+graduation_id+"/"+task_id+"/list"} className="color-grey-9 fl">任务详情</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <span className="color-grey-6">{datalist&&datalist.author_name}</span></WordsBtn> <span className="color-grey-6 fl">{datalist&&datalist.author_name}</span>
</p> </p>
@ -195,16 +195,16 @@ class GraduationTasksappraise extends Component{
</div> </div>
<div className=" edu-back-white " style={{"padding": "20px 15px 20px 15px","box-sizing": "border-box"}}> <div className="edu-back-white">
<div className={"stud-class-set edu-back-white"} style={{ padding: '0px 10px 20px 10px'}}> <div className={"stud-class-set edu-back-white padding20-30"}>
<div className={"color-grey-6 h20 mb20"}> <div className={"color-grey-6 h20 mb20"}>
内容 内容
</div> </div>
<div className={"ml20"}> <div className={"ml20"}>
<div dangerouslySetInnerHTML={{__html: markdownToHTML(datalist&&datalist.description===null?"--":datalist&&datalist.description).replace(/▁/g,"▁▁▁")}}></div> <div className="markdown-body" dangerouslySetInnerHTML={{__html: markdownToHTML(datalist&&datalist.description===null?"--":datalist&&datalist.description).replace(/▁/g,"▁▁▁")}}></div>
</div> </div>
{/*<div className={"color-grey-6 h20 ml20"}>*/} {/*<div className={"color-grey-6 h20 ml20"}>*/}
@ -213,7 +213,7 @@ class GraduationTasksappraise extends Component{
{/*<span className={"mr10 color9B9B"}>15M</span>*/} {/*<span className={"mr10 color9B9B"}>15M</span>*/}
{/*</div>*/} {/*</div>*/}
{datalist&&datalist.attachments.map((item,key)=>{ {datalist&& datalist.attachments && datalist.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">
@ -238,7 +238,7 @@ class GraduationTasksappraise extends Component{
{/*<span className={"color9B9B fr"}>*/} {/*<span className={"color9B9B fr"}>*/}
{/*{moment(datalist&&datalist.update_time).format('YYYY-MM-DD HH:mm:ss')==="Invalid date"?"":moment(datalist&&datalist.update_time).format('YYYY-MM-DD HH:mm:ss')}*/} {/*{moment(datalist&&datalist.update_time).format('YYYY-MM-DD HH:mm:ss')==="Invalid date"?"":moment(datalist&&datalist.update_time).format('YYYY-MM-DD HH:mm:ss')}*/}
{/*</span>*/} {/*</span>*/}
<span className={"color9B9B fr mr30"}>提交</span> <span className={"color9B9B fr"}>提交</span>
<span className={"fr font-13 mr10 ml10"}>{datalist&&datalist.author_name}</span> <span className={"fr font-13 mr10 ml10"}>{datalist&&datalist.author_name}</span>
<span className={" color9B9B fr"}> <span className={" color9B9B fr"}>
{moment(datalist&&datalist.commit_time).format('YYYY-MM-DD HH:mm:ss')==="Invalid date"?"":moment(datalist&&datalist.commit_time).format('YYYY-MM-DD HH:mm:ss')} {moment(datalist&&datalist.commit_time).format('YYYY-MM-DD HH:mm:ss')==="Invalid date"?"":moment(datalist&&datalist.commit_time).format('YYYY-MM-DD HH:mm:ss')}
@ -248,12 +248,11 @@ class GraduationTasksappraise extends Component{
</div> </div>
{firelistdata===undefined?"":firelistdata.length===0?"":firelistdata.revise_attachments.length===0?"":<div className={"stud-class-set bor-bottom-greyE pd20 edu-back-white"}> {firelistdata===undefined?"":firelistdata.length===0?"":firelistdata.revise_attachments.length===0?"":
<div className={"stud-class-set bor-top-greyE padding20-30 edu-back-white"}>
<div className={"color-grey-6 mb10 bor-top-greyE"}> <div className={"color-grey-6 mb10 bor-top-greyE"}>
补交附件 补交附件
</div> </div>
<div className={"ml20"}> <div className={"ml20"}>
补交原因{firelistdata&&firelistdata.revise_reason} 补交原因{firelistdata&&firelistdata.revise_reason}
</div> </div>
@ -291,39 +290,32 @@ class GraduationTasksappraise extends Component{
</div>} </div>}
{datalist&&datalist.project_info===undefined?"":
{datalist&&datalist.project_info===undefined?"":<div className={"stud-class-set bor-bottom-greyE pd20 edu-back-white"}> <div className={"stud-class-set edu-back-white padding20-30 bor-top-greyE"}>
<div className={"color-grey-6 mb10"}> <div className={"color-grey-6 mb10"}>
关联项目 关联项目
</div> </div>
<div className={"ml20"}> <div className={"ml20"}>
{datalist&&datalist.project_info.name} {datalist&&datalist.project_info.name}
</div> </div>
</div>} </div>}
{/*{*/} {/*{*/}
{ datalist === undefined?"":datalist&&datalist.task_type===undefined?"" :datalist.task_type===1? "": { datalist === undefined?"": datalist && datalist.task_type===undefined ?"" : datalist.task_type===1? "": datalist && datalist.work_members && datalist.work_members.length == 0 ?"":
<div className={"stud-class-set pd20 edu-back-white mb10"} style={{height:"100%"}}> <div className={"stud-class-set edu-back-white padding20-30 bor-top-greyE"} style={{height:"100%"}}>
<div className={"color-grey-6 mb10"}>
<div className={"color-grey-6 mb10"}> 其他组员
其他组员
</div>
<div className={"both"}></div>
{datalist&&datalist.work_members&&datalist.work_members.map((item,key)=>{
return(
<div className={"fl mr20 ml20"} key={key} id={item.user_id}>
{item.user_name}
</div>
)
})}
<div className={"both"}></div>
</div> </div>
} <div className={"both"}></div>
{datalist.work_members.map((item,key)=>{
return(
<div className={"fl mr20 ml20"} key={key} id={item.user_id}>
{item.user_name}
</div>
)
})}
<div className={"both"}></div>
</div>
}
</div> </div>

@ -216,7 +216,7 @@ class GraduationTasksedit extends Component{
if ( response.data.status === 0) { if ( response.data.status === 0) {
this.setState({ this.setState({
Modalstype:true, Modalstype:false,
Modalstopval:response.data.message, Modalstopval:response.data.message,
ModalSave:this.cancelAttachment, ModalSave:this.cancelAttachment,
Loadtype:true, Loadtype:true,

@ -1010,10 +1010,10 @@ class GraduationTaskssettingapp extends Component{
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<p className="clearfix mt10"> <p className="clearfix mt10">
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/students"} className="color-grey-6">{coursename}</Link></WordsBtn> <Link to={"/courses/"+courseId+"/students"} className="color-grey-9 fl">{coursename}</Link>
<span className="color-grey-c fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+settingdata.graduation_id} className="color-grey-6">毕设任务</Link></WordsBtn> <Link to={"/courses/"+courseId+"/graduation_tasks/"+settingdata.graduation_id} className="color-grey-9 fl">毕设任务</Link>
<span className="color-grey-c fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
{/*{taskname===""?"":*/} {/*{taskname===""?"":*/}
{/*<WordsBtn style="grey" className="fl">*/} {/*<WordsBtn style="grey" className="fl">*/}
@ -1022,18 +1022,17 @@ class GraduationTaskssettingapp extends Component{
{/*</WordsBtn>*/} {/*</WordsBtn>*/}
{/*}*/} {/*}*/}
<span>任务详情</span> <span className="color-grey-6">任务详情</span>
</p> </p>
<div style={{ width:'100%',height:'75px'}} > <div className="clearfix mt20 mb20 lineh-25">
<p className=" fl color-black mt25 summaryname"> <p className=" fl color-black lineh-25 summaryname">
<Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{taskname}</Link> <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{taskname}</Link>
</p> </p>
<CoursesListType <CoursesListType
typelist={task_status} typelist={task_status}
typesylename={"mt22"}
/> />
<a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a> <a className="color-grey-6 fr font-16 ml30 mr20" onClick={this.goback}>返回</a>
</div> </div>

@ -1360,11 +1360,11 @@ class GraduationTaskssettinglist extends Component{
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<p className="clearfix mt10"> <p className="clearfix mt10">
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/students"}>{taskslistdata.course_name}</Link></WordsBtn> <Link className="color-grey-9 fl" to={"/courses/"+courseId+"/students"}>{taskslistdata.course_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+taskslistdata.graduation_id} className="color-grey-6">{taskslistdata.graduation_name}</Link></WordsBtn> <Link className="color-grey-9 fl" to={"/courses/"+courseId+"/graduation_tasks/"+taskslistdata.graduation_id}>{taskslistdata.graduation_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<span>任务详情</span> <span className="color-grey-6 fl">任务详情</span>
</p> </p>
<div className="clearfix lineh-25 mt20 mb20"> <div className="clearfix lineh-25 mt20 mb20">

@ -243,29 +243,21 @@ class GraduationTasksquestions extends Component{
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<p className="clearfix mt10"> <p className="clearfix mt10">
<Link to={"/courses/"+courseId+"/students"} className="color-grey-9 fl">{questionslist.course_name}</Link>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/students"} className="color-grey-6">{questionslist.course_name}</Link></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+questionslist.graduation_id} className="color-grey-6">{questionslist.graduation_name}</Link></WordsBtn> <Link to={"/courses/"+courseId+"/graduation_tasks/"+questionslist.graduation_id} className="color-grey-9 fl">{questionslist.graduation_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
{/*<WordsBtn style="grey" className="fl">*/} <span className="color-grey-6">任务详情</span>
{/*<Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id} className="color-grey-6">{questionslist.task_name}</Link>*/}
{/*<span className="color-grey-9 ml3 mr3">&gt;</span>*/}
{/*</WordsBtn>*/}
<span>任务详情</span>
</p> </p>
<div style={{ width:'100%'}} > <div className="clearfix mt20 mb20 lineh-25">
<p className=" fl color-black mt25 summaryname"> <p className=" fl color-black summaryname">
<Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-6">{questionslist.task_name}</Link> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-6">{questionslist.task_name}</Link>
</p> </p>
<CoursesListType <CoursesListType
typelist={questionslist.task_status} typelist={questionslist.task_status}
typesylename={"mt22"}
/> />
<a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a> <a className="color-grey-6 fr font-16 ml30 mr20" onClick={this.goback}>返回</a>
</div> </div>

@ -36,7 +36,7 @@ class Graduationtaskitem extends Component{
</a> </a>
<span className="t_area fl">{item.time}</span> <span className="t_area fl">{item.time}</span>
{/* 分数 */} {/* 分数 */}
<span className="score_area fl">{item.score}</span> {item.score && <span className="score_area fl">{item.score}</span>}
{ !item.is_invalid && item.delete && <Tooltip title={ "删除" } > { !item.is_invalid && item.delete && <Tooltip title={ "删除" } >
<i className="iconfont icon-shanchu mr5 fr" style={{marginLeft: '6px'}} <i className="iconfont icon-shanchu mr5 fr" style={{marginLeft: '6px'}}

@ -19,7 +19,8 @@ class AddStudentModal extends Component{
hasMore: true, hasMore: true,
loading: false, loading: false,
courseGroup: '', courseGroup: '',
page: 1 page: 1,
isSpin:false
} }
} }
fetchMemberList = (arg_page) => { fetchMemberList = (arg_page) => {
@ -92,6 +93,9 @@ class AddStudentModal extends Component{
} }
onSendOk = () => { onSendOk = () => {
this.setState({
isSpin:true
})
if(!this.state.checkBoxValues || this.state.checkBoxValues.length == 0) { if(!this.state.checkBoxValues || this.state.checkBoxValues.length == 0) {
this.props.showNotification('请从列表中先选择用户。') this.props.showNotification('请从列表中先选择用户。')
return; return;
@ -111,6 +115,9 @@ class AddStudentModal extends Component{
this.setVisible(false) this.setVisible(false)
this.props.showNotification('添加成功') this.props.showNotification('添加成功')
this.props.addStudentSuccess && this.props.addStudentSuccess(params) this.props.addStudentSuccess && this.props.addStudentSuccess(params)
this.setState({
isSpin:false
})
} }
}) })
.catch(function (error) { .catch(function (error) {
@ -142,7 +149,7 @@ class AddStudentModal extends Component{
} }
render(){ render(){
const { users, checkBoxValues, loading, hasMore, name, school_name const { users, checkBoxValues, loading, hasMore, name, school_name
, courseGroup, course_groups, } = this.state , courseGroup, course_groups,isSpin } = this.state
const { moduleName } = this.props const { moduleName } = this.props
return( return(
<ModalWrapper <ModalWrapper
@ -184,9 +191,9 @@ class AddStudentModal extends Component{
`} `}
</style> </style>
<div className="df"> <div className="df">
<span className="firstLabel label">姓名:</span> <span className="mr10">姓名:</span>
<Input allowClear placeholder="请输入真实姓名" value={name} onChange={(e) => {this.setState({name: e.target.value})}} <Input allowClear placeholder="请输入真实姓名" value={name} onChange={(e) => {this.setState({name: e.target.value})}}
style={{ width: '200px'}} style={{ width: '242px'}}
></Input> ></Input>
<span className="label" style={{ minWidth: '36px' }}>单位:</span> <span className="label" style={{ minWidth: '36px' }}>单位:</span>
{/* <Input allowClear placeholder="" value={school_name} onChange={(e) => {this.setState({school_name: e.target.value})}} {/* <Input allowClear placeholder="" value={school_name} onChange={(e) => {this.setState({school_name: e.target.value})}}
@ -202,8 +209,8 @@ class AddStudentModal extends Component{
</div> </div>
{/* <Divider /> */} {/* <Divider /> */}
{course_groups && course_groups.length && <div className="df" style={{ marginTop: '24px' }} > {course_groups && course_groups.length && <div className="df" style={{ marginTop: '24px' }} >
<span className="firstLabel label">分班:</span> <span className="mr10">分班:</span>
<Select style={{ width: 457 }} onChange={this.handleCourseGroupChange} value={courseGroup}> <Select style={{ width:500 }} onChange={this.handleCourseGroupChange} value={courseGroup}>
{ course_groups.map((item) => { { course_groups.map((item) => {
return <Option value={item.id}>{item.name}</Option> return <Option value={item.id}>{item.name}</Option>
})} })}
@ -217,6 +224,7 @@ class AddStudentModal extends Component{
<span className="fl with45"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'单位'}</label></span> <span className="fl with45"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'单位'}</label></span>
</p> </p>
<Spin size="large" spinning={isSpin}>
{ users && users.length ? <div> { users && users.length ? <div>
{/* https://github.com/CassetteRocks/react-infinite-scroller/issues/70 */} {/* https://github.com/CassetteRocks/react-infinite-scroller/issues/70 */}
<div className="edu-back-skyblue padding10-15" style={{"height":"300px", overflowY: "scroll", overflowAnchor: 'none' }}> <div className="edu-back-skyblue padding10-15" style={{"height":"300px", overflowY: "scroll", overflowAnchor: 'none' }}>
@ -259,6 +267,7 @@ class AddStudentModal extends Component{
</InfiniteScroll> </InfiniteScroll>
</div> </div>
</div> : <NoneData></NoneData> } </div> : <NoneData></NoneData> }
</Spin>
</ModalWrapper> </ModalWrapper>
) )
} }

@ -40,6 +40,15 @@ const buildColumns = (that) => {
render: (id, student, index) => { render: (id, student, index) => {
return (that.state.page - 1) * 20 + index + 1 return (that.state.page - 1) * 20 + index + 1
} }
}, {
title: '用户id',
dataIndex: 'login',
key: 'login',
align:'center',
className:"color-grey-6",
// render: (name, record) => {
// return <a className="color-dark" target="_blank" href={`/users/${record.login}`}>{name}</a>
// }
}, { }, {
title: '姓名', title: '姓名',
dataIndex: 'name', dataIndex: 'name',
@ -316,6 +325,7 @@ class studentsList extends Component{
}).then((result)=>{ }).then((result)=>{
if (result.data.status == 0) { if (result.data.status == 0) {
this.props.showNotification('移动成功') this.props.showNotification('移动成功')
this.setState({checkBoxValues: []})
this.fetchAll() this.fetchAll()
this.props.updataleftNavfun() this.props.updataleftNavfun()

@ -38,6 +38,10 @@ function buildColumns(that) {
render: (content, item, index) => { render: (content, item, index) => {
return <a href="javascript:;">{(that.state.page - 1) * 20 + index + 1}</a> return <a href="javascript:;">{(that.state.page - 1) * 20 + index + 1}</a>
} }
},{
title: '用户ID',
dataIndex: 'login',
key: 'login'
}, { }, {
title: '姓名', title: '姓名',
dataIndex: 'name', dataIndex: 'name',
@ -122,6 +126,7 @@ function buildColumns(that) {
columns.push({ columns.push({
title: '操作', title: '操作',
key: 'action', key: 'action',
align:'center',
render: (text, record) => { render: (text, record) => {
if (record.application_id) { if (record.application_id) {
return ( return (

@ -118,6 +118,7 @@ class PollDetailIndex extends Component{
className={"font-16"} className={"font-16"}
checkBoxValues={[this.props.match.params.pollId]} checkBoxValues={[this.props.match.params.pollId]}
action={this.getPollInfo} action={this.getPollInfo}
single={true}
></ImmediatelyPublish> ></ImmediatelyPublish>
</li> </li>
:"" :""
@ -133,6 +134,7 @@ class PollDetailIndex extends Component{
className={"font-16"} className={"font-16"}
checkBoxValues={[this.props.match.params.pollId]} checkBoxValues={[this.props.match.params.pollId]}
action={this.getPollInfo} action={this.getPollInfo}
single={true}
></ImmediatelyEnd> ></ImmediatelyEnd>
</li> </li>
:"" :""

@ -63,16 +63,17 @@ class PollDetailTabSecond extends Component{
return( return(
<div className="edu-back-white mb10"> <div className="edu-back-white mb10">
<div className="pt20 pl30 pr30 pb10"> <div className="pt20 pl30 pr30 pb10">
<span className="font-16"> <span className="font-16 clearfix">
<span className="mr20 color-grey-6">{parseInt(page-1)*parseInt(limit)+(key+1)}: <span className="color-blue fl">{parseInt(page-1)*parseInt(limit)+(key+1)}{map[item.question.question_type]}</span>
<span className="color-grey-9">({map[item.question.question_type]})</span></span> { item.question.is_necessary==1 ? <span className="mustAnswer fl ml10 mr10 mt6">必答</span>:"" }
{ item.question.question_type == 2 ?
<span className="color-grey-9"> <span className="color-grey-9">
{ item.question.question_type == 2 ? {
item.question.min_choices == item.question.max_choices ? "可选"+item.question.max_choices+"项" : item.question.min_choices == item.question.max_choices ? "可选"+item.question.max_choices+"项" :
"可选"+item.question.min_choices+"-"+item.question.max_choices+"项" "可选"+item.question.min_choices+"-"+item.question.max_choices+"项"
:""
} }
</span> </span>:""
}
</span> </span>
<p className="mt10 font-16">{item.question.question_title}</p> <p className="mt10 font-16">{item.question.question_title}</p>
</div> </div>

@ -68,15 +68,17 @@ class PollDetailTabThird extends Component{
pollDetail && pollDetail.questions.map((item,key)=>{ pollDetail && pollDetail.questions.map((item,key)=>{
return( return(
<div className="previewList"> <div className="previewList">
<p className="pl30 pr30 pt30 pb15 font-16"> <p className="pl30 pr30 pt30 pb15 font-16 clearfix">
<span className="color-blue mr8">{map[item.question.question_type]}</span><span className="mr10"><span className="color-red">*</span>Q{item.question.question_number}</span> <span className="color-blue mr8 fl">{item.question.question_number}{map[item.question.question_type]}</span>
{ item.question.is_necessary==1 ? <span className="mustAnswer fl ml10 mr10">必答</span>:"" }
{ item.question.question_type == 2 ?
<span className="color-grey-9"> <span className="color-grey-9">
{ item.question.question_type == 2 ? {
item.question.min_choices == item.question.max_choices ? "可选"+item.question.max_choices+"项" : item.question.min_choices == item.question.max_choices ? "可选"+item.question.max_choices+"项" :
"可选"+item.question.min_choices+"-"+item.question.max_choices+"项" "可选"+item.question.min_choices+"-"+item.question.max_choices+"项"
:""
} }
</span> </span>:""
}
</p> </p>
<li className="pl30 pr30 pb15">{item.question.question_title}</li> <li className="pl30 pr30 pb15">{item.question.question_title}</li>
{ {

@ -72,7 +72,7 @@ class ImmediatelyEnd extends Component{
visible:true, visible:true,
Topval:"学生将不能再提交试卷", Topval:"学生将不能再提交试卷",
// Botvalleft:"暂不截止", // Botvalleft:"暂不截止",
Botval:`本操作只对"提交中"的分班有效`, Botval:this.props.single ?`本操作只对"提交中"的分班有效`:"",
// starttime:"发布时间:"+getNowFormatDate(1), // starttime:"发布时间:"+getNowFormatDate(1),
// endtime:"截止时间:"+getNowFormatDate(2), // endtime:"截止时间:"+getNowFormatDate(2),
Cancelname:"暂不截止", Cancelname:"暂不截止",
@ -114,7 +114,7 @@ class ImmediatelyEnd extends Component{
visible:true, visible:true,
Topval:"学生将不能再提交问卷", Topval:"学生将不能再提交问卷",
// Botvalleft:"暂不截止", // Botvalleft:"暂不截止",
Botval:`本操作只对"提交中"的分班有效`, Botval:this.props.single ?`本操作只对"提交中"的分班有效`:"",
// starttime:"发布时间:"+getNowFormatDate(1), // starttime:"发布时间:"+getNowFormatDate(1),
// endtime:"截止时间:"+getNowFormatDate(2), // endtime:"截止时间:"+getNowFormatDate(2),
Cancelname:"暂不截止", Cancelname:"暂不截止",

@ -80,7 +80,7 @@ class Immediatelypublish extends Component{
visible:true, visible:true,
Topval:"学生将立即收到试卷", Topval:"学生将立即收到试卷",
// Botvalleft:"暂不发布", // Botvalleft:"暂不发布",
Botval:`本操作只对"未发布"的分班有效`, Botval:this.props.single ? "":`本操作只对"未发布"的分班有效`,
starttime:"发布时间:"+moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), starttime:"发布时间:"+moment(moment(new Date())).format("YYYY-MM-DD HH:mm"),
starttimes:this.props.getNowFormatDates(1), starttimes:this.props.getNowFormatDates(1),
endtime:"截止时间:"+this.props.getNowFormatDates(2), endtime:"截止时间:"+this.props.getNowFormatDates(2),
@ -119,7 +119,7 @@ class Immediatelypublish extends Component{
visible:true, visible:true,
Topval:"学生将立即收到问卷", Topval:"学生将立即收到问卷",
// Botvalleft:"暂不发布", // Botvalleft:"暂不发布",
Botval:`本操作只对"未发布"的分班有效`, Botval:this.props.single ? "":`本操作只对"未发布"的分班有效`,
starttime:"发布时间:"+moment(moment(new Date())).format("YYYY-MM-DD HH:mm"), starttime:"发布时间:"+moment(moment(new Date())).format("YYYY-MM-DD HH:mm"),
starttimes:this.props.getNowFormatDates(1), starttimes:this.props.getNowFormatDates(1),
endtime:"截止时间:"+this.props.getNowFormatDates(2), endtime:"截止时间:"+this.props.getNowFormatDates(2),

@ -1,5 +1,8 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import MonacoEditor from 'react-monaco-editor';
//MonacoDiffEditor 对比模式
import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Icon,DatePicker} from 'antd'; import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Icon,DatePicker} from 'antd';
// import "antd/dist/antd.css"; // import "antd/dist/antd.css";
@ -222,7 +225,8 @@ export default class TPMsettings extends Component {
pod_exist_time: undefined, pod_exist_time: undefined,
pod_exist_timetype: false, pod_exist_timetype: false,
shixunmemoMDvalue:"" shixunmemoMDvalue:"",
language:""
} }
} }
descriptionMD=(initValue, id)=> { descriptionMD=(initValue, id)=> {
@ -894,6 +898,7 @@ export default class TPMsettings extends Component {
SelectScput = (value, e) => { SelectScput = (value, e) => {
this.setState({ this.setState({
choice_standard_scriptssum: value, choice_standard_scriptssum: value,
language:e.props.name,
choice_standard_scripts: {id:e.props.value,value:""}, choice_standard_scripts: {id:e.props.value,value:""},
standard_scriptsModal:true standard_scriptsModal:true
}) })
@ -1003,11 +1008,15 @@ export default class TPMsettings extends Component {
}) })
} }
getshixunmemoMDvalue=(e)=>{ getshixunmemoMDvalue=(value, e)=>{
this.setState({ this.setState({
shixunmemoMDvalue:e.target.value shixunmemoMDvalue:value
}) })
} }
render() { render() {
let { let {
postapplyvisible, postapplyvisible,
@ -1376,9 +1385,20 @@ export default class TPMsettings extends Component {
<div className="flex1"> <div className="flex1">
<div className="fl " id="shixunmemoMD" > <div className="fl " >
<textarea className={"shixunmemoMDdiv"} value={shixunmemoMDvalue} onInput={this.getshixunmemoMDvalue} name="content"> {/*<textarea className={"shixunmemoMDdiv"} value={shixunmemoMDvalue} onInput={this.getshixunmemoMDvalue} name="content">*/}
</textarea> {/*</textarea>*/}
<MonacoEditor
height="450"
width="1100"
language={this.state.language}
value={shixunmemoMDvalue}
options={ {
selectOnLineNumbers: true
}}
onChange={operateauthority===true?this.getshixunmemoMDvalue:""}
/>
</div> </div>

@ -1,96 +1,105 @@
.radioStyle{ .radioStyle{
display: block; display: block;
height: 30px; height: 30px;
} }
#settingsMarkdown{ #settingsMarkdown{
background:transparent; background:transparent;
} }
#challenge_begin{ #challenge_begin{
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
} }
#shixundescription .CodeMirror{ #shixundescription .CodeMirror{
width: 570px !important; width: 570px !important;
margin-top: 31px !important; margin-top: 31px !important;
height: 364px !important; height: 364px !important;
} }
#shixundescription .editormd-preview{ #shixundescription .editormd-preview{
width: 567px !important; width: 567px !important;
top: 40px !important; top: 40px !important;
height: 364px !important; height: 364px !important;
} }
#shixunmemoMD .CodeMirror{ #shixunmemoMD .CodeMirror{
width: 548px !important; width: 548px !important;
margin-top: 31px !important; margin-top: 31px !important;
height: 578px !important; height: 578px !important;
} }
#shixunmemoMD .editormd-preview{ #shixunmemoMD .editormd-preview{
width: 544px !important; width: 544px !important;
top: 40px !important; top: 40px !important;
height: 578px !important; height: 578px !important;
} }
.radioStyle { .radioStyle {
display: block; display: block;
height: 30px; height: 30px;
} }
a.white-btn.use_scope-btn:hover { a.white-btn.use_scope-btn:hover {
color: #FFF !important; color: #FFF !important;
} }
.shixunScopeInput { .shixunScopeInput {
width: 218px; width: 218px;
height: 33px; height: 33px;
display: block; display: block;
margin-bottom: 15px; margin-bottom: 15px;
} }
.ant-modal-title { .ant-modal-title {
text-align: center; text-align: center;
} }
a.newuse_scope-btn:hover { a.newuse_scope-btn:hover {
border: 1px solid #F06200; border: 1px solid #F06200;
color: #fff !important; color: #fff !important;
background: #FF7500; background: #FF7500;
} }
a.newuse_scope-btn { a.newuse_scope-btn {
border: 1px solid #FF7500; border: 1px solid #FF7500;
color: #FF7500 !important; color: #FF7500 !important;
} }
.tpmprompt { .tpmprompt {
padding-left: 20px; padding-left: 20px;
margin-top: -4px; margin-top: -4px;
} }
.ml36{ .ml36{
margin-left: 26px; margin-left: 26px;
} }
#shixunmemoMD{ #shixunmemoMD{
width:98% !important; width:98% !important;
height: 620px !important; height: 620px !important;
} }
.pdr20{ #shixunmemoMDs{
padding-right:20px; width: 98% !important;
} height: 420px !important;
}
.nonemodel{ #shixunmemoMDs .CodeMirror {
width: 30%; /* width: 548px !important; */
height: 624px; margin-top: 31px !important;
/*background: rgba(0, 0, 0, 0.65);*/ height: 402px !important;
background: #f5f5f5; }
position: absolute; .pdr20{
z-index: 100; padding-right:20px;
opacity: 0.5; }
left: 21.5%;
} .nonemodel{
width: 59%;
.shixunmemoMDdiv{ height: 468px;
width: 99%; /*background: rgba(0, 0, 0, 0.65);*/
height: 615px; background: #f5f5f5;
position: absolute;
z-index: 100;
opacity: 0.5;
left: 21.5%;
}
.shixunmemoMDdiv{
width: 99%;
height: 615px;
} }

@ -9,7 +9,7 @@ import classNames from 'classnames';
// import { Rating,Loading} from '@icedesign/base'; // import { Rating,Loading} from '@icedesign/base';
import {getImageUrl, toPath} from 'educoder'; import {getImageUrl,setImagesUrl, toPath} from 'educoder';
// import { Pagination,Row,Col } from 'antd'; // import { Pagination,Row,Col } from 'antd';
@ -94,7 +94,7 @@ class ShixunCard extends Component {
item.tag_name === null ? "": item.tag_name === null ? "":
<div className="tag-green"> <div className="tag-green">
<span className="tag-name"> {item.tag_name}</span> <span className="tag-name"> {item.tag_name}</span>
<img style={{display:item.tag_name===null?"none":'block',height: '28px'}} src={require(`./shixunCss/tag2.png`)}/> <img style={{display:'block',height: '28px'}} src={require(`./shixunCss/tag2.png`)}/>
</div> </div>
} }
<div className={item.power === false ? "closeSquare" : "none"}> <div className={item.power === false ? "closeSquare" : "none"}>
@ -105,7 +105,7 @@ class ShixunCard extends Component {
<a href={"/shixuns/"+item.identifier+"/challenges"} target="_blank" className="square-img"> <a href={"/shixuns/"+item.identifier+"/challenges"} target="_blank" className="square-img">
{/*<img src={getImageUrl("images/"+item.pic+"?1540534846")}/>*/} {/*<img src={getImageUrl("images/"+item.pic+"?1540534846")}/>*/}
<img src={item.pic}/> <img src={setImagesUrl(`${item.pic}`)}/>
</a> </a>
<div className="square-main"> <div className="square-main">

@ -6,7 +6,7 @@ import Loadable from 'react-loadable';
import Loading from '../../../Loading'; import Loading from '../../../Loading';
import NoneData from '../../courses/coursesPublic/NoneData' import NoneData from '../../courses/coursesPublic/NoneData'
import axios from 'axios'; import axios from 'axios';
import {getImageUrl} from 'educoder'; import {getImageUrl,setImagesUrl} from 'educoder';
import { TPMIndexHOC } from '../../tpm/TPMIndexHOC'; import { TPMIndexHOC } from '../../tpm/TPMIndexHOC';
import { CNotificationHOC } from '../../courses/common/CNotificationHOC' import { CNotificationHOC } from '../../courses/common/CNotificationHOC'
import "./usersInfo.css" import "./usersInfo.css"
@ -168,10 +168,10 @@ class InfosShixun extends Component{
return( return(
<div className="square-Item" onClick={()=>this.turnToCourses(`/shixuns/${item.identifier}/challenges`)}> <div className="square-Item" onClick={()=>this.turnToCourses(`/shixuns/${item.identifier}/challenges`)}>
{ {
item.tag && <div className="tag-green"><span className="tag-name">{item.tag}</span><img src={getImageUrl("/images/educoder/tag2.png")}/></div> item.tag && <div className="tag-green"><span className="tag-name">{item.tag}</span><img className="fl" src={setImagesUrl("images/educoder/tag2.png")}/></div>
} }
<a href="javascript:void(0)" className="square-img"> <a href="javascript:void(0)" className="square-img">
<img alt="Shixun6" src={`${item.image_url}`}/> <img src={setImagesUrl(`${item.image_url}`)}/>
</a> </a>
<div className="square-main"> <div className="square-main">
<p className="task-hide"> <p className="task-hide">

Loading…
Cancel
Save