杨树林 5 years ago
commit 5ba07d6feb

@ -14,7 +14,7 @@ class AttachmentsController < ApplicationController
update_downloads(@file)
redirect_to @file.cloud_url and return
end
send_file absolute_path(local_path(@file)), type: @file.content_type.presence || 'application/octet-stream'
send_file(absolute_path(local_path(@file)), filename: @file.filename, type: @file.content_type.presence || 'application/octet-stream')
update_downloads(@file)
end
@ -100,7 +100,7 @@ class AttachmentsController < ApplicationController
def current_month_folder
date = Time.now
"#{date.year}/#{date.day.to_s.rjust(2, '0')}"
"#{date.year}/#{date.month.to_s.rjust(2, '0')}"
end
def file_ext(file_name)

@ -12,9 +12,9 @@ class CoursesController < ApplicationController
end
before_action :require_login, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups,
:left_banner, :top_banner, :apply_to_join_course]
before_action :check_auth, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups,
:left_banner, :top_banner]
before_action :check_auth, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups,
:left_banner, :top_banner, :apply_to_join_course]
before_action :set_course, :user_course_identity, only: [:show, :update, :destroy, :settings, :set_invite_code_halt,
:set_public_or_private, :search_teacher_candidate, :teachers, :apply_teachers,
:top_banner, :left_banner, :add_teacher_popup, :add_teacher,
@ -884,11 +884,11 @@ class CoursesController < ApplicationController
end
# 验证是否存在同学号的学生
u_extension = current_user.user_extension
if params[:student].present? && u_extension.student?
same_student_id_users = UserExtension.where.not(user_id: current_user.id).where(student_id: u_extension.student_id, identity: %i[student], school_id: u_extension.school_id).pluck(:user_id)
tip_exception("该课堂已存在同学号的学生,暂时无法加入,请联系老师") if course.students.exists?(user_id: same_student_id_users)
end
# u_extension = current_user.user_extension
# if params[:student].present? && u_extension.student?
# same_student_id_users = UserExtension.where.not(user_id: current_user.id).where(student_id: u_extension.student_id, identity: %i[student], school_id: u_extension.school_id).pluck(:user_id)
# tip_exception("该课堂已存在同学号的学生,暂时无法加入,请联系老师") if course.students.exists?(user_id: same_student_id_users)
# end
# 创建学生身份
if params[:student].present?
@ -906,6 +906,7 @@ class CoursesController < ApplicationController
CourseAddStudentCreateWorksJob.perform_later(course.id, [current_user.id])
StudentJoinCourseNotifyJob.perform_later(current_user.id, course.id)
logger.info("#####################{course.id}")
end
end

@ -206,7 +206,7 @@ class StudentWorksController < ApplicationController
@current_user = current_user
@work_members = @homework.homework_type != "group" ? [] : @homework.student_works.where.not(user_id: @work.user_id).
where(group_id: @work.group_id).includes(:user)
@attachments = @work.attachments.where.not(attachtype: 7)
@attachments = @work.attachments.where("attachtype != 7 or attachtype is null")
end
# 判断项目是否已有其他作品关联上了

@ -82,8 +82,8 @@ class SubjectsController < ApplicationController
@is_creator = current_user.creator_of_subject?(@subject)
# 合作团队
@members = @subject.subject_members.includes(:user)
shixun_ids = @subject.shixuns.published.pluck(:id)
challenge_ids = Challenge.where(shixun_id: shixun_ids).pluck(:id)
@shixuns = @subject.shixuns.published.pluck(:id)
challenge_ids = Challenge.where(shixun_id: @shixuns).pluck(:id)
# 实训路径中的所有实训标签
@tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq
# 用户获取的实训标签

@ -1,10 +1,10 @@
module SubjectsHelper
# 实训路径的发布状态
def publish_status subject, is_manager, user
def publish_status subject, is_manager, user, shixuns
status = -1
if is_manager
status = 0 if subject.status == 0 && subject.shixuns_count > 0
status = 0 if subject.status == 0 && shixuns.count > 0
status = 1 if subject.status == 1
status = 2 if subject.status == 2 && user.admin?
end

@ -7,7 +7,7 @@ json.group_list do
end
end
# 未分班展示情况放在最后
if @course_groups.count != (@page -1)*@limit.to_i && @course_groups.count < @limit.to_i
if @course_groups.count != (@page.to_i - 1)*@limit.to_i && @course_groups.count < @limit.to_i
ungroup_work_count = homework_ungroup_works_count(@homework, @ungroup_user_ids)
if ungroup_work_count > 0
json.ungroup_list do

@ -1,3 +1,3 @@
json.status 1
json.message "发送成功"
json.url "/homework_commons?course=#{@course.id}&homework_type=4"
json.url module_url(@course.none_hidden_course_modules.first, @course)

@ -6,7 +6,7 @@ json.subject_score @subject.all_score
json.member_count @subject.member_count
json.allow_delete @is_creator && (@subject.status != 2 || @user.admin?)
json.publish_status publish_status(@subject, @is_creator, @user)
json.publish_status publish_status(@subject, @is_creator, @user, @shixuns)
json.allow_statistics @user.manager_of_subject?(@subject)
json.allow_send @user.logged?
json.allow_visit @user.manager_of_subject?(@subject) || @user.admin? || @subject.status > 1

@ -301,8 +301,8 @@ module.exports = {
},
warnings: false,
compress: {
drop_debugger: false,
drop_console: false
drop_debugger: true,
drop_console: true
}
}
}),

