dev_forum
cxt 5 years ago
commit 5631047dd6

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

@ -1,10 +1,10 @@
module SubjectsHelper module SubjectsHelper
# 实训路径的发布状态 # 实训路径的发布状态
def publish_status subject, is_manager, user def publish_status subject, is_manager, user, shixuns
status = -1 status = -1
if is_manager 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 = 1 if subject.status == 1
status = 2 if subject.status == 2 && user.admin? status = 2 if subject.status == 2 && user.admin?
end end

@ -7,7 +7,7 @@ json.group_list do
end end
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) ungroup_work_count = homework_ungroup_works_count(@homework, @ungroup_user_ids)
if ungroup_work_count > 0 if ungroup_work_count > 0
json.ungroup_list do json.ungroup_list do

@ -6,7 +6,7 @@ json.subject_score @subject.all_score
json.member_count @subject.member_count json.member_count @subject.member_count
json.allow_delete @is_creator && (@subject.status != 2 || @user.admin?) 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_statistics @user.manager_of_subject?(@subject)
json.allow_send @user.logged? json.allow_send @user.logged?
json.allow_visit @user.manager_of_subject?(@subject) || @user.admin? || @subject.status > 1 json.allow_visit @user.manager_of_subject?(@subject) || @user.admin? || @subject.status > 1

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

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

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

@ -1,6 +1,6 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import {getImageUrl} from 'educoder'; import {getImageUrl} from 'educoder';
import CoursesHomeCard from "./coursesHomeCard.js" import CoursesHomeCard from "./CoursesHomeCard.js"
import axios from 'axios'; import axios from 'axios';
import {Input,Tooltip} from 'antd'; import {Input,Tooltip} from 'antd';
import UpgradeModals from '../../modals/UpgradeModals'; import UpgradeModals from '../../modals/UpgradeModals';
@ -10,7 +10,7 @@ import '@icedesign/base/lib/pagination/style.js';
const Search = Input.Search; const Search = Input.Search;
class coursesHome extends Component{ class CoursesHome extends Component{
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { 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} />*/} // {/*<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 {Tooltip,Spin,Alert} from 'antd';
import ShowSpin from '../../../common/ShowSpin'; import ShowSpin from '../../../common/ShowSpin';
class coursesHomeCard extends Component{ class CoursesHomeCard extends Component{
constructor(props) { constructor(props) {
super(props) super(props)
} }
@ -134,5 +134,5 @@ class coursesHomeCard extends Component{
) )
} }
} }
export default coursesHomeCard; export default CoursesHomeCard;

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

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

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

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

@ -1,6 +1,7 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import { Modal,Checkbox,notification} from "antd"; import { Modal,Checkbox,notification} from "antd";
import axios from 'axios'; import axios from 'axios';
import {getImageUrl} from 'educoder';
class ShixunWorkModal extends Component{ class ShixunWorkModal extends Component{
constructor(props){ constructor(props){
@ -251,6 +252,18 @@ class ShixunWorkModal extends Component{
</ul> </ul>
{course_groups===undefined?"": {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" <ul className="upload_select_box fl clearfix mt10 mb10" tyle={{"overflow-y":"auto"}}id="search_not_members_list"
onScroll={this.contentViewScroll} onScroll={this.contentViewScroll}
> >
@ -258,7 +271,9 @@ class ShixunWorkModal extends Component{
<Checkbox.Group style={{ width: '100%' }} onChange={this.shixunhomeworkedit} value={group_ids}> <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)=>{ group_list&&group_list.length===0?"":group_list.map((item,key)=>{
return( return(
<div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}> <div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}>

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

@ -2,6 +2,7 @@ import React,{ Component } from "react";
import { Modal,Radio,Input,Tooltip,Checkbox,Select, Row,Col } from "antd"; import { Modal,Radio,Input,Tooltip,Checkbox,Select, Row,Col } from "antd";
import axios from 'axios'; import axios from 'axios';
import { SnackbarHOC } from 'educoder'; import { SnackbarHOC } from 'educoder';
import moment from 'moment';
import Modals from '../../modals/Modals'; import Modals from '../../modals/Modals';
const Option = Select.Option; const Option = Select.Option;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
@ -148,14 +149,16 @@ class sendPanel extends Component{
destroyOnClose={true} destroyOnClose={true}
> >
<div className="newupload_conbox"> <div className="newupload_conbox">
<div className="mb20" onMouseLeave={this.closeList}> <div className="mb20"
// onMouseLeave={this.closeList}
>
<Select <Select
placeholder="请选择您要发送的课堂" placeholder="请选择您要发送的课堂"
style={{"width":"100%"}} style={{"width":"100%"}}
onSelect={this.selectCloseList} onSelect={this.selectCloseList}
onMouseEnter={this.openList} // onMouseEnter={this.openList}
defaultOpen={false} defaultOpen={false}
open={openSearch} // open={openSearch}
optionLabelProp="name" optionLabelProp="name"
> >
{ {
@ -164,7 +167,9 @@ class sendPanel extends Component{
<Option key={item.course_id} id={key} name={item.course_name}> <Option key={item.course_id} id={key} name={item.course_name}>
<Row> <Row>
<Col className="fl with70 task-hide">{item.course_name}</Col> <Col className="fl with70 task-hide">{item.course_name}</Col>
<Col className="fl color-grey-9 with30 edu-txt-center">{item.created_at}</Col> <Col className="fl color-grey-9 with30 edu-txt-center">
{moment( item.created_at ).format('YYYY-MM-DD HH:mm')}
</Col>
</Row> </Row>
</Option> </Option>
) )

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

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

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

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

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

Loading…
Cancel
Save