diff --git a/app/controllers/admins/users_controller.rb b/app/controllers/admins/users_controller.rb
index 9630394b4..b9a07ba1e 100644
--- a/app/controllers/admins/users_controller.rb
+++ b/app/controllers/admins/users_controller.rb
@@ -61,7 +61,7 @@ class Admins::UsersController < Admins::BaseController
private
def update_params
- params.require(:user).permit(%i[lastname nickname gender identity technical_title student_id
+ params.require(:user).permit(%i[lastname nickname gender identity technical_title student_id is_shixun_marker
mail phone location location_city school_id department_id admin business is_test
password professional_certification authentication])
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 65c05ef2a..90151efca 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -25,12 +25,10 @@ class ApplicationController < ActionController::Base
def check_sign
Rails.logger.info("66666 #{params}")
if params[:client_key].present?
- Rails.logger.info("111111 #{params[:client_key]}")
- Rails.logger.info("00000 #{params[:timestamp]}")
- Rails.logger.info("Time.now - params[:timestamp].to_i: #{Time.now.to_i - params[:timestamp].to_i}")
- tip_exception(501, "请求超时") unless (Time.now.to_i - params[:timestamp].to_i).between?(0,5)
- timestamp = params[:timestamp]
- sign = Digest::MD5.hexdigest("#{OPENKEY}#{timestamp}")
+ randomcode = params[:randomcode]
+ tip_exception(501, "请求不合理") unless (Time.now.to_i - randomcode.to_i).between?(0,5)
+
+ sign = Digest::MD5.hexdigest("#{OPENKEY}#{randomcode}")
Rails.logger.info("2222 #{sign}")
tip_exception(501, "请求不合理") if sign != params[:client_key]
else
@@ -44,6 +42,12 @@ class ApplicationController < ActionController::Base
EduSetting.get(name)
end
+ def shixun_marker
+ unless current_user.is_shixun_marker? || current_user.admin_or_business?
+ tip_exception(403, "..")
+ end
+ end
+
# 实训的访问权限
def shixun_access_allowed
if !current_user.shixun_permission(@shixun)
diff --git a/app/controllers/departments_controller.rb b/app/controllers/departments_controller.rb
index 5e82b2c51..73cb19156 100644
--- a/app/controllers/departments_controller.rb
+++ b/app/controllers/departments_controller.rb
@@ -1,4 +1,6 @@
class DepartmentsController < ApplicationController
+ skip_before_action :check_sign
+
def for_option
render_ok(departments: current_school.departments.without_deleted.select(:id, :name).as_json)
end
diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb
index 395e536f4..e8554300c 100644
--- a/app/controllers/main_controller.rb
+++ b/app/controllers/main_controller.rb
@@ -1,6 +1,10 @@
class MainController < ApplicationController
skip_before_action :check_sign
+ def first_stamp
+ render :json => { status: 0, message: Time.now.to_i }
+ end
+
def index
render file: 'public/react/build/index.html', :layout => false
end
diff --git a/app/controllers/schools_controller.rb b/app/controllers/schools_controller.rb
index 99ca62b4c..dc9f6c091 100644
--- a/app/controllers/schools_controller.rb
+++ b/app/controllers/schools_controller.rb
@@ -1,4 +1,5 @@
class SchoolsController < ApplicationController
+ skip_before_action :check_sign
def school_list
schools = School.all
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index 8a752106c..4f2a19536 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -24,6 +24,7 @@ class ShixunsController < ApplicationController
before_action :portion_allowed, only: [:copy]
before_action :special_allowed, only: [:send_to_course, :search_user_courses]
+ before_action :shixun_marker, only: [:new, :create]
## 获取课程列表
def index
@@ -1151,4 +1152,5 @@ private
end
md5.hexdigest
end
+
end
diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb
index 2c1b5a810..7df9aae89 100644
--- a/app/controllers/subjects_controller.rb
+++ b/app/controllers/subjects_controller.rb
@@ -7,6 +7,8 @@ class SubjectsController < ApplicationController
:search_members, :add_subject_members, :statistics, :shixun_report, :school_report,
:up_member_position, :down_member_position, :update_team_title]
before_action :require_admin, only: [:copy_subject]
+ before_action :shixun_marker, only: [:new, :create, :add_shixun_to_stage]
+
include ApplicationHelper
include SubjectsHelper
diff --git a/app/services/admins/identity_auths/agree_apply_service.rb b/app/services/admins/identity_auths/agree_apply_service.rb
index d75a6d7db..b5905dfef 100644
--- a/app/services/admins/identity_auths/agree_apply_service.rb
+++ b/app/services/admins/identity_auths/agree_apply_service.rb
@@ -10,7 +10,7 @@ class Admins::IdentityAuths::AgreeApplyService < ApplicationService
ActiveRecord::Base.transaction do
apply.update!(status: 1)
user.update!(authentication: true)
-
+ user.update!(is_shixun_marker: true) if user.is_teacher?
RewardGradeService.call(user, container_id: user.id, container_type: 'Authentication', score: 500)
deal_tiding!
diff --git a/app/services/admins/update_user_service.rb b/app/services/admins/update_user_service.rb
index 41b5065d0..6b1c0c857 100644
--- a/app/services/admins/update_user_service.rb
+++ b/app/services/admins/update_user_service.rb
@@ -25,6 +25,7 @@ class Admins::UpdateUserService < ApplicationService
ActiveRecord::Base.transaction do
user.save!
user.user_extension.save!
+ user.update!(is_shixun_marker: true) if user.is_certification_teacher
update_gitlab_password if params[:password].present?
end
@@ -36,7 +37,7 @@ class Admins::UpdateUserService < ApplicationService
def user_attributes
params.slice(*%i[lastname nickname mail phone admin business is_test
- professional_certification authentication])
+ professional_certification authentication is_shixun_marker])
end
def user_extension_attributes
diff --git a/app/views/admins/users/edit.html.erb b/app/views/admins/users/edit.html.erb
index abb003cbc..b1a8cbba1 100644
--- a/app/views/admins/users/edit.html.erb
+++ b/app/views/admins/users/edit.html.erb
@@ -120,6 +120,7 @@
<%= f.input :professional_certification, as: :boolean, label: '职业认证', checked_value: 1, unchecked_value: 0 %>
<%= f.input :authentication, as: :boolean, label: '实名认证', wrapper_html: { class: 'ml-3' }, checked_value: 1, unchecked_value: 0 %>
+ <%= f.input :is_shixun_marker, as: :boolean, label: '实训制作', wrapper_html: { class: 'ml-3' }, checked_value: 1, unchecked_value: 0 %>
diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder
index e80c8c215..eeb66f6eb 100644
--- a/app/views/users/get_user_info.json.jbuilder
+++ b/app/views/users/get_user_info.json.jbuilder
@@ -14,6 +14,7 @@ json.email @user.mail
json.profile_completed @user.profile_completed?
json.professional_certification @user.professional_certification
json.main_site current_laboratory.main_site?
+json.is_shixun_marker current_user.is_shixun_marker? || current_user.admin_or_business?
if @course
json.course_identity @course_identity
json.course_name @course.name
diff --git a/config/routes.rb b/config/routes.rb
index c36d78741..c2b262179 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -15,6 +15,7 @@ Rails.application.routes.draw do
scope '/api' do
get 'home/index'
get 'home/search'
+ get 'main/first_stamp'
get 'search', to: 'searchs#index'
@@ -1360,6 +1361,7 @@ Rails.application.routes.draw do
root 'main#index'
+
## react用
get '*path', to: 'main#index', constraints: ReactConstraint.new
end
diff --git a/db/migrate/20191230094544_add_is_shixun_marker_for_users.rb b/db/migrate/20191230094544_add_is_shixun_marker_for_users.rb
new file mode 100644
index 000000000..5a1eee4b1
--- /dev/null
+++ b/db/migrate/20191230094544_add_is_shixun_marker_for_users.rb
@@ -0,0 +1,9 @@
+class AddIsShixunMarkerForUsers < ActiveRecord::Migration[5.2]
+ def change
+ add_column :users, :is_shixun_marker, :boolean, :default => false
+
+ User.joins(:user_extension)
+ .where(users: {professional_certification: 1}, user_extensions: {identity: 0})
+ .update_all(is_shixun_marker: 1)
+ end
+end
diff --git a/public/images/educoder/qqqun20191230.png b/public/images/educoder/qqqun20191230.png
new file mode 100644
index 000000000..e831b7d7b
Binary files /dev/null and b/public/images/educoder/qqqun20191230.png differ
diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js
index 9350001e4..6759fc334 100644
--- a/public/react/src/AppConfig.js
+++ b/public/react/src/AppConfig.js
@@ -6,7 +6,10 @@ import { requestProxy } from "./indexEduplus2RequestProxy";
import { broadcastChannelOnmessage ,SetAppModel, isDev, queryString } from 'educoder';
import { notification } from 'antd';
import './index.css';
+const $ = window.$;
const opens ="79e33abd4b6588941ab7622aed1e67e8";
+let timestamp;
+let checkSubmitFlg = false;
broadcastChannelOnmessage('refreshPage', () => {
window.location.reload()
})
@@ -18,7 +21,7 @@ function locationurl(list){
window.location.href=list
}
}
-let hashTimeout
+
// TODO 开发期多个身份切换
let debugType =""
@@ -38,7 +41,29 @@ if (isDev) {
//ebugType="teacher";
// 学生
//debugType="student";
-
+ function railsgettimes(proxy) {
+ if(timestamp&&checkSubmitFlg===false){
+ $.ajax({url:proxy,async:false,success:function(data){
+ if(data.status===0){
+ timestamp=data.message;
+ }
+ }})
+ checkSubmitFlg=true
+ window.setTimeout(function () {
+ checkSubmitFlg=false;
+ }, 3500);
+ }else if(checkSubmitFlg===false){
+ $.ajax({url:proxy,async:false,success:function(data){
+ if(data.status===0){
+ timestamp=data.message;
+ }
+ }})
+ checkSubmitFlg=true
+ window.setTimeout(function () {
+ checkSubmitFlg=false;
+ }, 3500);
+ }
+}
window._debugType = debugType;
export function initAxiosInterceptors(props) {
initOnlineOfflineListener()
@@ -64,6 +89,7 @@ export function initAxiosInterceptors(props) {
window.setfalseInRequestMap = function(keyName) {
requestMap[keyName] = false;
}
+
axios.interceptors.request.use(
config => {
@@ -92,22 +118,24 @@ export function initAxiosInterceptors(props) {
}
}
if(`${config[0]}`!=`true`){
- let timestamp = Date.parse(new Date())/1000;
- let newopens=md5(opens+timestamp)
if (window.location.port === "3007") {
+ railsgettimes(`${proxy}/api/main/first_stamp.json`);
+ let newopens=md5(opens+timestamp)
config.url = `${proxy}${url}`;
if (config.url.indexOf('?') == -1) {
- config.url = `${config.url}?debug=${debugType}×tamp=${timestamp}&client_key=${newopens}`;
+ config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`;
} else {
- config.url = `${config.url}&debug=${debugType}×tamp=${timestamp}&client_key=${newopens}`;
+ config.url = `${config.url}&debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`;
}
} else {
// 加api前缀
+ railsgettimes(`/api/main/first_stamp.json`);
+ let newopens=md5(opens+timestamp)
config.url = url;
if (config.url.indexOf('?') == -1) {
- config.url = `${config.url}?×tamp=${timestamp}&client_key=${newopens}`;
+ config.url = `${config.url}?&randomcode=${timestamp}&client_key=${newopens}`;
} else {
- config.url = `${config.url}×tamp=${timestamp}&client_key=${newopens}`;
+ config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`;
}
}
}
diff --git a/public/react/src/modal/GotoQQgroup.js b/public/react/src/modal/GotoQQgroup.js
new file mode 100644
index 000000000..740f8c365
--- /dev/null
+++ b/public/react/src/modal/GotoQQgroup.js
@@ -0,0 +1,62 @@
+import React, { Component } from 'react';
+import {getImageUrl} from 'educoder';
+import { Modal} from 'antd';
+import axios from 'axios';
+import '../modules/user/account/common.css';
+import './gotoqqgroup.css'
+class GotoQQgroup extends Component {
+
+ constructor(props) {
+ super(props);
+ this.state={
+
+ }
+ }
+
+ modalCancel=()=>{
+ try {
+ this.props.setgoshowqqgtounp(false);
+ }catch (e) {
+
+ }
+ }
+
+ setDownload=()=>{
+ //立即联系
+ try {
+ this.props.setgoshowqqgtounp(false);
+ }catch (e) {
+
+ }
+ }
+
+
+ render() {
+
+ return(
+
+
+
您可以在QQ服务群向管理员申请,获得继续操作的权限
+
}/)
+
+
+
+
+
+ )
+ }
+}
+
+export default GotoQQgroup;
diff --git a/public/react/src/modal/gotoqqgroup.css b/public/react/src/modal/gotoqqgroup.css
new file mode 100644
index 000000000..777b7992f
--- /dev/null
+++ b/public/react/src/modal/gotoqqgroup.css
@@ -0,0 +1,61 @@
+/* 中间居中 */
+.intermediatecenter{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+/* 简单居中 */
+.intermediatecenterysls{
+ display: flex;
+ align-items: center;
+}
+.spacearound{
+ display: flex;
+ justify-content: space-around;
+
+}
+.spacebetween{
+ display: flex;
+ justify-content: space-between;
+}
+/* 头顶部居中 */
+.topcenter{
+ display: -webkit-flex;
+ flex-direction: column;
+ align-items: center;
+
+}
+
+
+/* x轴正方向排序 */
+/* 一 二 三 四 五 六 七 八 */
+.sortinxdirection{
+ display: flex;
+ flex-direction:row;
+}
+/* x轴反方向排序 */
+/* 八 七 六 五 四 三 二 一 */
+.xaxisreverseorder{
+ display: flex;
+ flex-direction:row-reverse;
+}
+/* 垂直布局 正方向*/
+/* 一
+ 二
+ 三
+ 四
+ 五
+ 六
+ 七
+ 八 */
+.verticallayout{
+ display: flex;
+ flex-direction:column;
+}
+/* 垂直布局 反方向*/
+.reversedirection{
+ display: flex;
+ flex-direction:column-reverse;
+}
+
diff --git a/public/react/src/modules/home/shixunsHome.js b/public/react/src/modules/home/shixunsHome.js
index a495a97c3..3e295344c 100644
--- a/public/react/src/modules/home/shixunsHome.js
+++ b/public/react/src/modules/home/shixunsHome.js
@@ -31,13 +31,15 @@ class ShixunsHome extends Component {
}
}
componentDidMount(){
- configShareForIndex()
+ configShareForIndex()
const upsystem=`/users/system_update.json`;
axios.get(upsystem).then((response)=>{
- let updata=response.data;
- this.setState({
- updata:updata
- })
+ if(response.data){
+ let updata=response.data;
+ this.setState({
+ updata:updata
+ })
+ }
}).catch((error)=>{
console.log(error);
})
@@ -50,7 +52,7 @@ class ShixunsHome extends Component {
})
}
}).catch((error)=>{
- console.log(error)
+ // console.log(error)
});
}
diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js
index 01cf7334d..303956b8c 100644
--- a/public/react/src/modules/tpm/NewHeader.js
+++ b/public/react/src/modules/tpm/NewHeader.js
@@ -19,7 +19,9 @@ import Addcourses from '../courses/coursesPublic/Addcourses';
import LoginDialog from '../login/LoginDialog';
-import Trialapplication from '../login/Trialapplication'
+import Trialapplication from '../login/Trialapplication';
+
+import GotoQQgroup from '../../modal/GotoQQgroup'
import 'antd/lib/modal/style/index.css';
@@ -31,6 +33,8 @@ import 'antd/lib/input/style/index.css';
import './TPMIndex.css';
+
+
const $ = window.$
// TODO 这部分脚本从公共脚本中直接调用
@@ -69,6 +73,7 @@ class NewHeader extends Component {
headtypesonClickbool:false,
headtypess:"/",
mygetHelmetapi2: null,
+ goshowqqgtounp:false,
visiblemyss:false,
}
console.log("176")
@@ -650,6 +655,18 @@ submittojoinclass=(value)=>{
return;
}
+
+
+ if(this.props&&this.props.current_user&&this.props.current_user.is_shixun_marker===true){
+ this.setgoshowqqgtounp(true);
+ return;
+ }
+
+
+
+
+
+
if(url !== undefined || url!==""){
window.location.href = url;
}
@@ -800,6 +817,14 @@ submittojoinclass=(value)=>{
return false
}
}
+
+
+ // 处理弹框
+ setgoshowqqgtounp=(bool)=>{
+ this.setState({
+ goshowqqgtounp:bool
+ })
+ }
render() {
const isLogin = true; // 这里不会出现未登录的情况,服务端在服务端路由时发现如果是未登录,则跳转到登录页了。
const {match} = this.props;
@@ -818,6 +843,7 @@ submittojoinclass=(value)=>{
headtypesonClickbool,
headtypess,
mygetHelmetapi2,
+ goshowqqgtounp,
}=this.state;
/*
用户名称 用户头像url
@@ -934,6 +960,14 @@ submittojoinclass=(value)=>{
{...this.props}
{...this.state}
/>:""}
+
+ {
+ goshowqqgtounp===true?
+ this.setgoshowqqgtounp(bool)}>
+ :
+ ""
+ }
+
this.headtypesonClick("/",false)} className={"fl mr30 ml25 mt10"}>
{
mygetHelmetapi2 === null ?
@@ -1145,9 +1179,6 @@ submittojoinclass=(value)=>{
{/*课堂*/}
翻转课堂
-
- {}
- {console.log(activeShixuns)}
实训项目
{/*
*/}
@@ -1332,7 +1363,9 @@ submittojoinclass=(value)=>{
{this.props.current_user&&this.props.current_user.user_identity==="学生"?"":coursestypes===false?
this.getUser("/courses/new")}>{this.props.user&&this.props.user.main_site===false?"新建课堂":"新建翻转课堂"}:""
}
- {shixuntype===true?"":this.getUser("/shixuns/new")}>新建实训项目}
+ {shixuntype===true?"":
+ this.getUser("/shixuns/new")}>新建实训项目
+ }
{this.props.user&&this.props.user.main_site===false?"":this.props.Headertop===undefined?"":this.getUser("/paths/new")} >新建实践课程}
{this.props.user&&this.props.user.main_site===true?"":this.props.Headertop===undefined?"":
pathstype===true?"":this.props.user&&this.props.user.admin===true||this.props.user&&this.props.user.is_teacher===true||this.props.user&&this.props.user.business===true?this.getUser("/paths/new")} >新建实践课程:""
diff --git a/public/react/src/modules/user/account/common.css b/public/react/src/modules/user/account/common.css
index e3bdb24fd..6039ffd26 100644
--- a/public/react/src/modules/user/account/common.css
+++ b/public/react/src/modules/user/account/common.css
@@ -1,118 +1,119 @@
-.basicForm {
- background: #fff;
- padding: 30px;
- margin-bottom: 10px;
- box-sizing: border-box;
- width: 100%;
- min-height: 390px;
-}
- .basicForm .title {
- font-size: 16px;
- padding-left: 30px;
- margin-bottom: 10px;
- }
-.flexTable {
- display: flex;
- flex-direction: column;
-}
-.flexRow {
- display: flex;
-}
-
-.mb15{margin-bottom: 15px!important;}
-/* BUTTOn */
-.ant-btn {
- border-radius: 2px;
-}
-button.ant-btn.ant-btn-primary.grayBtn {
- background: #CBCBCB;
- border-color: #CBCBCB;
-}
-.borderBottom {
- border-bottom: 1px solid #4CACFF;
-}
-
-/* form ---------------- START */
-.formItemInline {
- display: flex;
-}
-.formItemInline .ant-form-item-control-wrapper {
- display: inline-block;
-}
-.hideRequireTag .ant-form-item-required:before{
- display: none;
-}
-
-
- /* .basicForm .ant-form-item-label {
- width: 100px;
- padding-right: 10px;
- }
- .basicForm .ant-form-item-label label {
- color: #979797
- } */
-
-
-.courseNormalForm .ant-select-show-search {
- height: 40px;
-}
-.courseNormalForm .ant-select-auto-complete.ant-select .ant-input {
- height: 40px;
-}
-.courseNormalForm .ant-select-search__field__mirror {
- height: 40px;
-}
-.courseNormalForm .ant-input-lg {
- height: 40px;
-}
-.courseNormalForm .ant-select-selection--single {
- height: 40px;
-}
-.courseNormalForm .ant-select-auto-complete.ant-select .ant-select-selection--single {
- height: 40px
-}
-.courseNormalForm .ant-input-affix-wrapper {
- height: 40px;
-}
-/* 职业 */
-.courseNormalForm .ant-select-selection-selected-value {
- line-height: 38px
-}
-.courseNormalForm input {
- height: 40px;
-}
-.autoModal .ant-modal-body{
- height: auto;
- overflow-y: auto;
-}
-
-@media screen and (max-height: 765px) {
- .autoModal .ant-modal-body {
- height: 670px;
- overflow-y: auto;
- }
-}
-@media screen and (max-height: 735px) {
- .autoModal .ant-modal-body {
- height: 600px;
- overflow-y: auto;
- }
-}
-@media screen and (max-height: 635px) {
- .autoModal .ant-modal-body {
- height: 500px;
- overflow-y: auto;
- }
-}
-@media screen and (max-height: 566px) {
- .autoModal .ant-modal-body {
- height: 465px;
- overflow-y: auto;
- }
-}
-@media screen and (max-height: 472px) {
- .autoModal .ant-modal-body {
- height: 360px;
- overflow-y: auto;
- }
-}
\ No newline at end of file
+.basicForm {
+ background: #fff;
+ padding: 30px;
+ margin-bottom: 10px;
+ box-sizing: border-box;
+ width: 100%;
+ min-height: 390px;
+}
+ .basicForm .title {
+ font-size: 16px;
+ padding-left: 30px;
+ margin-bottom: 10px;
+ }
+.flexTable {
+ display: flex;
+ flex-direction: column;
+}
+.flexRow {
+ display: flex;
+}
+
+.mb15{margin-bottom: 15px!important;}
+/* BUTTOn */
+.ant-btn {
+ border-radius: 2px;
+}
+button.ant-btn.ant-btn-primary.grayBtn {
+ background: #CBCBCB;
+ border-color: #CBCBCB;
+}
+.borderBottom {
+ border-bottom: 1px solid #4CACFF;
+}
+
+/* form ---------------- START */
+.formItemInline {
+ display: flex;
+}
+.formItemInline .ant-form-item-control-wrapper {
+ display: inline-block;
+}
+.hideRequireTag .ant-form-item-required:before{
+ display: none;
+}
+
+
+ /* .basicForm .ant-form-item-label {
+ width: 100px;
+ padding-right: 10px;
+ }
+ .basicForm .ant-form-item-label label {
+ color: #979797
+ } */
+
+
+.courseNormalForm .ant-select-show-search {
+ height: 40px;
+}
+.courseNormalForm .ant-select-auto-complete.ant-select .ant-input {
+ height: 40px;
+}
+.courseNormalForm .ant-select-search__field__mirror {
+ height: 40px;
+}
+.courseNormalForm .ant-input-lg {
+ height: 40px;
+}
+.courseNormalForm .ant-select-selection--single {
+ height: 40px;
+}
+.courseNormalForm .ant-select-auto-complete.ant-select .ant-select-selection--single {
+ height: 40px
+}
+.courseNormalForm .ant-input-affix-wrapper {
+ height: 40px;
+}
+/* 职业 */
+.courseNormalForm .ant-select-selection-selected-value {
+ line-height: 38px
+}
+.courseNormalForm input {
+ height: 40px;
+}
+.autoModal .ant-modal-body{
+ height: auto;
+ overflow-y: auto;
+}
+
+@media screen and (max-height: 765px) {
+ .autoModal .ant-modal-body {
+ height: 670px;
+ overflow-y: auto;
+ }
+}
+@media screen and (max-height: 735px) {
+ .autoModal .ant-modal-body {
+ height: 600px;
+ overflow-y: auto;
+ }
+}
+@media screen and (max-height: 635px) {
+ .autoModal .ant-modal-body {
+ height: 500px;
+ overflow-y: auto;
+ }
+}
+@media screen and (max-height: 566px) {
+ .autoModal .ant-modal-body {
+ height: 465px;
+ overflow-y: auto;
+ }
+}
+@media screen and (max-height: 472px) {
+ .autoModal .ant-modal-body {
+ height: 360px;
+ overflow-y: auto;
+ }
+}
+