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

video_log
daiao 5 years ago
commit 0d6488e581

@ -27,14 +27,16 @@ class Weapps::AttendancesController < ApplicationController
tip_exception(403) if @user_course_identity >= Course::STUDENT tip_exception(403) if @user_course_identity >= Course::STUDENT
current_date = Date.current current_date = Date.current
current_end_time = Time.current.strftime("%H:%M:%S") current_end_time = Time.current.strftime("%H:%M:%S")
@current_attendance = @course.course_attendances.where("attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}'").take @current_attendance = @course.course_attendances.where("attendance_date = '#{current_date}' and end_time > '#{current_end_time}'").take
all_attendances = @course.course_attendances all_attendances = @course.course_attendances.where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and end_time < '#{current_end_time}')")
@all_member_attendances = CourseMemberAttendance.where(course_attendance_id: all_attendances)
if params[:group_id].present? if params[:group_id].present?
all_attendances = all_attendances.where(course_group_id: [params[:group_id], 0]) all_attendances = all_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: [params[:group_id], 0]})
@all_member_attendances = @all_member_attendances.joins(:course_member).where(course_members: {course_group_id: params[:group_id]})
end end
@history_attendances = all_attendances.where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and end_time < '#{current_end_time}')").order("id asc") @history_attendances = all_attendances.order("id asc")
@all_history_count = @history_attendances.size @all_history_count = @history_attendances.size
end end

@ -9,4 +9,12 @@ module Weapps::AttendancesHelper
course_member_ids = group.course_members.pluck(:id) course_member_ids = group.course_members.pluck(:id)
attendances.select{|attendance| course_member_ids.include?(attendance.course_member_id) && attendance.attendance_status == "NORMAL"}.size attendances.select{|attendance| course_member_ids.include?(attendance.course_member_id) && attendance.attendance_status == "NORMAL"}.size
end end
def history_member_count member_attendances, status, attendance_id
member_attendances.select{|member_attendance| member_attendance.attendance_status == status && member_attendance.course_attendance_id == attendance_id}.size
end
def cal_rate base, sum
sum == 0 ? 0 : (base.to_f / sum)
end
end end

@ -1,11 +1,21 @@
json.current_attendance do json.current_attendance do
json.(@current_attendance, :id, :normal_count, :all_count) json.(@current_attendance, :id, :normal_count, :all_count) if @current_attendance
end end
json.history_attendances @history_attendances do |attendance| all_normal_rate = []
all_absence_rate = []
json.history_attendances @history_attendances.each_with_index.to_a do |attendance, index|
normal_count = history_member_count(@all_member_attendances, "NORMAL", attendance.id)
absence_count = history_member_count(@all_member_attendances, "ABSENCE", attendance.id)
all_count = @all_member_attendances.select{|member_attendance| member_attendance.course_attendance_id == attendance.id}.size
json.index index + 1
json.normal_rate cal_rate(normal_count, all_count)
all_normal_rate << cal_rate(normal_count, all_count)
json.absence_rate cal_rate(absence_count, all_count)
all_absence_rate << cal_rate(absence_count, all_count)
end end
json.all_history_count @all_history_count json.all_history_count @all_history_count
json.normal_count @normal_count json.avg_normal_rate @all_history_count == 0 ? 0 : all_normal_rate.sum / @all_history_count
json.leave_count @leave_count json.avg_absence_rate @all_history_count == 0 ? 0 : all_absence_rate.sum / @all_history_count
json.absence_count @absence_count

@ -3,6 +3,7 @@ json.leave_count @leave_count
json.absence_count @absence_count json.absence_count @absence_count
json.all_count @all_count json.all_count @all_count
json.code @attendance.attendance_code json.code @attendance.attendance_code
json.mode @attendance.mode
json.edit_auth @user_course_identity < Course::PROFESSOR || @attendance.user_id == User.current.id json.edit_auth @user_course_identity < Course::PROFESSOR || @attendance.user_id == User.current.id
json.course_groups @groups do |group| json.course_groups @groups do |group|
json.(group, :id, :name, :course_members_count) json.(group, :id, :name, :course_members_count)

