diff --git a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js
index 1bf137016..f91cf0e96 100644
--- a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js
+++ b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js
@@ -435,7 +435,7 @@ class DetailCardsEditAndEdit extends Component{
*
必填项
diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
index 1731064c0..61933b765 100644
--- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
+++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
@@ -140,10 +140,13 @@ class PathDetailIndex extends Component{
let url="/paths/"+pathid+".json";
axios.get(url).then((result)=>{
if (result.data.status === 407 || result.data.status === 401) {
+ debugger
return;
}
if (result.data.status === 403) {
+ debugger
+ window.location.href = "/403";
return;
}
@@ -165,9 +168,12 @@ class PathDetailIndex extends Component{
axios.get(url).then((result)=>{
// TODO 403 让后台返回status 403 比较好
if (result.data.status == 407 || result.data.status == 401) {
+ debugger
return;
}
if (result.data.status === 403 ) {
+ debugger
+ window.location.href = "/403";
return;
}
From 8cbda918b810c4f923abce207eb0703dd335266c Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 25 Jul 2019 14:59:28 +0800
Subject: [PATCH 02/25] =?UTF-8?q?=E5=BC=80=E5=90=AF=E5=AE=9E=E8=AE=AD?=
=?UTF-8?q?=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/shixuns_controller.rb | 178 ++++++++++++++++++++------
1 file changed, 140 insertions(+), 38 deletions(-)
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index 9edb6bb9d..587ef2cb9 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -513,6 +513,111 @@ class ShixunsController < ApplicationController
# 以前在开启挑战的时候检测实训是否更新,更新则重置,觉得应该放在TPI更好
# 中间需要一个过渡动画
# TODO: 第一次开启实训都会去判断是否是纯选择题类型,感觉做成在创建关卡的时候就判断该实训是否是纯选择题更加合适
+ # def shixun_exec
+ # if is_shixun_opening?
+ # tip_show_exception(-3, "#{@shixun.opening_time.strftime('%Y-%m-%d %H:%M:%S')}")
+ # end
+ # current_myshixun = @shixun.current_myshixun(current_user.id)
+ #
+ # min_challenges = @shixun.challenges.pluck(:id , :st)
+ #
+ # Rails.logger.info("11111111112#{current_myshixun.try(:id)}")
+ # Rails.logger.info("111111111102#{params[:reset] != 1}")
+ #
+ # # 因为读写分离有延迟,所以如果是重置来的请求可以先跳过,重置过来的params[:reset]为1
+ # if current_myshixun && params[:reset] != "1"
+ # games = current_myshixun.games
+ # # 如果TPM和TPI的管卡数不相等或者关卡顺序错了,说明实训被极大的改动,需要重置,实训发布前打过的实训都需要重置
+ # if is_shixun_reset?(games, min_challenges, current_myshixun)
+ # # 这里页面弹框要收到 当前用户myshixun的identifier.
+ # tip_show_exception("/myshixuns/#{current_myshixun.try(:identifier)}/reset_my_game")
+ # end
+ #
+ #
+ # if current_myshixun.repo_name.nil?
+ # g = Gitlab.client
+ # repo_name = g.project(current_myshixun.gpid).try(:path_with_namespace)
+ # current_myshixun.update_column(:repo_name, repo_name)
+ # end
+ #
+ #
+ # # 如果存在实训,则直接进入实训
+ # # 如果实训允许跳关,传参params[:challenge_id]跳入具体的关卡
+ # @current_task =
+ # if params[:challenge_id]
+ # game = games.where(challenge_id: params[:challenge_id]).take
+ # if @shixun.task_pass || game.status != 3
+ # game
+ # else
+ # current_myshixun.current_task(games)
+ # end
+ # else
+ # current_myshixun.current_task(games)
+ # end
+ # else
+ # # 如果未创建关卡一定不能开启实训,否则TPI没法找到当前的关卡
+ # if @shixun.challenges_count == 0
+ # tip_exception("开启实战前请先创建实训关卡")
+ # end
+ #
+ # # 判断实训是否全为选择题
+ # is_choice_type = (min_challenges.size == min_challenges.select{|challenge| challenge.last == 1}.count)
+ # if !is_choice_type
+ # commit = GitService.commits(repo_path: @repo_path).try(:first)
+ # uid_logger("First comit########{commit}")
+ # tip_exception("开启实战前请先在版本库中提交代码") if commit.blank?
+ # commit_id = commit["id"]
+ # end
+ #
+ # ActiveRecord::Base.transaction do
+ # begin
+ # cloud_bridge = edu_setting('cloud_bridge')
+ # myshixun_identifier = generate_identifier Myshixun, 10
+ # myshixun = @shixun.myshixuns.create!(user_id: current_user.id, identifier: myshixun_identifier,
+ # modify_time: @shixun.modify_time, reset_time: @shixun.reset_time,
+ # onclick_time: Time.now, commit_id: commit_id)
+ # uid_logger("myshixun_id is #{myshixun.id}")
+ #
+ #
+ # # 其它创建关卡等操作
+ # challenges = @shixun.challenges
+ # # 之所以增加user_id是为了方便统计查询性能
+ # game_attrs = %i[challenge_id myshixun_id status user_id open_time identifier modify_time created_at updated_at]
+ # Game.bulk_insert(*game_attrs) do |worker|
+ # base_attr = { myshixun_id: myshixun.id, user_id: myshixun.user_id }
+ # challenges.each_with_index do |challenge, index|
+ # status = (index == 0 ? 0 : 3)
+ # game_identifier = generate_identifier(Game, 12)
+ # worker.add(base_attr.merge(challenge_id: challenge.id, status: status, open_time: Time.now,
+ # identifier: game_identifier, modify_time: challenge.modify_time))
+ # end
+ # end
+ #
+ # # 如果实训是纯选择题,则不需要去fork仓库以及中间层的相关操作了
+ # unless is_choice_type
+ # # fork仓库
+ # project_fork(myshixun, @repo_path, current_user.login)
+ #
+ # rep_url = Base64.urlsafe_encode64(repo_ip_url @repo_path )
+ # uid_logger("start openGameInstance")
+ # uri = "#{cloud_bridge}/bridge/game/openGameInstance"
+ # logger.info("end openGameInstance")
+ # params = {tpiID: "#{myshixun.id}", tpmGitURL:rep_url, tpiRepoName: myshixun.repo_name.split("/").last}
+ # uid_logger("openGameInstance params is #{params}")
+ # interface_post uri, params, 83, "实训云平台繁忙(繁忙等级:83)"
+ # end
+ #
+ # @current_task = myshixun.current_task(myshixun.games)
+ # uid_logger("## shixun exec: myshixun id is #{myshixun.id}")
+ # rescue Exception => e
+ # uid_logger_error(e.message)
+ # tip_exception("实训云平台繁忙(繁忙等级:81)")
+ # raise ActiveRecord::Rollback
+ # end
+ # end
+ # end
+ # end
+
def shixun_exec
if is_shixun_opening?
tip_show_exception(-3, "#{@shixun.opening_time.strftime('%Y-%m-%d %H:%M:%S')}")
@@ -520,10 +625,6 @@ class ShixunsController < ApplicationController
current_myshixun = @shixun.current_myshixun(current_user.id)
min_challenges = @shixun.challenges.pluck(:id , :st)
-
- Rails.logger.info("11111111112#{current_myshixun.try(:id)}")
- Rails.logger.info("111111111102#{params[:reset] != 1}")
-
# 因为读写分离有延迟,所以如果是重置来的请求可以先跳过,重置过来的params[:reset]为1
if current_myshixun && params[:reset] != "1"
games = current_myshixun.games
@@ -540,7 +641,6 @@ class ShixunsController < ApplicationController
current_myshixun.update_column(:repo_name, repo_name)
end
-
# 如果存在实训,则直接进入实训
# 如果实训允许跳关,传参params[:challenge_id]跳入具体的关卡
@current_task =
@@ -569,50 +669,52 @@ class ShixunsController < ApplicationController
commit_id = commit["id"]
end
- ActiveRecord::Base.transaction do
- begin
- cloud_bridge = edu_setting('cloud_bridge')
- myshixun_identifier = generate_identifier Myshixun, 10
- myshixun = @shixun.myshixuns.create!(user_id: current_user.id, identifier: myshixun_identifier,
- modify_time: @shixun.modify_time, reset_time: @shixun.reset_time,
- onclick_time: Time.now, commit_id: commit_id)
- uid_logger("myshixun_id is #{myshixun.id}")
-
-
- # 其它创建关卡等操作
- challenges = @shixun.challenges
- # 之所以增加user_id是为了方便统计查询性能
- game_attrs = %i[challenge_id myshixun_id status user_id open_time identifier modify_time created_at updated_at]
- Game.bulk_insert(*game_attrs) do |worker|
- base_attr = { myshixun_id: myshixun.id, user_id: myshixun.user_id }
- challenges.each_with_index do |challenge, index|
- status = (index == 0 ? 0 : 3)
- game_identifier = generate_identifier(Game, 12)
- worker.add(base_attr.merge(challenge_id: challenge.id, status: status, open_time: Time.now,
- identifier: game_identifier, modify_time: challenge.modify_time))
+ begin
+ ActiveRecord::Base.transaction do
+ begin
+ myshixun_identifier = generate_identifier Myshixun, 10
+ myshixun_params = {user_id: current_user.id, identifier: myshixun_identifier,
+ modify_time: @shixun.modify_time, reset_time: @shixun.reset_time,
+ onclick_time: Time.now, commit_id: commit_id}
+ myshixun = @shixun.myshixuns.create!(myshixun_params)
+ # 其它创建关卡等操作
+ challenges = @shixun.challenges
+ # 之所以增加user_id是为了方便统计查询性能
+ game_attrs = %i[challenge_id myshixun_id status user_id open_time identifier modify_time created_at updated_at]
+ Game.bulk_insert(*game_attrs) do |worker|
+ base_attr = {myshixun_id: myshixun.id, user_id: myshixun.user_id}
+ challenges.each_with_index do |challenge, index|
+ status = (index == 0 ? 0 : 3)
+ game_identifier = generate_identifier(Game, 12)
+ worker.add(base_attr.merge(challenge_id: challenge.id, status: status, open_time: Time.now,
+ identifier: game_identifier, modify_time: challenge.modify_time))
+ end
end
+ @current_task = myshixun.current_task(myshixun.games)
+ rescue Exception => e
+ logger.error("------ActiveRecord::RecordInvalid: #{e.message}")
+ raise("ActiveRecord::RecordInvalid")
end
-
- # 如果实训是纯选择题,则不需要去fork仓库以及中间层的相关操作了
+ end
+ # 如果实训是纯选择题,则不需要去fork仓库以及中间层的相关操作了
+ ActiveRecord::Base.transaction do
unless is_choice_type
# fork仓库
+ cloud_bridge = edu_setting('cloud_bridge')
project_fork(myshixun, @repo_path, current_user.login)
-
- rep_url = Base64.urlsafe_encode64(repo_ip_url @repo_path )
+ rep_url = Base64.urlsafe_encode64(repo_ip_url @repo_path)
uid_logger("start openGameInstance")
uri = "#{cloud_bridge}/bridge/game/openGameInstance"
logger.info("end openGameInstance")
- params = {tpiID: "#{myshixun.id}", tpmGitURL:rep_url, tpiRepoName: myshixun.repo_name.split("/").last}
+ params = {tpiID: "#{myshixun.id}", tpmGitURL: rep_url, tpiRepoName: myshixun.repo_name.split("/").last}
uid_logger("openGameInstance params is #{params}")
interface_post uri, params, 83, "实训云平台繁忙(繁忙等级:83)"
end
-
- @current_task = myshixun.current_task(myshixun.games)
- uid_logger("## shixun exec: myshixun id is #{myshixun.id}")
- rescue Exception => e
- uid_logger_error(e.message)
- tip_exception("实训云平台繁忙(繁忙等级:81)")
- raise ActiveRecord::Rollback
+ end
+ rescue Exception => e
+ if e.message != "ActiveRecord::RecordInvalid"
+ logger.error("##########project_fork error #{e.message}")
+ @current_task.destroy!
end
end
end
From 1bfe9b6b59a6fd254b84f6cab1f0b36e244b4825 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 25 Jul 2019 15:05:48 +0800
Subject: [PATCH 03/25] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=BC=80=E5=90=AF?=
=?UTF-8?q?=E5=AE=9E=E8=AE=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/shixuns_controller.rb | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index 587ef2cb9..fbc5c18fb 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -676,13 +676,13 @@ class ShixunsController < ApplicationController
myshixun_params = {user_id: current_user.id, identifier: myshixun_identifier,
modify_time: @shixun.modify_time, reset_time: @shixun.reset_time,
onclick_time: Time.now, commit_id: commit_id}
- myshixun = @shixun.myshixuns.create!(myshixun_params)
+ @myshixun = @shixun.myshixuns.create!(myshixun_params)
# 其它创建关卡等操作
challenges = @shixun.challenges
# 之所以增加user_id是为了方便统计查询性能
game_attrs = %i[challenge_id myshixun_id status user_id open_time identifier modify_time created_at updated_at]
Game.bulk_insert(*game_attrs) do |worker|
- base_attr = {myshixun_id: myshixun.id, user_id: myshixun.user_id}
+ base_attr = {myshixun_id: @myshixun.id, user_id: @myshixun.user_id}
challenges.each_with_index do |challenge, index|
status = (index == 0 ? 0 : 3)
game_identifier = generate_identifier(Game, 12)
@@ -690,7 +690,7 @@ class ShixunsController < ApplicationController
identifier: game_identifier, modify_time: challenge.modify_time))
end
end
- @current_task = myshixun.current_task(myshixun.games)
+ @current_task = @myshixun.current_task(@myshixun.games)
rescue Exception => e
logger.error("------ActiveRecord::RecordInvalid: #{e.message}")
raise("ActiveRecord::RecordInvalid")
@@ -701,12 +701,12 @@ class ShixunsController < ApplicationController
unless is_choice_type
# fork仓库
cloud_bridge = edu_setting('cloud_bridge')
- project_fork(myshixun, @repo_path, current_user.login)
+ project_fork(@myshixun, @repo_path, current_user.login)
rep_url = Base64.urlsafe_encode64(repo_ip_url @repo_path)
uid_logger("start openGameInstance")
uri = "#{cloud_bridge}/bridge/game/openGameInstance"
logger.info("end openGameInstance")
- params = {tpiID: "#{myshixun.id}", tpmGitURL: rep_url, tpiRepoName: myshixun.repo_name.split("/").last}
+ params = {tpiID: "#{@myshixun.id}", tpmGitURL: rep_url, tpiRepoName: @myshixun.repo_name.split("/").last}
uid_logger("openGameInstance params is #{params}")
interface_post uri, params, 83, "实训云平台繁忙(繁忙等级:83)"
end
From 5bebbbcd2f77191784a2f9a15024ac27d32ff0b0 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 25 Jul 2019 15:06:56 +0800
Subject: [PATCH 04/25] =?UTF-8?q?=E8=B7=91=E5=87=BA=E5=BC=82=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/shixuns_controller.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index fbc5c18fb..7a2db0666 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -716,6 +716,7 @@ class ShixunsController < ApplicationController
logger.error("##########project_fork error #{e.message}")
@current_task.destroy!
end
+ raise ActiveRecord::Rollback
end
end
end
From 64ae7a2cb6c0b05f18cdffed8f798be9a052996f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 25 Jul 2019 15:14:05 +0800
Subject: [PATCH 05/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/modules/courses/new/CoursesNew.js | 22 +++++++++----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/public/react/src/modules/courses/new/CoursesNew.js b/public/react/src/modules/courses/new/CoursesNew.js
index c8b090b8b..73c1dded9 100644
--- a/public/react/src/modules/courses/new/CoursesNew.js
+++ b/public/react/src/modules/courses/new/CoursesNew.js
@@ -301,7 +301,7 @@ class CoursesNew extends Component {
if(value!=""){
this.props.form.setFieldsValue({
classroom:value,
- course:value
+ // course:value
});
this.Searchvalue(value)
}
@@ -311,7 +311,7 @@ class CoursesNew extends Component {
handleChange=(value)=>{
this.props.form.setFieldsValue({
- course:value,
+ // course:value,
classroom:value
})
};
@@ -320,7 +320,7 @@ class CoursesNew extends Component {
if(value!="") {
this.props.form.setFieldsValue({
- school: value,
+ // school: value,
fetching: true,
});
@@ -331,7 +331,7 @@ class CoursesNew extends Component {
handleChangeschools=(value)=>{
this.props.form.setFieldsValue({
- school: value,
+ // school: value,
fetching: true,
});
}
@@ -347,9 +347,9 @@ class CoursesNew extends Component {
};
getschool=(value)=>{
- this.props.form.setFieldsValue({
- school: value
- })
+ // this.props.form.setFieldsValue({
+ // school: value
+ // })
let url="/schools/school_list.json";
axios.get(url,{
params: {
@@ -359,7 +359,7 @@ class CoursesNew extends Component {
if (result.data.status===0) {
this.setState({
searchlistscholl: result.data.school_names,
- school: value
+ // school: value
})
}
@@ -367,9 +367,9 @@ class CoursesNew extends Component {
console.log(error)
})
}
- showApplyForAddOrgModal = () => {
- this.applyForAddOrgForm.setVisible(true)
- }
+ showApplyForAddOrgModal = () => {
+ this.applyForAddOrgForm.setVisible(true)
+ }
render() {
let {datatime,school,searchlistscholl} = this.state;
const {getFieldDecorator} = this.props.form;
From f28a2e3580eb5f640d391cbb41232122bf49271e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com>
Date: Thu, 25 Jul 2019 15:17:28 +0800
Subject: [PATCH 06/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/common/components/DragValidator.js | 227 +++++++++---------
.../src/common/components/DragValidatortwo.js | 114 ---------
.../react/src/modules/user/CheckInputysl.js | 104 ++++++++
.../src/modules/user/FindPasswordComponent.js | 26 +-
.../modules/user/LoginRegisterComponent.js | 28 +--
public/react/src/modules/user/secureCode.css | 42 ++++
6 files changed, 284 insertions(+), 257 deletions(-)
delete mode 100644 public/react/src/common/components/DragValidatortwo.js
create mode 100644 public/react/src/modules/user/CheckInputysl.js
create mode 100644 public/react/src/modules/user/secureCode.css
diff --git a/public/react/src/common/components/DragValidator.js b/public/react/src/common/components/DragValidator.js
index 7d707def0..69e91f604 100644
--- a/public/react/src/common/components/DragValidator.js
+++ b/public/react/src/common/components/DragValidator.js
@@ -1,114 +1,115 @@
-import React, { Component } from 'react';
-
-const $ = window.jQuery
-const jQuery = $;
-if (!$.drag) {
- (function($){
- $.fn.dragValidator = function(options){
- var x, drag = this, isMove = false, defaults = {
- };
- var options = $.extend(defaults, options);
- //添加背景,文字,滑块
- var html = '
'+
- '
拖动滑块验证
'+
- '
';
- this.append(html);
-
- var handler = drag.find('.handler');
- var drag_bg = drag.find('.drag_bg');
- var text = drag.find('.drag_text');
- var maxWidth = text.width() - handler.width(); //能滑动的最大间距
- //鼠标按下时候的x轴的位置
- handler.mousedown(function(e){
- isMove = true;
- x = e.pageX - parseInt(handler.css('left'), 10);
- });
-
- //鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离
- $(document).mousemove(function(e){
- var _x = e.pageX - x;
- var handler_offset = handler.offset();
- var lastX = e.clientX -x;
- lastX = Math.max(0,Math.min(maxWidth,lastX));
- if(isMove){
- if(_x > 0 && _x <= maxWidth){
- handler.css({'left': lastX});
- drag_bg.css({'width': lastX});
- }
- else if(lastX > maxWidth - 5 && lastX < maxWidth + 5 ){ //鼠标指针移动距离达到最大时清空事件
- dragOk();
- }
- }
- });
- handler.mouseup(function(e){
- isMove = false;
- var _x = e.pageX - x;
- if(text.text() != '验证通过' && _x < maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
- handler.animate({'left': 0});
- drag_bg.animate({'width': 0});
- }
- });
-
- //清空事件
- function dragOk(){
- options.dragOkCallback && options.dragOkCallback()
- var kuaiwidth=drag.width() - handler.width() - 2;
- handler.removeClass('handler_bg').addClass('handler_ok_bg');
- handler.css({'left':kuaiwidth+'px'})
- text.css({'width':kuaiwidth+'px'});
- text.text('验证通过');
- drag.css({'color': '#fff'});
- drag_bg.css({'width':kuaiwidth+'px'})
- handler.unbind('mousedown');
- $(document).unbind('mousemove');
- $(document).unbind('mouseup');
- $("#user_verification_notice").html("");
- $('#user_verification_notice').parent().hide();
- }
- };
- })(jQuery);
-}
-
-class DragValidator extends Component {
- componentDidMount () {
- // if($("#reg-drag").length>0 && IsPC()){
- $("#reg-drag").dragValidator({
- height: this.props.height,
- dragOkCallback: () => {
- this.props.dragOkCallback && this.props.dragOkCallback()
- }
- });
- // }else{
- // $("#reg-drag").empty();
- // }
- }
- empty() {
- $("#reg-drag").empty();
- }
- render() {
- const height = this.props.height || 45;
- const className = this.props.className
- const successGreenColor = this.props.successGreenColor || '#29bd8b'
- // newMain clearfix
- return (
-
-
-
-
- );
- }
-}
-
+import React, { Component } from 'react';
+
+const $ = window.jQuery
+const jQuery = $;
+if (!$.drag) {
+ (function($){
+ $.fn.dragValidator = function(options){
+ var x, drag = this, isMove = false, defaults = {
+ };
+ var options = $.extend(defaults, options);
+ //添加背景,文字,滑块
+ var html = '
'+
+ '
拖动滑块验证
'+
+ '
';
+ this.append(html);
+
+ var handler = drag.find('.handler');
+ var drag_bg = drag.find('.drag_bg');
+ var text = drag.find('.drag_text');
+ var maxWidth = text.width() - handler.width(); //能滑动的最大间距
+ //鼠标按下时候的x轴的位置
+ handler.mousedown(function(e){
+ isMove = true;
+ x = e.pageX - parseInt(handler.css('left'), 10);
+ });
+
+ //鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离
+ $(document).mousemove(function(e){
+ var _x = e.pageX - x;
+ var handler_offset = handler.offset();
+ var lastX = e.clientX -x;
+ lastX = Math.max(0,Math.min(maxWidth,lastX));
+ if(isMove){
+ if(_x > 0 && _x <= maxWidth){
+ handler.css({'left': lastX});
+ drag_bg.css({'width': lastX});
+ }
+ else if(lastX > maxWidth - 5 && lastX < maxWidth + 5 ){ //鼠标指针移动距离达到最大时清空事件
+ dragOk();
+
+ }
+ }
+ });
+ handler.mouseup(function(e){
+ isMove = false;
+ var _x = e.pageX - x;
+ if(text.text() != '验证通过' && _x < maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
+ handler.animate({'left': 0});
+ drag_bg.animate({'width': 0});
+ }
+ });
+
+ //清空事件
+ function dragOk(){
+ options.dragOkCallback && options.dragOkCallback()
+ var kuaiwidth=drag.width() - handler.width() - 2;
+ handler.removeClass('handler_bg').addClass('handler_ok_bg');
+ handler.css({'left':kuaiwidth+'px'})
+ text.css({'width':kuaiwidth+'px'});
+ text.text('验证通过');
+ drag.css({'color': '#fff'});
+ drag_bg.css({'width':kuaiwidth+'px'})
+ handler.unbind('mousedown');
+ $(document).unbind('mousemove');
+ $(document).unbind('mouseup');
+ $("#user_verification_notice").html("");
+ $('#user_verification_notice').parent().hide();
+ }
+ };
+ })(jQuery);
+}
+
+class DragValidator extends Component {
+ componentDidMount () {
+ // if($("#reg-drag").length>0 && IsPC()){
+ $("#reg-drag").dragValidator({
+ height: this.props.height,
+ dragOkCallback: () => {
+ this.props.dragOkCallback && this.props.dragOkCallback()
+ }
+ });
+ // }else{
+ // $("#reg-drag").empty();
+ // }
+ }
+ empty() {
+ $("#reg-drag").empty();
+ }
+ render() {
+ const height = this.props.height || 45;
+ const className = this.props.className
+ const successGreenColor = this.props.successGreenColor || '#29bd8b'
+ // newMain clearfix
+ return (
+
+
+
+
+ );
+ }
+}
+
export default ( DragValidator );
\ No newline at end of file
diff --git a/public/react/src/common/components/DragValidatortwo.js b/public/react/src/common/components/DragValidatortwo.js
deleted file mode 100644
index 2b789063e..000000000
--- a/public/react/src/common/components/DragValidatortwo.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import React, { Component } from 'react';
-
-const $ = window.jQuery
-const jQuery = $;
-if (!$.drag) {
- (function($){
- $.fn.dragValidator = function(options){
- var x, drag = this, isMove = false, defaults = {
- };
- var options = $.extend(defaults, options);
- //添加背景,文字,滑块
- var html = '
'+
- '
拖动滑块验证
'+
- '
';
- this.append(html);
-
- var handler = drag.find('.handler');
- var drag_bg = drag.find('.drag_bg');
- var text = drag.find('.drag_text');
- var maxWidth = text.width() - handler.width(); //能滑动的最大间距
- //鼠标按下时候的x轴的位置
- handler.mousedown(function(e){
- isMove = true;
- x = e.pageX - parseInt(handler.css('left'), 10);
- });
-
- //鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离
- $(document).mousemove(function(e){
- var _x = e.pageX - x;
- var handler_offset = handler.offset();
- var lastX = e.clientX -x;
- lastX = Math.max(0,Math.min(maxWidth,lastX));
- if(isMove){
- if(_x > 0 && _x <= maxWidth){
- handler.css({'left': lastX});
- drag_bg.css({'width': lastX});
- }
- else if(lastX > maxWidth - 5 && lastX < maxWidth + 5 ){ //鼠标指针移动距离达到最大时清空事件
- dragOk();
- }
- }
- });
- handler.mouseup(function(e){
- isMove = false;
- var _x = e.pageX - x;
- if(text.text() != '验证通过' && _x < maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
- handler.animate({'left': 0});
- drag_bg.animate({'width': 0});
- }
- });
-
- //清空事件
- function dragOk(){
- options.dragOkCallback && options.dragOkCallback()
- var kuaiwidth=drag.width() - handler.width() - 2;
- handler.removeClass('handler_bg').addClass('handler_ok_bg');
- handler.css({'left':kuaiwidth+'px'})
- text.css({'width':kuaiwidth+'px'});
- text.text('验证通过');
- drag.css({'color': '#fff'});
- drag_bg.css({'width':kuaiwidth+'px'})
- handler.unbind('mousedown');
- $(document).unbind('mousemove');
- $(document).unbind('mouseup');
- $("#user_verification_notice").html("");
- $('#user_verification_notice').parent().hide();
- }
- };
- })(jQuery);
-}
-
-class DragValidator extends Component {
- componentDidMount () {
- // if($("#reg-drag").length>0 && IsPC()){
- $("#reg-drag").dragValidator({
- height: this.props.height,
- dragOkCallback: () => {
- this.props.dragOkCallback && this.props.dragOkCallback()
- }
- });
- // }else{
- // $("#reg-drag").empty();
- // }
- }
- empty() {
- $("#reg-drag").empty();
- }
- render() {
- const height = this.props.height || 45;
- const className = this.props.className
- const successGreenColor = this.props.successGreenColor || '#29bd8b'
- // newMain clearfix
- return (
-
-
-
-
- );
- }
-}
-
-export default ( DragValidator );
\ No newline at end of file
diff --git a/public/react/src/modules/user/CheckInputysl.js b/public/react/src/modules/user/CheckInputysl.js
new file mode 100644
index 000000000..a057f12d4
--- /dev/null
+++ b/public/react/src/modules/user/CheckInputysl.js
@@ -0,0 +1,104 @@
+import React, { Component } from 'react';
+import "./secureCode.css";
+
+/**
+ * An TextInput with Icon and check
+ * 带图标检查的输入框
+ */
+class CheckInputysl extends Component {
+ constructor(){
+ super();
+ this.state = {
+ isMove:false,
+ start:0,
+ moveLength:0,
+ clear:false,
+ move:0,
+ width:0
+ };
+ this.onMouseUp = this.onMouseUp.bind(this);
+ this.onMouseDown = this.onMouseDown.bind(this);
+ this.onMouseMove = this.onMouseMove.bind(this);
+ }
+ componentDidMount() {
+ let dragHandler = document.getElementById("dragHandler");
+ dragHandler.addEventListener("mousedown", this.onMouseDown);
+ }
+ onMouseDown(e){
+ console.log("28");
+ document.addEventListener("mousemove", this.onMouseMove);
+ document.addEventListener("mouseup", this.onMouseUp);
+ let event=e||window.event;
+ this.setState({
+ isMove:true,
+ start:event.pageX
+ });
+ }
+ onMouseUp(e){
+ console.log("38");
+ let event=e||window.event;
+ this.setState({
+ isMove:false,
+ });
+ let drag = window.getComputedStyle(this.verifyDOM);
+ let handler = window.getComputedStyle(this.handlerDOM);
+ let moveLength = event.clientX-this.verifyDOM.offsetLeft - Number.parseInt(handler.width) / 2;
+ // console.log(drag.width);
+ let maxWidth = Number.parseInt(drag.width) - Number.parseInt(handler.width);
+ console.log("moveLength="+moveLength);
+ console.log("maxWidth="+maxWidth);
+ if(moveLength <= maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
+ this.setState({
+ move:0,
+ width:0
+ });
+ document.removeEventListener("mousemove", this.onMouseMove);
+ document.removeEventListener("mouseup", this.onMouseUp);
+ }
+ if(this.props.onDrag){
+ this.props.onDrag(this.state.clear);
+ }
+ }
+ onMouseMove(e){
+ console.log("63");
+ let event=e||window.event;
+ let drag = window.getComputedStyle(this.verifyDOM);
+ let handler = window.getComputedStyle(this.handlerDOM);
+ let moveLength = event.clientX-this.verifyDOM.offsetLeft - Number.parseInt(handler.width) / 2;
+ let maxWidth = Number.parseInt(drag.width) - Number.parseInt(handler.width);
+ if(this.state.isMove){
+ if(moveLength<0){
+ moveLength=0
+ }else if(moveLength >= maxWidth){
+ moveLength=maxWidth;
+ this.removeMouseMove();
+ }
+ this.setState({
+ move:moveLength,
+ width:moveLength
+ });
+ }
+ }
+ //清空事件
+ removeMouseMove(){
+ this.setState({
+ clear:true
+ });
+ let dragHandler = document.getElementById("dragHandler");
+ dragHandler.removeEventListener("mousedown", this.onMouseDown);
+ document.removeEventListener("mousemove", this.onMouseMove);
+ document.removeEventListener("mouseup", this.onMouseUp);
+ this.props.dragOkCallback();
+ }
+ render(){
+ return (
+
{this.verifyDOM = dom}} style={{"color":this.state.clear ? "#fff" : "#252535"}}>
+
{this.bgDOM = dom}} style={{"width":this.state.width}}>
+
{this.state.clear ? "验证通过" : "拖动滑块验证"}
+
{this.handlerDOM = dom}}>
+
+ );
+ }
+}
+
+export default ( CheckInputysl );
\ No newline at end of file
diff --git a/public/react/src/modules/user/FindPasswordComponent.js b/public/react/src/modules/user/FindPasswordComponent.js
index 22fcd97de..0c3678776 100644
--- a/public/react/src/modules/user/FindPasswordComponent.js
+++ b/public/react/src/modules/user/FindPasswordComponent.js
@@ -2,11 +2,11 @@ import React, {Component} from 'react';
import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
-import {getImageUrl, DragValidator} from 'educoder';
-
+import {getImageUrl} from 'educoder';
+import CheckInputysl1 from './CheckInputysl';
+import CheckInputysl2 from './CheckInputysl';
import {Tabs, Input, Checkbox, Button, notification} from 'antd';
-import DragValidatortwo from '../../../src/common/components/DragValidatortwo'
import ReadPassword from './ReadPassword';
@@ -643,24 +643,20 @@ class LoginRegisterComponent extends Component {
{
Whethertoverify===false&&pciphone===true?
-
this.dragOkCallback()}
- className="ysllw100"
- >
+
+
:
""
}
{
Whethertoverify===true&&pciphone===true?
-
this.dragOkCallback()}
- className="ysllw100"
- >
+
+
:
""
}
diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js
index dcbaf4730..f6c32909d 100644
--- a/public/react/src/modules/user/LoginRegisterComponent.js
+++ b/public/react/src/modules/user/LoginRegisterComponent.js
@@ -2,12 +2,13 @@ import React, {Component} from 'react';
import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
-import {getImageUrl, DragValidator,broadcastChannelPostMessage} from 'educoder';
+import {getImageUrl,broadcastChannelPostMessage} from 'educoder';
import {Tabs, Input, Checkbox, Button, notification,Menu} from 'antd';
import passopen from '../../../src/images/login/passopen.png';
import passoff from '../../../src/images/login/passoff.png';
import axios from 'axios';
-import DragValidatortwo from '../../../src/common/components/DragValidatortwo'
+import CheckInputysl1 from './CheckInputysl';
+import CheckInputysl2 from './CheckInputysl';
import './common.css'
import './commontwo.css'
const { TabPane } = Tabs;
@@ -402,7 +403,7 @@ class LoginRegisterComponent extends Component {
type: 1,
}
}).then((result) => {
- debugger
+
//验证有问题{"status":1,"message":"success"}
// console.log(result);
// this.setState({dragOk: true})
@@ -941,27 +942,24 @@ class LoginRegisterComponent extends Component {
}
{
Whethertoverify===false&&pciphone===true?
-
+
+
:
""
}
{
Whethertoverify===true&&pciphone===true?
-
+
+
:
""
}
+
{
pciphone===true?
diff --git a/public/react/src/modules/user/secureCode.css b/public/react/src/modules/user/secureCode.css
new file mode 100644
index 000000000..e7f171711
--- /dev/null
+++ b/public/react/src/modules/user/secureCode.css
@@ -0,0 +1,42 @@
+#drag{
+ position: relative;
+ background-color: #e8e8e8;
+ min-width: 300px;
+ height: 38px;
+ line-height: 38px;
+ text-align: center;
+}
+#drag .handler{
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ width: 40px;
+ height: 38px;
+ border: 1px solid #ccc;
+ cursor: move;
+}
+.handler_bg{ background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==") no-repeat center;}
+
+.handler_ok_bg{ background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==") no-repeat center;}
+
+#drag .drag_bg{
+ background-color: #7ac23c;
+ height: 38px;
+ width: 0px;
+}
+#drag .drag_text{
+ position: absolute;
+ top: 0px;
+ font-size: 14px;
+ width: 100%;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ color: #fff;
+ user-select: none;
+ -o-user-select:none;
+ -ms-user-select:none;
+}
+
+/* }*/
+/*//.handler_bg{ background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==") no-repeat center;}*/
+/*//.handler_ok_bg{ background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==") no-repeat center;}*/
From 1f18b1399bbf64d415ae13c91d356044ee7b5d74 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 25 Jul 2019 15:20:16 +0800
Subject: [PATCH 07/25] =?UTF-8?q?=E9=87=8D=E7=BD=AE=E5=AE=9E=E8=AE=AD?=
=?UTF-8?q?=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/myshixuns_controller.rb | 35 +++++++++++++------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index 649516a03..cdeca4871 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -20,28 +20,29 @@ class MyshixunsController < ApplicationController
unless (current_user.admin? || current_user.id == @myshixun.user_id)
tip_exception("403", "")
end
+ begin
+ ActiveRecord::Base.transaction do
+ begin
+ @shixun = Shixun.select(:id, :identifier).find(@myshixun.shixun_id)
+ @myshixun.destroy
- ActiveRecord::Base.transaction do
- begin
- @shixun = Shixun.select(:id, :identifier).find(@myshixun.shixun_id)
- @myshixun.destroy
+ StudentWork.where(:myshixun_id => @myshixun.id).update_all(:myshixun_id => 0, :work_status => 0)
- # 刪除版本庫
- begin
- GitService.delete_repository(repo_path: @repo_path)
+ # 实训在申请发布前,是否玩过实训,如果玩过需要更改记录,防止二次重置
+ shixun_mod = ShixunModify.where(:shixun_id => @shixun.id, :myshixun_id => @myshixun.id, :status => 1).take
+ shixun_mod.update_column(:status, 0) if shixun_mod
rescue Exception => e
- uid_logger_error("版本库删除异常,详情:#{e.message}")
+ logger.error("######reset_my_game_failed:#{e.message}")
+ raise("ActiveRecord::RecordInvalid")
end
-
- StudentWork.where(:myshixun_id => @myshixun.id).update_all(:myshixun_id => 0, :work_status => 0)
-
- # 实训在申请发布前,是否玩过实训,如果玩过需要更改记录,防止二次重置
- shixun_mod = ShixunModify.where(:shixun_id => @shixun.id, :myshixun_id => @myshixun.id, :status => 1).take
- shixun_mod.update_column(:status, 0) if shixun_mod
- rescue Exception => e
- uid_logger_error("myshixun reset failed #{e}")
- raise ActiveRecord::Rollback
end
+ # 删除版本库
+ GitService.delete_repository(repo_path: @repo_path)
+ rescue Exception => e
+ if e.message != "ActiveRecord::RecordInvalid"
+ logger.error("######delete_repository_error:#{e.message}")
+ end
+ raise ActiveRecord::Rollback
end
end
From b9d48c420a7ac491cc8512565e7b98455fac28c2 Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 15:37:29 +0800
Subject: [PATCH 08/25] =?UTF-8?q?=E9=9D=A2=E5=8C=85=E5=B1=91-=E4=BD=9C?=
=?UTF-8?q?=E4=B8=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/modules/courses/busyWork/CommonWorkDetailIndex.js | 7 ++++---
.../react/src/modules/courses/busyWork/CommonWorkPost.js | 4 ++--
public/react/src/modules/courses/busyWork/NewWork.js | 3 ++-
.../courses/busyWork/common/WorkDetailPageHeader.js | 4 ++--
4 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js
index 5960406e3..ff8e3e3a2 100644
--- a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js
+++ b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js
@@ -145,6 +145,7 @@ class CommonWorkDetailIndex extends Component{
, end_immediately, publish_immediately, work_statuses, accessoryVisible
} =this.state;
+ const { current_user } = this.props
let courseId=this.props.match.params.coursesId;
let category_id= category && category.category_id;
@@ -197,15 +198,15 @@ class CommonWorkDetailIndex extends Component{
background: #fff;
}
`}
-
+ ]}>}
36 ? homework_name : ''}`}
diff --git a/public/react/src/modules/courses/busyWork/CommonWorkPost.js b/public/react/src/modules/courses/busyWork/CommonWorkPost.js
index 4c5578d2c..f2b92b47d 100644
--- a/public/react/src/modules/courses/busyWork/CommonWorkPost.js
+++ b/public/react/src/modules/courses/busyWork/CommonWorkPost.js
@@ -481,6 +481,7 @@ render(){
course_name, homework_name,
memberNumMax, memberNumMin
} =this.state;
+ const { current_user } = this.props
let courseId=this.props.match.params.coursesId;
let workId=this.props.match.params.workId;
@@ -522,7 +523,6 @@ render(){
const moduleName = this.props.getModuleName()
const moduleCHName = this.props.getModuleName(true)
const isGroup = this.props.isGroup()
- const { current_user } = this.props;
return(
@@ -540,7 +540,7 @@ render(){
- {course_name}
+ {course_name}
>
{moduleCHName}
>
diff --git a/public/react/src/modules/courses/busyWork/NewWork.js b/public/react/src/modules/courses/busyWork/NewWork.js
index 3bb77dfb5..2519f95e2 100644
--- a/public/react/src/modules/courses/busyWork/NewWork.js
+++ b/public/react/src/modules/courses/busyWork/NewWork.js
@@ -313,6 +313,7 @@ class NewWork extends Component{
init_max_num, init_min_num,
title_num, course_name, category, has_commit, has_project
}=this.state
+ const { current_user } = this.props
const courseId = this.state.course_id || this.props.match.params.coursesId ;
const isEdit = this.isEdit;
@@ -369,7 +370,7 @@ class NewWork extends Component{
{pageType==="new"?"新建":"编辑"}
*/}
Date: Thu, 25 Jul 2019 15:42:00 +0800
Subject: [PATCH 09/25] =?UTF-8?q?=E9=9D=A2=E5=8C=85=E5=B1=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/react/src/modules/courses/boards/BoardsNew.js | 3 ++-
public/react/src/modules/courses/boards/TopicDetail.js | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js
index 9833e9eb3..8d9db7c3f 100644
--- a/public/react/src/modules/courses/boards/BoardsNew.js
+++ b/public/react/src/modules/courses/boards/BoardsNew.js
@@ -239,6 +239,7 @@ class BoardsNew extends Component{
render() {
let { addGroup, fileList, course_id, title_num } = this.state;
const { getFieldDecorator } = this.props.form;
+ const { current_user } = this.props
const formItemLayout = {
labelCol: {
@@ -299,7 +300,7 @@ class BoardsNew extends Component{
`}
diff --git a/public/react/src/modules/courses/boards/TopicDetail.js b/public/react/src/modules/courses/boards/TopicDetail.js
index 6309ac491..7aaecdd16 100644
--- a/public/react/src/modules/courses/boards/TopicDetail.js
+++ b/public/react/src/modules/courses/boards/TopicDetail.js
@@ -546,7 +546,7 @@ class TopicDetail extends Component {
}
`}
From 4b130f2724780815352c10b13596e88d4ebdc4d9 Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 15:48:46 +0800
Subject: [PATCH 10/25] =?UTF-8?q?=E9=9D=A2=E5=8C=85=E5=B1=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/modules/courses/poll/PollDetailIndex.js | 4 ++--
.../react/src/modules/courses/poll/PollInfo.js | 3 ++-
.../react/src/modules/courses/poll/PollNew.js | 17 +++++++++++------
3 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/public/react/src/modules/courses/poll/PollDetailIndex.js b/public/react/src/modules/courses/poll/PollDetailIndex.js
index 8e3f78d5c..9119b7902 100644
--- a/public/react/src/modules/courses/poll/PollDetailIndex.js
+++ b/public/react/src/modules/courses/poll/PollDetailIndex.js
@@ -110,7 +110,7 @@ class PollDetailIndex extends Component{
}
render(){
let {tab,pollDetail,user_permission}=this.state;
-
+ const { current_user } = this.props;
const isAdmin =this.props.isAdmin();
const isStudent = this.props.isStudent();
return(
@@ -123,7 +123,7 @@ class PollDetailIndex extends Component{
/>
- {this.props.coursedata.name}
+ {this.props.coursedata.name}
>
问卷
>
diff --git a/public/react/src/modules/courses/poll/PollInfo.js b/public/react/src/modules/courses/poll/PollInfo.js
index fc1d55385..f32d652c2 100644
--- a/public/react/src/modules/courses/poll/PollInfo.js
+++ b/public/react/src/modules/courses/poll/PollInfo.js
@@ -299,6 +299,7 @@ class PollInfo extends Component{
modalSave,
questionPanelFixed
}=this.state;
+ const { current_user } = this.props
let isAdmin=this.props.isAdmin();
let isStudent=this.props.isStudent();
return(
@@ -314,7 +315,7 @@ class PollInfo extends Component{
>
- {courseName}
+ {courseName}
>
问卷
>
diff --git a/public/react/src/modules/courses/poll/PollNew.js b/public/react/src/modules/courses/poll/PollNew.js
index 0c4109ceb..cd559b75f 100644
--- a/public/react/src/modules/courses/poll/PollNew.js
+++ b/public/react/src/modules/courses/poll/PollNew.js
@@ -2320,12 +2320,17 @@ class PollNew extends Component {
}
gotohome=()=>{
- let courseId=this.props.match.params.coursesId;
- if(courseId===undefined){
- this.props.history.push("/courses");
- }else{
- this.props.history.push(this.props.current_user.first_category_url);
- }
+ const { current_user} = this.props
+
+ this.props.history.push(current_user.first_category_url);
+
+
+ // let courseId=this.props.match.params.coursesId;
+ // if(courseId===undefined){
+ // this.props.history.push("/courses");
+ // }else{
+ // this.props.history.push(this.props.current_user.first_category_url);
+ // }
}
//试图
render() {
From 901ed458c44ef96d9d6307abe57ebb207f1035f8 Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 15:53:09 +0800
Subject: [PATCH 11/25] =?UTF-8?q?=E9=9D=A2=E5=8C=85=E5=B1=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/courses/graduation/topics/GraduateTopicDetail.js | 3 ++-
.../src/modules/courses/graduation/topics/GraduateTopicNew.js | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/public/react/src/modules/courses/graduation/topics/GraduateTopicDetail.js b/public/react/src/modules/courses/graduation/topics/GraduateTopicDetail.js
index be3ff7a30..c0e8fe185 100644
--- a/public/react/src/modules/courses/graduation/topics/GraduateTopicDetail.js
+++ b/public/react/src/modules/courses/graduation/topics/GraduateTopicDetail.js
@@ -96,6 +96,7 @@ class GraduateTopicDetail extends Component{
tablePageSize,
tab,
}=this.state
+ const { current_user } = this.props
let {course_id,graduation_topic_id}=this.props.match.params;
const isStudent =this.props.isStudent();
const isAdmin =this.props.isAdmin();
@@ -104,7 +105,7 @@ class GraduateTopicDetail extends Component{
- {tableData && tableData.course_name}
+ {tableData && tableData.course_name}
>
{tableData.graduation_name}
>
diff --git a/public/react/src/modules/courses/graduation/topics/GraduateTopicNew.js b/public/react/src/modules/courses/graduation/topics/GraduateTopicNew.js
index d71cec73b..569c76331 100644
--- a/public/react/src/modules/courses/graduation/topics/GraduateTopicNew.js
+++ b/public/react/src/modules/courses/graduation/topics/GraduateTopicNew.js
@@ -276,6 +276,7 @@ class GraduateTopicNew extends Component{
course_name,
left_banner_name
} = this.state;
+ const { current_user } = this.props
const { getFieldDecorator } = this.props.form;
let{ topicId,coursesId }=this.props.match.params
console.log(this.props);
@@ -322,7 +323,7 @@ class GraduateTopicNew extends Component{
`}
- {course_name}
+ {course_name}
>
{left_banner_name}
>
From 8656c6037e6548d49bfb209ce1ddb5ad5f49cbb8 Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 15:58:42 +0800
Subject: [PATCH 12/25] =?UTF-8?q?=E9=9D=A2=E5=8C=85=E5=B1=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/react/src/modules/courses/exercise/ExerciseNew.js | 3 ++-
.../src/modules/courses/exercise/ExerciseReviewAndAnswer.js | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/public/react/src/modules/courses/exercise/ExerciseNew.js b/public/react/src/modules/courses/exercise/ExerciseNew.js
index 0e1489c72..fe1b8f565 100644
--- a/public/react/src/modules/courses/exercise/ExerciseNew.js
+++ b/public/react/src/modules/courses/exercise/ExerciseNew.js
@@ -369,6 +369,7 @@ class ExerciceNew extends Component{
},
};
+ const { current_user } = this.props
const isAdmin = this.props.isAdmin()
const courseId=this.props.match.params.coursesId;
const exercise_id = this.props.match.params.Id
@@ -407,7 +408,7 @@ class ExerciceNew extends Component{
`}
diff --git a/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js b/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js
index eb8143c03..cd3355082 100644
--- a/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js
+++ b/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js
@@ -509,7 +509,7 @@ class ExerciseReviewAndAnswer extends Component{
}=this.state
let isAdmin = this.props.isAdmin();
let isStudent =this.props.isStudent();
-
+ const { current_user } = this.props
console.log(data&&data.exercise.user_name)
return(
@@ -537,7 +537,7 @@ class ExerciseReviewAndAnswer extends Component{
/>
- {courseName}
+ {courseName}
>
{data && data.left_banner_name}
>
From 78678a68ba486920604d1bb23df5b550adae97f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 25 Jul 2019 16:01:18 +0800
Subject: [PATCH 13/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../shixunHomework/Listofworksstudentone.js | 6 ++++
.../shixunHomework/ShixunHomeworkPage.js | 6 ++--
.../modules/tpm/TPMsettings/TPMsettings.js | 26 ++++++++++++++-
.../src/modules/tpm/newshixuns/Newshixuns.js | 33 +++++++++++++++++--
4 files changed, 65 insertions(+), 6 deletions(-)
diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js
index db58e95fd..81e388d6f 100644
--- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js
+++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js
@@ -1482,6 +1482,7 @@ class Listofworksstudentone extends Component {
}
//计算成绩
setComputeTime=()=>{
+ let matchurl = this.props.match.url;
let {teacherdata}=this.state;
this.setState({
computeTimetype:false
@@ -1494,6 +1495,7 @@ class Listofworksstudentone extends Component {
this.props.showNotification(`${response.data.message}`);
// var homeworkid = this.props.match.params.homeworkid;
this.Getalistofworks(homeworkid);
+ this.props.history.replace( matchurl );
// this.Getalistofworkstwo("", "", "", "", 1, 20);
}).catch((error) => {
console.log(error)
@@ -2147,6 +2149,9 @@ class Listofworksstudentone extends Component {
}
setComputeTimet=()=>{
+
+ let matchurl = this.props.match.url;
+
this.setState({
computeTimetype:false
})
@@ -2163,6 +2168,7 @@ class Listofworksstudentone extends Component {
})
this.Startsortingt(this.state.orders, this.state.course_groupyslstwo, this.state.checkedValuesineinfo, this.state.searchtext, 1, this.state.limit);
this.props.showNotification(`${response.data.message}`);
+ this.props.history.replace( matchurl );
}
}).catch((error) => {
console.log(error)
diff --git a/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js b/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js
index e2285a7a6..fec98e69b 100644
--- a/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js
+++ b/public/react/src/modules/courses/shixunHomework/ShixunHomeworkPage.js
@@ -123,9 +123,9 @@ class ShixunHomeworkPage extends Component {
let {tab, teacherdatapage, jobsettingsdatapage} = this.state;
const isAdmin = this.props.isAdmin();
- console.log(119)
- console.log(jobsettingsdatapage);
- console.log(teacherdatapage);
+ // console.log(119)
+ // console.log(jobsettingsdatapage);
+ // console.log(teacherdatapage);
return (
diff --git a/public/react/src/modules/tpm/TPMsettings/TPMsettings.js b/public/react/src/modules/tpm/TPMsettings/TPMsettings.js
index ed1249f0d..f6af871dd 100644
--- a/public/react/src/modules/tpm/TPMsettings/TPMsettings.js
+++ b/public/react/src/modules/tpm/TPMsettings/TPMsettings.js
@@ -31,6 +31,30 @@ const Option = Select.Option;
const RadioGroup = Radio.Group;
+// 处理整点 半点
+// 取传入时间往后的第一个半点
+export function handleDateStrings(dateString) {
+ if (!dateString) return dateString;
+ const ar = dateString.split(':')
+ if (ar[1] == '00' || ar[1] == '30') {
+ return dateString
+ }
+ const miniute = parseInt(ar[1]);
+ if (miniute < 30 || miniute == 60) {
+ return [ar[0], '30'].join(':')
+ }
+ if (miniute < 60) {
+ // 加一个小时
+ const tempStr = [ar[0], '00'].join(':');
+ const format = "YYYY-MM-DD HH:mm";
+ const _moment = moment(tempStr, format)
+ _moment.add(1, 'hours')
+ return _moment.format(format)
+ }
+
+ return dateString
+}
+
// 恢复数据
function md_rec_data(k,mdu,id, editor){
if(window.sessionStorage.getItem(k+mdu) !== null){
@@ -1120,7 +1144,7 @@ export default class TPMsettings extends Component {
}
onChangeTimePicker =(value, dateString)=> {
this.setState({
- opening_time:dateString
+ opening_time:moment(handleDateStrings(dateString))
})
}
diff --git a/public/react/src/modules/tpm/newshixuns/Newshixuns.js b/public/react/src/modules/tpm/newshixuns/Newshixuns.js
index cb0f08c0f..8cb79e9d0 100644
--- a/public/react/src/modules/tpm/newshixuns/Newshixuns.js
+++ b/public/react/src/modules/tpm/newshixuns/Newshixuns.js
@@ -2,7 +2,7 @@ import React, {Component} from 'react';
import {TPMIndexHOC} from '../TPMIndexHOC';
-import {SnackbarHOC,handleDateString} from 'educoder';
+import {SnackbarHOC} from 'educoder';
import {Input, Select, Radio, Checkbox, Modal, Icon, DatePicker,Upload,Button,message,Form,notification} from 'antd';
@@ -16,6 +16,7 @@ import './css/Newshixuns.css';
import {getUrl} from 'educoder'
+
let path = getUrl("/editormd/lib/")
const $ = window.$;
@@ -28,6 +29,34 @@ const Option = Select.Option;
const RadioGroup = Radio.Group;
const confirm = Modal.confirm;
+
+
+// 处理整点 半点
+// 取传入时间往后的第一个半点
+export function handleDateStrings(dateString) {
+ if (!dateString) return dateString;
+ const ar = dateString.split(':')
+ if (ar[1] == '00' || ar[1] == '30') {
+ return dateString
+ }
+ const miniute = parseInt(ar[1]);
+ if (miniute < 30 || miniute == 60) {
+ return [ar[0], '30'].join(':')
+ }
+ if (miniute < 60) {
+ // 加一个小时
+ const tempStr = [ar[0], '00'].join(':');
+ const format = "YYYY-MM-DD HH:mm";
+ const _moment = moment(tempStr, format)
+ _moment.add(1, 'hours')
+ return _moment.format(format)
+ }
+
+ return dateString
+}
+
+
+
// 恢复数据
function md_rec_data(k, mdu, id, editor) {
if (window.sessionStorage.getItem(k + mdu) !== null) {
@@ -713,7 +742,7 @@ class Newshixuns extends Component {
onChangeTimePicker = (value, dateString) => {
this.setState({
- TimePickervalue: handleDateString(dateString)
+ TimePickervalue: handleDateStrings(dateString)
})
}
// 附件相关 START
From 806e81e3a59c1d5bf578db3ce9358a87412ab1f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com>
Date: Thu, 25 Jul 2019 16:17:20 +0800
Subject: [PATCH 14/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/modules/user/FindPasswordComponent.js | 94 ++++++++++++++-----
.../modules/user/LoginRegisterComponent.js | 74 +++++++++++++--
2 files changed, 139 insertions(+), 29 deletions(-)
diff --git a/public/react/src/modules/user/FindPasswordComponent.js b/public/react/src/modules/user/FindPasswordComponent.js
index 0c3678776..6317c5134 100644
--- a/public/react/src/modules/user/FindPasswordComponent.js
+++ b/public/react/src/modules/user/FindPasswordComponent.js
@@ -94,14 +94,14 @@ class LoginRegisterComponent extends Component {
}
//倒计时
getverificationcode = () => {
-
+ debugger
if(this.state.login === undefined || this.state.login.length===0){
this.openNotification("请输入手机号或邮箱");
return;
}
//这是判断是否手机正确
- if(this.state.Phonenumberisnotcobool === true){
+ if(this.state.Phonenumberisnotcobool === false){
this.openNotification(this.state.Phonenumberisnotco);
this.setState({
Whethertoverify:this.state.Whethertoverify===true?false:true,
@@ -109,7 +109,7 @@ class LoginRegisterComponent extends Component {
return;
}
//拖动滑动验证
- if(this.state.dragOk===undefined||this.state.dragOk === false){
+ if(this.state.dragOk === false){
this.openNotification("拖动滑块验证");
return;
}
@@ -180,12 +180,11 @@ class LoginRegisterComponent extends Component {
//找回密码
Retrievepassword = () => {
if (this.state.Phonenumberisnotcobool === false) {
- if (this.state.login.length === 0) {
- this.setState({
- Phonenumberisnotco:"请输入正确的邮箱或手机号",
- })
- return
- }
+ this.openNotification(this.state.Phonenumberisnotco);
+ this.setState({
+ Whethertoverify:this.state.Whethertoverify===true?false:true,
+ })
+ return;
}
if (this.state.login === undefined|| this.state.login.length ===0 || this.state.login === "") {
this.setState({
@@ -365,7 +364,7 @@ class LoginRegisterComponent extends Component {
if (value.length === 0) {
this.setState({
Phonenumberisnotco: undefined,
- Phonenumberisnotcobool: false,
+ Phonenumberisnotcobool: true,
})
return;
}
@@ -418,20 +417,20 @@ class LoginRegisterComponent extends Component {
if(this.state.login===""||this.state.login.length===0){
this.setState({
Phonenumberisnotco: "账号不能为空",
- Phonenumberisnotcobool: true,
+ Phonenumberisnotcobool: false,
dragOk:false,
Whethertoverify:this.state.Whethertoverify===true?false:true,
})
return
}
- console.log(e.target.value.length);
- if (e.target.value.length === 0) {
- this.setState({
- Phonenumberisnotco: undefined,
- Phonenumberisnotcobool: false,
- })
- return;
- }
+ // console.log(e.target.value.length);
+ // if (e.target.value.length === 0) {
+ // this.setState({
+ // Phonenumberisnotco: undefined,
+ // Phonenumberisnotcobool: false,
+ // })
+ // return;
+ // }
// var telephone = $("#telephoneAdd.tianjia_phone").val();
var regph = /^[1][3,4,5,6,7,8][0-9]{9}$/;
// var email = $("#add_email.tianjia_email").val();
@@ -485,12 +484,63 @@ class LoginRegisterComponent extends Component {
if (this.state.login === "" || this.state.login.length === 0) {
this.setState({
Phonenumberisnotco: "账号不能为空",
- Phonenumberisnotcobool: true,
+ Phonenumberisnotcobool: false,
dragOk: false,
Whethertoverify: this.state.Whethertoverify === true ? false : true,
})
return
}
+ // var telephone = $("#telephoneAdd.tianjia_phone").val();
+ var regph = /^[1][3,4,5,6,7,8][0-9]{9}$/;
+ // var email = $("#add_email.tianjia_email").val();
+ var regemail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
+
+ // [1]手机号开头必须是1 [3,4,5,6,7,8] 第二位是3-8中的一个 [0-9]{9} 后边9位可以是0-9的任意数字。
+ var stringdata = undefined;
+ if (!regph.test(this.state.login)) {
+ stringdata = "手机号格式不正确";
+ this.setState({
+ Phonenumberisnotco: stringdata,
+ Phonenumberisnotcobool: false,
+ dragOk:false,
+ Whethertoverify: this.state.Whethertoverify === true ? false : true,
+ })
+ } else {
+ this.setState({
+ Phonenumberisnotco: undefined,
+ Phonenumberisnotcobool: true,
+ dragOk: true,
+
+ });
+ this.Emailphonenumberverification(this.state.login)
+
+ return
+ }
+
+ if (!regemail.test(this.state.login)) {
+ if ((this.state.login.indexOf("@") != -1) === true) {
+ stringdata = "邮箱格式不正确";
+ } else {
+ stringdata = "手机号格式不正确";
+
+ }
+ this.setState({
+ Phonenumberisnotco: stringdata,
+ Phonenumberisnotcobool: false,
+ dragOk:false,
+ Whethertoverify: this.state.Whethertoverify === true ? false : true,
+ })
+ return
+ } else {
+ this.setState({
+ Phonenumberisnotco: undefined,
+ Phonenumberisnotcobool: true,
+ dragOk: true,
+ })
+ this.Emailphonenumberverification(this.state.login)
+ return
+ }
+
this.setState({
Phonenumberisnotcosytdhk: undefined,
})
@@ -513,7 +563,7 @@ class LoginRegisterComponent extends Component {
console.log(value.length);
this.setState({
Phonenumberisnotco: result.data.message,
- Phonenumberisnotcobool: true,
+ Phonenumberisnotcobool: false,
dragOk:false,
Whethertoverify:this.state.Whethertoverify===true?false:true,
})
@@ -521,7 +571,7 @@ class LoginRegisterComponent extends Component {
}else {
this.setState({
Phonenumberisnotco: undefined,
- Phonenumberisnotcobool: false,
+ Phonenumberisnotcobool: true,
dragOk:true,
})
return;
diff --git a/public/react/src/modules/user/LoginRegisterComponent.js b/public/react/src/modules/user/LoginRegisterComponent.js
index f6c32909d..241fc2c6f 100644
--- a/public/react/src/modules/user/LoginRegisterComponent.js
+++ b/public/react/src/modules/user/LoginRegisterComponent.js
@@ -206,7 +206,65 @@ class LoginRegisterComponent extends Component {
}
//是否验证通过
dragOkCallback = () => {
- console.log(this.state.logins);
+ debugger
+ if (this.state.logins.length === 0) {
+ this.setState({
+ Phonenumberisnotcos: undefined,
+ Phonenumberisnotcobool: false,
+ dragOk:true,
+
+ })
+ return;
+ }
+ // var telephone = $("#telephoneAdd.tianjia_phone").val();
+ var regph = /^[1][3,4,5,6,7,8][0-9]{9}$/;
+ // var email = $("#add_email.tianjia_email").val();
+ var regemail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
+
+ // [1]手机号开头必须是1 [3,4,5,6,7,8] 第二位是3-8中的一个 [0-9]{9} 后边9位可以是0-9的任意数字。
+ var stringdata = undefined;
+ if (!regph.test(this.state.logins)) {
+ stringdata = "手机号格式不正确";
+ this.setState({
+ Phonenumberisnotcos: stringdata,
+ Phonenumberisnotcobool: true,
+ dragOk:false,
+ Whethertoverify:this.state.Whethertoverify===true?false:true,
+ })
+ } else {
+ this.setState({
+ Phonenumberisnotcos: undefined,
+ Phonenumberisnotcobool: false,
+ dragOk:true,
+ });
+ this.Emailphonenumberverification(this.state.logins, 2);
+ return
+ }
+
+ if (!regemail.test(this.state.logins)) {
+ if ((this.state.logins.indexOf("@") != -1) === true) {
+ stringdata = "邮箱格式不正确";
+ } else {
+ stringdata = "手机号格式不正确";
+
+ }
+ this.setState({
+ Phonenumberisnotcos: stringdata,
+ Phonenumberisnotcobool: true,
+ dragOk:false,
+ Whethertoverify:this.state.Whethertoverify===true?false:true,
+ })
+ return
+ } else {
+ this.setState({
+ Phonenumberisnotcos: undefined,
+ Phonenumberisnotcobool: false,
+ dragOk:true,
+ })
+ this.Emailphonenumberverification(this.state.logins, 2);
+ return
+ }
+
this.setState({
Phonenumberisnotcosytdhk:undefined,
})
@@ -416,7 +474,6 @@ class LoginRegisterComponent extends Component {
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: false,
dragOk:true,
-
})
}else {
this.setState({
@@ -426,7 +483,7 @@ class LoginRegisterComponent extends Component {
Whethertoverify:this.state.Whethertoverify===true?false:true,
})
}
- return;
+ return;
} else if (id === 2) {
this.setState({
Phonenumberisnotcos: result.data.message,
@@ -499,8 +556,9 @@ class LoginRegisterComponent extends Component {
//倒计时
getverificationcode = () => {
- console.log(this.state.Phonenumberisnotcobool);
- console.log(this.state.dragOk);
+ debugger
+ // console.log(this.state.Phonenumberisnotcobool);
+ // console.log(this.state.dragOk);
if(this.state.logins === undefined || this.state.logins.length===0){
this.openNotification("请输入手机号或邮箱");
return;
@@ -513,7 +571,7 @@ class LoginRegisterComponent extends Component {
})
return;
}
- if(this.state.dragOk===undefined||this.state.dragOk === false){
+ if(this.state.dragOk === false){
this.openNotification("拖动滑块验证");
return;
}
@@ -669,6 +727,7 @@ class LoginRegisterComponent extends Component {
this.setState({
Phonenumberisnotcos: undefined,
Phonenumberisnotcobool: false,
+
})
return
}
@@ -691,6 +750,7 @@ class LoginRegisterComponent extends Component {
this.setState({
Phonenumberisnotcos: undefined,
Phonenumberisnotcobool: false,
+
})
this.Emailphonenumberverification(e.target.value, id);
return
@@ -943,7 +1003,7 @@ class LoginRegisterComponent extends Component {
{
Whethertoverify===false&&pciphone===true?
:
From b350b0f1a61fdecb8eeb489c15f65b9aa5acd00e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 25 Jul 2019 16:18:31 +0800
Subject: [PATCH 15/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../paths/PathDetail/DetailCardsTemp.js | 25 +-
.../src/modules/paths/PathDetail/DetailTop.js | 477 +++++++++---------
.../paths/PathDetail/PathDetailIndex.js | 10 +-
.../tpm/shixunchild/Challenges/Challenges.js | 15 +-
.../Propaedeutics/Propaedeu_tics.js | 8 +-
5 files changed, 280 insertions(+), 255 deletions(-)
diff --git a/public/react/src/modules/paths/PathDetail/DetailCardsTemp.js b/public/react/src/modules/paths/PathDetail/DetailCardsTemp.js
index 4acc28a48..5150d14da 100644
--- a/public/react/src/modules/paths/PathDetail/DetailCardsTemp.js
+++ b/public/react/src/modules/paths/PathDetail/DetailCardsTemp.js
@@ -1,5 +1,6 @@
import React, { Component } from 'react';
import {getImageUrl} from 'educoder';
+import { Tooltip } from 'antd';
import '../../paths/ShixunPaths.css';
import DetailCardsEditAndAdd from './DetailCardsEditAndAdd';
import axios from 'axios';
@@ -85,16 +86,26 @@ class DetailCards extends Component{
+
{item.stage_name}
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
{item.stage_description}
diff --git a/public/react/src/modules/paths/PathDetail/DetailTop.js b/public/react/src/modules/paths/PathDetail/DetailTop.js
index 50c5c2680..09425df92 100644
--- a/public/react/src/modules/paths/PathDetail/DetailTop.js
+++ b/public/react/src/modules/paths/PathDetail/DetailTop.js
@@ -1,238 +1,241 @@
-import React,{ Component } from "react";
-import { Modal,Radio,Input,Tooltip } from "antd";
-import { BrowserRouter as Router, Route, Link } from "react-router-dom";
-import SendPanel from "./sendPanel.js";
-import { getImageUrl } from 'educoder';
-import axios from 'axios';
-import Modals from '../../modals/Modals';
-import './DetailTop.css';
-
-const Search = Input.Search;
-const RadioGroup = Radio.Group;
-class DetailTop extends Component{
- constructor(props){
- super(props)
- this.state={
- cardsModalcancel:this.cardsModalcancel,
- cardsModalsave:this.cardsModalsave,
- Modalstype:false,
- Modalstopval:"",
- Modalsbottomval:'',
- loadtype:false,
- deletepathtype:false,
- cardsModalsavetype:false
- }
- }
-
- allow_deletepath=()=>{
- this.setState({
- Modalstype:true,
- Modalstopval:"是否删除路径?",
- deletepathtype:true
- })
- }
-
- applyissuePath=()=>{
- this.setState({
- Modalstype:true,
- Modalstopval:"发布申请已提交,请等待管理员的审核",
- Modalsbottomval:"• 我们将在1-2个工作日内完成审核",
- loadtype:true
- })
- }
-
- cancelissuePath=()=>{
- let pathId=this.props.match.params.pathId;
- let url ="/paths/"+pathId+"/cancel_publish.json";
- axios.get(url).then((result)=>{
- if(result.status===200){
- if(result.data.status===0){
-
- }else if(result.data.status===1){
- window.location.href = "/paths/" + result.data.subject_id
- }
- }
- }).catch((error)=>{
- console.log(error);
- })
- }
-
- reovkissuePath=()=>{
-
- this.setState({
- Modalstype:true,
- Modalstopval:"是否确认撤销发布",
- Modalsbottomval:"确认后,回退到编辑状态",
- cardsModalsavetype:true,
- })
-
- }
- reovkissuePaths=()=>{
- let pathId=this.props.match.params.pathId;
- let url ="/paths/"+pathId+"/cancel_has_publish.json";
- axios.get(url).then((result)=>{
- if(result.status===200){
- if(result.data.status===0){
-
- }else if(result.data.status===1){
- this.setState({
- cardsModalsavetype:false,
- loadtype:false,
- deletepathtype:false
- })
- window.location.href = "/paths/" + result.data.subject_id
- }
- }
- }).catch((error)=>{
- console.log(error);
- })
- }
-
- cardsModalcancel=()=>{
- this.setState({
- Modalstype:false,
- Modalsbottomval:'',
- loadtype:false,
- deletepathtype:false
- })
- }
-
- cardsModalsave=()=>{
- let {loadtype,deletepathtype}=this.state;
-
- //删除路径
- if(deletepathtype===true){
- let pathid=this.props.match.params.pathId;
- const deleteUrl = `/paths/`+pathid+`.json`;
- axios.delete(deleteUrl).then((response) => {
- const status = response.data.status
- if (status === 1) {
- window.location.href = "/paths";
- }
- }).catch((error) => {
- console.log(error)
- })
- }
-
- //申请发布
- if(loadtype===true){
-
- let pathid=this.props.match.params.pathId;
- let url ="/paths/"+pathid+"/publish.json";
- axios.get(url).then((result)=>{
- if(result.status===200){
- if(result.data.status===0){
- this.setState({
- Modalstype:true,
- Modalstopval: result.data.message,
- })
- }else if(result.data.status===1){
- window.location.reload();
- }
- }
- }).catch((error)=>{
- console.log(error);
- })
-
- }
- this.setState({
- Modalstype:false,
- Modalsbottomval:''
- })
- }
-
- render(){
- let{detailInfoList}=this.props;
- let{Modalstype,Modalstopval,cardsModalcancel,cardsModalsave,Modalsbottomval,cardsModalsavetype,loadtype}=this.state;
- const radioStyle = {
- display: 'block',
- height: '30px',
- lineHeight: '30px',
- };
-
- return(
-
-
-
- {
- detailInfoList &&
-
-
-
- {detailInfoList.name}
-
-
- {detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
-
-
})
- :""
- }
-
- {detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
-
- 学习统计
- :""
- }
-
- { detailInfoList.allow_send === true &&
-
- }
-
-
-
- {
- detailInfoList &&
-
- { detailInfoList.stages_count!=0 ? - 章节{detailInfoList.stages_count}
: ""}
- { detailInfoList.stage_shixuns_count!=0 ? - 实训{ detailInfoList.stage_shixuns_count}
: ""}
- { detailInfoList.challenge_choose_count!=0 ? - 选择题任务{detailInfoList.challenge_choose_count}
: ""}
- { detailInfoList.challenges_count!=0 ? - 实践任务{detailInfoList.challenges_count}
: ""}
- { detailInfoList.subject_score!=0 ? - 经验值{detailInfoList.subject_score}
: ""}
- { detailInfoList.member_count!=0 ? - 学习人数{detailInfoList.member_count}
: ""}
-
- }
-
- {detailInfoList===undefined?"":detailInfoList.allow_delete===true?
删除路径:""}
-
- {
- detailInfoList.publish_status===0&&detailInfoList.allow_statistics===true?
-
申请发布:""
- }
-
-
- {
- detailInfoList.publish_status===1 && detailInfoList.allow_statistics===true?
-
撤销申请:""
- }
-
- {
- detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true?
-
撤销发布:""
- }
-
-
-
- }
-
-
- )
- }
-}
+import React,{ Component } from "react";
+import { Modal,Radio,Input,Tooltip } from "antd";
+import { BrowserRouter as Router, Route, Link } from "react-router-dom";
+import SendPanel from "./sendPanel.js";
+import { getImageUrl } from 'educoder';
+import axios from 'axios';
+import Modals from '../../modals/Modals';
+import './DetailTop.css';
+
+const Search = Input.Search;
+const RadioGroup = Radio.Group;
+class DetailTop extends Component{
+ constructor(props){
+ super(props)
+ this.state={
+ cardsModalcancel:this.cardsModalcancel,
+ cardsModalsave:this.cardsModalsave,
+ Modalstype:false,
+ Modalstopval:"",
+ Modalsbottomval:'',
+ loadtype:false,
+ deletepathtype:false,
+ cardsModalsavetype:false
+ }
+ }
+
+ allow_deletepath=()=>{
+ this.setState({
+ Modalstype:true,
+ Modalstopval:"是否删除路径?",
+ deletepathtype:true
+ })
+ }
+
+ applyissuePath=()=>{
+ this.setState({
+ Modalstype:true,
+ Modalstopval:"发布申请已提交,请等待管理员的审核",
+ Modalsbottomval:"• 我们将在1-2个工作日内完成审核",
+ loadtype:true
+ })
+ }
+
+ cancelissuePath=()=>{
+ let pathId=this.props.match.params.pathId;
+ let url ="/paths/"+pathId+"/cancel_publish.json";
+ axios.get(url).then((result)=>{
+ if(result.status===200){
+ if(result.data.status===0){
+
+ }else if(result.data.status===1){
+ window.location.href = "/paths/" + result.data.subject_id
+ }
+ }
+ }).catch((error)=>{
+ console.log(error);
+ })
+ }
+
+ reovkissuePath=()=>{
+
+ this.setState({
+ Modalstype:true,
+ Modalstopval:"是否确认撤销发布",
+ Modalsbottomval:"确认后,回退到编辑状态",
+ cardsModalsavetype:true,
+ })
+
+ }
+ reovkissuePaths=()=>{
+ let pathId=this.props.match.params.pathId;
+ let url ="/paths/"+pathId+"/cancel_has_publish.json";
+ axios.get(url).then((result)=>{
+ if(result.status===200){
+ if(result.data.status===0){
+
+ }else if(result.data.status===1){
+ this.setState({
+ cardsModalsavetype:false,
+ loadtype:false,
+ deletepathtype:false
+ })
+ window.location.href = "/paths/" + result.data.subject_id
+ }
+ }
+ }).catch((error)=>{
+ console.log(error);
+ })
+ }
+
+ cardsModalcancel=()=>{
+ this.setState({
+ Modalstype:false,
+ Modalsbottomval:'',
+ loadtype:false,
+ deletepathtype:false
+ })
+ }
+
+ cardsModalsave=()=>{
+ let {loadtype,deletepathtype}=this.state;
+
+ //删除路径
+ if(deletepathtype===true){
+ let pathid=this.props.match.params.pathId;
+ const deleteUrl = `/paths/`+pathid+`.json`;
+ axios.delete(deleteUrl).then((response) => {
+ const status = response.data.status
+ if (status === 1) {
+ window.location.href = "/paths";
+ }
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+
+ //申请发布
+ if(loadtype===true){
+
+ let pathid=this.props.match.params.pathId;
+ let url ="/paths/"+pathid+"/publish.json";
+ axios.get(url).then((result)=>{
+ if(result.status===200){
+ if(result.data.status===0){
+ this.setState({
+ Modalstype:true,
+ Modalstopval: result.data.message,
+ })
+ }else if(result.data.status===1){
+ window.location.reload();
+ }
+ }
+ }).catch((error)=>{
+ console.log(error);
+ })
+
+ }
+ this.setState({
+ Modalstype:false,
+ Modalsbottomval:''
+ })
+ }
+
+ render(){
+ let{detailInfoList}=this.props;
+ let{Modalstype,Modalstopval,cardsModalcancel,cardsModalsave,Modalsbottomval,cardsModalsavetype,loadtype}=this.state;
+ const radioStyle = {
+ display: 'block',
+ height: '30px',
+ lineHeight: '30px',
+ };
+
+ return(
+
+
+
+ {
+ detailInfoList &&
+
+
+
+ {detailInfoList.name}
+
+
+ {detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
+
+
+
+
+
+ :""
+ }
+
+ {detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
+
+ 学习统计
+ :""
+ }
+
+ { detailInfoList.allow_send === true &&
+
+ }
+
+
+
+ {
+ detailInfoList &&
+
+ { detailInfoList.stages_count!=0 ? - 章节{detailInfoList.stages_count}
: ""}
+ { detailInfoList.stage_shixuns_count!=0 ? - 实训{ detailInfoList.stage_shixuns_count}
: ""}
+ { detailInfoList.challenge_choose_count!=0 ? - 选择题任务{detailInfoList.challenge_choose_count}
: ""}
+ { detailInfoList.challenges_count!=0 ? - 实践任务{detailInfoList.challenges_count}
: ""}
+ { detailInfoList.subject_score!=0 ? - 经验值{detailInfoList.subject_score}
: ""}
+ { detailInfoList.member_count!=0 ? - 学习人数{detailInfoList.member_count}
: ""}
+
+ }
+
+ {detailInfoList===undefined?"":detailInfoList.allow_delete===true?
删除路径:""}
+
+ {
+ detailInfoList.publish_status===0&&detailInfoList.allow_statistics===true?
+
申请发布:""
+ }
+
+
+ {
+ detailInfoList.publish_status===1 && detailInfoList.allow_statistics===true?
+
撤销申请:""
+ }
+
+ {
+ detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true?
+
撤销发布:""
+ }
+
+
+
+ }
+
+
+ )
+ }
+}
export default DetailTop;
\ No newline at end of file
diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
index 61933b765..a72771c39 100644
--- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
+++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
@@ -369,9 +369,11 @@ class PathDetailIndex extends Component{
课程须知
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
+
-
+
+
:""
}
@@ -397,16 +399,18 @@ class PathDetailIndex extends Component{
+
15&&clickdetailInfoListtype===false?"newsubscript mb9 color-grey-9 fr":"newsubscript mb9 color-grey-9 none"}
- data-tip-down="显示全部"
onClick={()=>this.clickNewsubscript(0)}
>...
+
+
this.clickNewsubscript(1)}>
+
}
diff --git a/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js b/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js
index f5d57ae21..65e95319e 100644
--- a/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js
+++ b/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js
@@ -293,11 +293,12 @@ class Challenges extends Component {
简介
+
+ href={"/shixuns/" + id + "/settings?edit=1"} className="ring-green fr">
+
{item.st === 0 ?
-
+
+
+
:
-
+
+
+
}
第{key+1}关
diff --git a/public/react/src/modules/tpm/shixunchild/Propaedeutics/Propaedeu_tics.js b/public/react/src/modules/tpm/shixunchild/Propaedeutics/Propaedeu_tics.js
index a2b20415d..f40e9fa63 100644
--- a/public/react/src/modules/tpm/shixunchild/Propaedeutics/Propaedeu_tics.js
+++ b/public/react/src/modules/tpm/shixunchild/Propaedeutics/Propaedeu_tics.js
@@ -10,6 +10,8 @@ import classNames from 'classnames';
import { getImageUrl, toPath } from 'educoder';
+import { Tooltip } from 'antd';
+
import axios from 'axios';
import { CircularProgress } from 'material-ui/Progress';
@@ -76,8 +78,10 @@ class Propaedeutics extends Component {
return (
-
+
+
+
+
{
loadingContent ?
From 943a628dc91ed81f5e1fd96d927a7508e34e2c2c Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 16:26:25 +0800
Subject: [PATCH 16/25] clear
---
public/react/src/modules/user/account/AccountBasicEdit.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/public/react/src/modules/user/account/AccountBasicEdit.js b/public/react/src/modules/user/account/AccountBasicEdit.js
index 1458862a1..24674a3ce 100644
--- a/public/react/src/modules/user/account/AccountBasicEdit.js
+++ b/public/react/src/modules/user/account/AccountBasicEdit.js
@@ -274,6 +274,11 @@ class AccountBasic extends Component {
return item.name == e;
});
if (!arr[0]) {
+ if (!e) {
+ this.setState({
+ filterSchoolList: []
+ })
+ }
// 没找到学校,清空部门
this.setState({
departments: [],
From 47ef7842e8c0eece2c210feee149a11a820525cc Mon Sep 17 00:00:00 2001
From: czd
Date: Thu, 25 Jul 2019 16:26:25 +0800
Subject: [PATCH 17/25] 123
---
2 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 2
diff --git a/2 b/2
new file mode 100644
index 000000000..e69de29bb
From c661aed21b4e0aface22f241502cb860a7cae8b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 25 Jul 2019 16:38:11 +0800
Subject: [PATCH 18/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
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 ed44e1f90..ca04aa193 100644
--- a/public/react/public/css/edu-all.css
+++ b/public/react/public/css/edu-all.css
@@ -289,7 +289,7 @@ label.infolabel{display: block;float: left;width: 56px;text-align: right;margin-
.shaiTitle{display: block;padding-right: 20px;}
.shaiContent li.shaiItem.active{background-color: #4CACFF!important;color:#fff!important;}
.shaiContent li.shaiItem{padding:3px 15px;float: left;border-radius: 4px;color: #4C4C4C;cursor: pointer;margin-right: 15px;display: block}
-.shaiContent li.shaiItem:hover{background-color: #F5F5F5}
+.shaiContent li.shaiItem:hover{background-color: #4CACFF!important;color:#fff!important;}
.shaiAllItem{max-width: 1138px;}
.subshaicontent{display: none;box-sizing: border-box;position: absolute;width: 100%;top: 33px;left: 0px;background-color: #fff;box-shadow:0px 1px 4px rgba(76,76,76,0.2);padding:0px 20px;z-index: 99999;border-radius: 4px;max-height: 800px;overflow-y: auto}
.subshaicontent-part{border-bottom: 1px solid #eee;}
diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css
index 4006fb615..45aea81be 100644
--- a/public/stylesheets/educoder/edu-all.css
+++ b/public/stylesheets/educoder/edu-all.css
@@ -291,7 +291,7 @@ label.infolabel{display: block;float: left;width: 56px;text-align: right;margin-
.shaiTitle{display: block;padding-right: 20px;}
.shaiContent li.shaiItem.active{background-color: #4CACFF!important;color:#fff!important;}
.shaiContent li.shaiItem{padding:3px 15px;float: left;border-radius: 4px;color: #4C4C4C;cursor: pointer;margin-right: 15px;display: block}
-.shaiContent li.shaiItem:hover{background-color: #F5F5F5}
+.shaiContent li.shaiItem:hover{background-color: #4CACFF!important;color:#fff!important;}
.shaiAllItem{max-width: 1138px;}
.subshaicontent{display: none;box-sizing: border-box;position: absolute;width: 100%;top: 33px;left: 0px;background-color: #fff;box-shadow:0px 1px 4px rgba(76,76,76,0.2);padding:0px 20px;z-index: 99999;border-radius: 4px;max-height: 800px;overflow-y: auto}
.subshaicontent-part{border-bottom: 1px solid #eee;}
From 184db727438eca6105cf3594510de60682d1da8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 25 Jul 2019 16:38:39 +0800
Subject: [PATCH 19/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/tpm/component/TPMRightSection.js | 61 +++++++++----------
1 file changed, 30 insertions(+), 31 deletions(-)
diff --git a/public/react/src/modules/tpm/component/TPMRightSection.js b/public/react/src/modules/tpm/component/TPMRightSection.js
index 8479acd76..a3a7e9820 100644
--- a/public/react/src/modules/tpm/component/TPMRightSection.js
+++ b/public/react/src/modules/tpm/component/TPMRightSection.js
@@ -117,36 +117,6 @@ class TPMRightSection extends Component {
}
-
-
推荐实训
-
- {
- TPMRightSectionData===undefined?"":TPMRightSectionData.recommands===undefined?"":TPMRightSectionData.recommands.map((item,key)=>{
- return(
-
- )
- })
- }
-
-
-
+
+
推荐实训
+
+ {
+ TPMRightSectionData===undefined?"":TPMRightSectionData.recommands===undefined?"":TPMRightSectionData.recommands.map((item,key)=>{
+ return(
+
+ )
+ })
+ }
+
+
}
From 09d0bcd196097e28afe4afdd52c83c2b26d92897 Mon Sep 17 00:00:00 2001
From: czd
Date: Thu, 25 Jul 2019 16:40:40 +0800
Subject: [PATCH 20/25] 123
---
3 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 3
diff --git a/3 b/3
new file mode 100644
index 000000000..e69de29bb
From 6b1db7bea25ab9cc20af41fb70535f612bad7815 Mon Sep 17 00:00:00 2001
From: czd
Date: Thu, 25 Jul 2019 16:41:33 +0800
Subject: [PATCH 21/25] 123
---
4 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 4
diff --git a/4 b/4
new file mode 100644
index 000000000..e69de29bb
From 2c639426b7e4e3f83ee706a9f4eddf06fda45ca4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com>
Date: Thu, 25 Jul 2019 16:46:20 +0800
Subject: [PATCH 22/25] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
2 | 0
3 | 0
4 | 0
3 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 2
delete mode 100644 3
delete mode 100644 4
diff --git a/2 b/2
deleted file mode 100644
index e69de29bb..000000000
diff --git a/3 b/3
deleted file mode 100644
index e69de29bb..000000000
diff --git a/4 b/4
deleted file mode 100644
index e69de29bb..000000000
From 50dd27e744828c4b3226f879a0a32c9447564b8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 25 Jul 2019 16:52:04 +0800
Subject: [PATCH 23/25] b
---
public/react/src/modules/tpm/newshixuns/Newshixuns.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/public/react/src/modules/tpm/newshixuns/Newshixuns.js b/public/react/src/modules/tpm/newshixuns/Newshixuns.js
index 8cb79e9d0..c15269c5a 100644
--- a/public/react/src/modules/tpm/newshixuns/Newshixuns.js
+++ b/public/react/src/modules/tpm/newshixuns/Newshixuns.js
@@ -16,6 +16,7 @@ import './css/Newshixuns.css';
import {getUrl} from 'educoder'
+import moment from 'moment';
let path = getUrl("/editormd/lib/")
From 016f6377eb8910f24b78bdb586c8cea6352944da Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 17:06:56 +0800
Subject: [PATCH 24/25] current_user &&
---
public/react/src/modules/courses/exercise/ExerciseNew.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/public/react/src/modules/courses/exercise/ExerciseNew.js b/public/react/src/modules/courses/exercise/ExerciseNew.js
index fe1b8f565..f5332d56e 100644
--- a/public/react/src/modules/courses/exercise/ExerciseNew.js
+++ b/public/react/src/modules/courses/exercise/ExerciseNew.js
@@ -407,11 +407,11 @@ class ExerciceNew extends Component{
}
`}
-
+ ]}> }
{this.isEdit ? "编辑" : "新建"}试卷
From 8debe9d99ea56eaea61dbe08ff1685cc0a7ce50b Mon Sep 17 00:00:00 2001
From: hjm <63528605@qq.com>
Date: Thu, 25 Jul 2019 17:07:02 +0800
Subject: [PATCH 25/25] key
---
.../src/modules/courses/exercise/ExerciseDisplay.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/public/react/src/modules/courses/exercise/ExerciseDisplay.js b/public/react/src/modules/courses/exercise/ExerciseDisplay.js
index 4da4768d2..bd70bece6 100644
--- a/public/react/src/modules/courses/exercise/ExerciseDisplay.js
+++ b/public/react/src/modules/courses/exercise/ExerciseDisplay.js
@@ -120,35 +120,35 @@ class ExerciseDisplay extends Component{
return
} else if (item.question_type == 2) {
return
} else if (item.question_type == 3) {
return
} else if (item.question_type == 4) {
return
} else if (item.question_type == 5) {
return
}