From bead5d1a1ae159dfc916de7bff3276c3cb842e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Tue, 31 Dec 2019 16:20:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=80=E9=94=AE=E8=AF=84=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/coursesPublic/ApprausePublic.js | 167 ++++++++++++++++++ .../courses/coursesPublic/Newshixunmodel.css | 2 +- .../courses/poll/PollDetailTabForth.js | 1 + .../shixunHomework/Listofworksstudentone.js | 19 +- .../shixunHomework/ShixunHomeworkPage.js | 68 ++++++- .../modules/tpm/newshixuns/css/Newshixuns.css | 2 +- 6 files changed, 245 insertions(+), 14 deletions(-) create mode 100644 public/react/src/modules/courses/coursesPublic/ApprausePublic.js diff --git a/public/react/src/modules/courses/coursesPublic/ApprausePublic.js b/public/react/src/modules/courses/coursesPublic/ApprausePublic.js new file mode 100644 index 000000000..af5d1acdd --- /dev/null +++ b/public/react/src/modules/courses/coursesPublic/ApprausePublic.js @@ -0,0 +1,167 @@ +import React,{ Component } from "react"; +import { Modal,Checkbox,Upload,Button,Icon,message,Input,Radio} from "antd"; +import { WordNumberTextarea } from 'educoder'; + + +class ApprausePublic extends Component{ + constructor(props){ + super(props); + this.state={ + group_ids:[], + fileList:[], + Inputsval:undefined, + textareavaltype:false, + comment:undefined, + hidden_comment:undefined + } + } + + componentDidMount() { + + + } + + comment=(e)=>{ + this.setState({ + comment:e.target.value + }) + this.hideentyps(e.target.value) + } + + hideentyps=(value)=>{ + if(value===undefined||value===null||value===""){ + + }else{ + this.setState({ + textareavaltype:false + }) + } + } + hidden_comment=(e)=>{ + this.setState({ + hidden_comment:e.target.value + }) + this.hideentyps(e.target.value) + } + + Saves=()=>{ + let{comment,hidden_comment}=this.state; + let commenttype=comment===undefined||comment===null||comment===""; + let hidden_commenttype=hidden_comment===undefined||hidden_comment===null||hidden_comment===""; + + if(commenttype===true&&hidden_commenttype===true){ + this.setState({ + textareavaltype:true + }) + return + } + this.props.SaveAppraiseModal(this.state.comment,this.state.hidden_comment); + } + render(){ + let {textareavaltype,comment,hidden_comment}=this.state; + return( + <div> + + <style> + { + ` + @media (max-width: 2000px) { + .WordNumberTextarea{ + height: 130px !important; + } + } + + @media (max-width: 1350px) { + .HomeworkModal{ + top:10px !important; + } + .WordNumberTextarea{ + height: 80px !important; + } + } + + @media (max-width: 1250px) { + .HomeworkModal{ + top:0px !important; + } + + .WordNumberTextarea{ + height: 40px !important; + } + } + + ` + } + </style> + <Modal + keyboard={false} + className={"HomeworkModal"} + title={this.props.ApprausePublicName||"一键评阅"} + visible={this.props.visible} + closable={false} + footer={null} + destroyOnClose={true} + > + + <div className={"pd015"}> + <style> + { + ` + .pd015 { + padding: 0px 15px 15px 7px; + } + .font{ + font-size: 14px; + font-weight: 400; + color: rgba(5,16,26,1); + } + .newfont{ + height: 16px; + font-size: 16px; + font-weight: 400; + color: rgba(5,16,26,1); + line-height: 16px; + margin-bottom: 5px; + } + ` + } + </style> + <div className="clearfix"> + <p className={"font mb10 ml10"}> + 可见(学生可查看老师的评阅内容) + </p> + {/*<Radio.Group onChange={this.onChanges} value={this.state.valuetype}>*/} + {/*<Radio value={0} style={radioStyle} className={"newfont"}>可见 (学生查看老师的评阅内容)</Radio>*/} + {/*<Radio value={1} style={radioStyle} className={"newfont"}>不可见 (仅对课堂老师可见)</Radio>*/} + {/*</Radio.Group>*/} + <WordNumberTextarea + placeholder={"请填写评阅内容"} + onInput={(e)=>this.comment(e)} + value={comment} + maxlength={500} + /> + + <p className={"font mt10 mb10 ml10"}> + 不可见(仅对课堂老师可见) + </p> + <WordNumberTextarea + placeholder={"请填写评阅内容"} + onInput={(e)=>this.hidden_comment(e)} + value={hidden_comment} + maxlength={500} + /> + + <li style={{height:"20px",lineHeight:"20px"}} className={textareavaltype===true?"color-red mt5 mb10 ml10":"none"}><span>评阅内容至少有一个不为空</span></li> + </div> + + <div className={textareavaltype===false?"mt20 clearfix edu-txt-center":"clearfix edu-txt-center"}> + <a className="task-btn color-white mr30" onClick={()=>this.props.Cancel()}>{this.props.Cancelname || '取消'}</a> + <a className="task-btn task-btn-orange" onClick={()=>this.Saves()}>{this.props.Savesname || '确定'}</a> + </div> + </div> + </Modal> + </div> + ) + } +} +export default ApprausePublic; \ No newline at end of file diff --git a/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css b/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css index 9bdf44e68..326548202 100644 --- a/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css +++ b/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css @@ -308,7 +308,7 @@ backgroud: rgba(234, 234, 234, 1); width: 530px; margin-left: 10px; - margin-top: 25px; + margin-top: 5px; height: 214px !important; } diff --git a/public/react/src/modules/courses/poll/PollDetailTabForth.js b/public/react/src/modules/courses/poll/PollDetailTabForth.js index 1af04bebe..485cdc07c 100644 --- a/public/react/src/modules/courses/poll/PollDetailTabForth.js +++ b/public/react/src/modules/courses/poll/PollDetailTabForth.js @@ -116,6 +116,7 @@ class PollDetailTabForth extends Component{ let url=`/polls/${pollId}/poll_setting.json`; axios.get(url).then((result)=>{ if(result){ + this.props.getPollInfo(); this.setState({ polls:result.data.poll, unitSetting:result.data.poll.unified_setting, diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 438df7b05..e1c55625a 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -1294,11 +1294,11 @@ class Listofworksstudentone extends Component { record.submitstate === "未开启" ? <a style={{textAlign: "center",width: '40px'}} className="color-blue" onMouseDown={(e) => this.Viewstudenttraininginformationtysl2(e, record)} - onClick={() => this.Viewstudenttraininginformationt(record)}>评阅</a> : + onClick={() => this.Viewstudenttraininginformationt(record)}>{record.has_comment===false?"评阅":"详情"}</a> : <span> <a style={{textAlign: "center"}} className="color-blue maxnamewidth120" onMouseDown={(e) => this.Viewstudenttraininginformationtysl2(e, record)} - onClick={() => this.Viewstudenttraininginformationt(record)}>评阅</a> + onClick={() => this.Viewstudenttraininginformationt(record)}>{record.has_comment===false?"评阅":"详情"}</a> </span> ) }, @@ -1656,11 +1656,11 @@ class Listofworksstudentone extends Component { record.submitstate === "未开启" ? <a style={{textAlign: "center",width: '40px'}} className="color-blue" onMouseDown={(e) => this.Viewstudenttraininginformationtysl2(e, record)} - onClick={() => this.Viewstudenttraininginformationt(record)}>评阅</a> : + onClick={() => this.Viewstudenttraininginformationt(record)}>{record.has_comment===false?"评阅":"详情"}</a> : <span> <a style={{textAlign: "center"}} className="color-blue" onMouseDown={(e) => this.Viewstudenttraininginformationtysl2(e, record)} - onClick={() => this.Viewstudenttraininginformationt(record)}>评阅</a> + onClick={() => this.Viewstudenttraininginformationt(record)}>{record.has_comment===false?"评阅":"详情"}</a> </span> ) }, @@ -1886,7 +1886,12 @@ class Listofworksstudentone extends Component { console.log(error); }) } - + AkeyreviewitGetalistofworkstwo=()=>{ + this.setState({ + loadingstate: true, + }) + this.Getalistofworkstwo("", "", "", "", 1, 20); + } // 获取作品列表 Getalistofworkstwo = (ordervlue, checkedValuesine, checkedValuesineinfo, searchtext, page, limit) => { // console.log("获取作品列表");222222222222 @@ -2075,6 +2080,7 @@ class Listofworksstudentone extends Component { stduynumber: teacherdata.student_id, classroom: teacherdata.group_name, cost_time: teacherdata.cost_time, + has_comment:teacherdata.has_comment, submitstate: teacherdata.work_status === 0 ? "未开启" : teacherdata.work_status === 1 ? "未通关" : teacherdata.work_status === 2 ? "按时通关" : "迟交通关", // updatetime:this.state.teacherdata.student_works[i].update_time, // updatetime:"", @@ -2119,6 +2125,7 @@ class Listofworksstudentone extends Component { stduynumber: student_works[i].student_id, classroom: student_works[i].group_name, cost_time: student_works[i].cost_time, + has_comment:teacherdata[i].has_comment, submitstate: student_works[i].work_status === 0 ? "未开启" : student_works[i].work_status === 1 ? "未通关" : student_works[i].work_status === 2 ? "按时通关" : "迟交通关", // updatetime:this.state.teacherdata.student_works[i].update_time, // updatetime:"", @@ -2280,6 +2287,7 @@ class Listofworksstudentone extends Component { stduynumber: teacherdata.student_id, classroom: teacherdata.group_name, cost_time: teacherdata.cost_time, + has_comment:teacherdata.has_comment, submitstate: teacherdata.work_status === 0 ? "未开启" : teacherdata.work_status === 1 ? "未通关" : teacherdata.work_status === 2 ? "按时通关" : "迟交通关", // updatetime:this.state.teacherdata.student_works[i].update_time, // updatetime:"", @@ -2642,6 +2650,7 @@ class Listofworksstudentone extends Component { stduynumber: student_works[i].student_id, classroom: student_works[i].group_name, cost_time: student_works[i].cost_time, + has_comment:teacherdata[i].has_comment, submitstate: student_works[i].work_status === 0 ? "未开启" : student_works[i].work_status === 1 ? "未通关" : student_works[i].work_status === 2 ? "按时通关" : "迟交通关", // updatetime:this.state.teacherdata.student_works[i].update_time, // updatetime:"", diff --git a/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js b/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js index d4ccb2af9..ca31f9fc8 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js @@ -6,18 +6,20 @@ import { notification, Spin } from "antd"; -import '../css/members.css'; -import "../common/formCommon.css"; -import '../css/Courses.css'; -import './style.css'; -import '../css/busyWork.css'; -import '../poll/pollStyle.css'; +import ApprausePublic from "../coursesPublic/ApprausePublic"; import Listofworksstudentone from './Listofworksstudentone'; import Trainingjobsetting from './Trainingjobsetting'; import Workquestionandanswer from './Workquestionandanswer'; import CoursesListType from '../coursesPublic/CoursesListType'; import ShixunStudentWork from "./ShixunStudentWork"; import Startshixuntask from "../coursesPublic/Startshixuntask"; +import '../css/members.css'; +import "../common/formCommon.css"; +import '../css/Courses.css'; +import './style.css'; +import '../css/busyWork.css'; +import '../poll/pollStyle.css'; + import TPMMDEditor from "../../tpm/challengesnew/TPMMDEditor"; import DownloadMessageysl from "../../modals/DownloadMessageysl"; @@ -41,6 +43,7 @@ class ShixunHomeworkPage extends Component { ModalsType:false, mylistisSpin:false, Showupdateinstructions:false, + AppraiseModaltype:false } } @@ -189,8 +192,41 @@ class ShixunHomeworkPage extends Component { this.props.history.replace(`/courses/${this.props.match.params.coursesId}/${jobsettingsdatapage === undefined ? "" : jobsettingsdatapage.data.category.main === 1 ? "shixun_homeworks" :"shixun_homework"}/${jobsettingsdatapage === undefined ? "" : jobsettingsdatapage.data.category.category_id === undefined ? "" : jobsettingsdatapage.data.category.category_id}`); } + + Akeyreviewit=()=>{ + this.setState({ + AppraiseModaltype:true + }) + } + + hideAppraiseModaltype=()=>{ + this.setState({ + AppraiseModaltype:false + }) + } + + SaveAppraiseModal=(comment,hidden_comment)=>{ + let url = `/homework_commons/${this.props.match.params.homeworkid}/batch_comment.jsonr` + axios.post(url,{ + comment: comment, + hidden_comment: hidden_comment, + } + ) + .then((response) => { + if (response.data.status == 0) { + this.props.showNotification('一键评阅成功') + this.hideAppraiseModaltype() + this.child.AkeyreviewitGetalistofworkstwo() + } else { + + } + }) + .catch( (error) =>{ + + }); + } render() { - let {tab, teacherdatapage, jobsettingsdatapage} = this.state; + let {tab, teacherdatapage, jobsettingsdatapage,AppraiseModaltype} = this.state; const isAdmin = this.props.isAdmin(); // console.log(119) @@ -207,6 +243,17 @@ class ShixunHomeworkPage extends Component { loadtype={false} > </Modals> + + {AppraiseModaltype===true?<ApprausePublic + {...this.props} + {...this.state} + ApprausePublicName={"一键评阅"} + visible={AppraiseModaltype} + Cancel={()=>this.hideAppraiseModaltype()} + SaveAppraiseModal={(comment,hidden_comment)=>this.SaveAppraiseModal(comment,hidden_comment)} + />:""} + + <div className={"educontent mt10 mb20"} style={{width: "1200px"}}> <Spin size="large" spinning={this.state.mylistisSpin}> { @@ -313,10 +360,17 @@ class ShixunHomeworkPage extends Component { <a className="fr color-blue font-16" onClick={(child)=>this.homeworkstarts(this.child)}>立即发布</a> : "" : ""} + {this.props.isAdmin() ? teacherdatapage && teacherdatapage.code_review === true ? <a className="fr color-blue font-16" onClick={(child)=>this.workshowmodels(this.child)}>代码查重</a> : "" : ""} + + {parseInt(tab) === 0 ?this.props.isAdmin() ? + jobsettingsdatapage === undefined ? [""] : jobsettingsdatapage.data.homework_status[0] === "未发布" ? "" : + <a className="fr color-blue font-16" onClick={()=>this.Akeyreviewit()}>一键评阅</a> + : "":""} + { parseInt(tab)===1? this.props.isAdmin() ? diff --git a/public/react/src/modules/tpm/newshixuns/css/Newshixuns.css b/public/react/src/modules/tpm/newshixuns/css/Newshixuns.css index 9a85f33d4..003002749 100644 --- a/public/react/src/modules/tpm/newshixuns/css/Newshixuns.css +++ b/public/react/src/modules/tpm/newshixuns/css/Newshixuns.css @@ -733,7 +733,7 @@ a.white-btn.use_scope-btn:hover{ backgroud: rgba(234, 234, 234, 1); width: 530px; margin-left: 10px; - margin-top: 25px; + margin-top: 5px; height: 214px !important; } From 7e2186ec48d9d3cef78a599e9ce433ba5202f141 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 31 Dec 2019 16:23:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=97=AE=E5=8D=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=9A=84=E7=8A=B6=E6=80=81=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/polls_controller.rb | 4 ++-- app/models/poll.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index 2539403af..08d0da42f 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -46,8 +46,8 @@ class PollsController < ApplicationController @polls = member_show_polls.size > 0 ? member_show_polls.public_or_unset : [] else #已分班级的成员,可以查看统一设置和单独设置(试卷是发布在该班级)试卷 # 已发布 当前用户班级分组的 试卷id - not_poll_ids = @course.poll_group_settings.poll_group_not_published.where("course_group_id = #{@member_group_id}").pluck(:poll_id) - @polls = member_show_polls.where.not(id: not_poll_ids) + publish_poll_ids = @course.poll_group_settings.poll_group_published.where("course_group_id = #{@member_group_id}").pluck(:poll_id) + @polls = member_show_polls.unified_setting.or(member_show_polls.where(id: publish_poll_ids)) end else #用户未登陆或不是该课堂成员,仅显示统一设置的(已发布的/已截止的),如有公开,则不显示锁,不公开,则显示锁 @is_teacher_or = 0 diff --git a/app/models/poll.rb b/app/models/poll.rb index 0ea76a8a3..365e46008 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -19,6 +19,7 @@ class Poll < ApplicationRecord scope :poll_by_ids, lambda { |ids| where(id: ids) unless ids.blank? } scope :poll_by_status, lambda { |s| where(polls_status: s) unless s.blank? } scope :poll_group_ended, -> {where("end_time is NOT NULL AND end_time <= ?",Time.now)} + scope :unified_setting, -> { where("unified_setting = ?",true) } scope :poll_search, lambda { |keywords| where("polls_name LIKE ?", "%#{keywords}%") unless keywords.blank?}