Merge branch 'dev_aliyun' of http://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

dev_cs
cxt 6 years ago
commit a94740b5b6

@ -250,8 +250,9 @@ class ApplicationController < ActionController::Base
# 开放课程通过链接访问的用户
if !User.current.logged? && !params[:chinaoocTimestamp].blank? && !params[:websiteName].blank? && !params[:chinaoocKey].blank?
content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}"
if Digest::MD5.hexdigest(content) == params[:chinaoocKey]
user = User.open_class_user
user = open_class_user
start_user_session(user) if user
User.current = user
end
@ -615,4 +616,27 @@ class ApplicationController < ActionController::Base
def set_export_cookies
cookies[:fileDownload] = true
end
# 149课程的评审用户数据创建包含创建课堂学生
def open_class_user
user = User.find_by(login: "OpenClassUser")
unless user
ActiveRecord::Base.transaction do
user_params = {status: 1, login: "OpenClassUser", lastname: "开放课程",
nickname: "开放课程", professional_certification: 1, certification: 1, grade: 0,
password: "12345678", phone: "11122223333", profile_completed: 1}
user = User.create!(user_params)
UserExtension.create!(user_id: user.id, gender: 0, school_id: 3396, :identity => 1, :student_id => "openclassuser") # 3396
subject = Subject.find_by(id: 149)
if subject
subject.courses.each do |course|
CourseMember.create!(course_id: course.id, role: 3, user_id: user.id) if !course.course_members.exists?(user_id: user.id)
end
end
end
end
user
end
end

