diff --git a/app/assets/javascripts/admins/competition_settings/index.js b/app/assets/javascripts/admins/competition_settings/index.js index f02f845c4..2b3c31190 100644 --- a/app/assets/javascripts/admins/competition_settings/index.js +++ b/app/assets/javascripts/admins/competition_settings/index.js @@ -5,8 +5,7 @@ $(document).on('turbolinks:load', function(){ autoclose: true, language: 'zh-CN', format: 'yyyy-mm-dd', - startDate: '2017-04-01', - endDate: '-1d' + startDate: '2017-04-01' }; var defineDateRangeSelect = function(element){ @@ -19,5 +18,74 @@ $(document).on('turbolinks:load', function(){ }; defineDateRangeSelect('.teaching-mode-date'); - } + defineDateRangeSelect('.competition-start-end-date'); + + var $basicForm = $('form.basic-setting-form'); + + $basicForm.validate({ + errorElement: 'span', + errorClass: 'danger text-danger', + rules: { + name: "required", + subTitle: "required", + startTime: "required", + endTime: "required", + mode: "required", + identifier: "required" + } + }); + + // 保存按钮 + $basicForm.on('click', ".submit-btn", function(){ + $basicForm.find('.submit-btn').attr('disabled', 'disabled'); + $basicForm.find('.error').html(''); + var valid = $basicForm.valid(); + + if($("input[name='mode'[checked]]").val() == 2) { + var $courseId = $("input[name='course_id'"); + if($courseId.val() === undefined || $course_id.val().length === 0){ + $courseId.addClass('danger text-danger'); + valid = false; + } else { + $courseId.removeClass('danger text-danger'); + } + } else if ($("input[name='mode'[checked]]").val() == 4) { + var $techStartTime = $("input[name='teach_start_time'"); + var $techEndTime = $("input[name='teach_end_time'"); + if($techStartTime.val() === undefined || $techStartTime.val().length === 0){ + $techStartTime.addClass('danger text-danger'); + valid = false; + } else { + $techStartTime.removeClass('danger text-danger'); + } + + if($techEndTime.val() === undefined || $techEndTime.val().length === 0){ + $techEndTime.addClass('danger text-danger'); + valid = false; + } else { + $techEndTime.removeClass('danger text-danger'); + } + } + + if(!valid) return; + $.ajax({ + method: 'POST', + dataType: 'json', + url: $basicForm.attr('action'), + data: new FormData($basicForm[0]), + processData: false, + contentType: false, + success: function(data){ + $.notify({ message: '保存成功' }); + window.location.reload(); + }, + error: function(res){ + var data = res.responseJSON; + $form.find('.error').html(data.message); + }, + complete: function(){ + $form.find('.submit-btn').attr('disabled', false); + } + }); + }); }); \ No newline at end of file diff --git a/app/controllers/competitions/competition_teams_controller.rb b/app/controllers/competitions/competition_teams_controller.rb index 6a4dbfd34..db4608807 100644 --- a/app/controllers/competitions/competition_teams_controller.rb +++ b/app/controllers/competitions/competition_teams_controller.rb @@ -60,7 +60,12 @@ class Competitions::CompetitionTeamsController < Competitions::BaseController def index @personal = current_competition.personal? - admin_or_business? ? all_competition_teams : user_competition_teams + if admin_or_business? + all_competition_teams + user_competition_teams + else + user_competition_teams + end end def create @@ -113,8 +118,8 @@ class Competitions::CompetitionTeamsController < Competitions::BaseController teams = teams.joins(users: { user_extension: :school }).where('schools.name LIKE ?', "%#{keyword}%") end - @count = teams.count - @teams = paginate(teams.includes(:user, users: { user_extension: :school })) + @all_count = teams.count + @all_teams = paginate(teams.includes(:user, users: { user_extension: :school })) end def user_competition_teams diff --git a/app/views/admins/competition_settings/index.html.erb b/app/views/admins/competition_settings/index.html.erb index 4c73609e4..4539a6e34 100644 --- a/app/views/admins/competition_settings/index.html.erb +++ b/app/views/admins/competition_settings/index.html.erb @@ -10,8 +10,36 @@ 基础设置
\n\t
\n<\/p>)*$/g,'');
}
+
+ commentContent=htmlEncode(commentContent)
axios.post(url, {
parent_id: id,
content: commentContent
@@ -491,6 +493,7 @@ class MemoDetail extends Component {
const url = `/memos/reply.json`;
let { comments } = this.state;
const user = this._getUser();
+ content=htmlEncode(content)
axios.post(url, {
parent_id: memo.id,
content: content
diff --git a/public/react/src/modules/message/js/MessagChat.js b/public/react/src/modules/message/js/MessagChat.js
index 34494a256..e320ff3a3 100644
--- a/public/react/src/modules/message/js/MessagChat.js
+++ b/public/react/src/modules/message/js/MessagChat.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import "../css/messagemy.css"
-import {getImageUrl,markdownToHTML} from 'educoder';
+import {getImageUrl,markdownToHTML,htmlEncode} from 'educoder';
import { Modal,Input,Icon,Tooltip,Spin} from 'antd';
import axios from 'axios';
import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor';
@@ -417,6 +417,7 @@ class MessagChat extends Component{
let contents=this.messageRef.current.getValue().trim();
const query = this.props.location.search;
let target_ids = query.split('?target_ids=');
+ contents=htmlEncode(contents)
let url = `/users/${this.props.match.params.userid}/private_messages.json`;
axios.post(url, {
target_id: target_ids[1],
diff --git a/public/react/src/modules/message/messagemodal/WriteaprivateletterModal.js b/public/react/src/modules/message/messagemodal/WriteaprivateletterModal.js
index dfa27ba9a..da0af0448 100644
--- a/public/react/src/modules/message/messagemodal/WriteaprivateletterModal.js
+++ b/public/react/src/modules/message/messagemodal/WriteaprivateletterModal.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { Modal,Input,Icon,Tooltip,Spin} from 'antd';
import axios from 'axios';
// import '../../modules/user/common.css';
-import {getImageUrl} from 'educoder';
+import {getImageUrl,htmlEncode} from 'educoder';
//完善个人资料
class WriteaprivateletterModal extends Component {
@@ -58,6 +58,7 @@ class WriteaprivateletterModal extends Component {
//发送私信
SendprivatemessageAPI=(idvalue,contentvalue)=>{
const url =`/users/${this.props.current_user.user_id}/private_messages.json`
+ contentvalue=htmlEncode(contentvalue)
let data={
target_id:idvalue,
content:contentvalue,