diff --git a/public/react/src/common/components/Cropper.js b/public/react/src/common/components/Cropper.js index 2fe71ea2b..f11248751 100644 --- a/public/react/src/common/components/Cropper.js +++ b/public/react/src/common/components/Cropper.js @@ -110,13 +110,15 @@ class Cropper extends Component { render() { const { width, height, previewId, imageSrc } = this.props; + return (
{/* This rule is very important, please do not ignore this! */}
- {/* http://localhost:3007/images/footNavLogo.png 图片转了后不对 */} - + {/* http://localhost:3007/images/footNavLogo.png 图片转了后不对 + || "/images/testPicture.jpg" + || "/images/shixun0.jpg" + */} +
{/* background: 'aquamarine', 'border-radius': '128px' diff --git a/public/react/src/modules/courses/Resource/index.js b/public/react/src/modules/courses/Resource/index.js index 8ce285ae1..f26d97ad3 100644 --- a/public/react/src/modules/courses/Resource/index.js +++ b/public/react/src/modules/courses/Resource/index.js @@ -176,8 +176,8 @@ class Fileslists extends Component{ let list=result.data.data; this.setState({ total_count:list.total_count, - public_count:list.public_count, - private_count:list.private_count, + publish_count:list.publish_count, + unpublish_count:list.unpublish_count, files:list.files, filesId:list.id, name:list.name, @@ -625,13 +625,12 @@ class Fileslists extends Component{ }) } render(){ - let { searchValue, checkBoxValues, checkAllValue, total_count, - public_count, - private_count, + publish_count, + unpublish_count, files, sorttype, Modalstype, @@ -766,8 +765,8 @@ class Fileslists extends Component{ secondRowLeft={
共 {total_count} 个资源 - 已发布:{public_count}个 - 未发布:{private_count}个 + 已发布:{publish_count}个 + 未发布:{unpublish_count}个
} onPressEnter={this.onPressEnter} diff --git a/public/react/src/modules/courses/coursesPublic/AccessoryModal.js b/public/react/src/modules/courses/coursesPublic/AccessoryModal.js index 72512be43..5541a01a6 100644 --- a/public/react/src/modules/courses/coursesPublic/AccessoryModal.js +++ b/public/react/src/modules/courses/coursesPublic/AccessoryModal.js @@ -151,7 +151,6 @@ class AccessoryModal extends Component{ }).then((result)=>{ if(result.data.status===0){ - debugger this.props.Cancel() this.props.setupdate() @@ -199,7 +198,6 @@ class AccessoryModal extends Component{ }).then((result)=>{ if(result.data.status===0){ - debugger this.props.Cancel() this.props.setupdate() diff --git a/public/react/src/modules/courses/coursesPublic/SelectSetting.js b/public/react/src/modules/courses/coursesPublic/SelectSetting.js index 4e84bae8c..08e01e28e 100644 --- a/public/react/src/modules/courses/coursesPublic/SelectSetting.js +++ b/public/react/src/modules/courses/coursesPublic/SelectSetting.js @@ -175,7 +175,6 @@ class Selectsetting extends Component{ } savecouseShixunModal=()=>{ - debugger let {fileList,is_public,unified_setting,description,datatime,course_groups}=this.state; let newfileList=[]; diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js index 09cfdf947..a3ee9ef1a 100644 --- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js +++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js @@ -2192,7 +2192,6 @@ class Studentshavecompletedthelist extends Component { } funtaskstatustwo = (checkedValues, data) => { - debugger // console.log(checkedValues); if (JSON.stringify(checkedValues) === "[]") { // console.log(checkedValues); diff --git a/public/react/src/modules/courses/members/teacherList.js b/public/react/src/modules/courses/members/teacherList.js index c5422b96f..5f2459dd3 100644 --- a/public/react/src/modules/courses/members/teacherList.js +++ b/public/react/src/modules/courses/members/teacherList.js @@ -211,7 +211,6 @@ class studentsList extends Component{ } onCheckAllChange = (e, item, index) => { const that = this; - debugger; const checkAllArray = that.state.checkAllArray.slice(0) checkAllArray[index] = !checkAllArray[index] that.setState({checkAllArray}) diff --git a/public/react/src/modules/courses/poll/PollDetailTabForthRules.js b/public/react/src/modules/courses/poll/PollDetailTabForthRules.js index 2f3621844..ac0417f39 100644 --- a/public/react/src/modules/courses/poll/PollDetailTabForthRules.js +++ b/public/react/src/modules/courses/poll/PollDetailTabForthRules.js @@ -48,6 +48,7 @@ class PollDetailTabForthRules extends Component{ selectedCourse:[], flagPageEdit:this.props.flagPageEdit } + } componentDidUpdate(prevProps) { if (JSON.stringify(this.props.rules) != JSON.stringify(prevProps.rules) ) { diff --git a/public/react/src/modules/courses/shixunHomework/Listofworks.js b/public/react/src/modules/courses/shixunHomework/Listofworks.js index e7b85b19d..2553300ab 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworks.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworks.js @@ -67,6 +67,7 @@ class Listofworks extends Component { order: "update_time", b_order:"desc", search: null, + allow_late:false, task_status: [], course_group_info: [], teacherdata: undefined, @@ -220,7 +221,7 @@ class Listofworks extends Component { { record.efficiencyscore&& record.efficiencyscore=== "--"?( - record.submitstate==="按时提交"? + this.state.allow_late&&this.state.allow_late===false?
作业截止时,系统根据学生在课堂成员中的效率表现自动评分
}> @@ -229,7 +230,7 @@ class Listofworks extends Component { : - record.submitstate==="延时提交"? + this.state.allow_late&&this.state.allow_late===true?
补交结束时,系统根据学生在课堂成员中的效率表现自动评分
}> @@ -472,7 +473,7 @@ class Listofworks extends Component { { record.efficiencyscore&& record.efficiencyscore=== "--"?( - record.submitstate==="按时提交"? + this.state.allow_late&&this.state.allow_late===false?
作业截止时,系统根据学生在课堂成员中的效率表现自动评分
}> @@ -481,7 +482,7 @@ class Listofworks extends Component {
: - record.submitstate==="延时提交"? + this.state.allow_late&&this.state.allow_late===true?
补交结束时,系统根据学生在课堂成员中的效率表现自动评分
}> @@ -653,6 +654,7 @@ class Listofworks extends Component { this.setState({ teacherdata: result.data, task_status: result.data.task_status, + allow_late:result.data.allow_late, course_group_info: result.data.course_group_info, loadingstate: false, jobsettingsdata: result, @@ -713,6 +715,7 @@ class Listofworks extends Component { course_group_info: result.data.course_group_info, loadingstate: false, jobsettingsdata: result, + allow_late:result.data.allow_late, publish_immediately: result.data.publish_immediately, work_efficiency: result.data.work_efficiency, end_immediately: result.data.end_immediately, @@ -1322,6 +1325,10 @@ class Listofworks extends Component { axios.get(url).then((response) => { this.props.showNotification(`${response.data.message}`); + this.setState({ + loadingstate: true + }) + this.Startsorting(this.state.order, this.state.course_groupyslstwo, this.state.checkedValuesineinfo, this.state.searchtext, 1, this.state.limit); }).catch((error) => { console.log(error) }); @@ -1340,10 +1347,18 @@ class Listofworks extends Component { course_group: this.state.checkedValuesineinfo, search: this.state.searchtext, } - }).then((response) => { + },{responseType: 'blob'}).then((response) => { console.log("1342"); console.log(response); - + var blob = new Blob([response.data]) + var downloadElement = document.createElement('a'); + var href = window.URL.createObjectURL(blob); //创建下载的链接 + downloadElement.href = href; + downloadElement.download = '实习报告.pdf'; //下载后文件名 + document.body.appendChild(downloadElement); + downloadElement.click(); //点击下载 + document.body.removeChild(downloadElement); //下载完成移除元素 + window.URL.revokeObjectURL(href); //释放掉blob对象 }).catch((error) => { console.log(error) }); @@ -1359,10 +1374,18 @@ class Listofworks extends Component { group_id: this.state.checkedValuesineinfo, search: this.state.searchtext, } - }).then((response) => { + },{responseType: 'blob'}).then((response) => { console.log("1306"); console.log(response); - + var blob = new Blob([response.data]) + var downloadElement = document.createElement('a'); + var href = window.URL.createObjectURL(blob); //创建下载的链接 + downloadElement.href = href; + downloadElement.download = '课堂学生成绩.xlsx'; //下载后文件名 + document.body.appendChild(downloadElement); + downloadElement.click(); //点击下载 + document.body.removeChild(downloadElement); //下载完成移除元素 + window.URL.revokeObjectURL(href); //释放掉blob对象 }).catch((error) => { console.log(error) }); @@ -1458,7 +1481,7 @@ class Listofworks extends Component {

-

+

{teacherdata === undefined ? "" : teacherdata.homework_name}

-

+

{teacherdata === undefined ? "" : teacherdata.homework_name}

-

+

{jobsettingsdata === undefined ? "" : jobsettingsdata.data.homework_name}

-

+

{data&&data.homework_name}

-
    +
    • 查重时间:{data&&data.last_review_time} @@ -715,7 +715,7 @@ class ShixunStudentWork extends Component {
    -
    +
    @@ -755,11 +755,12 @@ class ShixunStudentWork extends Component { {datalist === undefined ? "" : } diff --git a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js index 5731c3b73..d6c96182b 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js @@ -358,7 +358,7 @@ class ShixunhomeWorkItem extends Component{ ` } - {this.props.isAdmin?
    + {this.props.isAdmin?
    实训详情 {this.props.isAdminOrTeacher()?this.editname(discussMessage.name,discussMessage.homework_id)} className={"btn colorblue ml20 font-16"}>重命名:""} 设置 diff --git a/public/react/src/modules/courses/shixunHomework/Shixunworkdetails/ShixunWorkModal.js b/public/react/src/modules/courses/shixunHomework/Shixunworkdetails/ShixunWorkModal.js index 5a4ad673c..173346c81 100644 --- a/public/react/src/modules/courses/shixunHomework/Shixunworkdetails/ShixunWorkModal.js +++ b/public/react/src/modules/courses/shixunHomework/Shixunworkdetails/ShixunWorkModal.js @@ -31,7 +31,9 @@ class ShixunWorkModal extends Component{ response.data.group_list.map((item,key)=>{ newgroup_list.push(item) }) - if( response.data.ungroup_list!== undefined || response.data.ungroup_list !== null){ + if(response.data.ungroup_list===undefined){ + + }else{ newgroup_list.push(response.data.ungroup_list) } this.setState({ @@ -255,31 +257,10 @@ class ShixunWorkModal extends Component{ { - group_list===undefined?course_groups.ungroup_list.work_count===0?"": - -
    -
  • - - - -
  • -
  • - {course_groups.ungroup_list.work_count} -
  • -
  • - {course_groups.ungroup_list.last_review_time} -
  • -
    - - : - group_list&&group_list.length===0?"":group_list[0]===undefined?"":group_list.map((item,key)=>{ + group_list===undefined?"": + group_list&&group_list.length===0?"":group_list.map((item,key)=>{ return( - item.work_count===0?"":
    +
  • +//
  • +// +// +// +//
  • +//
  • +// {course_groups.ungroup_list.work_count} +//
  • +//
  • +// {course_groups.ungroup_list.last_review_time} +//
  • +//
    +// +// : \ No newline at end of file diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index 362e3dc40..55770c359 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -162,28 +162,33 @@ class Trainingjobsetting extends Component { }) }else { for(var i=0;i0){ var Proportion=100; + var oushution=0; //获取占用分后的值 Proportion=Proportion-latedeductiontwos; + oushution=Proportion; var srorelength=0; //计算选中用户 for (var k=0;k{ + this.setState({ + modalsType: false, + modalsTopval: "", + loadtype: false, + }) + } //编辑 editSetting = () => { try { @@ -1540,7 +1566,8 @@ class Trainingjobsetting extends Component { handclass: undefined, unit_e_tip: "", }) - this.refs.targetElementTrainingjobsetting.scrollIntoView() + this.refs.targetElementTrainingjobsetting.scrollIntoView(); + this.getTrainingjobsetting(); } rulesCheckInfo=(rules)=>{ @@ -1580,6 +1607,38 @@ class Trainingjobsetting extends Component { showmodel:false }) } +// 导出实习报告批量 + internshipreport = () => { + console.log("internshipreport"); + var homeworkid = this.props.match.params.homeworkid; + let url = "/zip/shixun_report"; + axios.get((url),{ + params: { + homework_common_id: homeworkid, + } + }).then((response) => { + console.log("1593"); + console.log(response); + + }).catch((error) => { + console.log(error) + }); + + } + + // 课堂学生成绩的导出下载 + Classstudentachievement = () => { + console.log("Classstudentachievement"); + const course_id = this.props.match.params.coursesId; + let url = "/courses/" + course_id + "/export_member_scores_excel.xlsx"; + axios.get(url).then((response) => { + console.log("1607"); + console.log(response); + + }).catch((error) => { + console.log(error) + }); + } render() { @@ -1656,7 +1715,7 @@ class Trainingjobsetting extends Component {
    -

    +

    {jobsettingsdata === undefined ? "" : jobsettingsdata.data.homework_name}

    @@ -1698,10 +1757,35 @@ class Trainingjobsetting extends Component { {/**/} {/*查看实训报告*/} {/**/} - {this.props.isAdmin() ? 导出 : ""} + + {this.props.isAdmin() ?
  • + 导出 + +
  • : ""} {this.props.isAdmin() ?jobsettingsdata&&jobsettingsdata.data.end_immediately===true? 立即截止 : "": ""} {this.props.isAdmin() ?jobsettingsdata&&jobsettingsdata.data.publish_immediately===true? @@ -1997,7 +2081,7 @@ class Trainingjobsetting extends Component { 提交 {/*提交*/} - 取消 + this.cancelEdit()}>取消
    : "" } diff --git a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js index c342227c6..28560d4fe 100644 --- a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js +++ b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js @@ -412,7 +412,7 @@ class Workquestionandanswer extends Component {

    -

    +

    {jobsettingsdata === undefined ? "" : jobsettingsdata.data.homework_name}

    { //提交按钮 - debugger if (this.state.user_phone_binded === false) { if (this.state.Phonenumberisnotcobool === false) { diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index f03d59751..cc89f3003 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -75,9 +75,11 @@ export function TPMIndexHOC(WrappedComponent) { // header里面需要有user initCommonState(user) { + // 更新头像后,需要改变参数,不然会被图片缓存影响到 + const newUser = Object.assign({}, {...user}, { image_url: `${user.image_url}?t=${new Date().getTime()}`}); this.setState({ - user, - current_user: user + user: newUser, + current_user: newUser }) } showShixun = () => { @@ -230,7 +232,7 @@ export function TPMIndexHOC(WrappedComponent) { /** 课堂权限相关方法,暂时写这里了 ----------------------------------------END */ - fetchUser() { + fetchUser = () => { let url = `/users/get_user_info.json` let courseId; let query = this.props.location.pathname; @@ -289,7 +291,8 @@ export function TPMIndexHOC(WrappedComponent) { isStudent: this.isStudent, isAdminOrStudent: this.isAdminOrStudent, isNotMember: this.isNotMember, - isUserid:this.state.coursedata&&this.state.coursedata.userid + isUserid:this.state.coursedata&&this.state.coursedata.userid, + fetchUser: this.fetchUser } return (
    diff --git a/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js b/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js index 5554e0370..4ef6abfa3 100644 --- a/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js +++ b/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js @@ -479,48 +479,43 @@ class Challenges extends Component { {/*判断比较复杂 有排第一不能是灰色按钮*/} {item.status === 2 ? - this.startshixunCombat(false,undefined, item.challenge_id)} + this.startshixunCombat(false,undefined, item.challenge_id)} // onClick={() => this.startshixunCombat(false)} + title={"查看挑战关卡"} >已完成 : "" } { ChallengesDataList.allow_skip === true && item.status === 1? - this.startshixunCombat(false,undefined, item.challenge_id)} + onClick={()=>this.startshixunCombat(false,undefined, item.challenge_id)} // onClick={() => this.startshixunCombat(false)} >直接挑战 : "" } + { + ChallengesDataList.allow_skip === false ? item.status === 1? + + this.startshixunCombat(false,undefined, item.challenge_id)} + style={{marginTop: '-2px'}}>直接挑战 + :"":"" - { - ChallengesDataList.allow_skip === false ? item.status === 1 && newstatus === 2 ? - - this.startshixunCombat(false,undefined, item.challenge_id):""} - style={{marginTop: '-2px'}}>直接挑战 - - - : item.status === 1 && newstatus === 1 ? - - this.startshixunCombat(false,undefined, item.challenge_id):""} - style={{marginTop: '-2px'}}>直接挑战 - : "" : "" + } - } { item.status === 0 ? - - this.startshixunCombat(false,undefined, item.challenge_id):""} + + this.startshixunCombat(false,undefined, item.challenge_id):""} style={{marginTop: '-2px'}}>直接挑战 - : "" + :"" } @@ -598,3 +593,19 @@ class Challenges extends Component { } export default Challenges; + // { + // ChallengesDataList.allow_skip === false ? item.status === 1 && newstatus === 2 ? + // + // this.startshixunCombat(false,undefined, item.challenge_id)} + // style={{marginTop: '-2px'}}>直接挑战 + // + // + // : item.status === 1 && newstatus === 1 ? + // + // this.startshixunCombat(false,undefined, item.challenge_id)} + // style={{marginTop: '-2px'}}>直接挑战 + // : "" : "" + // + // } \ No newline at end of file diff --git a/public/react/src/modules/user/AccountPage.js b/public/react/src/modules/user/AccountPage.js index 430f086a1..065724faf 100644 --- a/public/react/src/modules/user/AccountPage.js +++ b/public/react/src/modules/user/AccountPage.js @@ -51,11 +51,11 @@ class AccountPage extends Component { } getBasicInfo=(login)=>{ - let url=`/users/accounts/${login}.json`; + let url=`/users/accounts/${login || this.props.current_user.login}.json`; axios.get(url).then((result)=>{ if(result.data){ this.setState({ - basicInfo:result.data + basicInfo: Object.assign({}, {...result.data}, { avatar_url: `${result.data.avatar_url}?t=${new Date().getTime()}`}) }) if(result.data && result.data.base_info_completed == false){ this.props.history.push(`/account/basic/edit`); diff --git a/public/react/src/modules/user/account/AccountBasicEdit.js b/public/react/src/modules/user/account/AccountBasicEdit.js index 2ef1d5e19..016a32eb5 100644 --- a/public/react/src/modules/user/account/AccountBasicEdit.js +++ b/public/react/src/modules/user/account/AccountBasicEdit.js @@ -28,8 +28,8 @@ class AccountBasic extends Component { } } - componentDidUpdate =(prevState)=>{ - if(this.props.basicInfo && this.props.basicInfo != prevState.basicInfo){ + componentDidUpdate =(prevProps)=>{ + if(this.props.basicInfo && prevProps.basicInfo == undefined){ this.setValue(this.props.basicInfo); this.getSchoolList(this.props.basicInfo); } diff --git a/public/react/src/modules/user/account/AccountImg.js b/public/react/src/modules/user/account/AccountImg.js index 01ede46cf..b8e060750 100644 --- a/public/react/src/modules/user/account/AccountImg.js +++ b/public/react/src/modules/user/account/AccountImg.js @@ -1,11 +1,17 @@ import React, { Component } from 'react'; import { SnackbarHOC, getImageUrl } from 'educoder'; - -class AccountNav extends Component { +import ChangeHeaderPicModal from './ChangeHeaderPicModal' +class AccountImg extends Component { + editImg = () => { + this.refs['picModal'].setVisible(true) + } render() { + const picUrl = getImageUrl("images/"+this.props.src) return (
    + - 头像 + 头像

    修改头像

    ); } } -export default AccountNav; +export default AccountImg; diff --git a/public/react/src/modules/user/account/AccountNav.js b/public/react/src/modules/user/account/AccountNav.js index ea84b735e..6f07bd075 100644 --- a/public/react/src/modules/user/account/AccountNav.js +++ b/public/react/src/modules/user/account/AccountNav.js @@ -22,7 +22,7 @@ class AccountNav extends Component { return (
    - + {basicInfo && basicInfo.name} {basicInfo && basicInfo.technical_title}
    diff --git a/public/react/src/modules/user/account/ChangeHeaderPicModal.js b/public/react/src/modules/user/account/ChangeHeaderPicModal.js index 32532f904..89f21838e 100644 --- a/public/react/src/modules/user/account/ChangeHeaderPicModal.js +++ b/public/react/src/modules/user/account/ChangeHeaderPicModal.js @@ -28,6 +28,10 @@ class ChangeHeaderPicModal extends Component{ file = files[0]; if (/^image\/\w+/.test(file.type)) { + if (file.size > 2 * 1024 * 1024) { + this.props.showNotification && this.props.showNotification("仅支持文件大小小于2M的文件") + return; + } uploadedImageType = file.type; uploadedImageName = file.name; @@ -41,8 +45,8 @@ class ChangeHeaderPicModal extends Component{ // cropper = new Cropper(image, options); inputImage.value = null; } else { - // TODO noti - window.alert('Please choose an image file.'); + this.props.showNotification && this.props.showNotification("请选择一个图片格式的文件") + // window.alert('Please choose an image file.'); } } }; @@ -71,14 +75,18 @@ class ChangeHeaderPicModal extends Component{ var dataUrl = canvas.toDataURL("image/jpeg"); console.log(dataUrl) - const url = `/users/accounts/${this.props.userLogin || 'kosasa'}/avatar.json` + const url = `/users/accounts/${this.props.userLogin}/avatar.json` axios.put(url, { image: dataUrl }) .then((response) => { // {"status":0,"message":"success","avatar_url":"avatars/User/15739"} if (response.data.status == 0) { - // TODO noti + // this.props.getBasicInfo() + this.props.fetchUser() + // 头像更新后会触发AccountPage的DidUpdate,然后会调用getBasicInfo + this.props.showNotification && this.props.showNotification("修改头像成功") + this.setVisible(false) } }) .catch(function (error) { @@ -108,6 +116,7 @@ class ChangeHeaderPicModal extends Component{ text-align: center; width: 120px; height: 120px; + border: 1px solid #eee; } .previewWrap { flex-direction: column; @@ -118,10 +127,14 @@ class ChangeHeaderPicModal extends Component{ } .changeHeaderModal .tip { color: #9B9B9B; + margin-top: 4px; + } + .changeHeaderModal .cropperWrap .tip { + display: inline-block; } .previewWrap .tip { text-align: center; - margin-top: 2px; + margin-top: 4px; } #uploadBtn { color: #4CACFF; @@ -131,8 +144,9 @@ class ChangeHeaderPicModal extends Component{ } `}
    -
    +