@ -368,7 +368,7 @@ class SubjectsController < ApplicationController
@schools.map do |s|
school_courses = Course.where(id: course_ids, school_id: s.id)
course_count = school_courses.count
student_count = StudentsForCourse.where(course_id: school_courses.pluck(:id)).count
student_count = CourseMember.where(course_id: school_courses.pluck(:id), role: 4).count
homework_count = HomeworkCommon.find_by_sql("select count(*) cnt from homework_commons hc join courses c on hc.course_id = c.id
where c.school_id = #{s.id} and hc.id in(#{homework_common_id})").first.try(:cnt)
s.attributes.dup.merge({name: s.name, course_count: course_count, student_count: student_count,homework_count: homework_count})

File diff suppressed because it is too large Load Diff

@ -9,6 +9,8 @@ class Ecs::SaveGraduationCourseSupportsService < ApplicationService
end
def call
set_course_supports_position!
Ecs::SaveGraduationCourseSupportForm.new(params).validate!
accepts_attributes = build_accepts_nested_attributes(
@ -20,4 +22,10 @@ class Ecs::SaveGraduationCourseSupportsService < ApplicationService
graduation_subitem.save!
graduation_subitem
end
def set_course_supports_position!
params[:course_supports].each_with_index do |item, index|
item[:position] = index + 1
end
end
end

@ -40,7 +40,7 @@ class Users::ApplyProfessionalAuthService < ApplicationService
# sms_cache = Rails.cache.read("apply_pro_certification")
# if sms_cache.nil?
sms_notify_admin
sms_notify_admin
# Rails.cache.write("apply_pro_certification", 1)
# end
end

File diff suppressed because one or more lines are too long

@ -4,20 +4,6 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@ant-design/icons": {
"version": "1.2.1",
"resolved": "http://registry.npm.taobao.org/@ant-design/icons/download/@ant-design/icons-1.2.1.tgz",
"integrity": "sha1-jhkwGxQz7GfWu9DoknguKt5WH/k="
},
"@ant-design/icons-react": {
"version": "1.1.5",
"resolved": "http://registry.npm.taobao.org/@ant-design/icons-react/download/@ant-design/icons-react-1.1.5.tgz",
"integrity": "sha1-GwPajcztKku5gu97JcHSQBTDWmg=",
"requires": {
"ant-design-palettes": "^1.1.3",
"babel-runtime": "^6.26.0"
}
},
"@babel/helper-annotate-as-pure": {
"version": "7.0.0",
"resolved": "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0.tgz",
@ -95,15 +81,10 @@
"resolved": "http://registry.npm.taobao.org/@emotion/unitless/download/@emotion/unitless-0.7.3.tgz",
"integrity": "sha1-YxCgR/EtIaEDb7AxMXIZiSRAQW8="
},
"@flatten/array": {
"version": "1.1.7",
"resolved": "https://registry.npm.taobao.org/@flatten/array/download/@flatten/array-1.1.7.tgz",
"integrity": "sha1-+UZZu/MtVY9pKmI0MEokcxKm+jg="
},
"@icedesign/base": {
"version": "0.2.7",
"resolved": "http://registry.npm.taobao.org/@icedesign/base/download/@icedesign/base-0.2.7.tgz",
"integrity": "sha1-cFvLHH1UQVQKYuvsJRsGh56oN+U=",
"version": "0.2.8",
"resolved": "https://registry.npm.taobao.org/@icedesign/base/download/@icedesign/base-0.2.8.tgz",
"integrity": "sha1-hmlSY+17gnKJB3sbgoy446sqzAk=",
"requires": {
"async-validator": "^1.6.7",
"classnames": "^2.2.3",
@ -147,14 +128,6 @@
"csstype": "^2.2.0"
}
},
"@types/react-slick": {
"version": "0.23.3",
"resolved": "http://registry.npm.taobao.org/@types/react-slick/download/@types/react-slick-0.23.3.tgz",
"integrity": "sha1-ydFDI6dfVPRqZS+3Rf5VOq0JHOA=",
"requires": {
"@types/react": "*"
}
},
"@types/react-transition-group": {
"version": "2.9.0",
"resolved": "http://registry.npm.taobao.org/@types/react-transition-group/download/@types/react-transition-group-2.9.0.tgz?cache=0&other_urls=http%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Freact-transition-group%2Fdownload%2F%40types%2Freact-transition-group-2.9.0.tgz",
@ -333,102 +306,6 @@
"color-convert": "^1.9.0"
}
},
"ant-design-palettes": {
"version": "1.1.3",
"resolved": "http://registry.npm.taobao.org/ant-design-palettes/download/ant-design-palettes-1.1.3.tgz",
"integrity": "sha1-hBGbGk2GNjrcUqONWH5lM2oKJ90=",
"requires": {
"tinycolor2": "^1.4.1"
}
},
"antd": {
"version": "3.16.2",
"resolved": "http://registry.npm.taobao.org/antd/download/antd-3.16.2.tgz",
"integrity": "sha1-o7SoRKbegubIfJb4jdojF/TYkHU=",
"requires": {
"@ant-design/icons": "~1.2.0",
"@ant-design/icons-react": "~1.1.2",
"@types/react-slick": "^0.23.3",
"array-tree-filter": "^2.1.0",
"babel-runtime": "6.x",
"classnames": "~2.2.6",
"copy-to-clipboard": "^3.0.8",
"create-react-class": "^15.6.3",
"create-react-context": "0.2.2",
"css-animation": "^1.5.0",
"dom-closest": "^0.2.0",
"enquire.js": "^2.1.6",
"lodash": "^4.17.11",
"moment": "^2.24.0",
"omit.js": "^1.0.0",
"prop-types": "^15.6.2",
"raf": "^3.4.0",
"rc-animate": "^2.5.4",
"rc-calendar": "~9.12.1",
"rc-cascader": "~0.17.0",
"rc-checkbox": "~2.1.5",
"rc-collapse": "~1.11.1",
"rc-dialog": "~7.3.0",
"rc-drawer": "~1.7.6",
"rc-dropdown": "~2.4.1",
"rc-editor-mention": "^1.1.7",
"rc-form": "^2.4.0",
"rc-input-number": "~4.4.0",
"rc-menu": "~7.4.12",
"rc-notification": "~3.3.0",
"rc-pagination": "~1.17.7",
"rc-progress": "~2.3.0",
"rc-rate": "~2.5.0",
"rc-select": "~9.0.0",
"rc-slider": "~8.6.5",
"rc-steps": "~3.3.0",
"rc-switch": "~1.9.0",
"rc-table": "~6.4.0",
"rc-tabs": "~9.6.0",
"rc-time-picker": "~3.6.1",
"rc-tooltip": "~3.7.3",
"rc-tree": "~1.15.2",
"rc-tree-select": "~2.6.0",
"rc-trigger": "^2.6.2",
"rc-upload": "~2.6.0",
"rc-util": "^4.5.1",
"react-lazy-load": "^3.0.13",
"react-lifecycles-compat": "^3.0.4",
"react-slick": "~0.23.2",
"resize-observer-polyfill": "^1.5.0",
"shallowequal": "^1.1.0",
"warning": "~4.0.2"
},
"dependencies": {
"rc-select": {
"version": "9.0.2",
"resolved": "http://registry.npm.taobao.org/rc-select/download/rc-select-9.0.2.tgz",
"integrity": "sha1-zg0pfbX4pcfou8P8JNntW6ZIASw=",
"requires": {
"babel-runtime": "^6.23.0",
"classnames": "2.x",
"component-classes": "1.x",
"dom-scroll-into-view": "1.x",
"prop-types": "^15.5.8",
"raf": "^3.4.0",
"rc-animate": "2.x",
"rc-menu": "^7.3.0",
"rc-trigger": "^2.5.4",
"rc-util": "^4.0.4",
"react-lifecycles-compat": "^3.0.2",
"warning": "^4.0.2"
}
},
"warning": {
"version": "4.0.3",
"resolved": "http://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
"integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
"requires": {
"loose-envify": "^1.0.0"
}
}
}
},
"anymatch": {
"version": "1.3.2",
"resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz",
@ -520,11 +397,6 @@
"resolved": "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz",
"integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
},
"array-tree-filter": {
"version": "2.1.0",
"resolved": "http://registry.npm.taobao.org/array-tree-filter/download/array-tree-filter-2.1.0.tgz",
"integrity": "sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA="
},
"array-union": {
"version": "1.0.2",
"resolved": "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz",
@ -629,12 +501,9 @@
"dev": true
},
"async-validator": {
"version": "1.11.0",
"resolved": "http://registry.npm.taobao.org/async-validator/download/async-validator-1.11.0.tgz",
"integrity": "sha1-9i/RS8yjNvzalubdU9vR3dP8MZg=",
"requires": {
"babel-runtime": "6.x"
}
"version": "1.12.2",
"resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.12.2.tgz",
"integrity": "sha1-vq5nHnF00pOLe0tp0vt+cit/1yw="
},
"asynckit": {
"version": "0.4.0",
@ -2825,14 +2694,6 @@
"resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
"copy-to-clipboard": {
"version": "3.1.0",
"resolved": "http://registry.npm.taobao.org/copy-to-clipboard/download/copy-to-clipboard-3.1.0.tgz",
"integrity": "sha1-CigUGJnmvSF7ncE/0WibOziCC0Q=",
"requires": {
"toggle-selection": "^1.0.6"
}
},
"core-js": {
"version": "2.6.5",
"resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.6.5.tgz",
@ -2916,18 +2777,9 @@
"object-assign": "^4.1.1"
}
},
"create-react-context": {
"version": "0.2.2",
"resolved": "http://registry.npm.taobao.org/create-react-context/download/create-react-context-0.2.2.tgz",
"integrity": "sha1-mDZUL5qqIoaM19Sm+CZn3zgBnco=",
"requires": {
"fbjs": "^0.8.0",
"gud": "^1.0.0"
}
},
"cropperjs": {
"version": "0.7.2",
"resolved": "http://registry.npm.taobao.org/cropperjs/download/cropperjs-0.7.2.tgz",
"resolved": "https://registry.npm.taobao.org/cropperjs/download/cropperjs-0.7.2.tgz",
"integrity": "sha1-atinHbAGKbqULZzt5lKyeXXp50o="
},
"cross-spawn": {
@ -3494,14 +3346,6 @@
"resolved": "http://registry.npm.taobao.org/dom-align/download/dom-align-1.8.2.tgz",
"integrity": "sha1-/c02vOJbqNNP41gu/Vesdn30kL0="
},
"dom-closest": {
"version": "0.2.0",
"resolved": "http://registry.npm.taobao.org/dom-closest/download/dom-closest-0.2.0.tgz",
"integrity": "sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=",
"requires": {
"dom-matches": ">=1.0.1"
}
},
"dom-converter": {
"version": "0.2.0",
"resolved": "http://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
@ -3533,11 +3377,6 @@
}
}
},
"dom-matches": {
"version": "2.0.0",
"resolved": "http://registry.npm.taobao.org/dom-matches/download/dom-matches-2.0.0.tgz",
"integrity": "sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw="
},
"dom-scroll-into-view": {
"version": "1.2.1",
"resolved": "http://registry.npm.taobao.org/dom-scroll-into-view/download/dom-scroll-into-view-1.2.1.tgz",
@ -3610,23 +3449,6 @@
"resolved": "http://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-4.2.0.tgz",
"integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU="
},
"draft-js": {
"version": "0.10.5",
"resolved": "http://registry.npm.taobao.org/draft-js/download/draft-js-0.10.5.tgz",
"integrity": "sha1-v6m+sBj+BTPbsI1mdcNxprCPp0I=",
"requires": {
"fbjs": "^0.8.15",
"immutable": "~3.7.4",
"object-assign": "^4.1.0"
},
"dependencies": {
"immutable": {
"version": "3.7.6",
"resolved": "http://registry.npm.taobao.org/immutable/download/immutable-3.7.6.tgz",
"integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks="
}
}
},
"duplexer": {
"version": "0.1.1",
"resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz",
@ -4220,11 +4042,6 @@
"resolved": "http://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.0.tgz",
"integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM="
},
"eventlistener": {
"version": "0.0.1",
"resolved": "http://registry.npm.taobao.org/eventlistener/download/eventlistener-0.0.1.tgz",
"integrity": "sha1-7Suqu4UiJ68rz4iRUscsY8pTLrg="
},
"events": {
"version": "3.0.0",
"resolved": "http://registry.npm.taobao.org/events/download/events-3.0.0.tgz",
@ -5306,11 +5123,6 @@
"resolved": "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz",
"integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
},
"gud": {
"version": "1.0.0",
"resolved": "http://registry.npm.taobao.org/gud/download/gud-1.0.0.tgz",
"integrity": "sha1-pIlYGxfmpwvsqavjrlfeekmYUsA="
},
"gzip-size": {
"version": "3.0.0",
"resolved": "http://registry.npm.taobao.org/gzip-size/download/gzip-size-3.0.0.tgz",
@ -5319,11 +5131,6 @@
"duplexer": "^0.1.1"
}
},
"hammerjs": {
"version": "2.0.8",
"resolved": "http://registry.npm.taobao.org/hammerjs/download/hammerjs-2.0.8.tgz",
"integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
},
"handle-thing": {
"version": "1.2.5",
"resolved": "http://registry.npm.taobao.org/handle-thing/download/handle-thing-1.2.5.tgz",
@ -6713,14 +6520,6 @@
"resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"json2mq": {
"version": "0.2.0",
"resolved": "http://registry.npm.taobao.org/json2mq/download/json2mq-0.2.0.tgz",
"integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=",
"requires": {
"string-convert": "^0.2.0"
}
},
"json3": {
"version": "3.3.2",
"resolved": "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz",
@ -7100,11 +6899,6 @@
"lodash._reinterpolate": "~3.0.0"
}
},
"lodash.throttle": {
"version": "4.1.1",
"resolved": "http://registry.npm.taobao.org/lodash.throttle/download/lodash.throttle-4.1.1.tgz",
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
},
"lodash.uniq": {
"version": "4.5.0",
"resolved": "http://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
@ -7808,14 +7602,6 @@
"resolved": "http://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz",
"integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4="
},
"omit.js": {
"version": "1.0.2",
"resolved": "http://registry.npm.taobao.org/omit.js/download/omit.js-1.0.2.tgz",
"integrity": "sha1-kaFPDrqEBm36AVvzDkdMR/MLyFg=",
"requires": {
"babel-runtime": "^6.23.0"
}
},
"on-finished": {
"version": "2.3.0",
"resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
@ -9333,11 +9119,6 @@
"resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz",
"integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
},
"prettier": {
"version": "1.17.0",
"resolved": "http://registry.npm.taobao.org/prettier/download/prettier-1.17.0.tgz",
"integrity": "sha1-U7MDZ27tIswUqfDOwJtHezAmwAg="
},
"pretty-bytes": {
"version": "4.0.2",
"resolved": "http://registry.npm.taobao.org/pretty-bytes/download/pretty-bytes-4.0.2.tgz",
@ -9603,130 +9384,6 @@
"react-lifecycles-compat": "^3.0.4"
}
},
"rc-calendar": {
"version": "9.12.4",
"resolved": "http://registry.npm.taobao.org/rc-calendar/download/rc-calendar-9.12.4.tgz",
"integrity": "sha1-aO46hXtTQdeA2Uc1QZJs/gtEkVQ=",
"requires": {
"babel-runtime": "6.x",
"classnames": "2.x",
"moment": "2.x",
"prop-types": "^15.5.8",
"rc-trigger": "^2.2.0",
"rc-util": "^4.1.1",
"react-lifecycles-compat": "^3.0.4"
}
},
"rc-cascader": {
"version": "0.17.1",
"resolved": "http://registry.npm.taobao.org/rc-cascader/download/rc-cascader-0.17.1.tgz",
"integrity": "sha1-kUSBwzcLX9j4Lk+d+bZZbf7aFNU=",
"requires": {
"array-tree-filter": "^2.1.0",
"prop-types": "^15.5.8",
"rc-trigger": "^2.2.0",
"rc-util": "^4.0.4",
"react-lifecycles-compat": "^3.0.4",
"shallow-equal": "^1.0.0",
"warning": "^4.0.1"
},
"dependencies": {
"warning": {
"version": "4.0.3",
"resolved": "http://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
"integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
"requires": {
"loose-envify": "^1.0.0"
}
}
}
},
"rc-checkbox": {
"version": "2.1.6",
"resolved": "http://registry.npm.taobao.org/rc-checkbox/download/rc-checkbox-2.1.6.tgz",
"integrity": "sha1-XcAGU+UncBjEMf7FXji5HB+XbpA=",
"requires": {
"babel-runtime": "^6.23.0",
"classnames": "2.x",
"prop-types": "15.x",
"rc-util": "^4.0.4"
}
},
"rc-collapse": {
"version": "1.11.1",
"resolved": "http://registry.npm.taobao.org/rc-collapse/download/rc-collapse-1.11.1.tgz",
"integrity": "sha1-SqCXetv1Ip19tYIFZGsTkFrdcq0=",
"requires": {
"classnames": "2.x",
"css-animation": "1.x",
"prop-types": "^15.5.6",
"rc-animate": "2.x",
"react-is": "^16.7.0",
"shallowequal": "^1.1.0"
}
},
"rc-dialog": {
"version": "7.3.1",
"resolved": "http://registry.npm.taobao.org/rc-dialog/download/rc-dialog-7.3.1.tgz",
"integrity": "sha1-RQQew1v8jjN8kbZLUs6+9upc1KI=",
"requires": {
"babel-runtime": "6.x",
"rc-animate": "2.x",
"rc-util": "^4.4.0"
}
},
"rc-drawer": {
"version": "1.7.7",
"resolved": "http://registry.npm.taobao.org/rc-drawer/download/rc-drawer-1.7.7.tgz",
"integrity": "sha1-sBTR3lJFfIXE8+Hw1kelQDHdJgw=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.5",
"prop-types": "^15.5.0",
"rc-util": "^4.5.1"
}
},
"rc-dropdown": {
"version": "2.4.1",
"resolved": "http://registry.npm.taobao.org/rc-dropdown/download/rc-dropdown-2.4.1.tgz",
"integrity": "sha1-qu9us6UVLN2ZgolcKnjZtfBGzew=",
"requires": {
"babel-runtime": "^6.26.0",
"classnames": "^2.2.6",
"prop-types": "^15.5.8",
"rc-trigger": "^2.5.1",
"react-lifecycles-compat": "^3.0.2"
}
},
"rc-editor-core": {
"version": "0.8.9",
"resolved": "http://registry.npm.taobao.org/rc-editor-core/download/rc-editor-core-0.8.9.tgz",
"integrity": "sha1-9hGVLI7tll4+NI2ErnvohdrrIhw=",
"requires": {
"babel-runtime": "^6.26.0",
"classnames": "^2.2.5",
"draft-js": "^0.10.0",
"immutable": "^3.7.4",
"lodash": "^4.16.5",
"prop-types": "^15.5.8",
"setimmediate": "^1.0.5"
}
},
"rc-editor-mention": {
"version": "1.1.12",
"resolved": "http://registry.npm.taobao.org/rc-editor-mention/download/rc-editor-mention-1.1.12.tgz",
"integrity": "sha1-iWvLFyES8YgS6W/dM7pgPA/HMGo=",
"requires": {
"babel-runtime": "^6.23.0",
"classnames": "^2.2.5",
"dom-scroll-into-view": "^1.2.0",
"draft-js": "~0.10.0",
"immutable": "^3.7.4",
"prop-types": "^15.5.8",
"rc-animate": "^2.3.0",
"rc-editor-core": "~0.8.3"
}
},
"rc-form": {
"version": "2.4.4",
"resolved": "http://registry.npm.taobao.org/rc-form/download/rc-form-2.4.4.tgz",
@ -9759,28 +9416,6 @@
}
}
},
"rc-hammerjs": {
"version": "0.6.9",
"resolved": "http://registry.npm.taobao.org/rc-hammerjs/download/rc-hammerjs-0.6.9.tgz",
"integrity": "sha1-mk3b2hsuyPm5WWCRpqmJhCokOQc=",
"requires": {
"babel-runtime": "6.x",
"hammerjs": "^2.0.8",
"prop-types": "^15.5.9"
}
},
"rc-input-number": {
"version": "4.4.1",
"resolved": "http://registry.npm.taobao.org/rc-input-number/download/rc-input-number-4.4.1.tgz",
"integrity": "sha1-FjbPKBzejXjqTIuf/P/Xe4A1BnU=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.0",
"prop-types": "^15.5.7",
"rc-util": "^4.5.1",
"rmc-feedback": "^2.0.0"
}
},
"rc-menu": {
"version": "7.4.22",
"resolved": "http://registry.npm.taobao.org/rc-menu/download/rc-menu-7.4.22.tgz",
@ -9799,18 +9434,6 @@
"resize-observer-polyfill": "^1.5.0"
}
},
"rc-notification": {
"version": "3.3.1",
"resolved": "http://registry.npm.taobao.org/rc-notification/download/rc-notification-3.3.1.tgz",
"integrity": "sha1-C6o+cPjUCrAVzo+njCYMSQ/HvrQ=",
"requires": {
"babel-runtime": "6.x",
"classnames": "2.x",
"prop-types": "^15.5.8",
"rc-animate": "2.x",
"rc-util": "^4.0.4"
}
},
"rc-pagination": {
"version": "1.17.14",
"resolved": "http://registry.npm.taobao.org/rc-pagination/download/rc-pagination-1.17.14.tgz",
@ -9821,15 +9444,6 @@
"react-lifecycles-compat": "^3.0.4"
}
},
"rc-progress": {
"version": "2.3.0",
"resolved": "http://registry.npm.taobao.org/rc-progress/download/rc-progress-2.3.0.tgz",
"integrity": "sha1-z70H/5AmxFAQCYDeIJqSZQ4k8xM=",
"requires": {
"babel-runtime": "6.x",
"prop-types": "^15.5.8"
}
},
"rc-rate": {
"version": "2.5.0",
"resolved": "http://registry.npm.taobao.org/rc-rate/download/rc-rate-2.5.0.tgz",
@ -9870,116 +9484,6 @@
}
}
},
"rc-slider": {
"version": "8.6.9",
"resolved": "http://registry.npm.taobao.org/rc-slider/download/rc-slider-8.6.9.tgz",
"integrity": "sha1-syFIpJjJJ8k/INwflehoLEkkv44=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.5",
"prop-types": "^15.5.4",
"rc-tooltip": "^3.7.0",
"rc-util": "^4.0.4",
"shallowequal": "^1.0.1",
"warning": "^4.0.3"
},
"dependencies": {
"warning": {
"version": "4.0.3",
"resolved": "http://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
"integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
"requires": {
"loose-envify": "^1.0.0"
}
}
}
},
"rc-steps": {
"version": "3.3.1",
"resolved": "http://registry.npm.taobao.org/rc-steps/download/rc-steps-3.3.1.tgz",
"integrity": "sha1-SHfiiXMx47/ba3ieiK6nj08V9zI=",
"requires": {
"babel-runtime": "^6.23.0",
"classnames": "^2.2.3",
"lodash": "^4.17.5",
"prop-types": "^15.5.7"
}
},
"rc-switch": {
"version": "1.9.0",
"resolved": "http://registry.npm.taobao.org/rc-switch/download/rc-switch-1.9.0.tgz",
"integrity": "sha1-qyuHjycTxoE1ikUzkZdsm5WykPc=",
"requires": {
"classnames": "^2.2.1",
"prop-types": "^15.5.6",
"react-lifecycles-compat": "^3.0.4"
}
},
"rc-table": {
"version": "6.4.4",
"resolved": "http://registry.npm.taobao.org/rc-table/download/rc-table-6.4.4.tgz",
"integrity": "sha1-fOS4VuooFIRKAWQeyKzy1y7jpao=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.5",
"component-classes": "^1.2.6",
"lodash": "^4.17.5",
"mini-store": "^2.0.0",
"prop-types": "^15.5.8",
"rc-util": "^4.0.4",
"react-lifecycles-compat": "^3.0.2",
"shallowequal": "^1.0.2",
"warning": "^3.0.0"
}
},
"rc-tabs": {
"version": "9.6.3",
"resolved": "http://registry.npm.taobao.org/rc-tabs/download/rc-tabs-9.6.3.tgz",
"integrity": "sha1-XuAoFlIXafkuKNwDYKLrEhS1MHU=",
"requires": {
"babel-runtime": "6.x",
"classnames": "2.x",
"create-react-context": "0.2.2",
"lodash": "^4.17.5",
"prop-types": "15.x",
"raf": "^3.4.1",
"rc-hammerjs": "~0.6.0",
"rc-util": "^4.0.4",
"resize-observer-polyfill": "^1.5.1",
"warning": "^3.0.0"
},
"dependencies": {
"raf": {
"version": "3.4.1",
"resolved": "http://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz",
"integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=",
"requires": {
"performance-now": "^2.1.0"
}
}
}
},
"rc-time-picker": {
"version": "3.6.3",
"resolved": "http://registry.npm.taobao.org/rc-time-picker/download/rc-time-picker-3.6.3.tgz",
"integrity": "sha1-kV2R1oAWcknTJIcZ4IoxzqpcOwE=",
"requires": {
"classnames": "2.x",
"moment": "2.x",
"prop-types": "^15.5.8",
"rc-trigger": "^2.2.0"
}
},
"rc-tooltip": {
"version": "3.7.3",
"resolved": "http://registry.npm.taobao.org/rc-tooltip/download/rc-tooltip-3.7.3.tgz",
"integrity": "sha1-KArsavyqROjf8EgPuv+eh/wArsw=",
"requires": {
"babel-runtime": "6.x",
"prop-types": "^15.5.8",
"rc-trigger": "^2.2.2"
}
},
"rc-tree": {
"version": "1.15.2",
"resolved": "http://registry.npm.taobao.org/rc-tree/download/rc-tree-1.15.2.tgz",
@ -10011,63 +9515,6 @@
}
}
},
"rc-tree-select": {
"version": "2.6.2",
"resolved": "http://registry.npm.taobao.org/rc-tree-select/download/rc-tree-select-2.6.2.tgz",
"integrity": "sha1-eDuvvzq9D8ZFoHaXVjA47aYwLyk=",
"requires": {
"classnames": "^2.2.1",
"dom-scroll-into-view": "^1.2.1",
"prop-types": "^15.5.8",
"raf": "^3.4.0",
"rc-animate": "^3.0.0-rc.4",
"rc-tree": "~1.15.0",
"rc-trigger": "^3.0.0-rc.2",
"rc-util": "^4.5.0",
"react-lifecycles-compat": "^3.0.4",
"shallowequal": "^1.0.2",
"warning": "^4.0.1"
},
"dependencies": {
"rc-animate": {
"version": "3.0.0-rc.6",
"resolved": "http://registry.npm.taobao.org/rc-animate/download/rc-animate-3.0.0-rc.6.tgz",
"integrity": "sha1-BCiO76EY4MriFFNsipA/+qwbw/s=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.5",
"component-classes": "^1.2.6",
"fbjs": "^0.8.16",
"prop-types": "15.x",
"raf": "^3.4.0",
"rc-util": "^4.5.0",
"react-lifecycles-compat": "^3.0.4"
}
},
"rc-trigger": {
"version": "3.0.0-rc.3",
"resolved": "http://registry.npm.taobao.org/rc-trigger/download/rc-trigger-3.0.0-rc.3.tgz",
"integrity": "sha1-NYQt8WdNJTFeFCakSIKkyXZSJYs=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.6",
"prop-types": "15.x",
"raf": "^3.4.0",
"rc-align": "^2.4.1",
"rc-animate": "^3.0.0-rc.1",
"rc-util": "^4.4.0"
}
},
"warning": {
"version": "4.0.3",
"resolved": "http://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
"integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
"requires": {
"loose-envify": "^1.0.0"
}
}
}
},
"rc-trigger": {
"version": "2.6.2",
"resolved": "http://registry.npm.taobao.org/rc-trigger/download/rc-trigger-2.6.2.tgz",
@ -10181,17 +9628,6 @@
"text-table": "0.2.0"
}
},
"react-dom": {
"version": "16.8.6",
"resolved": "http://registry.npm.taobao.org/react-dom/download/react-dom-16.8.6.tgz",
"integrity": "sha1-cdYwP2MeiwCX9WFl72CPBR/24Q8=",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"scheduler": "^0.13.6"
}
},
"react-error-overlay": {
"version": "4.0.1",
"resolved": "http://registry.npm.taobao.org/react-error-overlay/download/react-error-overlay-4.0.1.tgz",
@ -10274,17 +9710,6 @@
}
}
},
"react-lazy-load": {
"version": "3.0.13",
"resolved": "http://registry.npm.taobao.org/react-lazy-load/download/react-lazy-load-3.0.13.tgz",
"integrity": "sha1-OwqS0zbUPT8Nc8vm81sXBQsIuCQ=",
"requires": {
"eventlistener": "0.0.1",
"lodash.debounce": "^4.0.0",
"lodash.throttle": "^4.0.0",
"prop-types": "^15.5.8"
}
},
"react-lifecycles-compat": {
"version": "3.0.4",
"resolved": "http://registry.npm.taobao.org/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz",
@ -10390,22 +9815,9 @@
"stifle": "^1.0.2"
}
},
"react-slick": {
"version": "0.23.2",
"resolved": "http://registry.npm.taobao.org/react-slick/download/react-slick-0.23.2.tgz",
"integrity": "sha1-jYvbx3pmeOitNvUMMleMfA8cVPY=",
"requires": {
"classnames": "^2.2.5",
"enquire.js": "^2.1.6",
"json2mq": "^0.2.0",
"lodash.debounce": "^4.0.8",
"prettier": "^1.14.3",
"resize-observer-polyfill": "^1.5.0"
}
},
"react-transition-group": {
"version": "1.2.1",
"resolved": "http://registry.npm.taobao.org/react-transition-group/download/react-transition-group-1.2.1.tgz",
"resolved": "https://registry.npm.taobao.org/react-transition-group/download/react-transition-group-1.2.1.tgz",
"integrity": "sha1-4R9yslf5IbITIpp3TfRmEjRsfKY=",
"requires": {
"chain-function": "^1.0.0",
@ -11135,15 +10547,6 @@
"inherits": "^2.0.1"
}
},
"rmc-feedback": {
"version": "2.0.0",
"resolved": "http://registry.npm.taobao.org/rmc-feedback/download/rmc-feedback-2.0.0.tgz",
"integrity": "sha1-y8bLOuY8emNe7w4l5PuvWsNm7qo=",
"requires": {
"babel-runtime": "6.x",
"classnames": "^2.2.5"
}
},
"run-async": {
"version": "2.3.0",
"resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz",
@ -11225,15 +10628,6 @@
"resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
"integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
},
"scheduler": {
"version": "0.13.6",
"resolved": "http://registry.npm.taobao.org/scheduler/download/scheduler-0.13.6.tgz",
"integrity": "sha1-RmpOwzJGezGpG5v3TlNHBy5M2Ik=",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"schema-utils": {
"version": "0.3.0",
"resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-0.3.0.tgz",
@ -11406,11 +10800,6 @@
"safe-buffer": "^5.0.1"
}
},
"shallow-equal": {
"version": "1.1.0",
"resolved": "http://registry.npm.taobao.org/shallow-equal/download/shallow-equal-1.1.0.tgz",
"integrity": "sha1-zAIvAw3LoNHBmKv2WKPGx0Thcco="
},
"shallowequal": {
"version": "1.1.0",
"resolved": "http://registry.npm.taobao.org/shallowequal/download/shallowequal-1.1.0.tgz",
@ -11934,11 +11323,6 @@
"resolved": "http://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
"string-convert": {
"version": "0.2.1",
"resolved": "http://registry.npm.taobao.org/string-convert/download/string-convert-0.2.1.tgz",
"integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c="
},
"string-length": {
"version": "1.0.1",
"resolved": "http://registry.npm.taobao.org/string-length/download/string-length-1.0.1.tgz",
@ -12248,11 +11632,6 @@
"resolved": "http://registry.npm.taobao.org/tiny-warning/download/tiny-warning-1.0.2.tgz",
"integrity": "sha1-Hfrnce4aBDlr394no63OvGtkiyg="
},
"tinycolor2": {
"version": "1.4.1",
"resolved": "http://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz",
"integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g="
},
"tmp": {
"version": "0.0.33",
"resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz",
@ -12314,11 +11693,6 @@
}
}
},
"toggle-selection": {
"version": "1.0.6",
"resolved": "http://registry.npm.taobao.org/toggle-selection/download/toggle-selection-1.0.6.tgz",
"integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
},
"toposort": {
"version": "1.0.7",
"resolved": "http://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",

@ -3,7 +3,7 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@icedesign/base": "^0.2.5",
"@icedesign/base": "^0.2.8",
"@novnc/novnc": "^1.1.0",
"antd": "^3.23.2",
"array-flatten": "^2.1.2",

@ -5,13 +5,9 @@
<!-- width=device-width, initial-scale=1 , shrink-to-fit=no -->
<!-- <meta name="viewport" content=""> -->
<meta name="theme-color" content="#000000">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<!--<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">-->
<!--<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">-->
<!--
manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<!--

@ -286,8 +286,8 @@ class CommonWorkDetailIndex extends Component{
seeworks={undefined}
reviseAttachmentUrl={`/student_works/${work_id || studentWorkId}/revise_attachment.json`}
/>:""}
<a className={"fr color-blue font-16 mt7"} href={"javascript:void(0)"}
onClick={this.addAccessory}
<a className={"fr color-blue font-16 "} href={"javascript:void(0)"}
onClick={this.addAccessory} style={{ 'marginTop': '-4px' }}
>补交附件</a>
</React.Fragment>

@ -640,6 +640,8 @@ class CommonWorkList extends Component{
} else if (time_status === 4) {
timeMsg = '申诉剩余时间'
}
const hasData = student_works && !!student_works.length && page == 1
// console.log(StudentData)
// console.log(student_works)
@ -691,7 +693,7 @@ class CommonWorkList extends Component{
}
`}</style>
<div style={{ background: '#fff'}} className="workListContent">
{ isAdmin && <ul className="clearfix" style={{padding: "20px 40px 10px", position: 'relative', paddingLeft: '24px'}}>
{ isAdmin && hasData && <ul className="clearfix" style={{padding: "20px 40px 10px", position: 'relative', paddingLeft: '24px'}}>
<CheckAllGroup options={options_teacher_comment} label={'你的评阅:'} onChange={this.teacherCommentOptionChange}></CheckAllGroup>
<CheckAllGroup options={options_status} label={'作品状态:'} onChange={this.statusOptionChange}></CheckAllGroup>
@ -713,7 +715,7 @@ class CommonWorkList extends Component{
{ <div id="graduation_work_list" style={{padding: isStudent ? '10px 24px 10px 24px' : '0px 24px 10px 24px'}}>
<div className="clearfix">
<span className="fl color-grey-6 font-12">
{hasData && <span className="fl color-grey-6 font-12">
{ isAdmin ?
(!!all_member_count) && <React.Fragment>
<span className="color-orange-tip">{work_count || '0'}</span>{all_member_count}
@ -725,7 +727,7 @@ class CommonWorkList extends Component{
<span className="color-orange-tip">{left_time.time}</span>
</React.Fragment>
}
</span>
</span>}
{/* { isAdminOrStudent && student_works && !!student_works.length && <div className="fr color-grey-6 edu-menu-panel">
<p style={{color: '#989898'}} className="color-grey-6"><a data-remote="true" className="font-12">

@ -125,8 +125,8 @@ class WorkDetailPageHeader extends Component{
seeworks={undefined}
reviseAttachmentUrl={`/student_works/${work_id || studentWorkId}/revise_attachment.json`}
/>:""}
<a className={"fr color-blue font-16 mt7"} href={"javascript:void(0)"}
onClick={this.addAccessory}
<a className={"fr color-blue font-16 "} href={"javascript:void(0)"}
onClick={this.addAccessory} style={{ 'marginTop': '-4px' }}
>补交附件</a>
</React.Fragment>

@ -238,7 +238,8 @@ class CCommentItem extends Component{
<div className="comment_content clearfix" id={`reply_content_${item.id}`}>
<div className="color-grey-3" id={`reply_content_${item.id}`}>
<div className={"break_word_comments markdown-body"} dangerouslySetInnerHTML={{__html: item.content}}></div>
<div className={"break_word_comments markdown-body"}
dangerouslySetInnerHTML={{__html: this.parseCommentContent(item.content)}}></div>
<div className="cl"></div>
</div>
</div>
@ -373,8 +374,8 @@ class CCommentItem extends Component{
</Tooltip>
: ''} */}
</div>
{/* style={{ height: '130px'}} */}
<p className="orig_reply" >
{/* 去掉了orig_reply 影响到i标签 */}
<p className="" >
{/* 第二排右侧按钮区域 */}
{/* ${this.state.show_reply ? '回复' : '申诉'} */}
{(show_reply || show_appeal) &&

@ -58,7 +58,7 @@
float: left;
padding-top: 31px;
padding-left: 25px;
font-size: 16px;
font-size: 21px;
color: #05101A;
text-align: left;
font-weight:bold;

@ -85,7 +85,7 @@ class VNCContainer extends Component {
})
}
onTreeSelect = (selectedKeys, info) => {
const isLeaf = info.node.props.isLeaf;
const isLeaf = info.node.isLeaf();
if (isLeaf) { // 叶子节点
selectedKeys.length && this.setState({
fileTreeSelectedKeys: selectedKeys

@ -7,7 +7,7 @@ import 'rc-tree/assets/index.css';
const $ = window.$;
export default function RepoTree(props) {
const { fileTreeData, onLoadData, onTreeSelect, fileTreeSelectedKeys, loadRepoFiles } = props;
const { fileTreeData, onLoadData, fileTreeSelectedKeys, loadRepoFiles } = props;
const [expandedKeys, setExpandedKeys] = useState([])
useEffect(() => {
loadRepoFiles()
@ -36,7 +36,19 @@ export default function RepoTree(props) {
};
const treeNodes = loop(fileTreeData);
function onTreeSelect(selectedKeys, info) {
if (!info.node.isLeaf()) {
const _expandedKeys = expandedKeys.slice(0)
const _index = _expandedKeys.indexOf(selectedKeys[0]);
if (_index == -1) {
_expandedKeys.push(selectedKeys[0])
} else {
_expandedKeys.splice( _index, 1)
}
setExpandedKeys( _expandedKeys )
}
props.onTreeSelect(selectedKeys, info)
}
// selectable={false}
return (
<Tree

@ -147,4 +147,8 @@
}
.xterm .xterm-viewport {
overflow-y: auto !important;
}
.repoFilesDrawer .rc-tree {
user-select: none;
}

@ -65,6 +65,7 @@ class CodeRepositoryView extends Component {
expandedKeys.push( index === 0 ? item : expandedKeys[index - 1] + '/' + item)
})
}
expandedKeys.length = 1 // 没办法做到多级初始化
// 初始化时无法展开到根节点 https://github.com/fis-components/rc-tree/issues/3
expandedKeys.length && this.setState({
expandedKeys,
@ -110,10 +111,23 @@ class CodeRepositoryView extends Component {
// $('#codetab_con_1 .codemirrorBackground').hide()
}
onTreeSelect = (selectedKeys, info) => {
if (!info.node.isLeaf()) {
const expandedKeys = this.state.expandedKeys.slice(0)
const _index = expandedKeys.indexOf(selectedKeys[0]);
if (_index == -1) {
expandedKeys.push(selectedKeys[0])
} else {
expandedKeys.splice( _index, 1)
}
this.setState({ expandedKeys })
}
this.props.onTreeSelect(selectedKeys, info)
}
buildTree() {
// TODO http://localhost:3007/tasks/xgffnuomytpj 这个实训没有文件树
const { fileTreeData, onLoadData, onTreeSelect, fileTreeSelectedKeys } = this.props;
const { fileTreeData, onLoadData, fileTreeSelectedKeys } = this.props;
if (!fileTreeData || fileTreeData.length === 0) {
return ""
}
@ -136,7 +150,7 @@ class CodeRepositoryView extends Component {
return (
<Tree
selectedKeys={fileTreeSelectedKeys}
onSelect={onTreeSelect}
onSelect={this.onTreeSelect}
onExpand={this.onExpand}
expandedKeys={this.state ? this.state.expandedKeys : []}
autoExpandParent={this.state.autoExpandParent}

@ -223,7 +223,7 @@ class CodeRepositoryViewContainer extends Component {
});
}
onTreeSelect = (selectedKeys, info) => {
const isLeaf = info.node.props.isLeaf;
const isLeaf = info.node.isLeaf();
if (isLeaf) { // 叶子节点
selectedKeys.length && this.setState({
fileTreeSelectedKeys: selectedKeys

@ -6,6 +6,8 @@ import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
import PropTypes from 'prop-types';
import { Rating ,Progress} from "@icedesign/base";
import {Modal,Input,Radio,Pagination,message,Spin,Icon,Tooltip} from 'antd';
import AccountProfile from"../user/AccountProfile";
@ -16,17 +18,6 @@ import axios from 'axios'
import Modals from '../modals/Modals';
// import { Rating,Progress } from '@icedesign/base';
import Rating from '@icedesign/base/lib/rating';
import Progress from '@icedesign/base/lib/progress';
// 引入业务组件样式
import '@icedesign/base/lib/rating/style.js';
import '@icedesign/base/lib/progress/style.js';
import './shixuns/css/TPMBanner.css';
let $ = window.$;
@ -633,7 +624,7 @@ class TPMBanner extends Component {
</ul>
<div className="pr fl" id="commentsStar" onMouseOver={()=>this.showonMouseOver()} onMouseOut={()=>this.hideonMouseOut()}>
<div className={"color-grey-c mb11"} style={{color: "#Fff",textAlign: "center"}}>学员评分</div>
<div className={"color-grey-c mb7"} style={{color: "#Fff",textAlign: "center"}}>学员评分</div>
<div className="rateYo">
<Rating value={star_info[0]} disabled allowHalf/>
</div>

Loading…
Cancel
Save