dev_forum
杨树明 6 years ago
parent 7793993292
commit 69eaf8ded9

@ -28,8 +28,8 @@ const env = getClientEnvironment(publicUrl);
// The production configuration is different and lives in a separate file. // The production configuration is different and lives in a separate file.
module.exports = { module.exports = {
// You may want 'eval' instead if you prefer to see the compiled output in DevTools. // You may want 'eval' instead if you prefer to see the compiled output in DevTools.
// See the discussion in https://github.com/facebookincubator/create-react-app/issues/343. // See the discussion in https://github.com/facebookincubator/create-react-app/issues/343.s
devtool: 'cheap-module-source-map', // devtool: "source-map", // 开启调试
// These are the "entry points" to our application. // These are the "entry points" to our application.
// This means they will be the "root" imports that are included in JS bundle. // This means they will be the "root" imports that are included in JS bundle.
// The first two entry points enable "hot" CSS and auto-refreshes for JS. // The first two entry points enable "hot" CSS and auto-refreshes for JS.

@ -1,95 +1,95 @@
'use strict'; 'use strict';
const errorOverlayMiddleware = require('react-dev-utils/errorOverlayMiddleware'); const errorOverlayMiddleware = require('react-dev-utils/errorOverlayMiddleware');
const noopServiceWorkerMiddleware = require('react-dev-utils/noopServiceWorkerMiddleware'); const noopServiceWorkerMiddleware = require('react-dev-utils/noopServiceWorkerMiddleware');
const ignoredFiles = require('react-dev-utils/ignoredFiles'); const ignoredFiles = require('react-dev-utils/ignoredFiles');
const config = require('./webpack.config.dev'); const config = require('./webpack.config.dev');
const paths = require('./paths'); const paths = require('./paths');
const protocol = process.env.HTTPS === 'true' ? 'https' : 'http'; const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';
const host = process.env.HOST || '0.0.0.0'; const host = process.env.HOST || '0.0.0.0';
module.exports = function(proxy, allowedHost) { module.exports = function(proxy, allowedHost) {
return { return {
// WebpackDevServer 2.4.3 introduced a security fix that prevents remote // WebpackDevServer 2.4.3 introduced a security fix that prevents remote
// websites from potentially accessing local content through DNS rebinding: // websites from potentially accessing local content through DNS rebinding:
// https://github.com/webpack/webpack-dev-server/issues/887 // https://github.com/webpack/webpack-dev-server/issues/887
// https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a // https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a
// However, it made several existing use cases such as development in cloud // However, it made several existing use cases such as development in cloud
// environment or subdomains in development significantly more complicated: // environment or subdomains in development significantly more complicated:
// https://github.com/facebookincubator/create-react-app/issues/2271 // https://github.com/facebookincubator/create-react-app/issues/2271
// https://github.com/facebookincubator/create-react-app/issues/2233 // https://github.com/facebookincubator/create-react-app/issues/2233
// While we're investigating better solutions, for now we will take a // While we're investigating better solutions, for now we will take a
// compromise. Since our WDS configuration only serves files in the `public` // compromise. Since our WDS configuration only serves files in the `public`
// folder we won't consider accessing them a vulnerability. However, if you // folder we won't consider accessing them a vulnerability. However, if you
// use the `proxy` feature, it gets more dangerous because it can expose // use the `proxy` feature, it gets more dangerous because it can expose
// remote code execution vulnerabilities in backends like Django and Rails. // remote code execution vulnerabilities in backends like Django and Rails.
// So we will disable the host check normally, but enable it if you have // So we will disable the host check normally, but enable it if you have
// specified the `proxy` setting. Finally, we let you override it if you // specified the `proxy` setting. Finally, we let you override it if you
// really know what you're doing with a special environment variable. // really know what you're doing with a special environment variable.
disableHostCheck: disableHostCheck:
!proxy || process.env.DANGEROUSLY_DISABLE_HOST_CHECK === 'true', !proxy || process.env.DANGEROUSLY_DISABLE_HOST_CHECK === 'true',
// Enable gzip compression of generated files. // Enable gzip compression of generated files.
compress: true, compress: true,
// Silence WebpackDevServer's own logs since they're generally not useful. // Silence WebpackDevServer's own logs since they're generally not useful.
// It will still show compile warnings and errors with this setting. // It will still show compile warnings and errors with this setting.
clientLogLevel: 'none', clientLogLevel: 'none',
// By default WebpackDevServer serves physical files from current directory // By default WebpackDevServer serves physical files from current directory
// in addition to all the virtual build products that it serves from memory. // in addition to all the virtual build products that it serves from memory.
// This is confusing because those files wont automatically be available in // This is confusing because those files wont automatically be available in
// production build folder unless we copy them. However, copying the whole // production build folder unless we copy them. However, copying the whole
// project directory is dangerous because we may expose sensitive files. // project directory is dangerous because we may expose sensitive files.
// Instead, we establish a convention that only files in `public` directory // Instead, we establish a convention that only files in `public` directory
// get served. Our build script will copy `public` into the `build` folder. // get served. Our build script will copy `public` into the `build` folder.
// In `index.html`, you can get URL of `public` folder with %PUBLIC_URL%: // In `index.html`, you can get URL of `public` folder with %PUBLIC_URL%:
// <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> // <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
// In JavaScript code, you can access it with `process.env.PUBLIC_URL`. // In JavaScript code, you can access it with `process.env.PUBLIC_URL`.
// Note that we only recommend to use `public` folder as an escape hatch // Note that we only recommend to use `public` folder as an escape hatch
// for files like `favicon.ico`, `manifest.json`, and libraries that are // for files like `favicon.ico`, `manifest.json`, and libraries that are
// for some reason broken when imported through Webpack. If you just want to // for some reason broken when imported through Webpack. If you just want to
// use an image, put it in `src` and `import` it from JavaScript instead. // use an image, put it in `src` and `import` it from JavaScript instead.
contentBase: paths.appPublic, contentBase: paths.appPublic,
// By default files from `contentBase` will not trigger a page reload. // By default files from `contentBase` will not trigger a page reload.
watchContentBase: true, watchContentBase: true,
// Enable hot reloading server. It will provide /sockjs-node/ endpoint // Enable hot reloading server. It will provide /sockjs-node/ endpoint
// for the WebpackDevServer client so it can learn when the files were // for the WebpackDevServer client so it can learn when the files were
// updated. The WebpackDevServer client is included as an entry point // updated. The WebpackDevServer client is included as an entry point
// in the Webpack development configuration. Note that only changes // in the Webpack development configuration. Note that only changes
// to CSS are currently hot reloaded. JS changes will refresh the browser. // to CSS are currently hot reloaded. JS changes will refresh the browser.
hot: true, hot: true,
// It is important to tell WebpackDevServer to use the same "root" path // It is important to tell WebpackDevServer to use the same "root" path
// as we specified in the config. In development, we always serve from /. // as we specified in the config. In development, we always serve from /.
publicPath: config.output.publicPath, publicPath: config.output.publicPath,
// WebpackDevServer is noisy by default so we emit custom message instead // WebpackDevServer is noisy by default so we emit custom message instead
// by listening to the compiler events with `compiler.plugin` calls above. // by listening to the compiler events with `compiler.plugin` calls above.
quiet: true, quiet: false,
// Reportedly, this avoids CPU overload on some systems. // Reportedly, this avoids CPU overload on some systems.
// https://github.com/facebookincubator/create-react-app/issues/293 // https://github.com/facebookincubator/create-react-app/issues/293
// src/node_modules is not ignored to support absolute imports // src/node_modules is not ignored to support absolute imports
// https://github.com/facebookincubator/create-react-app/issues/1065 // https://github.com/facebookincubator/create-react-app/issues/1065
watchOptions: { watchOptions: {
ignored: ignoredFiles(paths.appSrc), ignored: ignoredFiles(paths.appSrc),
}, },
// Enable HTTPS if the HTTPS environment variable is set to 'true' // Enable HTTPS if the HTTPS environment variable is set to 'true'
https: protocol === 'https', https: protocol === 'https',
host: host, host: host,
overlay: false, overlay: false,
historyApiFallback: { historyApiFallback: {
// Paths with dots should still use the history fallback. // Paths with dots should still use the history fallback.
// See https://github.com/facebookincubator/create-react-app/issues/387. // See https://github.com/facebookincubator/create-react-app/issues/387.
disableDotRule: true, disableDotRule: true,
}, },
public: allowedHost, public: allowedHost,
proxy, proxy,
before(app) { before(app) {
// This lets us open files from the runtime error overlay. // This lets us open files from the runtime error overlay.
app.use(errorOverlayMiddleware()); app.use(errorOverlayMiddleware());
// This service worker file is effectively a 'no-op' that will reset any // This service worker file is effectively a 'no-op' that will reset any
// previous service worker registered for the same host:port combination. // previous service worker registered for the same host:port combination.
// We do this in development to avoid hitting the production cache if // We do this in development to avoid hitting the production cache if
// it used the same host and port. // it used the same host and port.
// https://github.com/facebookincubator/create-react-app/issues/2272#issuecomment-302832432 // https://github.com/facebookincubator/create-react-app/issues/2272#issuecomment-302832432
app.use(noopServiceWorkerMiddleware()); app.use(noopServiceWorkerMiddleware());
}, },
}; };
}; };

@ -1,230 +1,230 @@
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';
class Ecerciseallbackagain extends Component{ class Ecerciseallbackagain extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.state={ this.state={
data:undefined, data:undefined,
limit:10, limit:10,
page:1, page:1,
datalist:undefined, datalist:undefined,
group_ids:undefined group_ids:undefined
} }
} }
componentDidMount() { componentDidMount() {
let url="/exercises/"+this.props.match.params.Id+"/redo_modal.json"; let url="/exercises/"+this.props.match.params.Id+"/redo_modal.json";
axios.get(url,{params:{ axios.get(url,{params:{
limit:10, limit:10,
page:1, page:1,
} }
}).then((response) => { }).then((response) => {
this.setState({ this.setState({
data:response.data, data:response.data,
datalist:response.data.exercise_users datalist:response.data.exercise_users
}) })
}).catch((error) => { }).catch((error) => {
this.props.callback() this.props.callback()
console.log(error) console.log(error)
}); });
} }
//勾选实训 //勾选实训
shixunhomeworkedit=(checkedValues)=>{ shixunhomeworkedit=(checkedValues)=>{
let{datalist}=this.state; let{datalist}=this.state;
if(checkedValues.length===datalist.length){ if(checkedValues.length===datalist.length){
this.setState({ this.setState({
onChangetype:true, onChangetype:true,
group_ids:checkedValues group_ids:checkedValues
}) })
}else{ }else{
this.setState({ this.setState({
group_ids:checkedValues, group_ids:checkedValues,
onChangetype:false onChangetype:false
}) })
} }
} }
contentViewScroll=(e)=>{ contentViewScroll=(e)=>{
//滑动到底判断 //滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
let {page,limit,datalist}=this.state; let {page,limit,datalist}=this.state;
let newpage=page+1; let newpage=page+1;
let newdata=datalist; let newdata=datalist;
let url="/exercises/"+this.props.match.params.Id+"/redo_modal.json"; let url="/exercises/"+this.props.match.params.Id+"/redo_modal.json";
axios.get(url,{params:{ axios.get(url,{params:{
limit:limit, limit:limit,
page:newpage, page:newpage,
} }
}).then((response) => { }).then((response) => {
response.data.exercise_users.map((item,key)=>{ response.data.exercise_users.map((item,key)=>{
newdata.push(item) newdata.push(item)
}) })
this.setState({ this.setState({
datalist:newdata, datalist:newdata,
page:newpage page:newpage
}) })
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
}); });
} }
} }
onChange=(e)=>{ onChange=(e)=>{
let{datalist}=this.state; let{datalist}=this.state;
if(e.target.checked===true){ if(e.target.checked===true){
let id=[] let id=[]
datalist.map((item,key)=>{ datalist.map((item,key)=>{
id.push(item.user_id) id.push(item.user_id)
}) })
this.setState({ this.setState({
group_ids:id, group_ids:id,
onChangetype:e.target.checked onChangetype:e.target.checked
}) })
}else{ }else{
this.setState({ this.setState({
group_ids:[], group_ids:[],
onChangetype:e.target.checked onChangetype:e.target.checked
}) })
} }
} }
isSave=()=>{ isSave=()=>{
let{group_ids}=this.state; let{group_ids}=this.state;
if(group_ids===undefined||group_ids.length===0){ if(group_ids===undefined||group_ids.length===0){
notification.open({ notification.open({
message:"提示", message:"提示",
description:"请先选择学生" description:"请先选择学生"
}); });
return return
} }
let url="/exercises/"+this.props.match.params.Id+"/redo_exercise.json"; let url="/exercises/"+this.props.match.params.Id+"/redo_exercise.json";
axios.post(url, { axios.post(url, {
user_ids: group_ids, user_ids: group_ids,
}) })
.then((response) => { .then((response) => {
if (response.data.status === 0) { if (response.data.status === 0) {
this.props.callback(1) this.props.callback(1)
notification.open({ notification.open({
message:"提示", message:"提示",
description:response.data.message description:response.data.message
}); });
} }
// else if(response.data.status === -1){ // else if(response.data.status === -1){
// notification.open({ // notification.open({
// message: '参数错误', // message: '参数错误',
// }); // });
// }else if(response.data.status === -2){ // }else if(response.data.status === -2){
// notification.open({ // notification.open({
// message: '当前作业不支持查重', // message: '当前作业不支持查重',
// }); // });
// }else if(response.data.status === -3){ // }else if(response.data.status === -3){
// notification.open({ // notification.open({
// message: '正在查重中', // message: '正在查重中',
// }); // });
// }else if(response.data.status === -4){ // }else if(response.data.status === -4){
// notification.open({ // notification.open({
// message: '查重异常', // message: '查重异常',
// }); // });
// } // }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} }
issCancel=()=>{ issCancel=()=>{
this.props.callback() this.props.callback()
} }
render(){ render(){
let {datalist,group_ids,onChangetype}=this.state; let {datalist,group_ids,onChangetype}=this.state;
console.log() console.log()
return( return(
<div> <div>
<Modal <Modal
className={"HomeworkModal"} className={"HomeworkModal"}
title={this.props.modalname} title={this.props.modalname}
visible={this.props.visible} visible={this.props.visible}
closable={false} closable={false}
footer={null} footer={null}
keyboard={false} keyboard={false}
destroyOnClose={true} destroyOnClose={true}
> >
<div className="task-popup-content"> <div className="task-popup-content">
<style>{` <style>{`
.greybackHead{ .greybackHead{
padding:0px 30px; padding:0px 30px;
} }
.fontlefts{text-align: left;} .fontlefts{text-align: left;}
`}</style> `}</style>
<div className="clearfix edu-txt-center mb10" style={{color:"#333333",fontSize: '15px'}}>学生仅限提交中将得到一次重新答题的机会现有的答题情况将被清空</div> <div className="clearfix edu-txt-center mb10" style={{color:"#333333",fontSize: '15px'}}>学生将得到一次重新答题的机会现有的答题情况将被清空</div>
<ul className="clearfix edu-txt-center ml35"> <ul className="clearfix edu-txt-center ml35">
<li className="fl paddingleft22 fontlefts" style={{width:'130px'}}>姓名</li> <li className="fl paddingleft22 fontlefts" style={{width:'160px'}}>姓名</li>
<li className="fl edu-txt-left" style={{width:'124px'}}>学号</li> <li className="fl edu-txt-left" style={{width:'124px'}}>学号</li>
<li className="fl" style={{width:'100px'}}>成绩</li> <li className="fr" style={{width:'170px'}}>成绩</li>
</ul> </ul>
{datalist===undefined?"": {datalist===undefined?"":
<ul className="upload_select_box fl clearfix mt10 mb10" style={{"overflow-y":"auto",height: "319px"}} <ul className="upload_select_box fl clearfix mt10 mb10" style={{"overflow-y":"auto",height: "319px"}}
id="search_not_members_list" id="search_not_members_list"
onScroll={this.contentViewScroll} onScroll={this.contentViewScroll}
> >
<Checkbox.Group style={{ width: '100%' }} onChange={this.shixunhomeworkedit} value={group_ids}> <Checkbox.Group style={{ width: '100%' }} onChange={this.shixunhomeworkedit} value={group_ids}>
{ datalist.map((item,key)=>{ { datalist.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" key={key}>
<li className="fl" style={{width: '100px'}}> <li className="fl" style={{width: '158px'}}>
<Checkbox <Checkbox
className="fl task-hide edu-txt-left" className="fl task-hide edu-txt-left"
name="shixun_homework[]" name="shixun_homework[]"
value={item.user_id} value={item.user_id}
> >
<label style={{"textAlign": "left", "color": "#05101A"}} <label style={{"textAlign": "left", "color": "#05101A"}}
className="task-hide color-grey-name" title="frerere">{item.user_name}</label> className="task-hide color-grey-name" title="frerere">{item.user_name}</label>
</Checkbox> </Checkbox>
</li> </li>
<li className="fl" style={{width: '150px'}}> <li className="fl" style={{width: '150px'}}>
{item.student_id} {item.student_id}
</li> </li>
<li className="fl" style={{width: '160px',color:'#FF6800'}}> <li className="fr" style={{width: '170px',color:'#FF6800'}}>
{item.user_score} {item.user_score}
</li> </li>
</div> </div>
) )
})} })}
</Checkbox.Group> </Checkbox.Group>
</ul> </ul>
} }
<div className={"clearfix mt5 ml10"}> <div className={"clearfix mt5 ml10"}>
<Checkbox checked={onChangetype} onChange={this.onChange}>{onChangetype===true?"清除":"全选"}</Checkbox> <Checkbox checked={onChangetype} onChange={this.onChange}>{onChangetype===true?"清除":"全选"}</Checkbox>
</div> </div>
<div className="clearfix mt30 edu-txt-center mb10"> <div className="clearfix mt30 edu-txt-center mb10">
<a className="task-btn color-white mr30" onClick={this.issCancel}>取消</a> <a className="task-btn color-white mr30" onClick={this.issCancel}>取消</a>
<a className="task-btn task-btn-orange" onClick={this.isSave}>确认</a> <a className="task-btn task-btn-orange" onClick={this.isSave}>确认</a>
</div> </div>
</div> </div>
</Modal> </Modal>
</div> </div>
) )
} }
} }
export default Ecerciseallbackagain; export default Ecerciseallbackagain;

@ -63,8 +63,9 @@ class ShixunWorkDetails extends Component {
render() { render() {
let{data}=this.state; let{data}=this.state;
return ( return (
<Spin size="large" spinning={this.state.spinning}> <Spin size="large" spinning={this.state.spinning} style={{marginTop:"13%"}}>
{data===undefined? "":<div className="newMain clearfix "> <div className="newMain clearfix ">
{data===undefined? "":
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<div className="educontent"> <div className="educontent">
@ -111,11 +112,9 @@ class ShixunWorkDetails extends Component {
/> />
</div> </div>
</div> </div>
</div> </div>
</div>} }
</div>
</Spin> </Spin>
) )
} }

Loading…
Cancel
Save