From 814aa13c21518c8c463761e09e8c993364ed1c98 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Tue, 30 Jul 2019 14:05:26 +0800 Subject: [PATCH 01/62] =?UTF-8?q?Mp3=E3=80=81mp4=E7=B1=BB=E5=AE=9E?= =?UTF-8?q?=E8=AE=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/games_controller.rb | 2 +- app/controllers/myshixuns_controller.rb | 2 +- app/helpers/games_helper.rb | 8 +++++++- app/models/challenge.rb | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/controllers/games_controller.rb b/app/controllers/games_controller.rb index b2de6dcad..667d45f2b 100644 --- a/app/controllers/games_controller.rb +++ b/app/controllers/games_controller.rb @@ -116,7 +116,7 @@ class GamesController < ApplicationController @qrcode_str = Base64.encode64( qr.to_img.resize(400,400).to_s ) else - @type = "image" + @type = "" #conv = Iconv.new("GBK", "utf-8") @game_challenge = @game.challenge type = @game_challenge.show_type diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index fa47fd7f6..1d6b15969 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -24,7 +24,7 @@ class MyshixunsController < ApplicationController ActiveRecord::Base.transaction do begin @shixun = Shixun.select(:id, :identifier).find(@myshixun.shixun_id) - @myshixun.destroy + @myshixun.destroy! StudentWork.where(:myshixun_id => @myshixun.id).update_all(:myshixun_id => 0, :work_status => 0) diff --git a/app/helpers/games_helper.rb b/app/helpers/games_helper.rb index aff05904f..dfc3fb321 100644 --- a/app/helpers/games_helper.rb +++ b/app/helpers/games_helper.rb @@ -6,7 +6,7 @@ module GamesHelper end # 获取目录下所有文件,返回一个文件名的数组 type是查看文件的类型image表示图片 - # type [[1, "图片"], [2, "apk/exe"], [3, "txt"], [4, "html"]] + # type [[1, "图片"], [2, "apk/exe"], [3, "txt"], [4, "html"], [5, "mp3"], [6, "mp4"]] def get_dir_filename(path, type, game_id) answer_picture = [] return answer_picture unless File.directory?(path) @@ -39,6 +39,12 @@ module GamesHelper end f.close @type = 'txt' + elsif extension == 'mp3' && type == 5 + answer_picture << file + @type = 'mp3' + elsif extension == 'mp4' && type == 6 + answer_picture << file + @type = 'mp4' end end diff --git a/app/models/challenge.rb b/app/models/challenge.rb index 0bea54eb4..8e4d2ae42 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -1,5 +1,6 @@ class Challenge < ApplicationRecord # difficulty: 关卡难度: 1.简单 2.中等 3.困难 + # show_type: 效果展示:-1.无效果 1.图片 2.apk/exe 3.txt 4.html 5.mp3 6.mp4 default_scope { order("challenges.position asc") } belongs_to :shixun, :touch => true, counter_cache: true From 1cb74baff7c2cc16a17e9055aa14f22f2de81205 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, 30 Jul 2019 15:01:05 +0800 Subject: [PATCH 02/62] b --- .../PackageIndexNEIBannerConcent.js | 4 +- public/react/src/modules/tpm/NewHeader.js | 2 +- .../react/src/modules/user/usersInfo/Infos.js | 27 ++- .../modules/user/usersInfo/InfosPackage.js | 197 ++++++++++++++++++ 4 files changed, 225 insertions(+), 5 deletions(-) create mode 100644 public/react/src/modules/user/usersInfo/InfosPackage.js diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index c9d49e542..e4926e02c 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -69,7 +69,7 @@ class PackageIndexNEIBannerConcent extends Component { componentDidUpdate = (prevProps) => { if(prevProps.current_user.username!=this.props.current_user.username){ this.setState({ - contact_name:this.props.current_user.username + contact_name:this.props.current_user&&this.props.current_user.username }) } } @@ -100,7 +100,7 @@ class PackageIndexNEIBannerConcent extends Component { }) }else{ this.setState({ - contact_name:this.props.current_user.username + contact_name:this.props.current_user&&this.props.current_user.username }) } diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index 1798bfca8..79b0aa443 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -816,7 +816,7 @@ submittojoinclass=(value)=>{
  • 我的实训
  • 我的实践课程
  • 我的项目
  • -
  • 我的众包
  • +
  • 我的众包
  • 账号管理
  • {/*
  • this.educoderlogin()} >登入测试接口
  • */} {/*
  • this.trialapplications()} >试用申请
  • */} diff --git a/public/react/src/modules/user/usersInfo/Infos.js b/public/react/src/modules/user/usersInfo/Infos.js index 3b58681da..5286c5797 100644 --- a/public/react/src/modules/user/usersInfo/Infos.js +++ b/public/react/src/modules/user/usersInfo/Infos.js @@ -17,6 +17,12 @@ import "../../courses/css/Courses.css" import Trialapplication from '../../login/Trialapplication' + +const InfosPackage = Loadable({ + loader: () => import('./InfosPackage'), + loading:Loading, +}) + const InfosCourse = Loadable({ loader: () => import('./InfosCourse'), loading:Loading, @@ -373,11 +379,17 @@ class Infos extends Component{ to={`/users/${username}/paths`}>实践课程
  • - this.setState({moduleName: 'projects'})} to={`/users/${username}/projects`}>项目
  • - + +
  • + this.setState({moduleName: 'package'})} + to={`/users/${username}/package`}>众包 +
  • + {/*{ data && data.identity!="学生" &&
  • 题库
  • }*/} @@ -389,6 +401,15 @@ class Infos extends Component{ {/* --------------------------------------------------------------------- */} + + {/* 众包 */} + {/* http://localhost:3007/courses/1309/homework/9300/setting */} + () + } + > + {/* 课堂 */} {/* http://localhost:3007/courses/1309/homework/9300/setting */} () } > + + () diff --git a/public/react/src/modules/user/usersInfo/InfosPackage.js b/public/react/src/modules/user/usersInfo/InfosPackage.js new file mode 100644 index 000000000..8222c951b --- /dev/null +++ b/public/react/src/modules/user/usersInfo/InfosPackage.js @@ -0,0 +1,197 @@ +import React, { Component } from 'react'; +import { SnackbarHOC } from 'educoder'; +import {BrowserRouter as Router,Route,Switch} from 'react-router-dom'; +import {Tooltip,Menu,Pagination,Spin} from 'antd'; +import Loadable from 'react-loadable'; +import Loading from '../../../Loading'; +import axios from 'axios'; +import NoneData from '../../courses/coursesPublic/NoneData' +import {getImageUrl} from 'educoder'; +import { TPMIndexHOC } from '../../tpm/TPMIndexHOC'; +import { CNotificationHOC } from '../../courses/common/CNotificationHOC' +import "./usersInfo.css" +import Create from './publicCreatNew' + +class InfosCourse extends Component{ + constructor(props){ + super(props); + this.state={ + category:undefined, + status:undefined, + page:1, + per_page:16, + + totalCount:undefined, + data:undefined, + isSpin:false + } + } + + componentDidMount=()=>{ + this.setState({ + isSpin:true + }) + let{category,status,page}=this.state; + this.getCourses(category,status,page); + } + + getCourses=(category,status,page)=>{ + let url=`/users/${this.props.match.params.username}/courses.json`; + axios.get((url),{params:{ + category, + status, + page, + per_page: this.props.is_current && category && page ==1?17:16 + }}).then((result)=>{ + if(result){ + this.setState({ + totalCount:result.data.count, + data:result.data, + isSpin:false + }) + } + }).catch((error)=>{ + console.log(error); + }) + } + + //切换种类 + changeCategory=(cate)=>{ + this.setState({ + category:cate, + page:1, + isSpin:true + }) + let{status}=this.state; + this.getCourses(cate,status,1); + } + //切换状态 + changeStatus=(status)=>{ + this.setState({ + status:status, + page:1, + isSpin:true + }) + let{category}=this.state; + this.getCourses(category,status,1); + } + //切换页数 + changePage=(page)=>{ + this.setState({ + page, + isSpin:true + }) + let{category,status}=this.state; + this.getCourses(category,status,page); + } + + // 进入课堂 + turnToCourses=(url,flag)=>{ + if(flag){ + this.props.history.push(url); + } + } + + render(){ + let{ + category, + status, + page, + data, + totalCount, + isSpin + } = this.state; + let is_current=this.props.is_current; + + console.log(this.props.current_user&&this.props.current_user.user_identity==="学生") + return( +
    + +
    +
  • this.changeCategory()}>全部
  • +
  • this.changeCategory("manage")}>{is_current ? "我":"TA"}管理的
  • +
  • this.changeCategory("study")}>{is_current ? "我":"TA"}学习的
  • +
    + +

    + 共{totalCount}个 + 发布时间 +

    +
    + { + page == 1 && is_current && + this.props.current_user && this.props.current_user.user_identity != "学生" ? : "" + } + { + (!data || data.courses.length==0) && (!is_current || (this.props.current_user && this.props.current_user.user_identity === "学生" )) && + } + { + data && data.courses && data.courses.map((item,key)=>{ + return( +
    this.turnToCourses(`${item.first_category_url}`,item.can_visited)} style={{"cursor": "pointer"}}> + { + item.is_public == 1 && + +
    + + 公开 +
    + } + { + item.can_visited ==false? +
    + +

    非成员不能访问

    +
    :"" + } + +
    +

    + {item.name} +

    + 用户 +

    {item.teacher && item.teacher.real_name}

    +

    {item.teacher && item.teacher.school_name}

    +
    +
    +
    + { + item.members_count > 0 && + + + {item.members_count} + + } + { + item.homework_commons_count > 0 && + + + {item.homework_commons_count} + + } + { + item.attachments_count > 0 && + + + {item.attachments_count} + + } +
    +
    +
    + ) + }) + } +
    + { + totalCount > 15 && +
    + +
    + } +
    +
    + ) + } +} +export default InfosCourse; \ No newline at end of file From 60137fc05aeb5b30008f19890dd000fd5b779e49 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, 30 Jul 2019 15:08:07 +0800 Subject: [PATCH 03/62] b --- public/react/src/App.js | 2 +- .../projectPackages/PackageIndex/PackageConcent.js | 4 ++-- .../PackageIndexNEITaskDetails.js | 6 +++--- .../PackageIndexNEIBannerConcent.js | 4 ++-- .../PackageIndexNewandEdit/PackageIndexNEISubmit.js | 4 ++-- .../src/modules/projectPackages/ProjectPackageIndex.js | 8 ++++---- public/react/src/modules/user/usersInfo/InfosPackage.js | 6 ------ 7 files changed, 14 insertions(+), 20 deletions(-) diff --git a/public/react/src/App.js b/public/react/src/App.js index e713cd0fd..6d1e2a521 100644 --- a/public/react/src/App.js +++ b/public/react/src/App.js @@ -304,7 +304,7 @@ class App extends Component { {/**/} {/*众包创新*/} - + {/*认证*/} diff --git a/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js b/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js index cfc54bb98..921c3e555 100644 --- a/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js @@ -158,7 +158,7 @@ class PackageConcent extends Component { enterButton={ 搜索} onSearch={ (value)=>this.setdatafuns(value)} />

    @@ -224,7 +224,7 @@ class PackageConcent extends Component { diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index 4788a7dc1..bcd46dbb0 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -230,7 +230,7 @@ class PackageIndexNEITaskDetails extends Component { } goback = () => { // window.history.go(-1) - window.location.href="/crowdsourcings"; + window.location.href="/crowdsourcing"; } render() { @@ -252,7 +252,7 @@ class PackageIndexNEITaskDetails extends Component { '} className={"fl"}> {/*{this.props.current_user.username}*/} - 众包创新 + 众包创新 {data&&data.title} @@ -352,7 +352,7 @@ class PackageIndexNEITaskDetails extends Component { 需求详情: {data&&data.status==="pending"&&data&&data.operation.can_select_bidding_user===true?:""} diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index e4926e02c..3caedebde 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -454,7 +454,7 @@ class PackageIndexNEIBannerConcent extends Component { if(type===true){ this.props.setPublicationfun(response.data.id) }else{ - window.location.href="/crowdsourcings/"+response.data.id + window.location.href="/crowdsourcing/"+response.data.id } this.setState({ springtype:false @@ -502,7 +502,7 @@ class PackageIndexNEIBannerConcent extends Component { if(type===true){ this.props.setPublicationfun(response.data.id) }else{ - window.location.href="/crowdsourcings/"+response.data.id + window.location.href="/crowdsourcing/"+response.data.id } this.setState({ springtype:false diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js index a64e222e4..9f287e90e 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js @@ -14,10 +14,10 @@ class PackageIndexNEISubmit extends Component { } setageload=(sum)=>{ if(sum===undefined){ - window.location.href="/crowdsourcings/new" + window.location.href="/crowdsourcing/new" }else{ // this.props.history.push("/project_packages/"+sum) - window.location.href="/crowdsourcings/"+sum + window.location.href="/crowdsourcing/"+sum } } diff --git a/public/react/src/modules/projectPackages/ProjectPackageIndex.js b/public/react/src/modules/projectPackages/ProjectPackageIndex.js index 6f2e32b8b..097e012e0 100644 --- a/public/react/src/modules/projectPackages/ProjectPackageIndex.js +++ b/public/react/src/modules/projectPackages/ProjectPackageIndex.js @@ -43,25 +43,25 @@ class ProjectPackageIndex extends Component { {/*众包首页*/} - () } > - () } > - () } > - () } diff --git a/public/react/src/modules/user/usersInfo/InfosPackage.js b/public/react/src/modules/user/usersInfo/InfosPackage.js index 8222c951b..135f9f52e 100644 --- a/public/react/src/modules/user/usersInfo/InfosPackage.js +++ b/public/react/src/modules/user/usersInfo/InfosPackage.js @@ -183,12 +183,6 @@ class InfosCourse extends Component{ }) } - { - totalCount > 15 && -
    - -
    - } ) From 0cce3471436edac605a17663bca16e972d541fc7 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, 30 Jul 2019 15:20:52 +0800 Subject: [PATCH 04/62] b --- .../PackageIndexNEITaskDetails.js | 8 ++++---- .../PackageIndexNEIBannerConcent.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index bcd46dbb0..dd1e176e4 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -2,7 +2,7 @@ import React, {Component} from 'react'; import {Link} from "react-router-dom"; import axios from 'axios'; import { Input ,Icon,Button,Pagination,DatePicker,Breadcrumb} from 'antd'; -import { handleDateString,markdownToHTML,bytesToSize} from 'educoder'; +import { handleDateString,markdownToHTML,bytesToSize,getImageUrl} from 'educoder'; import NEITaskDetailsModel from './NEITaskDetailsModel'; import moment from 'moment'; import '../packageconcnet.css'; @@ -281,7 +281,7 @@ class PackageIndexNEITaskDetails extends Component {
    + src={getImageUrl("images/"+data&&data.creator.image_url)} width="70"/>
    {data&&data.creator.name} @@ -403,7 +403,7 @@ class PackageIndexNEITaskDetails extends Component { return(
    {item.status==="bidding_won"?:""} - +

    {item.name}

    {this.props.current_user&&this.props.current_user.login!=item.login? 头像联系TA @@ -451,7 +451,7 @@ class PackageIndexNEITaskDetails extends Component { return( ) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index 3caedebde..04a8c9c4a 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -67,7 +67,7 @@ class PackageIndexNEIBannerConcent extends Component { } } componentDidUpdate = (prevProps) => { - if(prevProps.current_user.username!=this.props.current_user.username){ + if(prevProps.current_user.username!=this.props.current_user&&this.props.current_user.username){ this.setState({ contact_name:this.props.current_user&&this.props.current_user.username }) From 578f2ab200a4cd135c85ffb17e073cb15b288eeb 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, 30 Jul 2019 15:28:18 +0800 Subject: [PATCH 05/62] b --- .../PackageIndexNEIBannerConcent.js | 14 ++--- .../modules/user/usersInfo/InfosPackage.js | 58 +------------------ 2 files changed, 8 insertions(+), 64 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index 04a8c9c4a..8db157a65 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -66,13 +66,13 @@ class PackageIndexNEIBannerConcent extends Component { categories:[] } } - componentDidUpdate = (prevProps) => { - if(prevProps.current_user.username!=this.props.current_user&&this.props.current_user.username){ - this.setState({ - contact_name:this.props.current_user&&this.props.current_user.username - }) - } - } + // componentDidUpdate = (prevProps) => { + // if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user&&prevProps.current_user.username){ + // this.setState({ + // contact_name:this.props.current_user&&this.props.current_user.username + // }) + // } + // } componentDidMount() { window.document.title = '众包创新' diff --git a/public/react/src/modules/user/usersInfo/InfosPackage.js b/public/react/src/modules/user/usersInfo/InfosPackage.js index 135f9f52e..ad1a38964 100644 --- a/public/react/src/modules/user/usersInfo/InfosPackage.js +++ b/public/react/src/modules/user/usersInfo/InfosPackage.js @@ -125,63 +125,7 @@ class InfosCourse extends Component{ { (!data || data.courses.length==0) && (!is_current || (this.props.current_user && this.props.current_user.user_identity === "学生" )) && } - { - data && data.courses && data.courses.map((item,key)=>{ - return( -
    this.turnToCourses(`${item.first_category_url}`,item.can_visited)} style={{"cursor": "pointer"}}> - { - item.is_public == 1 && - -
    - - 公开 -
    - } - { - item.can_visited ==false? -
    - -

    非成员不能访问

    -
    :"" - } - -
    -

    - {item.name} -

    - 用户 -

    {item.teacher && item.teacher.real_name}

    -

    {item.teacher && item.teacher.school_name}

    -
    -
    -
    - { - item.members_count > 0 && - - - {item.members_count} - - } - { - item.homework_commons_count > 0 && - - - {item.homework_commons_count} - - } - { - item.attachments_count > 0 && - - - {item.attachments_count} - - } -
    -
    -
    - ) - }) - } +
    From a70fc2c8c9753b287fef9240f5a585984c113849 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, 30 Jul 2019 15:36:17 +0800 Subject: [PATCH 06/62] b --- .../PackageIndexNEIBannerConcent.js | 17 ++++++++++------- .../src/modules/user/usersInfo/InfosPackage.js | 15 +++------------ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index 8db157a65..eaacc9367 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -66,13 +66,7 @@ class PackageIndexNEIBannerConcent extends Component { categories:[] } } - // componentDidUpdate = (prevProps) => { - // if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user&&prevProps.current_user.username){ - // this.setState({ - // contact_name:this.props.current_user&&this.props.current_user.username - // }) - // } - // } + componentDidMount() { window.document.title = '众包创新' @@ -99,6 +93,7 @@ class PackageIndexNEIBannerConcent extends Component { }) }else{ + console.log(this.props.current_user&&this.props.current_user.username) this.setState({ contact_name:this.props.current_user&&this.props.current_user.username }) @@ -121,6 +116,14 @@ class PackageIndexNEIBannerConcent extends Component { // this.contentMdRef.current.setValue("测试赋值") } + + // componentDidUpdate = (prevProps) => { + // if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user&&prevProps.current_user.username){ + // this.setState({ + // contact_name:this.props.current_user&&this.props.current_user.username + // }) + // } + // } //获取验证码; getverificationcode =()=>{ // if (this.state.logins&&this.state.logins.length === 0) { diff --git a/public/react/src/modules/user/usersInfo/InfosPackage.js b/public/react/src/modules/user/usersInfo/InfosPackage.js index ad1a38964..638b2ecd2 100644 --- a/public/react/src/modules/user/usersInfo/InfosPackage.js +++ b/public/react/src/modules/user/usersInfo/InfosPackage.js @@ -110,23 +110,14 @@ class InfosCourse extends Component{

    - 共{totalCount}个 + 共{0}个 发布时间

    -
    - { - page == 1 && is_current && - this.props.current_user && this.props.current_user.user_identity != "学生" ? : "" - } - { - (!data || data.courses.length==0) && (!is_current || (this.props.current_user && this.props.current_user.user_identity === "学生" )) && - } - -
    +
    ) From 6e96556e1a662795f636ce989ebbd68d9f5a9a67 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, 30 Jul 2019 15:39:54 +0800 Subject: [PATCH 07/62] b --- .../PackageIndexNEIBannerConcent.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index eaacc9367..96980160b 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -117,13 +117,13 @@ class PackageIndexNEIBannerConcent extends Component { // this.contentMdRef.current.setValue("测试赋值") } - // componentDidUpdate = (prevProps) => { - // if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user&&prevProps.current_user.username){ - // this.setState({ - // contact_name:this.props.current_user&&this.props.current_user.username - // }) - // } - // } + componentDidUpdate = (prevProps) => { + if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user.username){ + this.setState({ + contact_name:this.props.current_user&&this.props.current_user.username + }) + } + } //获取验证码; getverificationcode =()=>{ // if (this.state.logins&&this.state.logins.length === 0) { From 6febcf56e3c4c5322983f81f11cba4037b268004 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, 30 Jul 2019 15:42:16 +0800 Subject: [PATCH 08/62] b --- .../PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index 96980160b..42a107444 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -859,7 +859,7 @@ class PackageIndexNEIBannerConcent extends Component { placeholder="请输入手机号" disabled={true} /> - + this.editmodels()}>

    :""} @@ -900,7 +900,7 @@ class PackageIndexNEIBannerConcent extends Component { {/**/} - + this.modalCancel()}>X

    :""} From 00390cffbd5216b5d541218a12b9c4d4625dea75 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, 30 Jul 2019 15:48:54 +0800 Subject: [PATCH 09/62] b --- .../PackageIndexNEIBannerConcent.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index 42a107444..a279f7f13 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -118,11 +118,14 @@ class PackageIndexNEIBannerConcent extends Component { } componentDidUpdate = (prevProps) => { - if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user.username){ - this.setState({ - contact_name:this.props.current_user&&this.props.current_user.username - }) - } + console.log(this.props.current_user) + console.log("____________") + console.log(prevProps.current_user) + // if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user.username){ + // this.setState({ + // contact_name:this.props.current_user&&this.props.current_user.username + // }) + // } } //获取验证码; getverificationcode =()=>{ From 4ab00b3a663eed8460ee5750e1661e2416db3116 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, 30 Jul 2019 15:54:05 +0800 Subject: [PATCH 10/62] b --- .../PackageIndexNEIBannerConcent.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index a279f7f13..e8ae230a7 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -118,14 +118,11 @@ class PackageIndexNEIBannerConcent extends Component { } componentDidUpdate = (prevProps) => { - console.log(this.props.current_user) - console.log("____________") - console.log(prevProps.current_user) - // if(this.props.current_user&&this.props.current_user.username!=prevProps.current_user.username){ - // this.setState({ - // contact_name:this.props.current_user&&this.props.current_user.username - // }) - // } + if(prevProps.current_user.username!=this.props.current_user){ + this.setState({ + contact_name:this.props.current_user&&this.props.current_user.username + }) + } } //获取验证码; getverificationcode =()=>{ From 336bc6edc30b3ec7429ce896ada7afe6e1c1ad52 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, 30 Jul 2019 15:57:10 +0800 Subject: [PATCH 11/62] b --- .../PackageIndexNEIBannerConcent.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index e8ae230a7..a9de27f27 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -119,9 +119,12 @@ class PackageIndexNEIBannerConcent extends Component { componentDidUpdate = (prevProps) => { if(prevProps.current_user.username!=this.props.current_user){ - this.setState({ - contact_name:this.props.current_user&&this.props.current_user.username - }) + if(this.props.current_user!=undefined){ + this.setState({ + contact_name:this.props.current_user.username + }) + } + } } //获取验证码; From 728784e20c6ee3c6840f90620e8c01e92690de17 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, 30 Jul 2019 16:00:43 +0800 Subject: [PATCH 12/62] b --- .../PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index a9de27f27..0dda4f029 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -120,6 +120,7 @@ class PackageIndexNEIBannerConcent extends Component { componentDidUpdate = (prevProps) => { if(prevProps.current_user.username!=this.props.current_user){ if(this.props.current_user!=undefined){ + console.log(this.props.current_user) this.setState({ contact_name:this.props.current_user.username }) From c1e0871861888ecbc2b78b8cdd88b3519d8b0b0b 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, 30 Jul 2019 16:03:16 +0800 Subject: [PATCH 13/62] b --- .../PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index dd1e176e4..1dd130a87 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -236,7 +236,7 @@ class PackageIndexNEITaskDetails extends Component { render() { let {overtype,data}=this.state; // console.log(data&&data.creator.login) - // console.log(this.props.current_user.login) + console.log(data) return (
    From 25b313e501fe7b2bdc6fdbd8f24e370e09bd399b 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, 30 Jul 2019 16:13:15 +0800 Subject: [PATCH 14/62] b --- .../PackageIndexNEITaskDetails.js | 2 +- .../PackageIndexNEIBannerConcent.js | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index 1dd130a87..8c090ba1e 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -238,7 +238,7 @@ class PackageIndexNEITaskDetails extends Component { // console.log(data&&data.creator.login) console.log(data) return ( -
    + data===undefined?"":
    { - if(prevProps.current_user.username!=this.props.current_user){ - if(this.props.current_user!=undefined){ - console.log(this.props.current_user) - this.setState({ - contact_name:this.props.current_user.username - }) - } - - } - } + // componentDidUpdate = (prevProps) => { + // if(prevProps.current_user.username!=this.props.current_user){ + // if(this.props.current_user!=undefined){ + // console.log(this.props.current_user) + // this.setState({ + // contact_name:this.props.current_user.username + // }) + // } + // + // } + // } //获取验证码; getverificationcode =()=>{ // if (this.state.logins&&this.state.logins.length === 0) { From e0444d03bfea8df6a2d600e021467e235afd79cb 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, 30 Jul 2019 16:19:03 +0800 Subject: [PATCH 15/62] b --- .../PackageIndexNEITaskDetails.js | 2 +- .../PackageIndexNEIBannerConcent.js | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index 8c090ba1e..b71c36eec 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -281,7 +281,7 @@ class PackageIndexNEITaskDetails extends Component {
    + src={"/images/"+data&&data.creator.image_url} width="70"/>
    {data&&data.creator.name} diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index 34eaa00f7..db9e299dd 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -117,17 +117,14 @@ class PackageIndexNEIBannerConcent extends Component { // this.contentMdRef.current.setValue("测试赋值") } - // componentDidUpdate = (prevProps) => { - // if(prevProps.current_user.username!=this.props.current_user){ - // if(this.props.current_user!=undefined){ - // console.log(this.props.current_user) - // this.setState({ - // contact_name:this.props.current_user.username - // }) - // } - // - // } - // } + componentDidUpdate = (prevProps) => { + if(prevProps.current_user.username != this.props.current_user.username){ + console.log(this.props.current_user) + this.setState({ + contact_name:this.props.current_user.username + }) + } + } //获取验证码; getverificationcode =()=>{ // if (this.state.logins&&this.state.logins.length === 0) { From 7b6324f775d19b7cd0e97f17983d6532b750ee91 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 16:22:34 +0800 Subject: [PATCH 16/62] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=95=E5=8D=B7?= =?UTF-8?q?=E7=9A=84=E6=88=90=E7=BB=A9excel=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 7c8c07d01..126362fe8 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1256,13 +1256,15 @@ class ExercisesController < ApplicationController normal_status(-1,"试卷未发布") elsif (@exercise_users_size == 0) || ( @export_ex_users&.exercise_user_committed.size == 0) normal_status(-1,"暂无用户提交") + elsif params[:export].present? && params[:export] + normal_status(0,"正在下载中") else respond_to do |format| format.xlsx{ get_export_users(@exercise,@course,@export_ex_users) exercise_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{exercise_export_name_.strip}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns} + render xlsx: "#{exercise_export_name_.strip}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns},cookies:{fileDownload:true,HttpOnly:false} } end end From d49209b3e18c9550f7c457ae3f5dd846b1787ae6 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 16:26:33 +0800 Subject: [PATCH 17/62] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=AF=95=E5=8D=B7?= =?UTF-8?q?=E7=9A=84excel,pdf,zip=E7=9A=84=E5=AF=BC=E5=87=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 6 +++++- app/controllers/zips_controller.rb | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 126362fe8..c22bd3217 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1283,7 +1283,11 @@ class ExercisesController < ApplicationController @exercise_questions = @exercise.exercise_questions.includes(:exercise_choices).order("question_number ASC") filename_ = "#{@exercise.user.real_name}_#{@course.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}.pdf" stylesheets = "#{Rails.root}/app/templates/exercise_export/exercise_export.css" - render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets,cookies:{fileDownload:true,HttpOnly:false} + end end #空白试卷预览页面,仅供测试使用,无其他任何用途 diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index f4822b96b..f3ae9df5a 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -18,7 +18,11 @@ class ZipsController < ApplicationController exercises = ExportExercisesService.new(@exercise,@ex_users,@request_url) file_name_ = filename_for_content_disposition(exercises.filename) - send_file exercises.ex_zip, filename: file_name_, type: 'application/zip' + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + send_file exercises.ex_zip, filename: file_name_, type: 'application/zip', cookies:{fileDownload:true,HttpOnly:false} + end rescue Exception => e normal_status(-1, e.message) end From 07119404389c454797b7b2070e0cb03c1878d88b 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, 30 Jul 2019 16:36:01 +0800 Subject: [PATCH 18/62] b --- .../PackageIndexNEITaskDetails.js | 5 +++-- .../PackageIndexNewandEdit/PackageIndexNEISubmit.js | 4 ++-- .../PackageIndexNewandEdit/PackageIndexNewandEditIndex.js | 7 +++++++ .../react/src/modules/projectPackages/packageconcnet.css | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index b71c36eec..35ca952a7 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -265,7 +265,7 @@ class PackageIndexNEITaskDetails extends Component {
    -
    +
    {data&&data.status==="pending"?
    @@ -281,7 +281,8 @@ class PackageIndexNEITaskDetails extends Component {
    + src={`/images/${data&&data.creator.image_url}`} + width="70"/>
    {data&&data.creator.name} diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js index 9f287e90e..e44e654b9 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js @@ -29,8 +29,8 @@ class PackageIndexNEISubmit extends Component {

    -
    恭喜!
    -
    提交成功
    +
    恭喜!
    +
    提交成功
    平台正在审核您的申请,审核结果将以平台消息的形式通知您
    this.setageload(this.props.id)}>查看发布需求 diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js index 1571fd77a..0481577bf 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js @@ -27,6 +27,12 @@ class PackageIndexNewandEditIndex extends Component{ id:ids }) } + + goback = () => { + // window.history.go(-1) + window.location.href="/crowdsourcing"; + } + render() { let {setPublication}=this.state; return ( @@ -37,6 +43,7 @@ class PackageIndexNewandEditIndex extends Component{

    {this.props.match.params.id!=undefined?"编辑":"新建"} + 返回

    diff --git a/public/react/src/modules/projectPackages/packageconcnet.css b/public/react/src/modules/projectPackages/packageconcnet.css index 74119e2b4..7a8c11897 100644 --- a/public/react/src/modules/projectPackages/packageconcnet.css +++ b/public/react/src/modules/projectPackages/packageconcnet.css @@ -167,7 +167,7 @@ color:#999; } .padding251{ - padding: 0px 251px; + padding: 0px 245px; } .ant-modal-title{ From de4dfc5c06a149378a9067107afb66d4d569d758 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 16:36:57 +0800 Subject: [PATCH 19/62] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E7=9A=84excel=E5=92=8C?= =?UTF-8?q?zip=E5=AF=BC=E5=87=BA=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 8 ++++++-- app/controllers/zips_controller.rb | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 5cccb3ee7..628da5bda 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -207,19 +207,23 @@ class HomeworkCommonsController < ApplicationController tip_exception(403, "无权限操作") elsif @work_excel.blank? || @work_excel.size == 0 normal_status(-1,"暂无用户提交!") + elsif params[:export].present? && params[:export] + normal_status(0,"正在下载中") else respond_to do |format| format.xlsx{ student_work_to_xlsx(@work_excel,@homework) exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals: - {table_columns: @work_head_cells,task_users: @work_cells_column} + {table_columns: @work_head_cells,task_users: @work_cells_column},cookies:{fileDownload:true,HttpOnly:false} } end end elsif params[:format] == "zip" if @user_course_identity >= Course::STUDENT tip_exception(403, "无权限操作") + elsif params[:export].present? && params[:export] + normal_status(0,"正在下载中") else if @work_excel.present? zip_works = @work_excel&.where("work_status > 0") @@ -233,7 +237,7 @@ class HomeworkCommonsController < ApplicationController format.zip{ zipfile = zip_homework_common @homework, zip_works file = decode64(zipfile[0][:base64file]) - send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' + send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip',cookies:{fileDownload:true,HttpOnly:false} } end else diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index f3ae9df5a..e531776a9 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -8,7 +8,12 @@ class ZipsController < ApplicationController def shixun_report service = BatchExportShixunReportService.new(@homework, @all_student_works) filename_ = filename_for_content_disposition(service.filename) - send_file service.zip, filename: filename_, type: 'application/zip' + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + send_file service.zip, filename: filename_, type: 'application/zip',cookies:{fileDownload:true,HttpOnly:false} + end + rescue BatchExportShixunReportService::Error => ex normal_status(-1, ex.message) end From 22da157241579b9d0a3fd542a364e5f92a0f7cd2 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, 30 Jul 2019 16:45:18 +0800 Subject: [PATCH 20/62] b --- public/react/src/App.js | 2 +- .../projectPackages/PackageIndex/PackageConcent.js | 4 ++-- .../PackageIndexNEITaskDetails.js | 6 +++--- .../PackageIndexNEIBannerConcent.js | 4 ++-- .../PackageIndexNewandEdit/PackageIndexNEISubmit.js | 4 ++-- .../PackageIndexNewandEdit/PackageIndexNewandEditIndex.js | 2 +- .../src/modules/projectPackages/ProjectPackageIndex.js | 8 ++++---- public/react/src/modules/tpm/NewHeader.js | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/public/react/src/App.js b/public/react/src/App.js index 6d1e2a521..e713cd0fd 100644 --- a/public/react/src/App.js +++ b/public/react/src/App.js @@ -304,7 +304,7 @@ class App extends Component { {/**/} {/*众包创新*/} - + {/*认证*/} diff --git a/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js b/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js index 921c3e555..cfc54bb98 100644 --- a/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndex/PackageConcent.js @@ -158,7 +158,7 @@ class PackageConcent extends Component { enterButton={ 搜索} onSearch={ (value)=>this.setdatafuns(value)} />

    @@ -224,7 +224,7 @@ class PackageConcent extends Component { diff --git a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js index 35ca952a7..ac7c8a1a5 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js +++ b/public/react/src/modules/projectPackages/PackageIndexNEITaskDetails/PackageIndexNEITaskDetails.js @@ -230,7 +230,7 @@ class PackageIndexNEITaskDetails extends Component { } goback = () => { // window.history.go(-1) - window.location.href="/crowdsourcing"; + window.location.href="/crowdsourcings"; } render() { @@ -252,7 +252,7 @@ class PackageIndexNEITaskDetails extends Component { '} className={"fl"}> {/*{this.props.current_user.username}*/} - 众包创新 + 众包创新 {data&&data.title} @@ -353,7 +353,7 @@ class PackageIndexNEITaskDetails extends Component { 需求详情: {data&&data.status==="pending"&&data&&data.operation.can_select_bidding_user===true?:""} diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index db9e299dd..ab362b812 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -458,7 +458,7 @@ class PackageIndexNEIBannerConcent extends Component { if(type===true){ this.props.setPublicationfun(response.data.id) }else{ - window.location.href="/crowdsourcing/"+response.data.id + window.location.href="/crowdsourcings/"+response.data.id } this.setState({ springtype:false @@ -506,7 +506,7 @@ class PackageIndexNEIBannerConcent extends Component { if(type===true){ this.props.setPublicationfun(response.data.id) }else{ - window.location.href="/crowdsourcing/"+response.data.id + window.location.href="/crowdsourcings/"+response.data.id } this.setState({ springtype:false diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js index e44e654b9..932b9295f 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEISubmit.js @@ -14,10 +14,10 @@ class PackageIndexNEISubmit extends Component { } setageload=(sum)=>{ if(sum===undefined){ - window.location.href="/crowdsourcing/new" + window.location.href="/crowdsourcings/new" }else{ // this.props.history.push("/project_packages/"+sum) - window.location.href="/crowdsourcing/"+sum + window.location.href="/crowdsourcings/"+sum } } diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js index 0481577bf..8d73a6e55 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNewandEditIndex.js @@ -30,7 +30,7 @@ class PackageIndexNewandEditIndex extends Component{ goback = () => { // window.history.go(-1) - window.location.href="/crowdsourcing"; + window.location.href="/crowdsourcings"; } render() { diff --git a/public/react/src/modules/projectPackages/ProjectPackageIndex.js b/public/react/src/modules/projectPackages/ProjectPackageIndex.js index 097e012e0..6f2e32b8b 100644 --- a/public/react/src/modules/projectPackages/ProjectPackageIndex.js +++ b/public/react/src/modules/projectPackages/ProjectPackageIndex.js @@ -43,25 +43,25 @@ class ProjectPackageIndex extends Component { {/*众包首页*/} - () } > - () } > - () } > - () } diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index 79b0aa443..34ee824aa 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -718,7 +718,7 @@ submittojoinclass=(value)=>{
  • 教学案例
  • 众包创新
  • 交流问答
  • Date: Tue, 30 Jul 2019 16:47:01 +0800 Subject: [PATCH 21/62] =?UTF-8?q?=E4=BC=97=E5=8C=85=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/tpm/NewHeader.js | 2 +- public/react/src/modules/user/usersInfo/Infos.js | 10 +++++----- .../react/src/modules/user/usersInfo/InfosPackage.js | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index 34ee824aa..b84982d86 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -816,7 +816,7 @@ submittojoinclass=(value)=>{
  • 我的实训
  • 我的实践课程
  • 我的项目
  • -
  • 我的众包
  • + {/*
  • 我的众包
  • */}
  • 账号管理
  • {/*
  • this.educoderlogin()} >登入测试接口
  • */} {/*
  • this.trialapplications()} >试用申请
  • */} diff --git a/public/react/src/modules/user/usersInfo/Infos.js b/public/react/src/modules/user/usersInfo/Infos.js index 5286c5797..f20cd5be5 100644 --- a/public/react/src/modules/user/usersInfo/Infos.js +++ b/public/react/src/modules/user/usersInfo/Infos.js @@ -384,11 +384,11 @@ class Infos extends Component{ to={`/users/${username}/projects`}>项目 -
  • - this.setState({moduleName: 'package'})} - to={`/users/${username}/package`}>众包 -
  • + {/*
  • */} + {/* this.setState({moduleName: 'package'})}*/} + {/*to={`/users/${username}/package`}>众包*/} + {/*
  • */} {/*{ data && data.identity!="学生" &&
  • 题库
  • }*/} diff --git a/public/react/src/modules/user/usersInfo/InfosPackage.js b/public/react/src/modules/user/usersInfo/InfosPackage.js index 638b2ecd2..f1077cd62 100644 --- a/public/react/src/modules/user/usersInfo/InfosPackage.js +++ b/public/react/src/modules/user/usersInfo/InfosPackage.js @@ -12,7 +12,7 @@ import { CNotificationHOC } from '../../courses/common/CNotificationHOC' import "./usersInfo.css" import Create from './publicCreatNew' -class InfosCourse extends Component{ +class InfosPackage extends Component{ constructor(props){ super(props); this.state={ @@ -123,4 +123,4 @@ class InfosCourse extends Component{ ) } } -export default InfosCourse; \ No newline at end of file +export default InfosPackage; \ No newline at end of file From 7f8e1acd9d5de0d2cb274f95b0f73cdae0270e73 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 16:50:23 +0800 Subject: [PATCH 22/62] fixbug --- app/controllers/homework_commons_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 628da5bda..adabc330f 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -212,10 +212,11 @@ class HomeworkCommonsController < ApplicationController else respond_to do |format| format.xlsx{ + cookies.signed[:fileDownload] = { value: true, httponly: false } student_work_to_xlsx(@work_excel,@homework) exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals: - {table_columns: @work_head_cells,task_users: @work_cells_column},cookies:{fileDownload:true,HttpOnly:false} + {table_columns: @work_head_cells,task_users: @work_cells_column} } end end @@ -235,9 +236,10 @@ class HomeworkCommonsController < ApplicationController if status == 0 respond_to do |format| format.zip{ + cookies.signed[:fileDownload] = { value: true, httponly: false } zipfile = zip_homework_common @homework, zip_works file = decode64(zipfile[0][:base64file]) - send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip',cookies:{fileDownload:true,HttpOnly:false} + send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' } end else From 7ccc549ccd336422fff3a5e75b86d08211da7834 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, 30 Jul 2019 16:57:27 +0800 Subject: [PATCH 23/62] b --- .../PackageIndexNEIBannerConcent.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index ab362b812..a7e998fea 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -94,9 +94,6 @@ class PackageIndexNEIBannerConcent extends Component { }) }else{ console.log(this.props.current_user&&this.props.current_user.username) - this.setState({ - contact_name:this.props.current_user&&this.props.current_user.username - }) } let Url = `/project_package_categories.json`; @@ -114,16 +111,23 @@ class PackageIndexNEIBannerConcent extends Component { console.log(error) }) + this.setState({ + contact_name:this.props.current_user&&this.props.current_user.username + }) + // this.contentMdRef.current.setValue("测试赋值") } componentDidUpdate = (prevProps) => { + if(prevProps.current_user.username != this.props.current_user.username){ - console.log(this.props.current_user) + if(this.props.current_user!=undefined){ this.setState({ contact_name:this.props.current_user.username }) + } } + } //获取验证码; getverificationcode =()=>{ From 8f7c8505294f917989bcc08c787bc804bbe82eaa 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, 30 Jul 2019 17:02:25 +0800 Subject: [PATCH 24/62] b --- .../PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index a7e998fea..ccc335115 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -120,14 +120,14 @@ class PackageIndexNEIBannerConcent extends Component { componentDidUpdate = (prevProps) => { - if(prevProps.current_user.username != this.props.current_user.username){ + if(prevProps.current_user!=this.props.current_user){ if(this.props.current_user!=undefined){ this.setState({ contact_name:this.props.current_user.username }) } } - + } //获取验证码; getverificationcode =()=>{ From 49d4f3f9d79de3dfbf8a46d541bf157fcd9ac0ca Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 17:04:39 +0800 Subject: [PATCH 25/62] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E7=9A=84excel=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 4 ++-- app/controllers/homework_commons_controller.rb | 3 ++- app/controllers/zips_controller.rb | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index c22bd3217..915a4e22c 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1264,7 +1264,7 @@ class ExercisesController < ApplicationController get_export_users(@exercise,@course,@export_ex_users) exercise_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{exercise_export_name_.strip}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns},cookies:{fileDownload:true,HttpOnly:false} + render xlsx: "#{exercise_export_name_.strip}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns} } end end @@ -1286,7 +1286,7 @@ class ExercisesController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else - render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets,cookies:{fileDownload:true,HttpOnly:false} + render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets end end diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index adabc330f..f9e0e6436 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -212,7 +212,8 @@ class HomeworkCommonsController < ApplicationController else respond_to do |format| format.xlsx{ - cookies.signed[:fileDownload] = { value: true, httponly: false } + cookies[:fileDownload] = true + cookies[:httponly] = false student_work_to_xlsx(@work_excel,@homework) exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals: diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index e531776a9..209871ad2 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -11,7 +11,7 @@ class ZipsController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else - send_file service.zip, filename: filename_, type: 'application/zip',cookies:{fileDownload:true,HttpOnly:false} + send_file service.zip, filename: filename_, type: 'application/zip' end rescue BatchExportShixunReportService::Error => ex @@ -26,7 +26,7 @@ class ZipsController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else - send_file exercises.ex_zip, filename: file_name_, type: 'application/zip', cookies:{fileDownload:true,HttpOnly:false} + send_file exercises.ex_zip, filename: file_name_, type: 'application/zip' end rescue Exception => e normal_status(-1, e.message) From 85ddec348daf05f7e8d1c15a465c7ac520dcf60d 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, 30 Jul 2019 17:07:33 +0800 Subject: [PATCH 26/62] =?UTF-8?q?=E4=BC=97=E5=8C=85=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js index ccc335115..eae5589f2 100644 --- a/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js +++ b/public/react/src/modules/projectPackages/PackageIndexNewandEdit/PackageIndexNEIBannerConcent.js @@ -715,7 +715,7 @@ class PackageIndexNEIBannerConcent extends Component {

    -
    +
    From 63c4bf069ab1f7caa8685c47c25f46b9ac879445 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 17:11:13 +0800 Subject: [PATCH 27/62] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=9A=84excel=E5=AF=BC=E5=87=BA1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 3 +-- app/controllers/zips_controller.rb | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index f9e0e6436..dfa6795fb 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -213,7 +213,6 @@ class HomeworkCommonsController < ApplicationController respond_to do |format| format.xlsx{ cookies[:fileDownload] = true - cookies[:httponly] = false student_work_to_xlsx(@work_excel,@homework) exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals: @@ -237,7 +236,7 @@ class HomeworkCommonsController < ApplicationController if status == 0 respond_to do |format| format.zip{ - cookies.signed[:fileDownload] = { value: true, httponly: false } + cookies[:fileDownload] = true zipfile = zip_homework_common @homework, zip_works file = decode64(zipfile[0][:base64file]) send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index 209871ad2..bea5784c7 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -11,6 +11,7 @@ class ZipsController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else + cookies[:fileDownload] = true send_file service.zip, filename: filename_, type: 'application/zip' end From 9f1e0c43fe764dcab42a34ce61e64d3b0aec3ce2 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, 30 Jul 2019 17:11:24 +0800 Subject: [PATCH 28/62] =?UTF-8?q?=E4=BC=97=E5=8C=85=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/educoder/path.png | Bin 0 -> 59814 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/educoder/path.png diff --git a/public/images/educoder/path.png b/public/images/educoder/path.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b6f1715d7484cd22de10d27f241ac8522f0430 GIT binary patch literal 59814 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ʅpGwUM9nIkJ9*K|gbD)C>J{ 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 Date: Tue, 30 Jul 2019 17:17:07 +0800 Subject: [PATCH 29/62] banner --- public/react/public/css/edu-all.css | 2 +- public/stylesheets/educoder/edu-all.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/react/public/css/edu-all.css b/public/react/public/css/edu-all.css index 8b7c727a9..fad3568b4 100644 --- a/public/react/public/css/edu-all.css +++ b/public/react/public/css/edu-all.css @@ -420,7 +420,7 @@ table.text-file{} /*-------------------------------实训路径-------------------------------*/ -.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.jpg");background-color: #081C4B;background-size: 100% 100%;} +.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png");background-color: #081C4B;background-size: 100% 100%;} .pathNavLine{position: absolute;bottom: -8px;width: 100%;} .path-nav li{float: left;padding: 0px 30px;height: 42px;} .path-nav li a{color:#fff;font-size: 16px;display: block; height: 40px;} diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index 65ff14a59..ec245b196 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -422,7 +422,7 @@ table.text-file{} /*-------------------------------实训路径-------------------------------*/ -.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.jpg");background-color: #081C4B;background-size: 100% 100%;} +.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png");background-color: #081C4B;background-size: 100% 100%;} .pathNavLine{position: absolute;bottom: -8px;width: 100%;} .path-nav li{float: left;padding: 0px 30px;height: 42px;} .path-nav li a{color:#fff;font-size: 16px;display: block; height: 40px;} From af40f08f047b5dbab80e1ea7ba1ca4de19fbb573 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Tue, 30 Jul 2019 17:23:27 +0800 Subject: [PATCH 30/62] init --- public/react/src/modules/user/account/AccountBasicEdit.js | 2 +- public/react/src/modules/user/modal/ApplyForAddChildOrgModal.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/user/account/AccountBasicEdit.js b/public/react/src/modules/user/account/AccountBasicEdit.js index a4637c00e..612e47d9f 100644 --- a/public/react/src/modules/user/account/AccountBasicEdit.js +++ b/public/react/src/modules/user/account/AccountBasicEdit.js @@ -719,7 +719,7 @@ class AccountBasic extends Component { { - (!filterDepartments || (filterDepartments && filterDepartments.length==0 ) + filterDepartments != undefined && ( (filterDepartments && filterDepartments.length==0 ) || (departmentsName == '' && !this.state.department_id && (!departments || departments.length == 0) )) &&
    diff --git a/public/react/src/modules/user/modal/ApplyForAddChildOrgModal.js b/public/react/src/modules/user/modal/ApplyForAddChildOrgModal.js index be53dbdec..db32beed3 100644 --- a/public/react/src/modules/user/modal/ApplyForAddChildOrgModal.js +++ b/public/react/src/modules/user/modal/ApplyForAddChildOrgModal.js @@ -16,7 +16,7 @@ class ApplyForAddChildOrgModal extends Component{ } componentDidUpdate=(prevState)=>{ - if(this.props.departmentName && prevState.departmentName != this.props.departmentName){ + if(prevState.departmentName != this.props.departmentName){ this.setValue(this.props.departmentName) } } From 3db448643d257539a1d06e05841e85ba7b57935c 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, 30 Jul 2019 17:25:30 +0800 Subject: [PATCH 31/62] b --- public/react/src/modules/tpm/TPMIndexHOC.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index 0cf22376f..788044b23 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -20,7 +20,7 @@ const versionNum = '0001'; // let _url_origin = getUrl() let _url_origin=''; if(window.location.port === "3007"){ - _url_origin="http://47.96.87.25:48080/"; + _url_origin="http://47.96.87.25:48080"; } // let _url_origin=`https://www.educoder.net`; From 3041f2a4e0a7adc908670e151a8c470cf656d5ee 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, 30 Jul 2019 17:30:46 +0800 Subject: [PATCH 32/62] b --- public/compatibility.html | 6 +++--- public/react/src/modules/tpm/TPMIndexHOC.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/public/compatibility.html b/public/compatibility.html index f13c673f5..f28bad2c8 100644 --- a/public/compatibility.html +++ b/public/compatibility.html @@ -5,9 +5,9 @@ EduCoder - - - + + + diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index 788044b23..b0bcf6f2a 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -32,14 +32,14 @@ if (!window['indexHOCLoaded']) { // $('head').append($('') // .attr('href', `${_url_origin}/stylesheets/educoder/antd.min.css?1525440977`)); $('head').append($('') - .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?1525440977`)); + .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?15254409771`)); $('head').append($('') - .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?1525440978`)); + .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?15254409781`)); // index.html有加载 $('head').append($('') - .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?1525440978`)); + .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?15254409781`)); // $('head').append($('') From 752a88d5f036d9559ddbb4999dcef8f35a5d3991 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Tue, 30 Jul 2019 17:32:47 +0800 Subject: [PATCH 33/62] message_detail --- public/react/src/modules/modals/DownloadMessage.js | 2 +- public/react/src/modules/modals/DownloadMessageysl.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/modals/DownloadMessage.js b/public/react/src/modules/modals/DownloadMessage.js index 2822614de..b7796316c 100644 --- a/public/react/src/modules/modals/DownloadMessage.js +++ b/public/react/src/modules/modals/DownloadMessage.js @@ -18,7 +18,7 @@ class DownloadMessage extends Component { setDownload=()=>{ this.modalCancel(); - window.open(`/users/${this.props.user.login}/private_messages`) + window.open(`/users/${this.props.user.login}/message_detail?user_id=1`) } modalCancel = () => { this.setState({ diff --git a/public/react/src/modules/modals/DownloadMessageysl.js b/public/react/src/modules/modals/DownloadMessageysl.js index 3f81a93a6..b5c23960a 100644 --- a/public/react/src/modules/modals/DownloadMessageysl.js +++ b/public/react/src/modules/modals/DownloadMessageysl.js @@ -11,7 +11,7 @@ class DownloadMessageysl extends Component { setDownload=()=>{ this.props.modalCancel(); - window.open(`/users/${this.props.user.login}/private_messages`) + window.open(`/users/${this.props.user.login}/message_detail?user_id=1`) } render() { From 78c164c08fdce96387cd0b23ac7cdb20abaaa1cc Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Tue, 30 Jul 2019 17:56:26 +0800 Subject: [PATCH 34/62] export=true --- .../react/src/modules/courses/busyWork/CommonWorkDetailIndex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js index 2d3361492..dd5d7bf01 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js @@ -106,7 +106,7 @@ class CommonWorkDetailIndex extends Component{ /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '&export=true' ).then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ From 43fb9b180b04087bc6773287581d1705b35a51a6 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Tue, 30 Jul 2019 17:59:17 +0800 Subject: [PATCH 35/62] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 4 ++++ .../homework_commons_controller.rb | 22 ++++++++++--------- app/controllers/zips_controller.rb | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e825d53da..c76ca51a7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -583,4 +583,8 @@ class ApplicationController < ActionController::Base def render_parameter_missing render json: { status: -1, message: '参数缺失' } end + + def set_export_cookies + cookies[:fileDownload] = true + end end diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index dfa6795fb..f7906ecda 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -212,7 +212,7 @@ class HomeworkCommonsController < ApplicationController else respond_to do |format| format.xlsx{ - cookies[:fileDownload] = true + set_export_cookies student_work_to_xlsx(@work_excel,@homework) exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals: @@ -223,8 +223,6 @@ class HomeworkCommonsController < ApplicationController elsif params[:format] == "zip" if @user_course_identity >= Course::STUDENT tip_exception(403, "无权限操作") - elsif params[:export].present? && params[:export] - normal_status(0,"正在下载中") else if @work_excel.present? zip_works = @work_excel&.where("work_status > 0") @@ -234,13 +232,17 @@ class HomeworkCommonsController < ApplicationController end if status == 0 - respond_to do |format| - format.zip{ - cookies[:fileDownload] = true - zipfile = zip_homework_common @homework, zip_works - file = decode64(zipfile[0][:base64file]) - send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' - } + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + respond_to do |format| + format.zip{ + set_export_cookies + zipfile = zip_homework_common @homework, zip_works + file = decode64(zipfile[0][:base64file]) + send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' + } + end end else normal_status(status, status == -2 ? "500M" : "无附件可下载") diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index bea5784c7..b1f7804a9 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -11,7 +11,7 @@ class ZipsController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else - cookies[:fileDownload] = true + set_export_cookies send_file service.zip, filename: filename_, type: 'application/zip' end From 4e4d011d4339d819254482d838f6773844b4f62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Tue, 30 Jul 2019 22:01:12 +0800 Subject: [PATCH 36/62] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/busyWork/CommonWorkDetailIndex.js | 10 ++-- .../courses/busyWork/CommonWorkList.js | 3 +- .../courses/exercise/ExerciseDisplay.js | 30 ++++++++++++ .../courses/exercise/Exercisesetting.js | 33 ++++++++++++- .../exercise/Exercisestatisticalresult.js | 21 +++++++- .../exercise/Studentshavecompletedthelist.js | 49 +++++++++++++------ .../exercise/Testpapersettinghomepage.js | 25 +++++++--- 7 files changed, 139 insertions(+), 32 deletions(-) diff --git a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js index f1b9faab7..e34783933 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js @@ -102,8 +102,10 @@ class CommonWorkDetailIndex extends Component{ } /// 确认是否下载 - confirmysl(url){ - axios.get(url).then((response) => { + confirmysl(url,params){ + axios.get(url,{ + params + }).then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ @@ -171,7 +173,9 @@ class CommonWorkDetailIndex extends Component{ let params = {} if (isListModule) { // TODO - params =this.child._getRequestParams()!==undefined?this.child._getRequestParams():{}; + if(this.child!=undefined) { + params = this.child._getRequestParams() !== undefined ? this.child._getRequestParams() : {}; + } } // console.log("普通作业176176176"); // console.log(params); diff --git a/public/react/src/modules/courses/busyWork/CommonWorkList.js b/public/react/src/modules/courses/busyWork/CommonWorkList.js index 8bc029cec..9224e7eb2 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkList.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkList.js @@ -425,7 +425,8 @@ class CommonWorkList extends Component{ teacher_comment: arg_teacher_comment.length == 0 ? '' : arg_teacher_comment[0], order, limit: PAGE_SIZE, - b_order: orderMap[order] + b_order: orderMap[order], + group_id:arg_course_group, } } fetchList = () => { diff --git a/public/react/src/modules/courses/exercise/ExerciseDisplay.js b/public/react/src/modules/courses/exercise/ExerciseDisplay.js index bd70bece6..a0296476f 100644 --- a/public/react/src/modules/courses/exercise/ExerciseDisplay.js +++ b/public/react/src/modules/courses/exercise/ExerciseDisplay.js @@ -33,6 +33,21 @@ class ExerciseDisplay extends Component{ this.state = { exercise_questions: [], + exercise_group_id:[], + page:1, + limit:10, + searchtext:"", + order: "end_at", + } + } + _getRequestParams() { + const { order, exercise_group_id,searchtext, page ,limit} = this.state + return { + page, + search:searchtext, + order, + limit: limit, + group_id:exercise_group_id, } } componentDidMount = () => { @@ -49,6 +64,21 @@ class ExerciseDisplay extends Component{ console.log(error); }); } + try { + this.props.triggerRef(this); + }catch (e) { + + } + } + _getRequestParams() { + const { order, exercise_group_id,searchtext, page ,limit} = this.state + return { + page, + search:searchtext, + order, + limit: limit, + group_id:exercise_group_id, + } } render() { // let { question_title, question_score, question_type, question_choices, standard_answer, diff --git a/public/react/src/modules/courses/exercise/Exercisesetting.js b/public/react/src/modules/courses/exercise/Exercisesetting.js index 06269244d..9b6103fdb 100644 --- a/public/react/src/modules/courses/exercise/Exercisesetting.js +++ b/public/react/src/modules/courses/exercise/Exercisesetting.js @@ -63,17 +63,46 @@ class Exercisesetting extends Component{ choice_random:true, time:0, publish_timetype:false, - end_timetype:false + end_timetype:false, + exercise_group_id:[], + page:1, + limit:10, + searchtext:"", + order: "end_at", } console.log("Exercisesetting"); console.log("69"); console.log(props); } - + _getRequestParams() { + const { order, exercise_group_id,searchtext, page ,limit} = this.state + return { + page, + search:searchtext, + order, + limit: limit, + group_id:exercise_group_id, + } + } //加载 componentDidMount=()=>{ this.getSettingInfo(); // window.addEventListener('click', this.handleClick); + try { + this.props.triggerRef(this); + }catch (e) { + + } + } + _getRequestParams() { + const { order, exercise_group_id,searchtext, page ,limit} = this.state + return { + page, + search:searchtext, + order, + limit: limit, + group_id:exercise_group_id, + } } // handleClick=(e)=>{ diff --git a/public/react/src/modules/courses/exercise/Exercisestatisticalresult.js b/public/react/src/modules/courses/exercise/Exercisestatisticalresult.js index 1771d87b3..34f32b234 100644 --- a/public/react/src/modules/courses/exercise/Exercisestatisticalresult.js +++ b/public/react/src/modules/courses/exercise/Exercisestatisticalresult.js @@ -23,15 +23,32 @@ class Exercisestatisticalresult extends Component { exercise_group_id:[], page:1, limit:10, + searchtext:"", + order: "end_at", + } } componentDidMount() { let{sort,exercise_group_id,page,limit}=this.state; - this.updatefun(sort,exercise_group_id,page,limit) - } + this.updatefun(sort,exercise_group_id,page,limit); + try { + this.props.triggerRef(this); + }catch (e) { + } + } + _getRequestParams() { + const { order, exercise_group_id,searchtext, page ,limit} = this.state + return { + page, + search:searchtext, + order, + limit: limit, + group_id:exercise_group_id, + } + } updatefun=(sort,exercise_group_id,page,limit)=>{ let ExerciseId=this.props.match.params.Id; let url = `/exercises/`+ExerciseId+`/exercise_result.json`; diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js index fffadccf6..fcfea19c3 100644 --- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js +++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js @@ -1213,6 +1213,11 @@ class Studentshavecompletedthelist extends Component { // console.log("2222222222222"); // console.log(this.props.isAdmin()); // } + try { + this.props.triggerRef(this); + }catch (e) { + + } } componentWillReceiveProps = (nextProps) => { @@ -2279,22 +2284,8 @@ class Studentshavecompletedthelist extends Component { this.Searchdatasys(this.state.order, this.state.commit_status, this.state.review, this.state.checkedValuesineinfo, this.state.searchtext, 1, this.state.limit); } - } - //搜索学生 文字输入 - inputSearchValues = (e) => { - // console.log(e.target.value) - if (e.target.value === "") { - this.setState({ - searchtext: undefined, - }) - } else { - this.setState({ - searchtext: e.target.value, - }) - } - - } - //搜索学生按钮输入 + }; + //搜索学生按钮输入 老师 searchValues = (value) => { //点击直接搜索 // if(value === ""){ @@ -2313,8 +2304,34 @@ class Studentshavecompletedthelist extends Component { // console.log(value) + }; + _getRequestParams() { + const { order, course_groups,searchtext, page ,limit} = this.state + return { + page, + search:searchtext, + order, + limit: limit, + group_id:course_groups, + } } + //搜索学生 文字输入 + inputSearchValues = (e) => { + // console.log(e.target.value) + if (e.target.value === "") { + this.setState({ + searchtext: undefined, + }) + } else { + this.setState({ + searchtext: e.target.value, + }) + } + + }; + + //排序 funordersy = (e) => { if (e === "end_at") { diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index ddb448cfc..333824538 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -163,8 +163,10 @@ class Testpapersettinghomepage extends Component{ } /// 确认是否下载 - confirmysl(url){ - axios.get(url).then((response) => { + confirmysl(url,params){ + axios.get(url,{ + params + }).then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ @@ -218,6 +220,7 @@ class Testpapersettinghomepage extends Component{ // DownloadMessageval:undefined // }) // } + bindRef = ref => { this.child = ref }; goback=()=>{ // let {datalist}=this.state; // let courseId=this.props.match.params.coursesId; @@ -236,7 +239,13 @@ class Testpapersettinghomepage extends Component{ let {tab,visible,Commonheadofthetestpaper}=this.state; const isAdmin =this.props.isAdmin(); const isStudent = this.props.isStudent(); - + // TODO + let params ={} + if(this.child!=undefined){ + params =this.child._getRequestParams()!==undefined?this.child._getRequestParams():{}; + } + // console.log("246"); + // console.log(this.child); return(
    {/* 导出 @@ -400,22 +409,22 @@ class Testpapersettinghomepage extends Component{ /> { // 教师列表 - parseInt(tab[0])==0 && this.setcourse_groupysls(value)} current_status = {this.state.current_status}> + parseInt(tab[0])==0 && this.setcourse_groupysls(value)} current_status = {this.state.current_status}> } {/*统计结果*/} { - parseInt(tab[0])==1 && + parseInt(tab[0])==1 && } { - parseInt(tab[0])==2 && + parseInt(tab[0])==2 && } { - parseInt(tab[0])==3 && + parseInt(tab[0])==3 && }
    From 64cab73cf74843a10f77ba477ca1d482b4ae4461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Tue, 30 Jul 2019 22:44:39 +0800 Subject: [PATCH 37/62] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/busyWork/CommonWorkDetailIndex.js | 15 +++++++++++---- .../exercise/Studentshavecompletedthelist.js | 11 +++++++---- .../exercise/Testpapersettinghomepage.js | 19 ++++++++++--------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js index 2a211007b..9989de401 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js @@ -104,7 +104,14 @@ class CommonWorkDetailIndex extends Component{ } /// 确认是否下载 - confirmysl(url,params){ + confirmysl(url,child){ + let params = {} + if (isListModule) { + // TODO + if(child!=undefined) { + params = child._getRequestParams() !== undefined ? child._getRequestParams() : {}; + } + } axios.get(url+ '&export=true',{ params }).then((response) => { @@ -131,7 +138,7 @@ class CommonWorkDetailIndex extends Component{ this.setState({ donwloading: true }) downloadFile({ url: url, - params:params, + params, successCallback: (url) => { this.setState({ donwloading: false }) console.log('successCallback') @@ -317,13 +324,13 @@ class CommonWorkDetailIndex extends Component{
  • this.confirmysl(exportResultUrl, exportParams)} + onClick={() => this.confirmysl(exportResultUrl,this.child)} >导出成绩
  • this.confirmysl(exportUrl, exportParams)} + onClick={() => this.confirmysl(exportUrl,this.child)} >导出作品附件
  • diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js index fcfea19c3..3f60710c1 100644 --- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js +++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js @@ -1389,7 +1389,8 @@ class Studentshavecompletedthelist extends Component { loadingstate: true, }) } - + console.log(response); + console.log(1393); thiss.Generatenewdatasy(response.data.exercise_users, response); } }).catch((error) => { @@ -1992,6 +1993,8 @@ class Studentshavecompletedthelist extends Component { this.setState({ loadingstate: false, }) + console.log(response); + console.log(1997); this.Generatenewdatasy(response.data.exercise_users, response); }).catch((error) => { console.log(error) @@ -2306,13 +2309,13 @@ class Studentshavecompletedthelist extends Component { }; _getRequestParams() { - const { order, course_groups,searchtext, page ,limit} = this.state + const { order, checkedValuesineinfo,searchtext, page ,limit} = this.state return { page, search:searchtext, - order, + group_id:checkedValuesineinfo, limit: limit, - group_id:course_groups, + order, } } diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index ec7fc189c..243ab98f5 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -163,9 +163,15 @@ class Testpapersettinghomepage extends Component{ } /// 确认是否下载 - confirmysl(url,params){ + confirmysl(url,child){ + let params ={} + if(child!=undefined){ + params =child._getRequestParams()!==undefined?child._getRequestParams():{}; + } + console.log("170"); + console.log(params); axios.get(url,{ - params + params }).then((response) => { if(response.data.status&&response.data.status===-1){ @@ -240,12 +246,7 @@ class Testpapersettinghomepage extends Component{ const isAdmin =this.props.isAdmin(); const isStudent = this.props.isStudent(); // TODO - let params ={} - if(this.child!=undefined){ - params =this.child._getRequestParams()!==undefined?this.child._getRequestParams():{}; - } - // console.log("246"); - // console.log(this.child); + return(
    {/* 导出 From d0153307f8435bbb3e35a5613ce1edc748519e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Tue, 30 Jul 2019 23:38:23 +0800 Subject: [PATCH 38/62] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/busyWork/CommonWorkDetailIndex.js | 22 +++++++------------ .../exercise/Studentshavecompletedthelist.js | 3 +++ .../exercise/Testpapersettinghomepage.js | 10 +++++++-- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js index 9989de401..b8a5d450c 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js @@ -66,6 +66,7 @@ class CommonWorkDetailIndex extends Component{ this.state = { DownloadType:false, DownloadMessageval:undefined, + donwloading:false, } } initWorkDetailCommonState = (data) => { @@ -104,17 +105,11 @@ class CommonWorkDetailIndex extends Component{ } /// 确认是否下载 - confirmysl(url,child){ - let params = {} - if (isListModule) { - // TODO - if(child!=undefined) { - params = child._getRequestParams() !== undefined ? child._getRequestParams() : {}; - } - } - axios.get(url+ '&export=true',{ - params - }).then((response) => { + confirmysl(url){ + axios.get(url+ '&export=true').then((response) => { + if(response===undefined){ + return + } if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ @@ -138,7 +133,6 @@ class CommonWorkDetailIndex extends Component{ this.setState({ donwloading: true }) downloadFile({ url: url, - params, successCallback: (url) => { this.setState({ donwloading: false }) console.log('successCallback') @@ -324,13 +318,13 @@ class CommonWorkDetailIndex extends Component{
  • this.confirmysl(exportResultUrl,this.child)} + onClick={() => this.confirmysl(exportResultUrl)} >导出成绩
  • this.confirmysl(exportUrl,this.child)} + onClick={() => this.confirmysl(exportUrl)} >导出作品附件
  • diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js index 3f60710c1..f7a989f79 100644 --- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js +++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js @@ -1990,6 +1990,9 @@ class Studentshavecompletedthelist extends Component { }).then((response) => { // console.log("528"); // console.log(JSON.stringify(response)); + if(response===undefined){ + return + } this.setState({ loadingstate: false, }) diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 243ab98f5..076f6a759 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -19,7 +19,7 @@ import Ecerciseallbackagain from './Ecerciseallbackagain'; const polls_status={1:"未发布",2:"提交中",3:"已截止",4:"已结束"} const start_Value={0:"继续答题",1:"查看答题",2:"开始答题"} - +const qs = require('qs'); //试卷主要设置页面 class Testpapersettinghomepage extends Component{ constructor(props) { @@ -171,8 +171,14 @@ class Testpapersettinghomepage extends Component{ console.log("170"); console.log(params); axios.get(url,{ - params + params, + paramsSerializer: function(params) { + return qs.stringify(params, {arrayFormat: 'brackets'}) + } }).then((response) => { + if(response===undefined){ + return + } if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ From 2c590a4bea7852d0f4d1685161d77b9dd9317992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Tue, 30 Jul 2019 23:44:53 +0800 Subject: [PATCH 39/62] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/exercise/Testpapersettinghomepage.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 076f6a759..24e960a9d 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -1,7 +1,7 @@ import React,{ Component } from "react"; import {Checkbox,Input,Table, Pagination,Menu} from "antd"; import {Link,NavLink} from 'react-router-dom'; -import { WordsBtn ,ActionBtn} from 'educoder'; +import { WordsBtn ,ActionBtn,queryString} from 'educoder'; import CoursesListType from '../coursesPublic/CoursesListType'; import '../css/members.css'; import '../css/busyWork.css'; @@ -170,12 +170,7 @@ class Testpapersettinghomepage extends Component{ } console.log("170"); console.log(params); - axios.get(url,{ - params, - paramsSerializer: function(params) { - return qs.stringify(params, {arrayFormat: 'brackets'}) - } - }).then((response) => { + axios.get(url+`?${queryString.stringify(params)}`).then((response) => { if(response===undefined){ return } @@ -198,7 +193,7 @@ class Testpapersettinghomepage extends Component{ } }else { this.props.showNotification(`正在下载中`); - window.open("/api"+url, '_blank'); + window.open("/api"+url+`?${queryString.stringify(params)}`, '_blank'); } }).catch((error) => { console.log(error) From 7768b8482f1c04d5de52bfb654edb64ea3b35c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 31 Jul 2019 08:52:42 +0800 Subject: [PATCH 40/62] =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/paths/PathDetail/DetailCardsEditAndAdd.js | 4 +++- .../src/modules/paths/PathDetail/DetailCardsEditAndEdit.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js index 2d7bcc0e0..6f771ece8 100644 --- a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js +++ b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js @@ -500,7 +500,9 @@ class DetailCardsEditAndAdd extends Component{
  • Date: Wed, 31 Jul 2019 09:53:38 +0800 Subject: [PATCH 41/62] + '?export=true' --- .../src/modules/courses/busyWork/common/TabRightComponents.js | 2 +- .../src/modules/courses/exercise/Testpapersettinghomepage.js | 2 +- .../courses/graduation/tasks/GraduationTaskssetting.js | 2 +- .../courses/graduation/tasks/GraduationTaskssettinglist.js | 2 +- .../graduation/tasks/GraduationTaskssettingquestions.js | 2 +- public/react/src/modules/courses/graduation/topics/index.js | 2 +- public/react/src/modules/courses/members/studentsList.js | 2 +- public/react/src/modules/courses/poll/PollDetailIndex.js | 2 +- .../modules/courses/shixunHomework/Listofworksstudentone.js | 2 +- .../src/modules/courses/shixunHomework/ShixunStudentWork.js | 2 +- .../src/modules/courses/shixunHomework/Trainingjobsetting.js | 4 ++-- .../modules/courses/shixunHomework/Workquestionandanswer.js | 4 ++-- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/public/react/src/modules/courses/busyWork/common/TabRightComponents.js b/public/react/src/modules/courses/busyWork/common/TabRightComponents.js index a070ba69a..5320dd0ca 100644 --- a/public/react/src/modules/courses/busyWork/common/TabRightComponents.js +++ b/public/react/src/modules/courses/busyWork/common/TabRightComponents.js @@ -44,7 +44,7 @@ class TabRightComponents extends Component{ } /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true' ).then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 36b319f5a..5a410ab4a 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -164,7 +164,7 @@ class Testpapersettinghomepage extends Component{ } /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true' ).then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js index 5bbbe1a14..d6382165b 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js @@ -896,7 +896,7 @@ class GraduationTaskssettingapp extends Component{ } /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true' ).then((response) => { if(response === undefined){ return } diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js index 7d421da4b..1b98f00f3 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js @@ -645,7 +645,7 @@ class GraduationTaskssettinglist extends Component{ b_order:b_order, search:search, } - axios.get(url,{ + axios.get(url + '?export=true',{ params }).then((response) => { if(response === undefined){ diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js index 1bf6eb962..a812bd803 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js @@ -199,7 +199,7 @@ class GraduationTasksquestions extends Component{ /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true').then((response) => { if(response === undefined){ return } diff --git a/public/react/src/modules/courses/graduation/topics/index.js b/public/react/src/modules/courses/graduation/topics/index.js index f4303ff87..84b500716 100644 --- a/public/react/src/modules/courses/graduation/topics/index.js +++ b/public/react/src/modules/courses/graduation/topics/index.js @@ -322,7 +322,7 @@ onBoardsNew=()=>{ } /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true').then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index 6780948ef..d7c4cb85b 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -127,7 +127,7 @@ class studentsList extends Component{ } /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '&export=true').then((response) => { if(response === undefined){ return } diff --git a/public/react/src/modules/courses/poll/PollDetailIndex.js b/public/react/src/modules/courses/poll/PollDetailIndex.js index b1e8c3443..cdc6a5ae2 100644 --- a/public/react/src/modules/courses/poll/PollDetailIndex.js +++ b/public/react/src/modules/courses/poll/PollDetailIndex.js @@ -75,7 +75,7 @@ class PollDetailIndex extends Component{ /// 确认是否下载 confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true' ).then((response) => { if(response.data.status&&response.data.status===-1){ }else if(response.data.status&&response.data.status===-2){ diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 4dc41fcf7..17778dea9 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -2214,7 +2214,7 @@ class Listofworksstudentone extends Component { confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '&export=true').then((response) => { if(response === undefined){ return } diff --git a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js index 4bb44b697..97bc651ea 100644 --- a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js +++ b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js @@ -539,7 +539,7 @@ class ShixunStudentWork extends Component { } confirmysl(url){ - axios.get(url).then((response) => { + axios.get(url + '?export=true').then((response) => { if(response === undefined){ return } diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index b07392153..8cbf0402f 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -1766,12 +1766,12 @@ class Trainingjobsetting extends Component { daochushixunbaogao=()=>{ let url =`/zip/shixun_report?homework_common_id=${this.props.match.params.homeworkid}`; - this.confirmysl(url); + this.confirmysl(url + '&export=true'); } daochuzuoye =() =>{ let url = `/homework_commons/${this.props.match.params.homeworkid}/works_list.xlsx`; - this.confirmysl(url); + this.confirmysl(url + '?export=true'); } confirmysl(url){ diff --git a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js index a46d783ea..2da08e2ad 100644 --- a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js +++ b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js @@ -339,12 +339,12 @@ class Workquestionandanswer extends Component { daochushixunbaogao=()=>{ let url =`/zip/shixun_report?homework_common_id=${this.props.match.params.homeworkid}`; - this.confirmysl(url); + this.confirmysl(url + '&export=true'); } daochuzuoye =() =>{ let url = `/homework_commons/${this.props.match.params.homeworkid}/works_list.xlsx`; - this.confirmysl(url); + this.confirmysl(url + '?export=true'); } confirmysl(url){ From 72cba9fc2888db71b60e9771cc1020d89e482784 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Wed, 31 Jul 2019 09:57:57 +0800 Subject: [PATCH 42/62] =?UTF-8?q?=E8=AF=BE=E5=A0=82=E7=9A=84=E5=85=A8?= =?UTF-8?q?=E9=83=A8excel=E5=AF=BC=E5=87=BA=E5=92=8Cpdf=E5=92=8Czip?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 3 +++ app/controllers/exercises_controller.rb | 2 ++ .../graduation_tasks_controller.rb | 19 +++++++++++++------ .../graduation_topics_controller.rb | 7 ++++++- app/controllers/polls_controller.rb | 3 +++ app/controllers/zips_controller.rb | 1 + 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 9ae909dbc..abc3e4856 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1027,7 +1027,10 @@ class CoursesController < ApplicationController tip_exception(403,"无权限操作") elsif @all_members.size == 0 normal_status(-1,"课堂暂时没有学生") + elsif params[:export].present? && params[:export] + normal_status(0,"正在下载中") else + set_export_cookies member_to_xlsx(@course, @all_members, @c_homeworks, @c_exercises, @c_tasks) filename_ = "#{current_user.real_name}_#{@course.name}_全部成绩_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{format_sheet_name filename_.strip}",template: "courses/export_member_scores_excel.xlsx.axlsx", diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 915a4e22c..6f121db5f 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1261,6 +1261,7 @@ class ExercisesController < ApplicationController else respond_to do |format| format.xlsx{ + set_export_cookies get_export_users(@exercise,@course,@export_ex_users) exercise_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" @@ -1286,6 +1287,7 @@ class ExercisesController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else + set_export_cookies render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets end end diff --git a/app/controllers/graduation_tasks_controller.rb b/app/controllers/graduation_tasks_controller.rb index aeb5c409d..0885eeae2 100644 --- a/app/controllers/graduation_tasks_controller.rb +++ b/app/controllers/graduation_tasks_controller.rb @@ -132,6 +132,8 @@ class GraduationTasksController < ApplicationController tip_exception(403, "无权限操作") elsif complete_works == 0 normal_status(-1,"暂无用户提交") + elsif params[:export].present? && params[:export] + normal_status(0,"正在下载中") else respond_to do |format| format.xlsx{ @@ -148,12 +150,17 @@ class GraduationTasksController < ApplicationController zip_works = @work_excel.where("work_status > 0") status = checkfileSize(zip_works) if status == 0 - respond_to do |format| - format.zip{ - zipfile = zip_homework_common @task, zip_works - file = decode64(zipfile[0][:base64file]) - send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' - } + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + respond_to do |format| + format.zip{ + set_export_cookies + zipfile = zip_homework_common @task, zip_works + file = decode64(zipfile[0][:base64file]) + send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' + } + end end else normal_status(status,status == -2 ? "500M" : "无附件可下载") diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index 96816c2a6..bd93401f3 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -271,7 +271,12 @@ class GraduationTopicsController < ApplicationController students = course.students.joins(user: :user_extension).order("user_extensions.student_id") graduation_topic_to_xlsx(students,course) topic_export_name_ = "#{current_user.real_name}_#{course.name}_毕设选题_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{topic_export_name_.strip}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells} + if params[:export].present? && params[:export] + normal_status(0,"正在下载中") + else + set_export_cookies + render xlsx: "#{topic_export_name_.strip}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells} + end rescue Exception => e uid_logger(e.message) missing_template diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index 87435f743..7d978d722 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -945,9 +945,12 @@ class PollsController < ApplicationController tip_exception(403,"无权限操作") elsif (@poll.polls_status == 1) || (@poll_export_questions.size == 0) || (@poll_commit_ids.size == 0) normal_status(-1,"暂无用户提交") + elsif params[:export].present? && params[:export] + normal_status(0,"正在下载中") else respond_to do |format| format.xlsx{ + set_export_cookies polls_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@poll.polls_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" polls_user_commit = poll_commit_result(@poll,@poll_export_questions,@poll_users,@poll_commit_ids) render xlsx: "#{polls_export_name_.strip}",template: "polls/commit_result.xlsx.axlsx",locals: {polls_user_commit:polls_user_commit} diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index b1f7804a9..3ed1eb8b3 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -27,6 +27,7 @@ class ZipsController < ApplicationController if params[:export].present? && params[:export] normal_status(0,"正在下载中") else + set_export_cookies send_file exercises.ex_zip, filename: file_name_, type: 'application/zip' end rescue Exception => e From 8c584ba15d2080559518b2bdcc151452e1f3c1b5 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 31 Jul 2019 09:58:08 +0800 Subject: [PATCH 43/62] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=A4=9A=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E7=B1=BB=E7=9A=84=E5=AE=9E=E8=AE=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/games_controller.rb | 2 +- app/views/games/picture_display.json.jbuilder | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/controllers/games_controller.rb b/app/controllers/games_controller.rb index b2de6dcad..510044aa4 100644 --- a/app/controllers/games_controller.rb +++ b/app/controllers/games_controller.rb @@ -116,7 +116,7 @@ class GamesController < ApplicationController @qrcode_str = Base64.encode64( qr.to_img.resize(400,400).to_s ) else - @type = "image" + @type = shixun_show_type @game_challenge.show_type #conv = Iconv.new("GBK", "utf-8") @game_challenge = @game.challenge type = @game_challenge.show_type diff --git a/app/views/games/picture_display.json.jbuilder b/app/views/games/picture_display.json.jbuilder index 541c478a9..b43efa57e 100644 --- a/app/views/games/picture_display.json.jbuilder +++ b/app/views/games/picture_display.json.jbuilder @@ -24,5 +24,30 @@ elsif @type == "txt" json.contents @contents.html_safe elsif @type =="qrcode" json.qrcode_str @qrcode_str +elsif @type == "mp3" || @type == "mp4" + if @type == "mp4" + json.orignal_file [{"file_url": "http://120.27.231.56:48080/attachments/download/378171/123.mp4"}] + json.user_file [{"file_url": "http://120.27.231.56:48080/attachments/download/378172/456.mp4"}] + json.answer_file [{"file_url": "http://120.27.231.56:48080/attachments/download/378173/789.mp4"}] + else + json.orignal_file [{"file_url": "http://120.27.231.56:48080/attachments/download/378174/58099.mp3"}] + json.user_file [{"file_url": "http://120.27.231.56:48080/attachments/download/378175/654058514.mp3"}] + json.answer_file [{"file_url": "http://120.27.231.56:48080/attachments/download/378175/654058514.mp3"}] + end + # json.orignal_file do + # json.array! @orignal_picture do |file| + # json.file_url attachment_show_users_path(:file_name => file, :path => @original_path) + # end + # end + # json.user_file do + # json.array! @user_picture do |file| + # json.file_url attachment_show_users_path(:file_name => file, :path => @user_path, :time => Time.now.to_i) + # end + # end + # json.answer_file do + # json.array! @answer_picture do |file| + # json.file_url attachment_show_users_path(:file_name => file, :path => @answer_path) + # end + # end end \ No newline at end of file From 400e5c104011c1f593daf97092d230fa4acffc37 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Wed, 31 Jul 2019 10:08:01 +0800 Subject: [PATCH 44/62] export true --- .../modules/courses/shixunHomework/Trainingjobsetting.js | 8 ++++---- .../courses/shixunHomework/Workquestionandanswer.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index 8cbf0402f..99c295c40 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -1766,16 +1766,16 @@ class Trainingjobsetting extends Component { daochushixunbaogao=()=>{ let url =`/zip/shixun_report?homework_common_id=${this.props.match.params.homeworkid}`; - this.confirmysl(url + '&export=true'); + this.confirmysl(url, url + '&export=true'); } daochuzuoye =() =>{ let url = `/homework_commons/${this.props.match.params.homeworkid}/works_list.xlsx`; - this.confirmysl(url + '?export=true'); + this.confirmysl(url, url + '?export=true'); } - confirmysl(url){ - axios.get(url).then((response) => { + confirmysl(url, urlWithExport){ + axios.get(urlWithExport).then((response) => { if(response === undefined){ return } diff --git a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js index 2da08e2ad..4ed45790d 100644 --- a/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js +++ b/public/react/src/modules/courses/shixunHomework/Workquestionandanswer.js @@ -339,16 +339,16 @@ class Workquestionandanswer extends Component { daochushixunbaogao=()=>{ let url =`/zip/shixun_report?homework_common_id=${this.props.match.params.homeworkid}`; - this.confirmysl(url + '&export=true'); + this.confirmysl(url, url + '&export=true'); } daochuzuoye =() =>{ let url = `/homework_commons/${this.props.match.params.homeworkid}/works_list.xlsx`; - this.confirmysl(url + '?export=true'); + this.confirmysl(url, url + '?export=true'); } - confirmysl(url){ - axios.get(url).then((response) => { + confirmysl(url, urlWithExport){ + axios.get(urlWithExport).then((response) => { if(response === undefined){ return } From 2e889a74e56189c9077fa443a2a267df9cba4a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 31 Jul 2019 11:20:32 +0800 Subject: [PATCH 45/62] =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E4=B8=8D=E8=83=BD=E9=80=89=E4=BB=8A?= =?UTF-8?q?=E5=A4=A9=E4=B9=8B=E5=89=8D=E7=9A=84=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/courses/coursesPublic/HomeworkModal.js | 11 ++++++++++- .../modules/courses/coursesPublic/SelectSetting.js | 8 +++++++- .../src/modules/courses/coursesPublic/sendResource.js | 8 +++++++- .../src/modules/courses/exercise/Exercisesetting.js | 8 ++++++++ .../graduation/tasks/GraduationTaskssetting.js | 9 +++++++++ public/react/src/modules/courses/new/CoursesNew.js | 4 ++++ .../modules/courses/poll/PollDetailTabForthRules.js | 8 ++++++++ .../courses/shixunHomework/Trainingjobsetting.js | 6 ++++++ .../react/src/modules/tpm/TPMsettings/TPMsettings.js | 7 ++++++- public/react/src/modules/tpm/newshixuns/Newshixuns.js | 8 +++++--- 10 files changed, 70 insertions(+), 7 deletions(-) diff --git a/public/react/src/modules/courses/coursesPublic/HomeworkModal.js b/public/react/src/modules/courses/coursesPublic/HomeworkModal.js index 440d8893c..deb329fb9 100644 --- a/public/react/src/modules/courses/coursesPublic/HomeworkModal.js +++ b/public/react/src/modules/courses/coursesPublic/HomeworkModal.js @@ -20,6 +20,14 @@ function disabledDateTime() { // disabledSeconds: () => [55, 56], }; } + + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + + + class HomeworkModal extends Component{ constructor(props){ super(props); @@ -81,7 +89,7 @@ class HomeworkModal extends Component{ // console.log('startValue',dateString); this.setState({ - endtime: handleDateString(dateString), + endtime: date===null?"":handleDateString(dateString), }) } @@ -188,6 +196,7 @@ class HomeworkModal extends Component{ dropdownClassName="hideDisable" showTime={{ format: 'HH:mm' }} disabledTime={disabledDateTime} + disabledDate={disabledDate} showToday={false} locale={locale} format={dateFormat} diff --git a/public/react/src/modules/courses/coursesPublic/SelectSetting.js b/public/react/src/modules/courses/coursesPublic/SelectSetting.js index 08e01e28e..fa2e014f9 100644 --- a/public/react/src/modules/courses/coursesPublic/SelectSetting.js +++ b/public/react/src/modules/courses/coursesPublic/SelectSetting.js @@ -16,12 +16,17 @@ function range(start, end) { } return result; } + function disabledDateTime() { return { disabledMinutes: () => range(1, 30).concat(range(31, 60)), // disabledSeconds: () => range(1,60) } } + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} class Selectsetting extends Component{ constructor(props){ super(props); @@ -698,6 +703,7 @@ class Selectsetting extends Component{ onChange={(e,index)=>this.onChangeTimepublishs(e,index,key)} // onChange={ this.onChangeTimepublish } disabledTime={disabledDateTime} + disabledDate={disabledDate} /> {key!=0?this.deletegrouppublish(key)}>:""} @@ -730,7 +736,7 @@ class Selectsetting extends Component{ value={datatime===undefined||datatime===""?"":moment(datatime, dateFormat)} onChange={this.onChangeTimepublish} disabledTime={disabledDateTime} - + disabledDate={disabledDate} />

    :""} diff --git a/public/react/src/modules/courses/coursesPublic/sendResource.js b/public/react/src/modules/courses/coursesPublic/sendResource.js index 397711ca3..8443061dd 100644 --- a/public/react/src/modules/courses/coursesPublic/sendResource.js +++ b/public/react/src/modules/courses/coursesPublic/sendResource.js @@ -22,6 +22,11 @@ function disabledDateTime() { }; } +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + + const dateFormat="YYYY-MM-DD HH:mm"; class Sendresource extends Component{ constructor(props){ @@ -525,6 +530,7 @@ class Sendresource extends Component{ onChange={(e,index)=>this.onChangeTimepublish(e,index,key,2)} // onChange={ this.onChangeTimepublish } disabledTime={disabledDateTime} + disabledDate={disabledDate} /> {key!=0?this.deletegrouppublish(key)}>:""} {key===course_group_publish_times.length-1&&key:""} @@ -551,7 +557,7 @@ class Sendresource extends Component{ value={datatime===undefined||datatime===""?undefined:moment(datatime, dateFormat)} onChange={(e,index)=>this.onChangeTimepublish(e,index,undefined,1)} disabledTime={disabledDateTime} - + disabledDate={disabledDate} />

    :""} diff --git a/public/react/src/modules/courses/exercise/Exercisesetting.js b/public/react/src/modules/courses/exercise/Exercisesetting.js index 9b6103fdb..a93aa9942 100644 --- a/public/react/src/modules/courses/exercise/Exercisesetting.js +++ b/public/react/src/modules/courses/exercise/Exercisesetting.js @@ -23,6 +23,7 @@ function range(start, end) { } return result; } + function disabledDateTime() { return { // disabledHours: () => range(0, 24).splice(4, 20), @@ -30,6 +31,11 @@ function disabledDateTime() { // disabledSeconds: () => [0, 60], }; } + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + const dataformat="YYYY-MM-DD HH:mm"; class Exercisesetting extends Component{ @@ -636,6 +642,7 @@ class Exercisesetting extends Component{ format="YYYY-MM-DD HH:mm" showToday={false} disabledTime={disabledDateTime} + disabledDate={disabledDate} onChange={this.onChangeTimepublish} value={publish_time && moment(publish_time,"YYYY-MM-DD HH:mm")} disabled={ publish_timetype===true?true:!flagPageEdit } @@ -661,6 +668,7 @@ class Exercisesetting extends Component{ width={"240px"} format="YYYY-MM-DD HH:mm" disabledTime={disabledDateTime} + disabledDate={disabledDate} onChange={this.onChangeTimeEnd} value={end_time && moment(end_time,"YYYY-MM-DD HH:mm")} disabled={ end_timetype===true?true:!flagPageEdit} diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js index 5bbbe1a14..59d3dce17 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js @@ -27,6 +27,11 @@ function disabledDateTime() { }; } +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + + class GraduationTaskssettingapp extends Component{ constructor(props){ @@ -1181,6 +1186,7 @@ class GraduationTaskssettingapp extends Component{ value={publish_time===null||publish_time===""?"":moment(publish_time, dateFormat)} onChange={this.onChangeTimepublish} disabledTime={disabledDateTime} + disabledDate={disabledDate} disabled={this.props.isAdmin()===true?starttimetype===true?true:flagPageEdit===true?false:true:true} className={ this.state.publishTimetypes===true?"noticeTip":""} /> @@ -1218,6 +1224,7 @@ class GraduationTaskssettingapp extends Component{ value={end_time===null||end_time===""?"":moment(end_time, dateFormat)} onChange={this.onChangeTimeend} disabledTime={disabledDateTime} + disabledDate={disabledDate} // disabled={this.props.isSuperAdmin()===true?flagPageEdit===true?false:true:this.props.isAdmin()===true?endtimetype===true?true:flagPageEdit===true?false:true:true} disabled={this.props.isAdmin()===true?endtimetype===true?true:flagPageEdit===true?false:true:true} className={this.state.endTimetypes===true||end_timetype===true?"noticeTip":""} @@ -1269,6 +1276,7 @@ class GraduationTaskssettingapp extends Component{ width={"210px"} value={latetime===null||latetime===""?"":moment(latetime, dateFormat)} disabledTime={disabledDateTime} + disabledDate={disabledDate} onChange={this.onChangeTimelatetime} disabled={this.props.isAdmin()===true?allowlate===true||allowlate===1?flagPageEdit===true?false:true:true:true} className={ latetimetype===true?"noticeTip":""} @@ -1319,6 +1327,7 @@ class GraduationTaskssettingapp extends Component{ width={"210px"} value={commenttime===null||commenttime=== ""?"":moment(commenttime, dateFormat)} disabledTime={disabledDateTime} + disabledDate={disabledDate} onChange={this.onChangeTimecommenttime} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true} className={ commenttimetype===true?"noticeTip":""} diff --git a/public/react/src/modules/courses/new/CoursesNew.js b/public/react/src/modules/courses/new/CoursesNew.js index b817136ed..c5602d285 100644 --- a/public/react/src/modules/courses/new/CoursesNew.js +++ b/public/react/src/modules/courses/new/CoursesNew.js @@ -28,6 +28,9 @@ function disabledDateTime() { }; } +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} class CoursesNew extends Component { @@ -572,6 +575,7 @@ class CoursesNew extends Component { width={"210px"} value={datatime === undefined ? "" :datatime === null ? "" : moment(datatime, dateFormat)} disabledTime={disabledDateTime} + disabledDate={disabledDate} dropdownClassName="hideDisable" onChange={this.onChangeTimepublishs} /> diff --git a/public/react/src/modules/courses/poll/PollDetailTabForthRules.js b/public/react/src/modules/courses/poll/PollDetailTabForthRules.js index 292830fb8..8b62dd5e4 100644 --- a/public/react/src/modules/courses/poll/PollDetailTabForthRules.js +++ b/public/react/src/modules/courses/poll/PollDetailTabForthRules.js @@ -26,6 +26,12 @@ function disabledDateTime() { // disabledSeconds: () => range(1,60) } } + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + + class PollDetailTabForthRules extends Component{ constructor(props){ super(props); @@ -404,6 +410,7 @@ class PollDetailTabForthRules extends Component{ showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" disabledTime={disabledDateTime} + disabledDate={disabledDate} disabled={ rule.e_timeflag ===undefined?rule.publish_time===null?false:!flagPageEdit:rule.p_timeflag == true ? true : !flagPageEdit} style={{"height":"42px",width:'100%'}} > @@ -429,6 +436,7 @@ class PollDetailTabForthRules extends Component{ showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" disabledTime={disabledDateTime} + disabledDate={disabledDate} disabled={ rule.e_timeflag ===undefined?rule.publish_time===null?false:!flagPageEdit:rule.e_timeflag == true ? true : !flagPageEdit} style={{"height":"42px"}} > diff --git a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js index b07392153..21f03a819 100644 --- a/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js +++ b/public/react/src/modules/courses/shixunHomework/Trainingjobsetting.js @@ -47,6 +47,9 @@ function disabledDateTime() { } } +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} class Trainingjobsetting extends Component { //unifiedsetting 统一设置 @@ -1935,6 +1938,7 @@ class Trainingjobsetting extends Component { id={"publishtimeid"} disabledDate={this.disabledStartDatestart} disabledTime={disabledDateTime} + disabledDate={disabledDate} className={borreds} showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" @@ -1967,6 +1971,7 @@ class Trainingjobsetting extends Component { showToday={false} id={"end_timeid"} disabledTime={disabledDateTime} + disabledDate={disabledDate} showTime={{ format: 'HH:mm' }} className={borredss} format="YYYY-MM-DD HH:mm" @@ -2049,6 +2054,7 @@ class Trainingjobsetting extends Component { showToday={false} id={"late_timeid"} disabledTime={disabledDateTime} + disabledDate={disabledDate} format="YYYY-MM-DD HH:mm" value={late_time && moment(late_time, dataformat)} onChange={this.onEndChangeys} diff --git a/public/react/src/modules/tpm/TPMsettings/TPMsettings.js b/public/react/src/modules/tpm/TPMsettings/TPMsettings.js index 8eb2c76dd..bb318ba13 100644 --- a/public/react/src/modules/tpm/TPMsettings/TPMsettings.js +++ b/public/react/src/modules/tpm/TPMsettings/TPMsettings.js @@ -199,6 +199,10 @@ function disabledDateTime() { // disabledSeconds: () => [0, 60], }; } + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} export default class TPMsettings extends Component { constructor(props) { super(props) @@ -1144,7 +1148,7 @@ export default class TPMsettings extends Component { } onChangeTimePicker =(value, dateString)=> { this.setState({ - opening_time:moment(handleDateStrings(dateString)) + opening_time: dateString=== ""?"":moment(handleDateStrings(dateString)) }) } @@ -1871,6 +1875,7 @@ export default class TPMsettings extends Component { width={178} locale={locale} disabledTime={disabledDateTime} + disabledDate={disabledDate} placeholder="请选择开启时间" value={opening_time===null||opening_time===""?"":moment(opening_time, dateFormat)} onChange={this.onChangeTimePicker} diff --git a/public/react/src/modules/tpm/newshixuns/Newshixuns.js b/public/react/src/modules/tpm/newshixuns/Newshixuns.js index f9c8f5b10..790402a22 100644 --- a/public/react/src/modules/tpm/newshixuns/Newshixuns.js +++ b/public/react/src/modules/tpm/newshixuns/Newshixuns.js @@ -191,7 +191,9 @@ function disabledDateTime() { }; } - +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} class Newshixuns extends Component { constructor(props) { super(props) @@ -743,7 +745,7 @@ class Newshixuns extends Component { onChangeTimePicker = (value, dateString) => { this.setState({ - TimePickervalue: moment(handleDateStrings(dateString)) + TimePickervalue: dateString=== ""?"":moment(handleDateStrings(dateString)) }) } @@ -1288,7 +1290,7 @@ class Newshixuns extends Component { placeholder="请选择开启时间" onChange={this.onChangeTimePicker} value={TimePickervalue && moment(TimePickervalue, "YYYY-MM-DD HH:mm")} - + disabledDate={disabledDate} disabledTime={disabledDateTime} dropdownClassName="hideDisable" /> From 7eb2e4c71351398cbcbf5a1f2c9b77c1099a9e1b Mon Sep 17 00:00:00 2001 From: p31729568 Date: Wed, 31 Jul 2019 13:42:05 +0800 Subject: [PATCH 46/62] move user project search api controller --- app/controllers/projects_controller.rb | 8 -------- app/controllers/users/base_controller.rb | 2 +- app/controllers/users/projects_controller.rb | 11 +++++++++++ app/views/{ => users}/projects/search.json.jbuilder | 0 config/routes.rb | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) rename app/views/{ => users}/projects/search.json.jbuilder (100%) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index c9ed6c597..672477790 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,10 +1,2 @@ class ProjectsController < ApplicationController - def search - query_params = { keyword: params[:keyword], category: 'manage' } - projects = Users::ProjectService.new(current_user, query_params).call - - params[:limit] = params[:per_page].to_i.zero? ? 20 : params[:per_page].to_i - @count = projects.count - @projects = paginate projects - end end \ No newline at end of file diff --git a/app/controllers/users/base_controller.rb b/app/controllers/users/base_controller.rb index fd138a182..969aca320 100644 --- a/app/controllers/users/base_controller.rb +++ b/app/controllers/users/base_controller.rb @@ -43,7 +43,7 @@ class Users::BaseController < ApplicationController page = page_value per_page = per_page_value - return Kaminari.paginate_array(objs).page(page).per(per_page) unless observed_logged_user? && opts[:special] + return Kaminari.paginate_array(objs).page(page).per(per_page) unless opts[:special] && observed_logged_user? # note: 为实现第一页少一条记录,让前端放置新建入口 if page == 1 diff --git a/app/controllers/users/projects_controller.rb b/app/controllers/users/projects_controller.rb index 863b99b37..07f4d5cac 100644 --- a/app/controllers/users/projects_controller.rb +++ b/app/controllers/users/projects_controller.rb @@ -1,4 +1,6 @@ class Users::ProjectsController < Users::BaseController + skip_before_action :check_observed_user_exists!, only: [:search] + def index projects = Users::ProjectService.new(observed_user, query_params).call @@ -6,6 +8,15 @@ class Users::ProjectsController < Users::BaseController @projects = paginate(projects.includes(:project_score, owner: { user_extension: :school }), special: true) end + def search + query_params = { keyword: params[:keyword], category: 'manage' } + projects = Users::ProjectService.new(current_user, query_params).call + + params[:limit] = params[:per_page].to_i.zero? ? 20 : params[:per_page].to_i + @count = projects.count + @projects = paginate projects + end + private def query_params diff --git a/app/views/projects/search.json.jbuilder b/app/views/users/projects/search.json.jbuilder similarity index 100% rename from app/views/projects/search.json.jbuilder rename to app/views/users/projects/search.json.jbuilder diff --git a/config/routes.rb b/config/routes.rb index 2f9eed61b..581f563b0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -75,7 +75,7 @@ Rails.application.routes.draw do get :system_update resource :trial_apply, only: [:create] - resources :projects, only: [] do + resources :projects, module: :users, only: [] do get :search, on: :collection end From ea5d5dceaea5fe4323ae7bd96c315de4efe908d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Wed, 31 Jul 2019 13:58:06 +0800 Subject: [PATCH 47/62] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/exercise/Studentshavecompletedthelist.js | 6 ++++-- .../modules/courses/exercise/Testpapersettinghomepage.js | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js index f7a989f79..0556d94e9 100644 --- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js +++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js @@ -2312,11 +2312,13 @@ class Studentshavecompletedthelist extends Component { }; _getRequestParams() { - const { order, checkedValuesineinfo,searchtext, page ,limit} = this.state + const { order, checkedValuesineinfo,course_groupyslstwo ,searchtext, page ,limit,course_groupyslsthree} = this.state return { page, + review:course_groupyslsthree, + commit_status:course_groupyslstwo, search:searchtext, - group_id:checkedValuesineinfo, + exercise_group_id:checkedValuesineinfo, limit: limit, order, } diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 24e960a9d..8e895b852 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -170,7 +170,7 @@ class Testpapersettinghomepage extends Component{ } console.log("170"); console.log(params); - axios.get(url+`?${queryString.stringify(params)}`).then((response) => { + axios.get(url+`?${queryString.stringify(params)}`+ '&export=true').then((response) => { if(response===undefined){ return } @@ -193,7 +193,7 @@ class Testpapersettinghomepage extends Component{ } }else { this.props.showNotification(`正在下载中`); - window.open("/api"+url+`?${queryString.stringify(params)}`, '_blank'); + window.open("/api"+url+`?${queryString.stringify(params)}`+ '&export=true', '_blank'); } }).catch((error) => { console.log(error) @@ -357,7 +357,7 @@ class Testpapersettinghomepage extends Component{ 导出
  • :""} From 730d83de4dc431e2810f085a276eb3a888b6b904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Wed, 31 Jul 2019 14:00:53 +0800 Subject: [PATCH 48/62] Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun # Conflicts: # public/react/src/modules/courses/exercise/Testpapersettinghomepage.js --- .../src/modules/courses/exercise/Testpapersettinghomepage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 52dd9c080..8e895b852 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -357,7 +357,7 @@ class Testpapersettinghomepage extends Component{ 导出 :""} From 65e7c3231e09ed30c781cdae88dd501ca4b765c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 31 Jul 2019 14:12:14 +0800 Subject: [PATCH 49/62] =?UTF-8?q?=E5=AE=9E=E8=B7=B5=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=8F=91=E9=80=81=E8=87=B3=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/paths/PathDetail/sendPanel.js | 51 ++++++++++++++++--- .../Collaborators/Collaborators.js | 15 +++--- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/public/react/src/modules/paths/PathDetail/sendPanel.js b/public/react/src/modules/paths/PathDetail/sendPanel.js index 84c7d8e23..2f9059a18 100644 --- a/public/react/src/modules/paths/PathDetail/sendPanel.js +++ b/public/react/src/modules/paths/PathDetail/sendPanel.js @@ -15,7 +15,6 @@ class sendPanel extends Component{ openSearch:false, sendToCourseId:undefined, sendToShixunArray:[], - shixunNum:0, Modalstype:false, cardsModalcancel:this.cardsModalcancel, cardsModalsave:this.cardsModalsave, @@ -35,7 +34,9 @@ class sendPanel extends Component{ //隐藏发送至弹框 hideSenttothevalue =()=>{ this.setState({ - sentShixunPath:false + sentShixunPath:false, + sendToShixunArray:[], + sendToCourseId:undefined, }) } //打开课堂列表下拉框 @@ -63,7 +64,7 @@ class sendPanel extends Component{ changeCheckBoxs=(list)=>{ this.setState({ sendToShixunArray:list, - shixunNum:list.length + // shixunNum:list.length }) } @@ -86,7 +87,9 @@ class sendPanel extends Component{ Modalstype:true, sentShixunPath:false, Modalstopval:result.data.message, - courseurl:result.data.url + courseurl:result.data.url, + sendToShixunArray:[], + sendToCourseId:undefined, }) } }).catch((error)=>{ @@ -118,8 +121,33 @@ class sendPanel extends Component{ let {courseurl}=this.state; window.location.href =courseurl; } + + + allChange = (e) => { + + if(e.target.checked===false){ + this.setState({ + sendToShixunArray: [], + }) + }else{ + let { sendToCourseList} = this.state; + let newlist = []; + + sendToCourseList.stages.map((item,key)=>{ + item.shixuns.map((items,keys)=>{ + newlist.push(items.shixun_id) + }) + }) + + this.setState({ + sendToShixunArray: newlist, + }) + } + + } + render(){ - let{sentShixunPath,sendToCourseList,openSearch,shixunNum,Modalstype,Modalstopval,Modalsbottomval,cardsModalcancel,cardsModalsave}= this.state; + let{sentShixunPath,sendToCourseList,Modalstype,Modalstopval,Modalsbottomval,cardsModalcancel,cardsModalsave}= this.state; return(
    @@ -178,7 +206,7 @@ class sendPanel extends Component{
    - + { sendToCourseList && sendToCourseList.stages.map((item,key)=>{ @@ -197,7 +225,16 @@ class sendPanel extends Component{
    -

    已选择 {shixunNum} 个实训

    +
    + + + this.allChange(e)} + >全选 + + +
    +

    已选择 {this.state.sendToShixunArray.length} 个实训

    取消 确定 diff --git a/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js b/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js index 7811d12fd..95ce4b8aa 100644 --- a/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js +++ b/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js @@ -532,13 +532,14 @@ class Collaborators extends Component {
    - - 全选 -
    - 请至少选择一个用户 -
    -
    + + + 全选 +
    + 请至少选择一个用户 +
    +
    From e746a13f37caf14da3617e65e06b1d14173c8e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 31 Jul 2019 14:38:14 +0800 Subject: [PATCH 50/62] =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=8D=A0=E6=AF=94?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/public/css/edu-all.css | 27 ++++++-- .../courses/coursesHome/css/CoursesHome.css | 66 ++++++++++--------- public/stylesheets/educoder/edu-all.css | 33 ++++++++-- 3 files changed, 83 insertions(+), 43 deletions(-) diff --git a/public/react/public/css/edu-all.css b/public/react/public/css/edu-all.css index fad3568b4..600520410 100644 --- a/public/react/public/css/edu-all.css +++ b/public/react/public/css/edu-all.css @@ -332,8 +332,12 @@ label.infolabel{display: block;float: left;width: 56px;text-align: right;margin- } .shixunDes{font-family: 'panmen-webfont';display: block;position: absolute;height: 100%;width: 100%;text-align: center;line-height: 220px;color: #fff;top: 0px;font-size: 24px;background-color: rgba(5,16,26,0.4);border-radius: 6px 6px 0px 0px;} /*TPM*/ -.shixunDetail_top{width: 100%;background-image: url("/images/educoder/shixun-detail.jpg");background-size: 100% 100%;height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} +.shixunDetail_top{width: 100%;background-image: url("/images/educoder/shixun-detail.jpg"); height: 240px; + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .task-item{margin-top: 30px;padding-bottom: 30px;border-bottom: 1px solid #eee} .task-item:last-child{border-bottom: none;} .challengeNav a.active{color: #4CACFF;} @@ -420,14 +424,23 @@ table.text-file{} /*-------------------------------实训路径-------------------------------*/ -.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png");background-color: #081C4B;background-size: 100% 100%;} +.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png"); + background-color: #081C4B; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .pathNavLine{position: absolute;bottom: -8px;width: 100%;} .path-nav li{float: left;padding: 0px 30px;height: 42px;} .path-nav li a{color:#fff;font-size: 16px;display: block; height: 40px;} .path-nav li.active a{border-bottom: 3px solid #4CACFF;color:#4CACFF;} /*---实训路径详情----*/ .subhead{width: 100%;margin-bottom:40px;background-size: 100% 100%;background-image: url("/images/educoder/path-detail.jpg");height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .subhead_content{width: 1200px;margin: 0px auto;} .pathInfo li{text-align: center;float: left;margin-right: 38px;} .pathInfo li span{display: block;} @@ -467,7 +480,11 @@ li.li-width7{width: 7%;text-align: left} /*-----------------------------在线课堂动态----------------------------------*/ .courseHead{width: 100%;margin-bottom:40px;background-size: 100% 100%;background-image: url("/images/educoder/course-detail.jpg");height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .invite-tip{position: absolute;top: -5px;right: 140px;color: #fff; box-sizing: border-box;width: 170px;text-align: center;border-radius: 2px;background-color: rgba(5,16,26,0.6)} .inviteTipbtn a{font-size:14px;width: 100%;height: 30px;line-height: 30px;display: block;color: #747A7F;background-color: rgba(5,16,26,0.4)} .inviteTipbtn a:hover{color: #4cacff!important;} diff --git a/public/react/src/modules/courses/coursesHome/css/CoursesHome.css b/public/react/src/modules/courses/coursesHome/css/CoursesHome.css index 696d35ecc..af431da99 100644 --- a/public/react/src/modules/courses/coursesHome/css/CoursesHome.css +++ b/public/react/src/modules/courses/coursesHome/css/CoursesHome.css @@ -1,33 +1,35 @@ -.courses-head{ - width: 100%; - height: 300px; - background-image: url(./courses.jpg); - background-color: #081C4B; - background-size: 100% 100%; -} -a{ - text-decoration: none; - color: #05101a; -} -.ant-input-affix-wrapper .ant-input:not(:last-child) { - padding-right: 24px; -} - -.memberscount{ - font-size: 55px !important; - background: #fff; - color: #dfdfdf; - display: inline-block; - padding-right: 15px; -} -.biaoqiancours{ - overflow: hidden; - position: relative; -} -.coursesover{ - position: absolute; - color: #fff; - left: 17px; - background: #dfdfdf; - width: 200px; +.courses-head{ + width: 100%; + height: 300px; + background-image: url(./courses.jpg); + background-color: #081C4B; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} +a{ + text-decoration: none; + color: #05101a; +} +.ant-input-affix-wrapper .ant-input:not(:last-child) { + padding-right: 24px; +} + +.memberscount{ + font-size: 55px !important; + background: #fff; + color: #dfdfdf; + display: inline-block; + padding-right: 15px; +} +.biaoqiancours{ + overflow: hidden; + position: relative; +} +.coursesover{ + position: absolute; + color: #fff; + left: 17px; + background: #dfdfdf; + width: 200px; } \ No newline at end of file diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index ec245b196..05e767ba4 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -334,8 +334,12 @@ label.infolabel{display: block;float: left;width: 56px;text-align: right;margin- } .shixunDes{font-family: 'panmen-webfont';display: block;position: absolute;height: 100%;width: 100%;text-align: center;line-height: 220px;color: #fff;top: 0px;font-size: 24px;background-color: rgba(5,16,26,0.4);border-radius: 6px 6px 0px 0px;} /*TPM*/ -.shixunDetail_top{width: 100%;background-image: url("/images/educoder/shixun-detail.jpg");background-size: 100% 100%;height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} +.shixunDetail_top{width: 100%;background-image: url("/images/educoder/shixun-detail.jpg"); height: 240px; + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .task-item{margin-top: 30px;padding-bottom: 30px;border-bottom: 1px solid #eee} .task-item:last-child{border-bottom: none;} .challengeNav a.active{color: #4CACFF;} @@ -422,14 +426,23 @@ table.text-file{} /*-------------------------------实训路径-------------------------------*/ -.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png");background-color: #081C4B;background-size: 100% 100%;} +.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png"); + background-color: #081C4B; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .pathNavLine{position: absolute;bottom: -8px;width: 100%;} .path-nav li{float: left;padding: 0px 30px;height: 42px;} .path-nav li a{color:#fff;font-size: 16px;display: block; height: 40px;} .path-nav li.active a{border-bottom: 3px solid #4CACFF;color:#4CACFF;} /*---实训路径详情----*/ .subhead{width: 100%;margin-bottom:40px;background-size: 100% 100%;background-image: url("/images/educoder/path-detail.jpg");height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .subhead_content{width: 1200px;margin: 0px auto;} .pathInfo li{text-align: center;float: left;margin-right: 38px;} .pathInfo li span{display: block;} @@ -469,7 +482,11 @@ li.li-width7{width: 7%;text-align: left} /*-----------------------------在线课堂动态----------------------------------*/ .courseHead{width: 100%;margin-bottom:40px;background-size: 100% 100%;background-image: url("/images/educoder/course-detail.jpg");height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} .invite-tip{position: absolute;top: -5px;right: 140px;color: #fff; box-sizing: border-box;width: 170px;text-align: center;border-radius: 2px;background-color: rgba(5,16,26,0.6)} .inviteTipbtn a{font-size:14px;width: 100%;height: 30px;line-height: 30px;display: block;color: #747A7F;background-color: rgba(5,16,26,0.4)} .inviteTipbtn a:hover{color: #4cacff!important;} @@ -3055,7 +3072,11 @@ a.singlepublishtwo{ padding: 0px; } .project_packagesHead{width: 100%;margin-bottom:40px;background-size: 100% 100%;background-image: url("/images/educoder/project_packagesHead.jpg");height: 240px; - justify-content: center;align-items: center;display: -webkit-flex;} + justify-content: center;align-items: center;display: -webkit-flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} /* 个人中心-众包 */ From a358aaf63e08bcb74b7df903d90641b1a3af47ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Wed, 31 Jul 2019 14:40:24 +0800 Subject: [PATCH 51/62] =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=8D=A0=E6=AF=94?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/educoder/path.png | Bin 59814 -> 53938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/educoder/path.png b/public/images/educoder/path.png index d8b6f1715d7484cd22de10d27f241ac8522f0430..d3d816012532d053624565b95fecc84c40bf37b9 100644 GIT binary patch literal 53938 zcmeGDXFycTvH%LNAtQ(q1OX){5g2j~O3qmjNy5y4z%am&vjJ2~D6FAzy3FFP9m(9#09 z0RSKZ2q6>zE(k%uKLA1p;A3F`u!hk8gzX_*-)V3_8UX;z0Y>nLh6rL|DiDsmX9wVY zZ~F{<_5ddiZUO-3=^xL_a3^a7lkN>CHz(H{PR>jU3QSyDRxmphrhEYqCsDcn^mE-5PMWU5o(hKqN1LE>(T6pYO>eD~ld~lGs8Ym}BZO zoB)8t84aqe6{?gkby<_2_K-3+XqoRC-wHIy3yfpT}mRA6B2)6td*e4fI#HL&x- zP{`Z4VcKA-k9i`{+E$JTL#3;RAnLfY;|98DCnp;Ngqypwj;d_yd(HV}nr z44iQOSr3-54dsz;sP8h6TD#jJ-Rw|UCSW}=mRdo}MB`Y0DGUo7UNHNmBgJnz>NvaE zIiXy^dKwI+g0mayhuDAu(i;7CwHC!x)2#fhXi*YW2 zjKJS_UJMxMH(qp@BJO1{JJuaj1TgC`;Y|=A0IUHk00sUb05qlo{QWikhQqY^xrYCw z`;Fiy?z?c9GRhr^S^F?b5?DLAqu{Q8nc*-u0k96^C;(nojL;!}~&ObJU6UW3D45miycw6{?TYp@4H1bc|3fB04 z#%Q_P{(0*mutK^STG{@IiVTK8A`KBhq{{>G14)Kk@l4EBc7p5bC6#U`HtzhBf8H
      N0VV-wk&|VT_LB5+baq6zSuuGz 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 Tliv!R{^gB1K2jY2Gxxs$fl1YY literal 59814 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ʅpGwUM9nIkJ9*K|gbD)C>J{ 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 Date: Wed, 31 Jul 2019 14:53:46 +0800 Subject: [PATCH 52/62] Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun # Conflicts: # public/react/src/modules/courses/exercise/Testpapersettinghomepage.js --- .../exercise/Testpapersettinghomepage.js | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 8e895b852..ae4addd59 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -1,7 +1,7 @@ import React,{ Component } from "react"; -import {Checkbox,Input,Table, Pagination,Menu} from "antd"; +import {Checkbox,Input,Table, Pagination,Menu,Spin} from "antd"; import {Link,NavLink} from 'react-router-dom'; -import { WordsBtn ,ActionBtn,queryString} from 'educoder'; +import { WordsBtn ,ActionBtn,queryString,downloadFile} from 'educoder'; import CoursesListType from '../coursesPublic/CoursesListType'; import '../css/members.css'; import '../css/busyWork.css'; @@ -33,6 +33,7 @@ class Testpapersettinghomepage extends Component{ current_status:undefined, DownloadType:false, DownloadMessageval:undefined, + donwloading:false, } } //切换tab @@ -192,8 +193,21 @@ class Testpapersettinghomepage extends Component{ }) } }else { - this.props.showNotification(`正在下载中`); - window.open("/api"+url+`?${queryString.stringify(params)}`+ '&export=true', '_blank'); + this.setState({ donwloading: true }) + downloadFile({ + url: url+`?${queryString.stringify(params)}`+ '&export=true', + successCallback: (url) => { + this.setState({ donwloading: false }); + console.log('successCallback') + }, + failCallback: (responseHtml, url) => { + this.setState({ donwloading: false }); + console.log('failCallback') + } + }) + this.props.showNotification(`正在下载中`); + + // window.open("/api"+url+`?${queryString.stringify(params)}`+ '&export=true', '_blank'); } }).catch((error) => { console.log(error) @@ -353,14 +367,14 @@ class Testpapersettinghomepage extends Component{ `} { From 1cdf397f8c57f4f92e9282832a6dbd016facb161 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Wed, 31 Jul 2019 15:10:00 +0800 Subject: [PATCH 53/62] vedio --- .../media/clappr-playback-rate-plugin.min.js | 1 + .../media/clappr-thumbnails-plugin.js | 1 + public/javascripts/media/clappr.min.js | 1 + .../src/common/components/media/Clappr.js | 79 +++++++++++++++++++ public/react/src/common/educoder.js | 2 + .../react/src/context/EffectDisplayContent.js | 50 ++++++++++++ .../context/EvaluateSuccessEffectDisplay.js | 33 +++++++- 7 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 public/javascripts/media/clappr-playback-rate-plugin.min.js create mode 100644 public/javascripts/media/clappr-thumbnails-plugin.js create mode 100644 public/javascripts/media/clappr.min.js create mode 100644 public/react/src/common/components/media/Clappr.js create mode 100644 public/react/src/context/EffectDisplayContent.js diff --git a/public/javascripts/media/clappr-playback-rate-plugin.min.js b/public/javascripts/media/clappr-playback-rate-plugin.min.js new file mode 100644 index 000000000..8bbcbfaca --- /dev/null +++ b/public/javascripts/media/clappr-playback-rate-plugin.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("clappr")):"function"==typeof define&&define.amd?define("clappr-playback-rate-plugin",["clappr"],e):"object"==typeof exports?exports["clappr-playback-rate-plugin"]=e(require("clappr")):t["clappr-playback-rate-plugin"]=e(t.clappr)}("undefined"!=typeof self?self:this,function(t){return function(t){function e(n){if(a[n])return a[n].exports;var o=a[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var a={};return e.m=t,e.c=a,e.d=function(t,a,n){e.o(t,a)||Object.defineProperty(t,a,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var a=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(a,"a",a),a},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=0)}([function(t,e,a){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var i=a(1),l=(a.n(i),a(2)),c=a.n(l),s=a(3),u=a.n(s),p=function(){function t(t,e){for(var a=0;a\n <%= title %>\n\n\n'},function(t,e,a){e=t.exports=a(4)(void 0),e.push([t.i,".media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] {\n float: right;\n margin-top: 5px;\n position: relative; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] button.media-control-button.media-control-icon {\n font-family: Roboto,\"Open Sans\",Arial,sans-serif;\n -webkit-font-smoothing: antialiased;\n font-size: 12px;\n cursor: pointer;\n padding: 10px; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] button.media-control-button.media-control-icon:hover {\n color: #c9c9c9; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] button.media-control-button.media-control-icon.changing {\n -webkit-animation: pulse 0.5s infinite alternate; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] > ul {\n display: none;\n list-style-type: none;\n position: absolute;\n bottom: 25px;\n border: 1px solid black;\n border-radius: 4px;\n background-color: rgba(0, 0, 0, 0.7); }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] li {\n position: relative;\n font-size: 12px; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] li[data-title] {\n padding: 5px; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] li a {\n color: #aaa;\n padding: 2px 10px 2px 15px;\n display: block;\n text-decoration: none; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] li a.active {\n background-color: black;\n font-weight: bold;\n color: #fff; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] li a.active:before {\n content: '\\2713';\n position: absolute;\n top: 2px;\n left: 4px; }\n .media-control[data-media-control] .media-control-layer[data-controls] .playback_rate[data-playback-rate-select] li a:hover {\n color: #fff;\n text-decoration: none; }\n\n@-webkit-keyframes pulse {\n 0% {\n color: #fff; }\n 50% {\n color: #ff0101; }\n 100% {\n color: #B80000; } }\n",""])},function(t,e){function a(t,e){var a=t[1]||"",o=t[3];if(!o)return a;if(e&&"function"==typeof btoa){var r=n(o);return[a].concat(o.sources.map(function(t){return"/*# sourceURL="+o.sourceRoot+t+" */"})).concat([r]).join("\n")}return[a].join("\n")}function n(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n=a(e,t);return e[2]?"@media "+e[2]+"{"+n+"}":n}).join("")},e.i=function(t,a){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},o=0;o0&&e._renderPlugin()})})}},{key:"removeThumbnail",value:function(t){var e=this,n=t.constructor===Array?t:[t];return this._onThumbsLoaded.then(function(){var t=!0,o=!1;return n.forEach(function(n){var i=e._thumbs.some(function(t,o){return t.src===n&&(e._thumbs.splice(o,1),e._getOptions().backdropHeight&&(e._$backdropCarouselImgs[o].remove(),e._$backdropCarouselImgs.splice(o,1)),!0)});i?o=!0:t=!1}),o&&e._renderPlugin(),c.Promise.resolve(t)})}},{key:"_init",value:function(){this._thumbsLoaded&&(this._$backdropCarouselImgs=[],this._createElements(),this._loadBackdrop(),this._renderPlugin())}},{key:"_getOptions",value:function(){if(!("scrubThumbnails"in this.core.options))throw"'scrubThumbnails property missing from options object.";return this.core.options.scrubThumbnails}},{key:"_appendElToMediaControl",value:function(){this.core.mediaControl.$el.find(".media-control-background").first().after(this.el)}},{key:"_onMouseMove",value:function(t){this._calculateHoverPosition(t),this._show=!0,this._renderPlugin()}},{key:"_onMouseLeave",value:function(){this._show=!1,this._renderPlugin()}},{key:"_calculateHoverPosition",value:function(t){var e=t.pageX-this.core.mediaControl.$seekBarContainer.offset().left;this._hoverPosition=Math.min(1,Math.max(e/this.core.mediaControl.$seekBarContainer.width(),0))}},{key:"_buildThumbsFromOptions",value:function(){var t=this,e=this._getOptions().thumbs,n=e.map(function(e){return t._addThumbFromSrc(e)});return c.Promise.all(n)}},{key:"_addThumbFromSrc",value:function(t){var e=this;return new c.Promise(function(e,n){var o=new Image;o.onload=function(){e(o)},o.onerror=n,o.src=t.url}).then(function(n){var o=t.time,i=null;e._thumbs.some(function(t,e){return o0?e._thumbs[i-1]:null;u&&(u.duration=o-u.time);var s=r?r.time-t.time:null,a=n.width,c=n.height,l={imageW:a,imageH:c,x:t.x||0,y:t.y||0,w:t.w||a,h:t.h||c,url:t.url,time:o,duration:s,src:t};return e._thumbs.splice(i,0,l),l})}},{key:"_buildImg",value:function(t,e){var n=e/t.h,o=(0,a.$)("").addClass("thumbnail-img").attr("src",t.url),i=(0,a.$)("
      ").addClass("thumbnail-container");return i.css("width",t.w*n),i.css("height",e),o.css({height:t.imageH*n,left:-1*t.x*n,top:-1*t.y*n}),i.append(o),i}},{key:"_loadBackdrop",value:function(){if(this._getOptions().backdropHeight)for(var t=this._$carousel,e=0;e=0;n--){var o=e[n];if(o.time<=t)return n}return 0}},{key:"_renderPlugin",value:function(){this._thumbsLoaded&&(this._show&&this._thumbs.length>0?(this.$el.removeClass("hidden"),this._updateCarousel(),this._updateSpotlightThumb()):this.$el.addClass("hidden"))}},{key:"_createElements",value:function(){this.$el.html(this.template({backdropHeight:this._getOptions().backdropHeight,spotlightHeight:this._getOptions().spotlightHeight})),this.$el.append(a.Styler.getStyleFor(d["default"])),this._$spotlight=this.$el.find(".spotlight"),this._$backdrop=this.$el.find(".backdrop"),this._$carousel=this._$backdrop.find(".carousel"),this.$el.addClass("hidden"),this._appendElToMediaControl()}}]),e}(a.UICorePlugin);e["default"]=p,t.exports=e["default"]},function(t,e,n){(function(t,o){"use strict";function i(t,e){this._id=t,this._clearFn=e}var r=n(4).nextTick,u=Function.prototype.apply,s=Array.prototype.slice,a={},c=0;e.setTimeout=function(){return new i(u.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new i(u.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},e.setImmediate="function"==typeof t?t:function(t){var n=c++,o=!(arguments.length<2)&&s.call(arguments,1);return a[n]=!0,r(function(){a[n]&&(o?t.apply(null,o):t.call(null),e.clearImmediate(n))}),n},e.clearImmediate="function"==typeof o?o:function(t){delete a[t]}}).call(e,n(1).setImmediate,n(1).clearImmediate)},function(t,e){"use strict";t.exports=function(){var t=[];return t.toString=function(){for(var t=[],e=0;e1)for(var n=1;n")},M.garbage=function(t){this.options.recycleVideo&&"VIDEO"===t[0].tagName.toUpperCase()&&(t.children().remove(),D.push(t))},M);function M(){(0,s.default)(this,M)}x.options={recycleVideo:!1};var N=e.DoubleEventHandler=(F.prototype.handle=function(t,e,r){var i=!(2]*>/,Xe=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Ye=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ze=/^(?:body|html)$/i,$e=/([A-Z])/g,_e=["val","css","html","text","data","width","height","offset"],bf=Se.createElement("table"),cf=Se.createElement("tr"),df={tr:Se.createElement("tbody"),tbody:bf,thead:bf,tfoot:bf,td:cf,th:cf,"*":Se.createElement("div")},ef=/complete|loaded|interactive/,ff=/^[\w-]*$/,hf=(gf={}).toString,jf={},mf=Se.createElement("div"),nf={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},of=Array.isArray||function(t){return t instanceof Array},jf.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var r=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(r)return r.call(t,e);var i,n=t.parentNode,a=!n;return a&&(n=mf).appendChild(t),i=~jf.qsa(n,e).indexOf(t),a&&mf.removeChild(t),i},kf=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},lf=function(r){return Qe.call(r,function(t,e){return r.indexOf(t)==e})},jf.fragment=function(t,e,r){var i,n,a;return Xe.test(t)&&(i=Me(Se.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(Ye,"<$1>")),e===Ke&&(e=We.test(t)&&RegExp.$1),e in df||(e="*"),(a=df[e]).innerHTML=""+t,i=Me.each(Re.call(a.childNodes),function(){a.removeChild(this)})),uf(r)&&(n=Me(i),Me.each(r,function(t,e){-1<_e.indexOf(t)?n[t](e):n.attr(t,e)})),i},jf.Z=function(t,e){return new Df(t,e)},jf.isZ=function(t){return t instanceof jf.Z},jf.init=function(t,e){var r;if(!t)return jf.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&We.test(t))r=jf.fragment(t,RegExp.$1,e),t=null;else{if(e!==Ke)return Me(e).find(t);r=jf.qsa(Se,t)}else{if(qf(t))return Me(Se).ready(t);if(jf.isZ(t))return t;if(of(t))r=function(t){return Qe.call(t,function(t){return null!=t})}(t);else if(tf(t))r=[t],t=null;else if(We.test(t))r=jf.fragment(t.trim(),RegExp.$1,e),t=null;else{if(e!==Ke)return Me(e).find(t);r=jf.qsa(Se,t)}}return jf.Z(r,t)},(Me=function(t,e){return jf.init(t,e)}).extend=function(e){var r,t=Re.call(arguments,1);return"boolean"==typeof e&&(r=e,e=t.shift()),t.forEach(function(t){!function t(e,r,i){for(Le in r)i&&(uf(r[Le])||of(r[Le]))?(uf(r[Le])&&!uf(e[Le])&&(e[Le]={}),of(r[Le])&&!of(e[Le])&&(e[Le]=[]),t(e[Le],r[Le],i)):r[Le]!==Ke&&(e[Le]=r[Le])}(e,t,r)}),e},jf.qsa=function(t,e){var r,i="#"==e[0],n=!i&&"."==e[0],a=i||n?e.slice(1):e,o=ff.test(a);return t.getElementById&&o&&i?(r=t.getElementById(a))?[r]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:Re.call(o&&!i&&t.getElementsByClassName?n?t.getElementsByClassName(a):t.getElementsByTagName(e):t.querySelectorAll(e))},Me.contains=Se.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},Me.type=pf,Me.isFunction=qf,Me.isWindow=rf,Me.isArray=of,Me.isPlainObject=uf,Me.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},Me.isNumeric=function(t){var e=Number(t),r=typeof t;return null!=t&&"boolean"!=r&&("string"!=r||t.length)&&!isNaN(e)&&isFinite(e)||!1},Me.inArray=function(t,e,r){return Oe.indexOf.call(e,t,r)},Me.camelCase=kf,Me.trim=function(t){return null==t?"":String.prototype.trim.call(t)},Me.uuid=0,Me.support={},Me.expr={},Me.noop=function(){},Me.map=function(t,e){var r,i,n,a=[];if(vf(t))for(i=0;i)<[^<]*)*<\/script>/gi,Ok=/^(?:text|application)\/javascript/i,Pk=/^(?:text|application)\/xml/i,Qk="application/json",Rk="text/html",Sk=/^\s*$/,Tk=Kk.createElement("a");function Vk(t,e,r,i){if(t.global)return function(t,e,r){var i=Ik.Event(e);return Ik(t).trigger(i,r),!i.isDefaultPrevented()}(e||Kk,r,i)}function Yk(t,e){var r=e.context;if(!1===e.beforeSend.call(r,t,e)||!1===Vk(e,r,"ajaxBeforeSend",[t,e]))return!1;Vk(e,r,"ajaxSend",[t,e])}function Zk(t,e,r,i){var n=r.context,a="success";r.success.call(n,t,a,e),i&&i.resolveWith(n,[t,a,e]),Vk(r,n,"ajaxSuccess",[e,r,t]),_k(a,e,r)}function $k(t,e,r,i,n){var a=i.context;i.error.call(a,r,e,t),n&&n.rejectWith(a,[r,e,t]),Vk(i,a,"ajaxError",[r,i,t||e]),_k(e,r,i)}function _k(t,e,r){var i=r.context;r.complete.call(i,e,t),Vk(r,i,"ajaxComplete",[e,r]),function(t){t.global&&!--Ik.active&&Vk(t,null,"ajaxStop")}(r)}function bl(){}function dl(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function fl(t,e,r,i){return Ik.isFunction(e)&&(i=r,r=e,e=void 0),Ik.isFunction(r)||(i=r,r=void 0),{url:t,data:e,success:r,dataType:i}}Tk.href=window.location.href,Ik.active=0,Ik.ajaxJSONP=function(r,i){if(!("type"in r))return Ik.ajax(r);function t(t){Ik(s).triggerHandler("error",t||"abort")}var n,a,e=r.jsonpCallback,o=(Ik.isFunction(e)?e():e)||"Zepto"+Jk++,s=Kk.createElement("script"),l=window[o],u={abort:t};return i&&i.promise(u),Ik(s).on("load error",function(t,e){clearTimeout(a),Ik(s).off().remove(),"error"!=t.type&&n?Zk(n[0],u,r,i):$k(null,e||"error",u,r,i),window[o]=l,n&&Ik.isFunction(l)&&l(n[0]),l=n=void 0}),!1===Yk(u,r)?t("abort"):(window[o]=function(){n=arguments},s.src=r.url.replace(/\?(.+)=\?/,"?$1="+o),Kk.head.appendChild(s),0").html(t.replace(Nk,"")).find(i):t),s&&s.apply(n,arguments)},Ik.ajax(o),this};var gl=encodeURIComponent;Ik.param=function(t,e){var r=[];return r.add=function(t,e){Ik.isFunction(e)&&(e=e()),null==e&&(e=""),this.push(gl(t)+"="+gl(e))},function r(i,t,n,a){var o,s=Ik.isArray(t),l=Ik.isPlainObject(t);Ik.each(t,function(t,e){o=Ik.type(e),a&&(t=n?a:a+"["+(l||"object"==o||"array"==o?t:"")+"]"),!a&&s?i.add(e.name,e.value):"array"==o||!n&&"object"==o?r(i,e,n,t):i.add(t,e)})}(r,t,e),r.join("&").replace(/%20/g,"+")}}(Je),(_m=Je).Callbacks=function(i){i=_m.extend({},i);var e,r,n,a,o,s,l=[],u=!i.once&&[],d=function(t){for(e=i.memory&&t,r=!0,s=a||0,a=0,o=l.length,n=!0;l&&s/,Sq="Zepto"+ +new Date,Lq.qsa=function(a,o){return Tq(o,function(t,r,i){try{var e;!t&&r?t="*":Rq.test(t)&&(e=Kq(a).addClass(Sq),t="."+Sq+" "+t);var n=Mq(a,t)}catch(t){throw console.error("error performing selector: %o",o),t}finally{e&&e.removeClass(Sq)}return r?Lq.uniq(Kq.map(n,function(t,e){return r.call(t,e,n,i)})):n})},Lq.matches=function(i,t){return Tq(t,function(t,e,r){return(!t||Nq(i,t))&&(!e||e.call(i,null,r)===i)})},He.exports=Je},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});function n(t){return null===t?"":(""+t).replace(o,function(t){return a[t]})}function i(a,t){var e,r=new RegExp([(l.escape||u).source,(l.interpolate||u).source,(l.evaluate||u).source].join("|")+"|$","g"),o=0,s="__p+='";a.replace(r,function(t,e,r,i,n){return s+=a.slice(o,n).replace(c,function(t){return"\\"+d[t]}),e&&(s+="'+\n((__t=("+e+"))==null?'':escapeExpr(__t))+\n'"),r&&(s+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(s+="';\n"+i+"\n__p+='"),o=n+t.length,t}),s+="';\n",l.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n//# sourceURL=/microtemplates/source["+f+++"]";try{e=new Function(l.variable||"obj","escapeExpr",s)}catch(t){throw t.source=s,t}if(t)return e(t,n);function i(t){return e.call(this,t,n)}return i.source="function("+(l.variable||"obj")+"){\n"+s+"}",i}var l={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},u=/(.)^/,d={"'":"'","\\":"\\","\r":"r","\n":"n","\t":"t","\u2028":"u2028","\u2029":"u2029"},c=/\\|'|\r|\n|\t|\u2028|\u2029/g,a={"&":"&","<":"<",">":">",'"':""","'":"'"},o=new RegExp("[&<>\"']","g"),f=0;i.settings=l,e.default=i,t.exports=e.default},function(t,e){t.exports=function(r){var o=[];return o.toString=function(){return this.map(function(t){var e=function(t,e){var r=t[1]||"",i=t[3];if(!i)return r;if(e&&"function"==typeof btoa){var n=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(i),a=i.sources.map(function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"});return[r].concat(a).concat([n]).join("\n")}return[r].join("\n")}(t,r);return t[2]?"@media "+t[2]+"{"+e+"}":e}).join("")},o.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;i=e.length?{value:void 0,done:!0}:(t=i(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e){t.exports=!0},function(t,e,i){function n(){}var a=i(21),o=i(116),s=i(51),l=i(49)("IE_PROTO"),u="prototype",d=function(){var t,e=i(67)("iframe"),r=s.length;for(e.style.display="none",i(117).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("