chromesetting
杨树明 5 years ago
parent 270ccba3fd
commit 45b63bdb79

@ -41,7 +41,9 @@ json.top do
json.old_url @old_domain
# 云上实验室管理权限
json.laboratory_user current_laboratory.laboratory_users.exists?(user_id: @user&.id) || @user&.admin_or_business?
laboratory_user = current_laboratory.laboratory_users.exists?(user_id: @user&.id) || @user&.admin_or_business?
json.laboratory_user laboratory_user
json.laboratory_admin_url laboratory_user ? "/cooperative" : nil
end
json.down do

@ -45,11 +45,13 @@ class College extends Component {
align: 'center',
className: "edu-txt-center font-14 maxnamewidth340",
render: (text, record) => (
<span className="maxnamewidth340">
<a className="maxnamewidth340" title={record.teachers} style={{
color:'#05101A'
}}>
{
record.teachers
}
</span>
</a >
)
},
{

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-12-04 08:36:21
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-10 18:55:02
* @LastEditTime: 2019-12-20 10:38:00
*/
import './index.scss';
import React, { useState, useEffect } from 'react';
@ -79,7 +79,7 @@ function RecordDetail (props) {
</div>
<div className="detail_ctx_status">
<span className="status_label">
状态: <span className="status_label_error">{reviewResult[detail.status]}</span>
状态: <span className={detail.status === 0 ? 'status_label_success' : 'status_label_error'}>{reviewResult[detail.status]}</span>
</span>
<span className="status_label">
提交时间: <span className="status_label_sub">
@ -89,6 +89,7 @@ function RecordDetail (props) {
<span className="status_label">
语言: <span className="status_label_sub">C</span>
</span>
{/* <span className> */}
</div>
<div className="result_error_area">
<ErrorResult detail={detail}/>

@ -1218,7 +1218,7 @@ submittojoinclass=(value)=>{
}
{
this.props.Headertop && this.props.Headertop.laboratory_user &&
<li><a href="/cooperative">后台管理</a></li>
<li><a href={this.props.Headertop.laboratory_admin_url}>后台管理</a></li>
}
<li><a href={`/account/profile`}>账号管理</a></li>

@ -866,6 +866,8 @@ class TPMBanner extends Component {
</li>
</ul>
{
this.props.is_jupyter===true?"":
<Popover placement="right" content={
<div style={{"width": "530px"}} >
@ -930,7 +932,7 @@ class TPMBanner extends Component {
</div>
</Popover>
}
{
@ -1014,8 +1016,8 @@ class TPMBanner extends Component {
<Popover
content={
<pre className={"bannerpd201"}>
<div>您编辑完成后可以马上使用到自</div>
<div className={"wechatcenter mt10"}>己的课堂和实训课程</div>
<div>点击发布后可以马上应用到自</div>
<div className={"wechatcenter mt10"}>己的课堂和课程</div>
<div className={"wechatcenter mt15"}><Button type="primary" onClick={this.openknow} >我知道了</Button></div>
</pre>
}

@ -461,7 +461,7 @@ class TPMDataset extends Component {
const uploadProps = {
width: 600,
fileList,
multiple: false,
multiple: true,
//multiple 是否支持多选 查重的时候不能多选 不然弹许多框出来
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。

@ -10,8 +10,6 @@ import { Modal, Spin, Tooltip ,message,Icon,Button,Divider} from 'antd';
import axios from 'axios';
import 'antd/lib/pagination/style/index.css';
import '../shixunchildCss/Challenges.css';
import AccountProfile from"../../../user/AccountProfile";
@ -74,34 +72,49 @@ class Challenges extends Component {
if(box){
boxoffsetHeigh=box.offsetHeight
if(boxoffsetHeigh<ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?160:300){
debugger
if(ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined){
}else{
if(this.state.isopentitletype==="greater"){
}else{
if(boxoffsetHeigh>=300){
this.setState({
isopentitletype:"Less",
opentitletype:true,
isopentitletype:"greater",
boxoffsetHeigh:boxoffsetHeigh
})
}else{
debugger
this.setState({
opentitletype:true,
isopentitletype:"greater",
isopentitletype:"Less",
boxoffsetHeigh:boxoffsetHeigh
})
}
console.log(boxoffsetHeigh)
}
}
}
}
componentDidMount() {
if(this.state.isopentitletype==="greater"){
}else {
this.ChallengesList()
}
}
componentDidUpdate = (prevProps,prevState) => {
//防止陷入无限循环
if(prevState.ChallengesDataList!=this.state.ChallengesDataList){
if(this.state.isopentitletype==="greater"){
}else{
this.getjianjiesize()
}
}
}
updatamakedown = (id) => {
@ -341,7 +354,6 @@ class Challenges extends Component {
opentitle=()=>{
this.setState({
opentitletype:!this.state.opentitletype,
isopentitletype:!this.state.opentitletype===false?"Less":"greater"
})
}
@ -423,36 +435,52 @@ class Challenges extends Component {
this.props.identity < 5?<a className="fr font-14 color-blue mr20" href="/forums/2943"
target="_blank">实训制作指南</a> : "":""}
</div>
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?this.state.opentitletype===true?<style>
<div>
<div className={"pd20"} id={"shixunchallengesid"}>
<style>
{
`
#shixunchallengesid{
max-height: 300px;
overflow: hidden;
.editormd-html-preview, .editormd-preview-container {
width: 100% !important;
}
`
}
</style>
<style>
{
`
.markdown-body img{
min-height: 200px;
}
</style>:"":<style>
`
}
</style>
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?<style>
{
`
#shixunchallengesid{
max-height: 160px;
max-height: 300px;
overflow: hidden;
}
`
}
</style>}
<div>
<div className={"pd20"} id={"shixunchallengesid"}>
</style>:""}
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?"":this.state.isopentitletype==="greater"&&this.state.opentitletype===true?
<style>
{
`
.editormd-html-preview, .editormd-preview-container {
width: 100% !important;
#shixunchallengesid{
max-height:260px;
overflow: hidden;
}
`
}
</style>
</style>:""}
<div className="justify break_full_word new_li "
id="challenge_editorMd_description">
@ -471,7 +499,7 @@ class Challenges extends Component {
</div>
</div>
{this.state.isopentitletype==="Less"&&this.state.opentitletype===false?<Divider dashed={true} onClick={()=>this.opentitle()} className={"pointer Breadcrumbfont color-grey-9 "}>
{this.state.isopentitletype==="Less"?"":this.state.opentitletype===true?<Divider dashed={true} onClick={()=>this.opentitle()} className={"pointer Breadcrumbfont color-grey-9 "}>
<a className={"font-14 color-grey-9"}>阅读全文 <i className={"iconfont icon-jiantou9 font-14"}></i></a>
</Divider>:<Divider dashed={true} onClick={()=>this.opentitle()} className={"pointer Breadcrumbfont color-grey-9 "}>
<a className={"font-14 color-grey-9"}>收起全文 <i className={"iconfont icon-changyongtubiao-xianxingdaochu-zhuanqu- font-14"}></i></a>

@ -48,35 +48,56 @@ class Challengesjupyter extends Component {
isopentitletype:"Less",
})
}
this.getjianjiesize()
}
}
}).catch((error) => {
//console.log(error)
});
}
componentDidUpdate = (prevProps,prevState) => {
//防止陷入无限循环
if(prevState.ChallengesDataList!=this.state.ChallengesDataList){
getjianjiesize=()=>{
let {ChallengesDataList}=this.state;
let boxoffsetHeigh;
let box=document.getElementById("shixunchallengesid");
if(box){
boxoffsetHeigh=box.offsetHeight
if(boxoffsetHeigh<300){
if(ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined){
}else{
if(this.state.isopentitletype==="greater"){
}else{
if(boxoffsetHeigh>=300){
this.setState({
isopentitletype:"Less",
opentitletype:true,
isopentitletype:"greater",
boxoffsetHeigh:boxoffsetHeigh
})
}else{
this.setState({
isopentitletype:"greater",
opentitletype:true,
isopentitletype:"Less",
boxoffsetHeigh:boxoffsetHeigh
})
}
}
}
}
}
componentDidUpdate = (prevProps,prevState) => {
//防止陷入无限循环
if(prevState.ChallengesDataList!=this.state.ChallengesDataList){
if(this.state.isopentitletype==="greater"){
}else{
this.getjianjiesize()
}
}
}
componentDidMount() {
@ -132,6 +153,8 @@ class Challengesjupyter extends Component {
console.log("触发了jupytermessage");
that.modifyjupyter();
});
setTimeout(this.getjianjiesize(), 1000);
}
updatamakedowns = () => {
@ -220,6 +243,7 @@ class Challengesjupyter extends Component {
}
render() {
let{ChallengesDataList,booljupyterurls,enlarge}=this.state;
let id = this.props.match.params.shixunId;
@ -252,7 +276,19 @@ class Challengesjupyter extends Component {
</a>
</Tooltip>
</div>
{this.state.opentitletype===true?<style>
<div>
<style>
{
`
.markdown-body img{
min-height: 200px;
}
`
}
</style>
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?<style>
{
`
#shixunchallengesid{
@ -262,7 +298,17 @@ class Challengesjupyter extends Component {
`
}
</style>:""}
<div>
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?"":this.state.isopentitletype==="greater"&&this.state.opentitletype===true?
<style>
{
`
#shixunchallengesid{
max-height:260px;
overflow: hidden;
}
`
}
</style>:""}
<div className={"pd20"} id={"shixunchallengesid"}>
<p id="ReactMarkdown" style={{overflow:'hidden'}}>
@ -341,11 +387,7 @@ class Challengesjupyter extends Component {
:
(
admin===true||business===true||mysidentity===true?
<div style={{
height: '63px',
}} className={enlarge?"shixunjianjiecballenges edu-back-white intermediatecenter fangdaone":"shixunjianjiecballenges edu-back-white mt20"}>
<div className={enlarge?"sortinxdirection jupyterswidth":"sortinxdirection"} >
<div className={"shixunjianjiecballenges edu-back-white sortinxdirection mt20"}>
<div className="renwuxiangssi sortinxdirection">
<div><p className="renwuxiangqdiv">任务详情</p></div>
<div><p className="renwuxiangqdivtest ml1 shixunbingbaocun">请将实训题目写在下方并保存</p></div>
@ -402,7 +444,7 @@ class Challengesjupyter extends Component {
{
admin===true||business===true||mysidentity===true?
<div>
<div className={"pb47"}>
<div className="pb47">
{
this.state.jupyter_url===null || this.state.jupyter_url===undefined?
(

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-27 13:42:11
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-19 15:11:56
* @LastEditTime: 2019-12-20 10:25:42
*/
import types from "./actionTypes";
import { Base64 } from 'js-base64';
@ -171,29 +171,8 @@ export const updateCode = (identifier, inputValue, type) => {
}
}
/**
* @description 调试代码
* @param {*} identifier
* @param {*} inputValue 输入值: 自定义 | 系统返回的
* @param {*} type 测评类型 debug | submit
*/
export const debuggerCode = (identifier,value, type) => {
return (dispatch, getState) => {
// 调用之前 先保存 code
// TODO
// console.log(identifier, value);
const {hack: {time_limit = 0}} = getState().ojForUserReducer;
if (!type || type === 'debug') {
dispatch({ // 加载中...
type: types.TEST_CODE_STATUS,
payload: 'loading'
});
}
fetchDebuggerCode(identifier, value).then(res => {
// console.log('调用调试代码成功并返回结果: ', res);
const { status } = res;
if (status === 200) {
// 代码评测
export const codeEvaluate = (dispatch, identifier, type, time_limit) => {
// 调试代码成功后,调用轮循接口, 注意: 代码执行的时间要小于设置的时间限制
const intervalTime = 500;
let count = 1;
@ -203,13 +182,6 @@ export const debuggerCode = (identifier,value, type) => {
* @param {*} count 执行次数
* @param {*} timer 定时器
*/
if (res.data.status === 401) {
dispatch({ // 改变 loading 值
type: types.LOADING_STATUS,
payload: false
});
return;
};
function getCodeSubmit (intervalTime, finalTime, count, timer){
const excuteTime = (count++) * intervalTime; // 当前执行时间
fetchCodeSubmit(identifier, { mode: type }).then(res => {
@ -285,6 +257,40 @@ export const debuggerCode = (identifier,value, type) => {
let timer = setInterval(() => {
getCodeSubmit(intervalTime, time_limit, count++, timer);
}, intervalTime);
}
/**
* @description 调试代码
* @param {*} identifier
* @param {*} inputValue 输入值: 自定义 | 系统返回的
* @param {*} type 测评类型 debug | submit
*/
export const debuggerCode = (identifier,value, type) => {
return (dispatch, getState) => {
// 调用之前 先保存 code
// TODO
// console.log(identifier, value);
const {hack: {time_limit = 0}} = getState().ojForUserReducer;
if (!type || type === 'debug') {
dispatch({ // 加载中...
type: types.TEST_CODE_STATUS,
payload: 'loading'
});
}
fetchDebuggerCode(identifier, value).then(res => {
// console.log('调用调试代码成功并返回结果: ', res);
const { status } = res;
if (status === 200) {
if (res.data.status === 401) {
dispatch({ // 改变 loading 值
type: types.LOADING_STATUS,
payload: false
});
return;
};
// 测评
codeEvaluate(dispatch, identifier, type, time_limit);
}
}).catch(() => {
dispatch({
@ -362,7 +368,8 @@ export const changeUserCodeTab = (key) => {
*/
export const submitUserCode = (identifier, inputValue, type) => {
return (dispatch, getState) => {
const { userCode, isUpdateCode } = getState().ojForUserReducer;
const { userCode, isUpdateCode, hack: {time_limit = 0} } = getState().ojForUserReducer;
function userCodeSubmit () {
fetchUserCodeSubmit(identifier).then(res => {
// console.log('用户提交代码成功======》》》》》', res);
@ -374,12 +381,8 @@ export const submitUserCode = (identifier, inputValue, type) => {
});
return;
};
// 将编辑代码清空
dispatch({
type: types.SAVE_EDITOR_CODE,
payload: ''
});
dispatch(debuggerCode(identifier, inputValue, type || 'submit'));
// 测评
codeEvaluate(dispatch, identifier, type, time_limit);
}
}).catch(() => {
dispatch({

@ -4,11 +4,10 @@
* @Github:
* @Date: 2019-11-20 10:55:38
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-17 14:10:37
* @LastEditTime: 2019-12-20 10:10:53
*/
import axios from 'axios';
import { func } from 'prop-types';
export async function fetchOJList (params) {
console.log('传递的参数: ', params);

Loading…
Cancel
Save