@ -6,6 +6,9 @@ export function isImageExtension(fileName) {
export function markdownToHTML(oldContent, selector) {
window.$('#md_div').html('')
// markdown to html
try {
var markdwonParser = window.editormd.markdownToHTML("md_div", {
markdown: oldContent,
emoji: true,
@ -15,6 +18,11 @@ export function markdownToHTML(oldContent, selector) {
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
} catch(e) {
console.error(e)
}
const content = window.$('#md_div').html()
if (selector) {
window.$(selector).html(content)

@ -18,7 +18,7 @@ const ListPageIndex = Loadable({
//课堂首页
const CoursesHome = Loadable({
loader: () => import('./coursesHome/coursesHome'),
loader: () => import('./coursesHome/CoursesHome'),
loading:Loading,
})

@ -1,6 +1,6 @@
import React, { Component } from 'react';
import {getImageUrl} from 'educoder';
import CoursesHomeCard from "./coursesHomeCard.js"
import CoursesHomeCard from "./CoursesHomeCard.js"
import axios from 'axios';
import {Input,Tooltip} from 'antd';
import UpgradeModals from '../../modals/UpgradeModals';
@ -10,7 +10,7 @@ import '@icedesign/base/lib/pagination/style.js';
const Search = Input.Search;
class coursesHome extends Component{
class CoursesHome extends Component{
constructor(props) {
super(props)
this.state = {
@ -160,7 +160,7 @@ class coursesHome extends Component{
)
}
}
export default coursesHome;
export default CoursesHome;
// {/*<Pagination showQuickJumper current={page} pageSize={16} total={coursesHomelist.courses_count} onChange={this.onChange} />*/}

@ -4,7 +4,7 @@ import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import {Tooltip,Spin,Alert} from 'antd';
import ShowSpin from '../../../common/ShowSpin';
class coursesHomeCard extends Component{
class CoursesHomeCard extends Component{
constructor(props) {
super(props)
}
@ -134,5 +134,5 @@ class coursesHomeCard extends Component{
)
}
}
export default coursesHomeCard;
export default CoursesHomeCard;

@ -314,7 +314,7 @@ class Addcourses extends Component{
<label className="panel-form-label fl">课堂邀请码</label>
<Input type="text" className="input-60-40 fl mt5" name="invite_code"
placeholder="请输入5位课堂邀请码或6位分班邀请码"
style={{ height: '30px'}}
style={{width:'275px'}}
value={invite_code} onInput={this.inputjoinclassvalue}/>
</li>

@ -29,12 +29,14 @@ class ShixunModal extends Component{
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.message===undefined){
this.setState({
shixunmodallist:result.data,
hometypepvisible:false,
newshixunmodallist:result.data.shixun_list,
})
}
}
}).catch((error)=>{
console.log(error);
})
@ -59,18 +61,18 @@ class ShixunModal extends Component{
}
}).then((result)=>{
if(result.status===200){
let shixun_list=result.data.shixun_list;
for(var i=0; i<shixun_list.length;i++){
if(result.data.message===undefined){
let shixun_list = result.data.shixun_list;
for (var i = 0; i < shixun_list.length; i++) {
newshixunmodallists.push(shixun_list[i])
}
this.setState({
shixunmodallist:result.data,
newshixunmodallist:newshixunmodallists,
hometypepvisible:false
shixunmodallist: result.data,
newshixunmodallist: newshixunmodallists,
hometypepvisible: false
})
}
}
}).catch((error)=>{

@ -1203,14 +1203,14 @@ class GraduationTaskssettinglist extends Component{
{taskslistdata.search_assistants&&taskslistdata.search_assistants.course_group_info.length!=0?<li className="clearfix">
<span className="fl mr10 color-grey-8">分班情况</span>
<CheckboxGroup value={course_group} onChange={(e)=>this.groupgroup(e,taskslistdata.search_assistants&&taskslistdata.search_assistants.course_group_info.length)} style={{width: '1000px', paddingTop: '4px'}}>
<span className="fl mr25">
<a id="graduation_comment_no_limit" className={course_group===null||course_group===undefined?"pl10 pr10 check_on":"pl10 pr10 "} onClick={()=>this.groupgroup([])}>不限</a>
</span>
<CheckboxGroup value={course_group} onChange={(e)=>this.groupgroup(e,taskslistdata.search_assistants&&taskslistdata.search_assistants.course_group_info.length)} style={{ paddingTop: '4px'}}>
{taskslistdata.search_assistants&&taskslistdata.search_assistants.course_group_info.map((item,key)=>{
return(
<span key={key}>
<span key={key} className={"mt10"}>
<Checkbox value={item.course_group_id} key={item.course_group_id} className="fl ">{item.group_group_name}
<span>({item.count})</span>
</Checkbox>

@ -2490,7 +2490,7 @@ class Listofworksstudentone extends Component {
<div className="mh650 edu-back-white">
<div className="edu-tab-con-box clearfix edu-txt-center">
<img className="edu-nodata-img mb20" src={getImageUrl("images/educoder/nodata.png")}/>
<p className="edu-nodata-p mb30">没有数据可以显示.</p>
<p className="edu-nodata-p mb30">没有数据可以显示</p>
</div>
</div>
@ -2702,7 +2702,7 @@ class Listofworksstudentone extends Component {
<div className="edu-tab-con-box clearfix edu-txt-center">
<img className="edu-nodata-img mb20"
src={getImageUrl("images/educoder/nodata.png")}/>
<p className="edu-nodata-p mb30">没有数据可以显示,,</p>
<p className="edu-nodata-p mb30">没有数据可以显示</p>
</div>
</div>
@ -2892,7 +2892,7 @@ class Listofworksstudentone extends Component {
<div className="edu-tab-con-box clearfix edu-txt-center">
<img className="edu-nodata-img mb20"
src={getImageUrl("images/educoder/nodata.png")}/>
<p className="edu-nodata-p mb30">没有数据可以显示..</p>
<p className="edu-nodata-p mb30">没有数据可以显示</p>
</div>
</div>

@ -59,15 +59,15 @@ class ShixunHomeworkPage extends Component {
// console.log(teacherdata);
this.setState({
jobsettingsdatapage: jobsettingsdata,
teacherdatapage: teacherdata,
code_review: teacherdata.code_review,
view_report: teacherdata.view_report,
jobsettingsdatapage: jobsettingsdata.data.message!==undefined?undefined:jobsettingsdata,
teacherdatapage: teacherdata.message!==undefined?undefined:teacherdata,
code_review: teacherdata.code_review!==undefined?teacherdata.code_review :false,
view_report: teacherdata.view_report!==undefined? teacherdata.view_report:false,
})
}
componentDidMount() {
console.log("父组件加载框");
// console.log("父组件加载框");
const query = this.props.location.search;
const type = query.split('?tab=');
// let sum = []
@ -116,7 +116,9 @@ class ShixunHomeworkPage extends Component {
let {tab, teacherdatapage, jobsettingsdatapage} = this.state;
const isAdmin = this.props.isAdmin();
// console.log(119)
// console.log(jobsettingsdatapage);
// console.log(teacherdatapage);
return (
<div className="newMain clearfix ">
<div className={"educontent mb20"} style={{width: "1200px"}}>

@ -1,6 +1,7 @@
import React,{ Component } from "react";
import { Modal,Checkbox,notification} from "antd";
import axios from 'axios';
import {getImageUrl} from 'educoder';
class ShixunWorkModal extends Component{
constructor(props){
@ -251,6 +252,18 @@ class ShixunWorkModal extends Component{
</ul>
{course_groups===undefined?"":
group_list===undefined||JSON.stringify(group_list)==="[]"
?
<div id="forum_list" className="forum_table">
<div className=" edu-back-white">
<div className="edu-tab-con-box clearfix edu-txt-center">
<img className="edu-nodata-img mb20" src={getImageUrl("images/educoder/nodata.png")}/>
<p className="edu-nodata-p mb30">没有数据可以显示</p>
</div>
</div>
</div>
:
<ul className="upload_select_box fl clearfix mt10 mb10" tyle={{"overflow-y":"auto"}}id="search_not_members_list"
onScroll={this.contentViewScroll}
>
@ -258,7 +271,9 @@ class ShixunWorkModal extends Component{
<Checkbox.Group style={{ width: '100%' }} onChange={this.shixunhomeworkedit} value={group_ids}>
{
group_list===undefined?"":
group_list===undefined||JSON.stringify(group_list)==="[]"?
""
:
group_list&&group_list.length===0?"":group_list.map((item,key)=>{
return(
<div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}>

@ -317,15 +317,18 @@ class LoginDialog extends Component {
});
}
handleDialogClose = () => {
if(this.props.match===undefined){
window.location.href="/";
}else if(this.props.match.path==="/"){
// if(this.props.match===undefined){
// window.location.href="/";
// }else if(this.props.match.path==="/"){
// this.setState({
// isRender: false
// })
// }else{
// window.location.href="/";
// }
this.setState({
isRender: false
})
}else{
window.location.href="/";
}
}
loginEDU=()=>{

@ -59,7 +59,8 @@ class DetailCardsEditAndAdd extends Component{
AddShixunBox = () =>{
this.setState({
selectShixun:true,
patheditarry:[]
patheditarry:[],
page:1
})
this.changeTag(0,"");
}
@ -68,6 +69,7 @@ class DetailCardsEditAndAdd extends Component{
cloasShixunBox =()=>{
this.setState({
selectShixun:false,
page:1,
patheditarry:[]
})
}
@ -103,7 +105,8 @@ class DetailCardsEditAndAdd extends Component{
shixuns_listedit:newshixuns_listedit,
shixuns_listeditlist:list,
patheditarry:[],
selectShixun:false
selectShixun:false,
page:1,
})
}).catch((error) => {
console.log(error)
@ -140,19 +143,25 @@ class DetailCardsEditAndAdd extends Component{
//打开选择实训弹框初始化tag标签和列表
changeTag=(id,search)=>{
this.setState({
hometypepvisible:true
hometypepvisible:true,
})
let pathId=this.props.pathid;
let {page}=this.state;
let url='/paths/'+pathId+'/choose_subject_shixun.json?page='+page
let url='/paths/'+pathId+'/choose_subject_shixun.json?page='+1
if(search!="" && search!=undefined){
url+="&search="+search;
}
if(id!=0){
url+="&type="+id;
}
axios.get(url).then((result)=>{
if(result.status===200){
this.setState({
ChooseShixunListshixun_list:[],
page:1
})
this.setState({
ChooseShixunList:result.data,
hometypepvisible:false,
@ -287,10 +296,11 @@ class DetailCardsEditAndAdd extends Component{
contentViewScrolladd=(e)=>{
let {page}=this.state;
//滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
// console.log("到达底部");
if(page!=1){
this.setState({
hometypepvisible:true
})
@ -327,6 +337,8 @@ class DetailCardsEditAndAdd extends Component{
}
}
}
onDragEnd (result) {
let {shixuns_listedit,shixuns_listeditlist} =this.state;

@ -534,10 +534,10 @@ submittojoinclass=(value)=>{
<div className="newHeader" id="nHeader" >
<LoginDialog
{...this.state}
{...this.props}
/>
{/*<LoginDialog*/}
{/*{...this.state}*/}
{/*{...this.props}*/}
{/*/>*/}
<div className="educontent clearfix">
{/*<%= link_to image_tag("/images/educoder/logo.png", alt:"高校智能化教学与实训平台", className:"logoimg"), home_path %>*/}
@ -737,13 +737,14 @@ submittojoinclass=(value)=>{
<ul>
<li className="clearfix mb10">
<label className="panel-form-label fl">项目邀请码</label>
<Input type="text" className="input-60-40 fl" name="invite_code"
placeholder="请输入5位课堂邀请码或6位分班邀请码" value={tojoinclasstitle} onInput={this.inputjoinclassvalue}/>
<Input type="text" className="input-60-40 fl mt5" name="invite_code"
style={{width: '275px'}}
placeholder="请输入5位项目邀请码或6位分班邀请码" value={tojoinclasstitle} onInput={this.inputjoinclassvalue}/>
</li>
<p id="none_invite_code_notice"
className="color-orange none f12"
style={{marginLeft: '90px',display:code_notice===true?'block':"none"}}>请输入5位课堂邀请码或6位分班邀请码</p>
style={{marginLeft: '90px',display:code_notice===true?'block':"none"}}>请输入5位项目邀请码或6位分班邀请码</p>
<li className="clearfix ">

@ -597,7 +597,7 @@ class TPMBanner extends Component {
</ul>
<div className="pr fl" id="commentsStar">
<div className={"color-grey-c mb11"} style={{color: "#Fff",textAlign: "center"}}>学员评分</div>
<div className="rateYo">
<Rating value={star_info[0]} disabled allowHalf/>
</div>

@ -236,9 +236,7 @@ class Newshixuns extends Component {
let newshixunUrl = `/shixuns/new.json`;
axios.get(newshixunUrl).then((response) => {
if (response.status === 200) {
if (response.data.status === 403 || response.data.status === 401 || response.data.status === 500) {
} else {
if (response.data.message===undefined) {
this.setState({
newshixunlist: response.data
});

@ -470,11 +470,10 @@ class Challenges extends Component {
</span>
</div>
<div className="clearfix pl28">
<span className="task-colspan">{item.passed_count}&nbsp;人完成挑战</span>
<span className="task-colspan"><span className={"color-orange"}>{item.passed_count}</span>&nbsp;</span>
<span
className="task-colspan">{item.playing_count}&nbsp;人正在挑战</span>
<span className="task-colspan"><span
className="colspan-grey">经验值&nbsp;{item.score}</span></span>
className="task-colspan"><span className={"color-orange"}>{item.playing_count}</span>&nbsp;</span>
<span className="task-colspan"><span>完成挑战可获得经验值&nbsp;<span className={"color-orange"}>{item.score}</span></span></span>
{/*判断比较复杂 有排第一不能是灰色按钮*/}

@ -85,7 +85,9 @@ a:active{text-decoration:none;}
height: 39px !important;
}
#commentsStar{
margin-top:33px;
margin-top: -7px;
width: 90px;
}
.startbtnModal .ant-modal-content{
background: transparent;

Loading…
Cancel
Save