@ -793,37 +793,37 @@ class App extends Component {
render={ render={
(props) => (<Paperreview {...this.props} {...props} {...this.state} />) (props) => (<Paperreview {...this.props} {...props} {...this.state} />)
}/> }/>
<Route path="/paperlibrary/edit/:id" {/*<Route path="/paperlibrary/edit/:id"*/}
render={ {/* render={*/}
(props) => (<Paperlibraryeditid {...this.props} {...props} {...this.state} />) {/* (props) => (<Paperlibraryeditid {...this.props} {...props} {...this.state} />)*/}
}/> {/* }/>*/}
<Route path="/paperlibrary/see/:id" {/*<Route path="/paperlibrary/see/:id"*/}
render={ {/* render={*/}
(props) => (<Paperlibraryseeid {...this.props} {...props} {...this.state} />) {/* (props) => (<Paperlibraryseeid {...this.props} {...props} {...this.state} />)*/}
}/> {/* }/>*/}
<Route path="/myproblems/:id/:tab?" <Route path="/myproblems/:id/:tab?"
render={ render={
(props) => (<StudentStudy {...this.props} {...props} {...this.state} />) (props) => (<StudentStudy {...this.props} {...props} {...this.state} />)
} /> } />
<Route path="/question/edit/:id" {/*<Route path="/question/edit/:id"*/}
render={ {/* render={*/}
(props) => (<Questionitem_banks {...this.props} {...props} {...this.state} />) {/* (props) => (<Questionitem_banks {...this.props} {...props} {...this.state} />)*/}
} /> {/* } />*/}
<Route path="/question/newitem" {/*<Route path="/question/newitem"*/}
render={ {/* render={*/}
(props) => (<Questionitem_banks {...this.props} {...props} {...this.state} />) {/* (props) => (<Questionitem_banks {...this.props} {...props} {...this.state} />)*/}
} /> {/* } />*/}
<Route path="/question/:type" {/*<Route path="/question/:type"*/}
render={ {/* render={*/}
(props) => (<Headplugselection {...this.props} {...props} {...this.state} />) {/* (props) => (<Headplugselection {...this.props} {...props} {...this.state} />)*/}
} /> {/* } />*/}
<Route path="/paperlibrary" {/*<Route path="/paperlibrary"*/}
render={ {/* render={*/}
(props) => (<Testpaperlibrary {...this.props} {...props} {...this.state} />) {/* (props) => (<Testpaperlibrary {...this.props} {...props} {...this.state} />)*/}
}/> {/* }/>*/}
<Route path="/Integeneration" <Route path="/Integeneration"
render={ render={
@ -835,15 +835,19 @@ class App extends Component {
(props) => (<Developer {...this.props} {...props} {...this.state} />) (props) => (<Developer {...this.props} {...props} {...this.state} />)
}/> }/>
<Route path="/question" {/*<Route path="/question"*/}
render={ {/* render={*/}
(props) => (<Headplugselection {...this.props} {...props} {...this.state} />) {/* (props) => (<Headplugselection {...this.props} {...props} {...this.state} />)*/}
}/> {/* }/>*/}
{/*<Route path="/wxcode/:identifier?" component={WXCode}*/} {/*<Route path="/wxcode/:identifier?" component={WXCode}*/}
{/* render={*/} {/* render={*/}
{/* (props)=>(<WXCode {...this.props} {...props} {...this.state}></WXCode>)*/} {/* (props)=>(<WXCode {...this.props} {...props} {...this.state}></WXCode>)*/}
{/* }*/} {/* }*/}
{/*/>*/} {/*/>*/}
<Route exact path="/" <Route exact path="/"
// component={ShixunsHome} // component={ShixunsHome}
render={ render={

@ -9,7 +9,7 @@ import axios from 'axios';
const { TextArea } = Input; const { TextArea } = Input;
const { Option } = Select; const { Option } = Select;
const array=['腾讯课堂','B站','斗鱼','威佰通']; const array=['腾讯课堂','斗鱼直播','Bilibili','威佰通'];
function range(start, end) { function range(start, end) {
const result = []; const result = [];

@ -525,7 +525,6 @@ class Coursesleftnav extends Component{
} }
saveNavmodapost=(url,value,positiontype,coursesId)=>{ saveNavmodapost=(url,value,positiontype,coursesId)=>{
debugger;
axios.post(url, axios.post(url,
{name:value}).then((result)=>{ {name:value}).then((result)=>{
if(result!=undefined){ if(result!=undefined){

@ -228,7 +228,7 @@ class GraduateTopicDetailTable extends Component{
</Modal> </Modal>
<Modal <Modal
visible={visible} visible={visible}
title="新建分班2" title="新建分班"
closable={false} closable={false}
footer={null} footer={null}
destroyOnClose={true} destroyOnClose={true}

@ -66,7 +66,7 @@ function CourseGroupListTable(props) {
className:"color-grey-6", className:"color-grey-6",
render: (name, record, index) => { render: (name, record, index) => {
return <WordsBtn title={name.length > 11 ? name : ''} onClick={() => onGoDetail(record)} style={''} return <WordsBtn title={name.length > 11 ? name : ''} onClick={() => onGoDetail(record)} style={''}
className="overflowHidden1" style2={{maxWidth: '180px', verticalAlign: 'bottom'}}> className="overflowHidden1 color-dark" style2={{maxWidth: '180px', verticalAlign: 'bottom'}}>
{name}</WordsBtn> {name}</WordsBtn>
} }
}, },
@ -154,7 +154,7 @@ function CourseGroupListTable(props) {
{!isCourseEnd && isAdmin && <WordsBtn style2={{ marginRight: '12px' }} onClick={() => onDelete(record)} style={'grey'}>删除分班</WordsBtn>} {!isCourseEnd && isAdmin && <WordsBtn style2={{ marginRight: '12px' }} onClick={() => onDelete(record)} style={'grey'}>删除分班</WordsBtn>}
{isStudent && <WordsBtn style2={{ marginRight: '12px' }} onClick={() => addToDir(record)} style={''}>加入分班</WordsBtn>} {isStudent && <WordsBtn style2={{ marginRight: '12px' }} onClick={() => addToDir(record)} style={''}>加入分班</WordsBtn>}
<WordsBtn onClick={() => onGoDetail(record)} style={''}>查看</WordsBtn> <WordsBtn onClick={() => onGoDetail(record)} style={''} className="color-dark">查看</WordsBtn>
</React.Fragment> </React.Fragment>
} }
}) })

@ -1,48 +1,30 @@
import React, {Component} from 'react'; import React, { Component } from 'react';
import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal} from 'antd'; import { getUploadActionUrl, getUrl } from 'educoder';
import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
// import "antd/dist/antd.css";
import { getImageUrl, getUploadActionUrl, getUrl } from 'educoder';
import '../../courses/css/Courses.css' import '../../courses/css/Courses.css'
import axios from 'axios';
import './css/TPMchallengesnew.css'; import './css/TPMchallengesnew.css';
require('codemirror/lib/codemirror.css'); require('codemirror/lib/codemirror.css');
let origin = getUrl();
let path = '/editormd/lib/' let path = '/editormd/lib/'
path = getUrl("/editormd/lib/") path = getUrl("/editormd/lib/")
const $ = window.$; const $ = window.$;
let timeout;
let currentValue;
const Option = Select.Option;
const RadioGroup = Radio.Group;
// 保存数据 // 保存数据
function md_add_data(k,mdu,d){ function md_add_data(k, mdu, d) {
window.sessionStorage.setItem(k+mdu,d); window.sessionStorage.setItem(k + mdu, d);
} }
// 清空保存的数据 // 清空保存的数据
function md_clear_data(k,mdu,id){ function md_clear_data(k, mdu, id) {
window.sessionStorage.removeItem(k+mdu); window.sessionStorage.removeItem(k + mdu);
var id1 = "#e_tip_"+id; var id1 = "#e_tip_" + id;
var id2 = "#e_tips_"+id; var id2 = "#e_tips_" + id;
if(k == 'content'){ if (k == 'content') {
$(id2).html(" "); $(id2).html(" ");
}else{ } else {
$(id1).html(" "); $(id1).html(" ");
} }
} }
@ -59,16 +41,16 @@ function md_rec_data(k, mdu, id) {
} }
window.md_rec_data = md_rec_data; window.md_rec_data = md_rec_data;
function md_elocalStorage(editor,mdu,id){ function md_elocalStorage(editor, mdu, id) {
if (window.sessionStorage){ if (window.sessionStorage) {
var oc = window.sessionStorage.getItem('content'+mdu); var oc = window.sessionStorage.getItem('content' + mdu);
if(oc !== null && oc != editor.getValue()){ if (oc !== null && oc != editor.getValue()) {
console.log("#e_tips_"+id) console.log("#e_tips_" + id)
$("#e_tips_"+id).data('editor', editor); $("#e_tips_" + id).data('editor', editor);
var h = '您上次有已保存的数据,是否<a style="cursor: pointer;" class="link-color-blue" onclick="md_rec_data(\'content\',\''+ mdu + '\',\'' + id + '\')">恢复</a> ? / <a style="cursor: pointer;" class="link-color-blue" onclick="md_clear_data(\'content\',\''+ mdu + '\',\'' + id + '\')">不恢复</a>'; var h = '您上次有已保存的数据,是否<a style="cursor: pointer;" class="link-color-blue" onclick="md_rec_data(\'content\',\'' + mdu + '\',\'' + id + '\')">恢复</a> ? / <a style="cursor: pointer;" class="link-color-blue" onclick="md_clear_data(\'content\',\'' + mdu + '\',\'' + id + '\')">不恢复</a>';
$("#e_tips_"+id).html(h); $("#e_tips_" + id).html(h);
} }
setInterval(function() { setInterval(function () {
var d = new Date(); var d = new Date();
var h = d.getHours(); var h = d.getHours();
var m = d.getMinutes(); var m = d.getMinutes();
@ -76,46 +58,46 @@ function md_elocalStorage(editor,mdu,id){
h = h < 10 ? '0' + h : h; h = h < 10 ? '0' + h : h;
m = m < 10 ? '0' + m : m; m = m < 10 ? '0' + m : m;
s = s < 10 ? '0' + s : s; s = s < 10 ? '0' + s : s;
if(editor.getValue().trim() != ""){ if (editor.getValue().trim() != "") {
md_add_data("content",mdu,editor.getValue()); md_add_data("content", mdu, editor.getValue());
var id1 = "#e_tip_"+id; var id1 = "#e_tip_" + id;
var id2 = "#e_tips_"+id; var id2 = "#e_tips_" + id;
var textStart = " 数据已于 " var textStart = " 数据已于 "
var text = textStart + h + ':' + m + ':' + s +" 保存 "; var text = textStart + h + ':' + m + ':' + s + " 保存 ";
// 占位符 // 占位符
var oldHtml = $(id2).html(); var oldHtml = $(id2).html();
if (oldHtml && oldHtml != ' ' && oldHtml.startsWith(textStart) == false) { if (oldHtml && oldHtml != ' ' && oldHtml.startsWith(textStart) == false) {
$(id2).html( oldHtml.split(' (')[0] + ` (${text})`); $(id2).html(oldHtml.split(' (')[0] + ` (${text})`);
} else { } else {
$(id2).html(text); $(id2).html(text);
} }
// $(id2).html(""); // $(id2).html("");
} }
},10000); }, 10000);
}else{ } else {
$("#e_tip_"+id).after('您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!'); $("#e_tip_" + id).after('您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!');
} }
} }
function create_editorMD(id, width, high, placeholder, imageUrl, callback, initValue, function create_editorMD(id, width, high, placeholder, imageUrl, callback, initValue,
onchange, watch, { noStorage, showNullButton, emoji }, that) { onchange, watch, { noStorage, showNullButton, emoji }, that) {
// 还是出现了setting只有一份被共用的问题 // 还是出现了setting只有一份被共用的问题
var editorName = window.editormd(id, { var editorName = window.editormd(id, {
width: width, width: width,
height: high===undefined?400:high, height: high === undefined ? 400 : high,
path: path, // "/editormd/lib/" path: getUrl("/editormd/lib/"), // "/editormd/lib/"
markdown : initValue, markdown: initValue,
dialogLockScreen: false, dialogLockScreen: false,
watch:watch===undefined?true:watch, watch: watch === undefined ? true : watch,
syncScrolling: "single", syncScrolling: "single",
tex: true, tex: true,
tocm: true, tocm: true,
emoji: !!emoji , emoji: !!emoji,
taskList: true, taskList: true,
codeFold: true, codeFold: true,
searchReplace: true, searchReplace: true,
@ -123,21 +105,35 @@ function create_editorMD(id, width, high, placeholder, imageUrl, callback, initV
sequenceDiagram: true, sequenceDiagram: true,
autoFocus: false, autoFocus: false,
// mine
toolbarIcons: function (mdEditor) { toolbarIcons: function (mdEditor) {
let react_id = `react_${mdEditor.id}`; let react_id = `react_${mdEditor.id}`;
const __that = window[react_id] const __that = window[react_id]
// Or return editormd.toolbarModes[name]; // full, simple, mini
// Using "||" set icons align right. // Using "||" set icons align right.
const icons = ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "link", "|", "testIcon", "testIcon1", '|', "image", "table", '|', "watch", "clear"]; const icons = ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "link", "|", "testIcon", "testIcon1", '|', "image", "table", '|', "line-break", "watch", "clear"];
// 试卷处用到的填空题新增按钮 // 试卷处用到的填空题新增按钮
if (__that.props.showNullButton) { if (__that.props.showNullButton) {
icons.push('nullBtton') icons.push('nullBtton')
} }
return icons return icons
}, },
toolbarIconsClass: {
"line-break": "fa-minus"
},
toolbarHandlers: {
/**
* @param {Object} cm CodeMirror对象
* @param {Object} icon 图标按钮jQuery元素对象
* @param {Object} cursor CodeMirror的光标对象可获取光标所在行和位置
* @param {String} selection 编辑器选中的文本
*/
"line-break": function (cm, icon, cursor, selection) {
// 如果当前没有选中的文本,将光标移到要输入的位置
if (selection === "") {
cm.setCursor(cursor.line, cursor.ch + 1)
}
cm.replaceSelection("<br/>");
}
},
toolbarCustomIcons: { toolbarCustomIcons: {
testIcon: "<a type=\"inline\" class=\"latex\" ><div class='zbg'></div></a>", testIcon: "<a type=\"inline\" class=\"latex\" ><div class='zbg'></div></a>",
testIcon1: "<a type=\"latex\" class=\"latex\" ><div class='zbg_latex'></div></a>", testIcon1: "<a type=\"latex\" class=\"latex\" ><div class='zbg_latex'></div></a>",
@ -152,14 +148,11 @@ function create_editorMD(id, width, high, placeholder, imageUrl, callback, initV
imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"], imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"],
imageUploadURL: imageUrl,//url imageUploadURL: imageUrl,//url
onchange: onchange, onchange: onchange,
onload: function() { onload: function () {
let _id = this.id // 如果要使用this这里不能使用箭头函数 let _id = this.id // 如果要使用this这里不能使用箭头函数
let _editorName = this; let _editorName = this;
let react_id = `react_${_editorName.id}`; let react_id = `react_${_editorName.id}`;
const __that = window[react_id] const __that = window[react_id]
// this.previewing();
// let _id = id;
$("#" + _id + " [type=\"latex\"]").bind("click", function () { $("#" + _id + " [type=\"latex\"]").bind("click", function () {
_editorName.cm.replaceSelection("```latex"); _editorName.cm.replaceSelection("```latex");
_editorName.cm.replaceSelection("\n"); _editorName.cm.replaceSelection("\n");
@ -180,19 +173,12 @@ function create_editorMD(id, width, high, placeholder, imageUrl, callback, initV
if (__that.props.showNullButton) { if (__that.props.showNullButton) {
const NULL_CH = '▁' const NULL_CH = '▁'
// const NULL_CH = ''
// const NULL_CH = '🈳'
$("#" + _id + " [type=\"nullBtton\"]").bind("click", function () { $("#" + _id + " [type=\"nullBtton\"]").bind("click", function () {
_editorName.cm.replaceSelection(NULL_CH); _editorName.cm.replaceSelection(NULL_CH);
// var __Cursor = _editorName.cm.getDoc().getCursor();
// _editorName.cm.setCursor(__Cursor.line - 1, 0);
}); });
} }
if (noStorage == true) { if (!noStorage == true) {
} else {
md_elocalStorage(_editorName, `MDEditor__${_id}`, _id); md_elocalStorage(_editorName, `MDEditor__${_id}`, _id);
} }
@ -216,11 +202,11 @@ export default class TPMMDEditor extends Component {
// this.answers_editormd.setValue(this.props.initValue) // this.answers_editormd.setValue(this.props.initValue)
// } // }
} }
// react_mdEditor_ // react_mdEditor_
componentDidMount = () => { componentDidMount = () => {
const { mdID, initValue, placeholder, showNullButton} = this.props; const { mdID, initValue, placeholder, showNullButton } = this.props;
let _id = `mdEditor_${mdID}` let _id = `mdEditor_${mdID}`
this.contentChanged = false; this.contentChanged = false;
const _placeholder = placeholder || ""; const _placeholder = placeholder || "";
@ -235,7 +221,7 @@ export default class TPMMDEditor extends Component {
const __editorName = _editorName; const __editorName = _editorName;
react_id = `react_${__editorName.id}`; react_id = `react_${__editorName.id}`;
const that = window[react_id] const that = window[react_id]
// 一个延迟的recreate或resize不加这段代码md初始化可能会出现样式问题 // 一个延迟的recreate或resize不加这段代码md初始化可能会出现样式问题
setTimeout(() => { setTimeout(() => {
if (that.props.needRecreate == true) { if (that.props.needRecreate == true) {
@ -256,33 +242,33 @@ export default class TPMMDEditor extends Component {
__editorName.setValue(that.state.initValue) __editorName.setValue(that.state.initValue)
} }
} }
__editorName.cm.on("change", (_cm, changeObj) => { __editorName.cm.on("change", (_cm, changeObj) => {
that.contentChanged = true; that.contentChanged = true;
if (that.state.showError) { if (that.state.showError) {
that.setState({showError: false}) that.setState({ showError: false })
} }
that.onEditorChange() that.onEditorChange()
}) })
that.props.onCMBlur && __editorName.cm.on('blur', () => { that.props.onCMBlur && __editorName.cm.on('blur', () => {
that.props.onCMBlur() that.props.onCMBlur()
}) })
that.props.onCMBeforeChange && __editorName.cm.on('beforeChange', (cm,change) => { that.props.onCMBeforeChange && __editorName.cm.on('beforeChange', (cm, change) => {
that.props.onCMBeforeChange(cm,change) that.props.onCMBeforeChange(cm, change)
}) })
that.answers_editormd = __editorName; that.answers_editormd = __editorName;
// 这里应该可以去掉了,方便调试加的 // 这里应该可以去掉了,方便调试加的
window[__editorName.id+'_'] = __editorName; window[__editorName.id + '_'] = __editorName;
}, initValue, this.onEditorChange,this.props.watch, { }, initValue, this.onEditorChange, this.props.watch, {
noStorage: this.props.noStorage, noStorage: this.props.noStorage,
showNullButton: this.props.showNullButton, showNullButton: this.props.showNullButton,
emoji: this.props.emoji emoji: this.props.emoji
}, this); }, this);
} }
// 用在form里时validate失败时出现一个红色边框 // 用在form里时validate失败时出现一个红色边框
showError = () => { showError = () => {
this.setState({showError: true}) this.setState({ showError: true })
} }
onEditorChange = () => { onEditorChange = () => {
if (!this.answers_editormd) return; if (!this.answers_editormd) return;
@ -290,7 +276,7 @@ export default class TPMMDEditor extends Component {
//console.log('onEditorChange', this.props.id, val) //console.log('onEditorChange', this.props.id, val)
try { try {
this.props.onChange && this.props.onChange(val) this.props.onChange && this.props.onChange(val)
} catch(e) { } catch (e) {
// http://localhost:3007/courses/1309/common_homeworks/6566/setting // http://localhost:3007/courses/1309/common_homeworks/6566/setting
// 从这个页面,跳转到编辑页面,再在编辑页面点击返回的时候,这里会报错 // 从这个页面,跳转到编辑页面,再在编辑页面点击返回的时候,这里会报错
console.error('出错') console.error('出错')
@ -322,7 +308,7 @@ export default class TPMMDEditor extends Component {
this.setState({ initValue: val }) this.setState({ initValue: val })
} }
} }
render() { render() {
let { let {
@ -335,10 +321,10 @@ export default class TPMMDEditor extends Component {
} }
return ( return (
<React.Fragment> <React.Fragment>
<div className={`df ${className} ${imageExpand && 'editormd-image-click-expand' }`} > <div className={`df ${className} ${imageExpand && 'editormd-image-click-expand'}`} >
{/* padding10-20 */} {/* padding10-20 */}
<div className="edu-back-greyf5 radius4" id={`mdEditor_${mdID}`} style={{..._style}}> <div className="edu-back-greyf5 radius4" id={`mdEditor_${mdID}`} style={{ ..._style }}>
<textarea style={{display: 'none'}} id={`mdEditors_${mdID}`} name="content"></textarea> <textarea style={{ display: 'none' }} id={`mdEditors_${mdID}`} name="content"></textarea>
<div className="CodeMirror cm-s-defualt"> <div className="CodeMirror cm-s-defualt">
</div> </div>
</div> </div>

@ -208,7 +208,7 @@ render() {
<div className="educontent"> <div className="educontent">
<div className="pt_b_26"> <div className="pt_b_26">
<div className="clearfix mb20 shaiContent"> <div className="clearfix mb20 shaiContent">
<span className="shaiTitle fl mt3">方向</span> <span className="shaiTitle fl">方向</span>
<div className="fl pr shaiAllItem"> <div className="fl pr shaiAllItem">
<li className={shixunsearchAllvalue==="a"?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value= "a" onClick={this.shixunsearchall}>全部</li> <li className={shixunsearchAllvalue==="a"?"shaiItem shixun_repertoire active":"shaiItem shixun_repertoire"} value= "a" onClick={this.shixunsearchall}>全部</li>
<style> <style>
@ -222,7 +222,8 @@ render() {
float: left; float: left;
margin-right: 20px; margin-right: 20px;
color: #999; color: #999;
cursor: pointer; cursor: pointer;
margin-bottom:10px;
} }
.ant-dropdown-menu-item, .ant-dropdown-menu-submenu-title{ .ant-dropdown-menu-item, .ant-dropdown-menu-submenu-title{
padding: 0px 12px; padding: 0px 12px;
@ -249,12 +250,23 @@ render() {
</div> </div>
</div> </div>
<div className="clearfix"> <div className="clearfix">
<span className="shaiTitle fl mt6">筛选</span> <span className="shaiTitle fl">筛选</span>
{ {
<style> <style>
{` {`
.shaiContent li.shaiItem{
padding:0px 15px;
line-height:32px;
height:32px
}
.shaiTitle{
height:32px;
line-height:32px;
}
.shaiItems{ .shaiItems{
padding: 3px 15px; padding:0px 15px;
line-height:32px;
height:32px;
float: left; float: left;
border-radius: 4px; border-radius: 4px;
color: #4C4C4C; color: #4C4C4C;

@ -396,7 +396,7 @@ class ShixunsIndex extends Component {
} }
.myshixin-head{ .myshixin-head{
width: 100%; width: 100%;
height: 300px; height: 240px;
background-image: url(${getImageUrl(this.props.mygetHelmetapi && this.props.mygetHelmetapi.shixun_banner_url === null ?`images/educoder/courses/courses.jpg`:this.props.mygetHelmetapi&&this.props.mygetHelmetapi.shixun_banner_url)}); background-image: url(${getImageUrl(this.props.mygetHelmetapi && this.props.mygetHelmetapi.shixun_banner_url === null ?`images/educoder/courses/courses.jpg`:this.props.mygetHelmetapi&&this.props.mygetHelmetapi.shixun_banner_url)});
background-color: #081C4B; background-color: #081C4B;
background-position: center; background-position: center;

Loading…
Cancel
Save