From 8fc86ecf9bbb6da1ba037aaae7c23710d2cdba78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Mon, 1 Jul 2019 09:12:54 +0800 Subject: [PATCH 01/67] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascripts/educoder/edu_application.js | 2576 ++++++++--------- public/react/config/webpack.config.dev.js | 30 +- public/react/src/modules/home/shixunsHome.js | 8 +- public/react/src/modules/tpm/NewFooter.js | 98 +- public/react/src/modules/tpm/SiderBar.js | 2 +- public/react/src/modules/tpm/TPMIndexHOC.js | 45 +- 6 files changed, 1385 insertions(+), 1374 deletions(-) diff --git a/public/javascripts/educoder/edu_application.js b/public/javascripts/educoder/edu_application.js index 91e04ce80..feacff0dd 100644 --- a/public/javascripts/educoder/edu_application.js +++ b/public/javascripts/educoder/edu_application.js @@ -1,1288 +1,1288 @@ -document.write(""); - -/*! - * JavaScript Cookie v2.2.0 - * https://github.com/js-cookie/js-cookie - * - * Copyright 2006, 2015 Klaus Hartl & Fagner Brack - * Released under the MIT license - */ -!function(e) { - var n; - if ("function" == typeof define && define.amd && (define(e), - n = !0), - "object" == typeof exports && (module.exports = e(), - n = !0), - !n) { - var t = window.Cookies - , o = window.Cookies = e(); - o.noConflict = function() { - return window.Cookies = t, - o - } - } -}(function() { - function e() { - for (var e = 0, n = {}; e < arguments.length; e++) { - var t = arguments[e]; - for (var o in t) - n[o] = t[o] - } - return n - } - function n(e) { - return e.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent) - } - return function t(o) { - function r() {} - function i(n, t, i) { - if ("undefined" != typeof document) { - "number" == typeof (i = e({ - path: "/" - }, r.defaults, i)).expires && (i.expires = new Date(1 * new Date + 864e5 * i.expires)), - i.expires = i.expires ? i.expires.toUTCString() : ""; - try { - var c = JSON.stringify(t); - /^[\{\[]/.test(c) && (t = c) - } catch (e) {} - t = o.write ? o.write(t, n) : encodeURIComponent(String(t)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent), - n = encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\(\)]/g, escape); - var f = ""; - for (var u in i) - i[u] && (f += "; " + u, - !0 !== i[u] && (f += "=" + i[u].split(";")[0])); - return document.cookie = n + "=" + t + f - } - } - function c(e, t) { - if ("undefined" != typeof document) { - for (var r = {}, i = document.cookie ? document.cookie.split("; ") : [], c = 0; c < i.length; c++) { - var f = i[c].split("=") - , u = f.slice(1).join("="); - t || '"' !== u.charAt(0) || (u = u.slice(1, -1)); - try { - var a = n(f[0]); - if (u = (o.read || o)(u, a) || n(u), - t) - try { - u = JSON.parse(u) - } catch (e) {} - if (r[a] = u, - e === a) - break - } catch (e) {} - } - return e ? r[e] : r - } - } - return r.set = i, - r.get = function(e) { - return c(e, !1) - } - , - r.getJSON = function(e) { - return c(e, !0) - } - , - r.remove = function(n, t) { - i(n, "", e(t, { - expires: -1 - })) - } - , - r.defaults = {}, - r.withConverter = t, - r - }(function() {}) -}); - -$(function() { - var result = location.search.match(/\?search=(\w*)&?/i) - if (result && result[1]) { - var searchText = result[1] - $('#search-input').val(searchText) - } - // 未报名用户登录时弹框 - // console.log(Cookies.get('enroll_status')); - // if(Cookies.get('enroll_status') == 0){ - // Cookies.remove('enroll_status'); - // var html='
'+ - // '
'+ - // ''+ - // ''+ - // '立即报名'+ - // '
'; - // $(".newContainer").append(html); - // } -}); - -function CloseBox() { - $(".CompetitionEnrollBox").remove(); -} - -//根据页面大小决定侧边栏的位置 -$(window).resize(function() { - rightSlider(); -}); -function rightSlider() { - var poi = parseInt((parseInt($(window).width()) - 1200) / 2) - 60; - // console.log(parseInt($(window).width())+" "+poi); - if (poi > 0) { - $(".-task-sidebar").css("right", poi); - } else { - $(".-task-sidebar").css("right", "0px"); - } - $(".-task-sidebar").show(); -} -function open_course(id, allowVisit) { - if (allowVisit) { - window.open("/courses/" + id); - } -} -function open_project(id, allowVisit) { - if (allowVisit) { - window.open("/projects/" + id); - } -} - -function conver_size(limit) { - var size = ""; - if (limit < 1024) { - //如果小于1KB转化成B - size = limit.toFixed(2) + "B"; - } else if (limit < 1024 * 1024) { - //如果小于1MB转化成KB - size = (limit / 1024).toFixed(2) + "KB"; - } else if (limit < 1024 * 1024 * 1024) { - //如果小于1GB转化成MB - size = (limit / (1024 * 1024)).toFixed(2) + "MB"; - } else { - //其他转化成GB - size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"; - } - - var sizestr = size + ""; - var len = sizestr.indexOf("\."); - var dec = sizestr.substr(len + 1, 2); - if (dec == "00") { - //当小数点后为00时 去掉小数部分 - return sizestr.substring(0, len) + sizestr.substr(len + 3, 2); - } - return sizestr; -} - -function _initSider() { - var $descSide = $("
").appendTo("body"); - $(".-task-sidebar>div").hover(function() { - //移入显示二维码 - if ($(this).hasClass("scan")) { - $(".scan_ewm").show().css({ - right: "75px", - opacity: 0 - }).stop().animate({ - right: "45px", - opacity: 1 - }) - return; - } - var $tool = $(this).attr("tooltips"); - $descSide.html($tool + "
"); - $descSide.data('_dom', this) - $descSide.show().css({ - left: $(this).offset().left - $descSide.width() - 30, - opacity: 0, - top: $(this).offset().top - }).stop().animate({ - left: $(this).offset().left - $descSide.width() - 5, - opacity: 1 - }, 400); - }, function() { - if ($(this).hasClass("scan")) { - $(".scan_ewm").stop().animate({ - right: "75px", - opacity: 0 - }, 200).hide(); - } - $descSide.stop().animate({ - left: $(this).offset().left - $descSide.width() - 30, - opacity: 0 - }, 200).hide(); - }); - rightSlider(); - - $(window).scroll(function() { - if ($descSide.height()) { - var hoverIcon = $descSide.data('_dom') - $descSide.css('top', $(hoverIcon).offset().top) - } - }) -} -$(function() { - loadHeader(); - _initSider(); - - $(window).scroll(function() { - if ($(".gotop").length > 0) { - if ($(document).scrollTop() > 0) { - $(".-task-sidebar .gotop").show(); - $(".gotop").click(function() { - $("html,body").scrollTop(0); - }); - } - if ($(document).scrollTop() == 0) { - $(".-task-sidebar .gotop").hide(); - } - } - }); - - // 翻页的GO - $(".page_GO").live("keydown", function(event) { - var code; - if (!event) { - event = window.event; - //针对ie浏览器 - code = event.keyCode; - } else { - code = event.keyCode; - } - if (code == 13) { - var prev = $(this).prev().find("a").html().trim(); - var page = $(this).val().trim(); - if (parseInt(prev) >= parseInt(page)) { - if (typeof ($(this).prev().children("a").attr("href")) == "undefined") { - var href = $(this).parent().find("li:first-child").children("a").attr("href"); - } else { - var href = $(this).prev().children("a").attr("href"); - } - var new_href = href.replace(/page=(\d*)/, 'page=' + page); - console.log(new_href); - $.get(new_href); - return false; - } - } - }); - - // 试用申请弹框 - $("#apply_trail_submit_btn").live('click', function() { - if ($("#apply_reason").val().trim() == "") { - $("#hint_message").show(); - } else { - $("#hint_message").hide(); - $("#apply_trail_form").submit(); - hideModal(); - } - }); - -}); - -// editor 存在了jquery对象上,应用不需要自己写md_rec_data方法了 -function md_rec_data(k, mdu, id) { - if (window.sessionStorage.getItem(k + mdu) !== null) { - editor = $("#e_tips_" + id).data('editor'); - editor.setValue(window.sessionStorage.getItem(k + mdu)); - - md_clear_data(k, mdu, id); - } -} -// markdown的自动保存 -function md_elocalStorage(editor, mdu, id) { - if (window.sessionStorage) { - var oc = window.sessionStorage.getItem('content' + mdu); - if (oc !== null) { - $("#e_tips_" + id).data('editor', editor); - var h = '您上次有已保存的数据,是否恢复 ? / 不恢复'; - $("#e_tips_" + id).html(h); - } - setInterval(function() { - d = new Date(); - var h = d.getHours(); - var m = d.getMinutes(); - var s = d.getSeconds(); - h = h < 10 ? '0' + h : h; - m = m < 10 ? '0' + m : m; - s = s < 10 ? '0' + s : s; - if (editor.getValue().trim() != "") { - md_add_data("content", mdu, editor.getValue()); - var id1 = "#e_tip_" + id; - var id2 = "#e_tips_" + id; - $(id1).html(" 数据已于 " + h + ':' + m + ':' + s + " 保存 "); - $(id2).html(""); - } - }, 10000); - - } else { - $("#e_tip_" + id).after('您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!'); - } -} -// 保存数据 -function md_add_data(k, mdu, d) { - window.sessionStorage.setItem(k + mdu, d); -} -// 恢复数据 -//function md_rec_data(k,mdu,id, editor){ -// if(window.sessionStorage.getItem(k+mdu) !== null){ -// editor.setValue(window.sessionStorage.getItem(k+mdu)); -// md_clear_data(k,mdu,id); -// } -//} -// 清空保存的数据 -function md_clear_data(k, mdu, id) { - window.sessionStorage.removeItem(k + mdu); - var id1 = "#e_tip_" + id; - var id2 = "#e_tips_" + id; - if (k == 'content') { - $(id2).html(""); - } else { - $(id1).html(""); - } -} - -// editorMD to create -/** - * - * @param id 渲染DOM的id - * @param width 宽度 - * @param high 高度 - * @param placeholder - * @param imageUrl 上传图片的url - * @returns {*} 返回一个editorMD实例 - */ -function create_editorMD(id, width, high, placeholder, imageUrl, readonly) { - var readonly = readonly == undefined ? false : readonly; - var editorName = editormd(id, { - width: width, - height: high, - syncScrolling: "single", - //你的lib目录的路径,我这边用JSP做测试的 - path: "/editormd/lib/", - tex: true, - tocm: true, - emoji: true, - taskList: true, - codeFold: true, - searchReplace: true, - htmlDecode: "style,script,iframe", - sequenceDiagram: true, - autoFocus: false, - readonly: readonly, - toolbarIcons: function() { - // Or return editormd.toolbarModes[name]; // full, simple, mini - // Using "||" set icons align right. - return ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "|", "testIcon", "testIcon1", '|', "image", "table", '|', "watch", "clear"] - }, - toolbarCustomIcons: { - testIcon: "
", - testIcon1: "
" - }, - //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。 - saveHTMLToTextarea: true, - // 用于增加自定义工具栏的功能,可以直接插入HTML标签,不使用默认的元素创建图标 - dialogMaskOpacity: 0.6, - placeholder: placeholder, - imageUpload: true, - imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"], - imageUploadURL: imageUrl, - //url - onload: function(cMirror) { - $("#" + id + " [type=\"latex\"]").bind("click", function() { - editorName.cm.replaceSelection("```latex"); - editorName.cm.replaceSelection("\n"); - editorName.cm.replaceSelection("\n"); - editorName.cm.replaceSelection("```"); - var __Cursor = editorName.cm.getDoc().getCursor(); - editorName.cm.setCursor(__Cursor.line - 1, 0); - }); - - $("#" + id + " [type=\"inline\"]").bind("click", function() { - editorName.cm.replaceSelection("$$$$"); - var __Cursor = editorName.cm.getDoc().getCursor(); - editorName.cm.setCursor(__Cursor.line, __Cursor.ch - 2); - editorName.cm.focus(); - }); - $("[type=\"inline\"]").attr("title", "行内公式"); - $("[type=\"latex\"]").attr("title", "多行公式"); - setTimeout(function() { - editorName.resize(); - editorName.cm.refresh(); - window.new_md = editorName; - }, 300); - } - }); - return editorName; -} - -// editormd to html -/** - * - * @param id 渲染的id - * @param callback onload回調 暫時未用 - */ -function editormd_to_html(id, callback) { - editormd.loadKaTeX(function() { - editormd.markdownToHTML(id, { - htmlDecode: "style,script,iframe", - // you can filter tags decode - onload: function() { - callback && callback() - }, - taskList: true, - tex: true, - // 默认不解析 - flowChart: true, - // 默认不解析 - sequenceDiagram: true// 默认不解析 - }); - }); -} - -function loadHeader() { - //头部导航条的----------显示搜索框 - $("#search-open").on("click", function(e) { - $(this).hide(); - // $("#header-nav").animate({opacity:"0"},1000); - $(".posi-search").show() - // .animate({opacity:"1"},1000); - $("#header-nav").css("z-index", "2"); - $(".posi-search").css("z-index", "3"); - // $(".search-input").val(""); // 不清空 - $(".search-input").focus(); - $(".search-all .search-content").hide(); - e.stopPropagation(); - //阻止冒泡 - }); - $(".search-input").on("click", function(e) { - e.stopPropagation(); - //阻止冒泡 - }); - //搜索框输入内容 - $(".search-input").on("input", function(e) { - if ($(".search-input").val() == "") { - $(".search-all .search-content").hide(); - } else { - $(".search-all .search-content").show(); - } - e.stopPropagation(); - //阻止冒泡 - }); - //搜索 - $("#header_keyword_search").on("click", header_search); - $("input[name='search_keyword']").on("keydown", function(event) { - var code; - if (!event) { - event = window.event; - //针对ie浏览器 - code = event.keyCode; - } else { - code = event.keyCode; - } - if (code == 13) { - header_search(); - return false; - } - }); - $(".search-clear").click(function(e) { - e.stopPropagation(); - }); - //切换搜索条件 - $("#searchkey li").click(function(e) { - var key = $($(this).children("a")[0]).html(); - switch (key) { - case '实训': - $("#search_type").val('1'); - break; - case '课堂': - $("#search_type").val('2'); - break; - case '用户': - $("#search_type").val('3'); - break; - } - $("#searchkey").siblings(".searchkey").html(key); - // $("#searchkey").hide(); - e.stopPropagation(); - //阻止冒泡 - }); - //切换选择导航条 - $("#header-nav li").click(function() { - $("#header-nav li").removeClass("active"); - $(this).addClass("active"); - }); - //点击页面其它(与搜索框无关的地方)都会将搜索框隐藏,所以与搜索框有关的地方需要阻止冒泡 - $("body").on("click", function() { - closeSearch(); - }); - - $(".search_history").on("click", function() { - $("input[name='search_keyword']").val($(this).html()); - header_search(); - }); -} - -function header_search() { - var keyword = $("input[name='search_keyword']").val(); - // 搜索关键字 - var index = $("#search_type").val(); - // 搜索课程/项目 - keyword = encodeURIComponent(keyword); - // $.get('/users/search_shixuns_or_course', - // { search: keyword, - // index: index}); - window.location.href = "/users/search_shixuns_or_courses" + "?search=" + keyword + "&index=" + index; - //e.stopPropagation();//阻止冒泡 -} - -//头部导航条的隐藏 -function closeSearch() { - $('#posi-search').hide(); - $("#search-open").show(); - // $(".posi-search").animate({opacity:"0"},800); - $("#header-nav").animate({ - opacity: "1" - }, 1000); - $(".posi-search").css("z-index", "2"); - $("#header-nav").css("z-index", "3"); -} -(function($) { - $.fn.drag = 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 (_x < maxWidth) { - //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置 - handler.css({ - 'left': 0 - }); - drag_bg.css({ - 'width': 0 - }); - } - }); - - //清空事件 - function dragOk() { - var kuaiwidth = drag.width() - handler.width(); - 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'); - handler.parent().next().find("p").html("").hide(); - } - } - ; -} -)(jQuery); - -//判断是手机端还是电脑端 -function IsPC() { - var userAgentInfo = navigator.userAgent; - var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; - var flag = true; - for (var v = 0; v < Agents.length; v++) { - if (userAgentInfo.indexOf(Agents[v]) > 0) { - flag = false; - break; - } - } - return flag; -} - -//Dom:绑定事件的节点对象,ChangeDOM:操作的相关节点, -function LeaveTitle(Dom, ChangeDom) { - ChangeDom.html("").hide(); - ChangeDom.parent().css({ - opacity: 0, - left: 0, - top: 0 - }).hide(); -} - -$(function() { - //平台tip的样式优化js - var $desc = $("
" + "
" + "
" + "
" + "
" + "
").appendTo("body"); - //Dom:绑定事件的节点对象,ChangeDOM:操作的相关节点, - function LeaveTitle(Dom, ChangeDom) { - Dom.live("mouseleave", function() { - ChangeDom.html("").hide(); - $desc.css({ - opacity: 0, - left: 0, - top: 0 - }).hide(); - }) - } - LeaveTitle($("[data-tip-top]"), $(".data-tip-top")); - LeaveTitle($("[data-tip-down]"), $(".data-tip-down")); - LeaveTitle($("[data-tip-right]"), $(".data-tip-left")); - LeaveTitle($("[data-tip-left]"), $(".data-tip-right")); - $("[data-tip-top]").live("mouseenter", function() { - var $tool = $(this).attr("data-tip-top"); - if ($tool != "") { - $(".data-tip-top").show().html($tool); - $desc.show().css({ - left: $(this).offset().left - ($desc.width() - $(this).outerWidth()) / 2, - opacity: 1, - top: $(this).offset().top - 30 - }); - } - }); - $("[data-tip-down]").live("mouseenter", function() { - var $tool = $(this).attr("data-tip-down"); - if ($tool != "") { - $(".data-tip-down").show().html($tool); - $desc.show().css({ - left: $(this).offset().left - ($desc.width() - $(this).outerWidth()) / 2, - opacity: 1, - top: $(this).offset().top + $(this).height() + 6 - }); - } - }); - $("[data-tip-right]").live("mouseenter", function() { - var $tool = $(this).attr("data-tip-right"); - if ($tool != "") { - console.log($(this).offset().left + " " + $(this).width()); - $(".data-tip-left").show().html($tool); - $desc.show().css({ - left: $(this).offset().left + $(this).outerWidth() + 6, - opacity: 1, - top: $(this).offset().top - ($desc.height() - $(this).height()) / 2 - }); - } - }); - $("[data-tip-left]").live("mouseenter", function() { - var $tool = $(this).attr("data-tip-left"); - if ($tool != "") { - $(".data-tip-right").show().html($tool); - $desc.show().css({ - left: $(this).offset().left - $desc.width() - 6, - opacity: 1, - top: $(this).offset().top - ($desc.height() - $(this).height()) / 2 - }); - } - }); - unitDownOption(); -}); - -function unitDownOption() { - //下拉框 - $("[select-for]").append(""); - $("[select-for]").hover(function() { - $(this).find(".down-select").show(); - }, function() { - $(this).find(".down-select").hide(); - }) - $("[select-for] .down-select p").bind("click", function() { - //alert($(this).attr("data-shixun-value")); - if ($(this).attr("id") == "diy_script") { - return; - // 实训新建-选择自定义脚本diy - } - $(this).parents(".down-select").siblings("input[type=hidden]").attr("value", $(this).attr("data-shixun-value")); - - $(this).parents(".down-select").siblings("input[type=text]").val($(this).html().trim()); - $(this).parents(".down-select").hide(); - }) -} - -//初始化省份 -function showprovince(id) { - var arrary = ["北京", "上海", "广东", "江苏", "浙江", "重庆", "安徽", "福建", "甘肃", "广西", "贵州", "海南", "河北", "黑龙江", "河南", "湖北", "湖南", "江西", "吉林", "辽宁", "内蒙古", "宁夏", "青海", "山东", "山西", "陕西", "四川", "天津", "新疆", "西藏", "云南", "香港特别行政区", "澳门特别行政区", "台湾", "海外"]; - var html = "" - for (var i = 0; i < arrary.length; i++) { - var item = arrary[i]; - html += ""; - } - $("#" + id).html(html); -} - -//省市下拉框 -function showcity(province, cityField) { - switch (province) { - case "北京": - var cityOptions = new Array("东城","西城","朝阳","丰台","石景山","海淀","门头沟","房山","通州","顺义","昌平","大兴","平谷","怀柔","密云","延庆"); - break; - case "上海": - var cityOptions = new Array("崇明","黄浦","卢湾","徐汇","长宁","静安","普陀","闸北","虹口","杨浦","闵行","宝山","嘉定","浦东","金山","松江","青浦","南汇","奉贤"); - break; - case "广东": - var cityOptions = new Array("广州","深圳","珠海","东莞","中山","佛山","惠州","河源","潮州","江门","揭阳","茂名","梅州","清远","汕头","汕尾","韶关","顺德","阳江","云浮","湛江","肇庆"); - break; - case "江苏": - var cityOptions = new Array("南京","常熟","常州","海门","淮安","江都","江阴","昆山","连云港","南通","启东","沭阳","宿迁","苏州","太仓","泰州","同里","无锡","徐州","盐城","扬州","宜兴","仪征","张家港","镇江","周庄"); - break; - case "重庆": - var cityOptions = new Array("万州","涪陵","渝中","大渡口","江北","沙坪坝","九龙坡","南岸","北碚","万盛","双挢","渝北","巴南","黔江","长寿","綦江","潼南","铜梁","大足","荣昌","壁山","梁平","城口","丰都","垫江","武隆","忠县","开县","云阳","奉节","巫山","巫溪","石柱","秀山","酉阳","彭水","江津","合川","永川","南川"); - break; - case "安徽": - var cityOptions = new Array("合肥","安庆","蚌埠","亳州","巢湖","滁州","阜阳","贵池","淮北","淮化","淮南","黄山","九华山","六安","马鞍山","宿州","铜陵","屯溪","芜湖","宣城"); - break; - case "福建": - var cityOptions = new Array("福州","厦门","泉州","漳州","龙岩","南平","宁德","莆田","三明"); - break; - case "甘肃": - var cityOptions = new Array("兰州","白银","定西","敦煌","甘南","金昌","酒泉","临夏","平凉","天水","武都","武威","西峰","张掖"); - break; - case "广西": - var cityOptions = new Array("南宁","百色","北海","桂林","防城港","贵港","河池","贺州","柳州","钦州","梧州","玉林"); - break; - case "贵州": - var cityOptions = new Array("贵阳","安顺","毕节","都匀","凯里","六盘水","铜仁","兴义","玉屏","遵义"); - break; - case "海南": - var cityOptions = new Array("海口","儋县","陵水","琼海","三亚","通什","万宁"); - break; - case "河北": - var cityOptions = new Array("石家庄","保定","北戴河","沧州","承德","丰润","邯郸","衡水","廊坊","南戴河","秦皇岛","唐山","新城","邢台","张家口"); - break; - case "黑龙江": - var cityOptions = new Array("哈尔滨","北安","大庆","大兴安岭","鹤岗","黑河","佳木斯","鸡西","牡丹江","齐齐哈尔","七台河","双鸭山","绥化","伊春"); - break; - case "河南": - var cityOptions = new Array("郑州","安阳","鹤壁","潢川","焦作","济源","开封","漯河","洛阳","南阳","平顶山","濮阳","三门峡","商丘","新乡","信阳","许昌","周口","驻马店"); - break; - case "香港": - var cityOptions = new Array("香港","九龙","新界"); - break; - case "湖北": - var cityOptions = new Array("武汉","恩施","鄂州","黄冈","黄石","荆门","荆州","潜江","十堰","随州","武穴","仙桃","咸宁","襄阳","襄樊","孝感","宜昌"); - break; - case "湖南": - var cityOptions = new Array("长沙","常德","郴州","衡阳","怀化","吉首","娄底","邵阳","湘潭","益阳","岳阳","永州","张家界","株洲"); - break; - case "江西": - var cityOptions = new Array("南昌","抚州","赣州","吉安","景德镇","井冈山","九江","庐山","萍乡","上饶","新余","宜春","鹰潭"); - break; - case "吉林": - var cityOptions = new Array("长春","吉林","白城","白山","珲春","辽源","梅河","四平","松原","通化","延吉"); - break; - case "辽宁": - var cityOptions = new Array("沈阳","鞍山","本溪","朝阳","大连","丹东","抚顺","阜新","葫芦岛","锦州","辽阳","盘锦","铁岭","营口"); - break; - case "澳门": - var cityOptions = new Array("澳门"); - break; - case "内蒙古": - var cityOptions = new Array("呼和浩特","阿拉善盟","包头","赤峰","东胜","海拉尔","集宁","临河","通辽","乌海","乌兰浩特","锡林浩特"); - break; - case "宁夏": - var cityOptions = new Array("银川","固源","石嘴山","吴忠"); - break; - case "青海": - var cityOptions = new Array("西宁","德令哈","格尔木","共和","海东","海晏","玛沁","同仁","玉树"); - break; - case "山东": - var cityOptions = new Array("济南","滨州","兖州","德州","东营","菏泽","济宁","莱芜","聊城","临沂","蓬莱","青岛","曲阜","日照","泰安","潍坊","威海","烟台","枣庄","淄博"); - break; - case "山西": - var cityOptions = new Array("太原","长治","大同","候马","晋城","离石","临汾","宁武","朔州","忻州","阳泉","榆次","运城"); - break; - case "陕西": - var cityOptions = new Array("西安","安康","宝鸡","汉中","渭南","商州","绥德","铜川","咸阳","延安","榆林"); - break; - case "四川": - var cityOptions = new Array("成都","巴中","达川","德阳","都江堰","峨眉山","涪陵","广安","广元","九寨沟","康定","乐山","泸州","马尔康","绵阳","眉山","南充","内江","攀枝花","遂宁","汶川","西昌","雅安","宜宾","自贡","资阳"); - break; - case "台湾": - var cityOptions = new Array("台北","基隆","台南","台中","高雄","屏东","南投","云林","新竹","彰化","苗栗","嘉义","花莲","桃园","宜兰","台东","金门","马祖","澎湖"); - break; - case "天津": - var cityOptions = new Array("天津","和平","东丽","河东","西青","河西","津南","南开","北辰","河北","武清","红挢","塘沽","汉沽","大港","宁河","静海","宝坻","蓟县"); - break; - case "新疆": - var cityOptions = new Array("乌鲁木齐","阿克苏","阿勒泰","阿图什","博乐","昌吉","东山","哈密","和田","喀什","克拉玛依","库车","库尔勒","奎屯","石河子","塔城","吐鲁番","伊宁"); - break; - case "西藏": - var cityOptions = new Array("拉萨","阿里","昌都","林芝","那曲","日喀则","山南"); - break; - case "云南": - var cityOptions = new Array("昆明","大理","保山","楚雄","大理","东川","个旧","景洪","开远","临沧","丽江","六库","潞西","曲靖","思茅","文山","西双版纳","玉溪","中甸","昭通"); - break; - case "浙江": - var cityOptions = new Array("杭州","安吉","慈溪","定海","奉化","海盐","黄岩","湖州","嘉兴","金华","临安","临海","丽水","宁波","瓯海","平湖","千岛湖","衢州","江山","瑞安","绍兴","嵊州","台州","温岭","温州","余姚","舟山"); - break; - case "海外": - var cityOptions = new Array("美国","日本","英国","法国","德国","其他"); - break; - default: - var cityOptions = new Array("请选择所在城市"); - break; - } - - cityField.options.length = 0; - for (var i = 0; i < cityOptions.length; i++) { - cityField.options[i] = new Option(cityOptions[i],cityOptions[i]); - /* - if (cityField.options[i].value==city) - { - //alert("here put City ok!"); - document.oblogform["city"].selectedIndex = i; - }*/ - } -} - -/*弹框*/ -// 公共弹框样式 -// 建议左右栏的:Width:460,Height:190 -// 建议宽屏对应值:Width:760,Height:500 -function pop_box_new(value, Width, Height, close) { - - if ($("#popupAll").length > 0) { - $("#popupAll").remove(); - } - w = ($(window).width() - Width) / 2; - h = ($(window).height() - Height) / 2; - var html = "
"; - if (close) { - value = "" + value; - } - $(document.body).append(html); - $("#popupWrap").html(value); - $('#popupWrap').css({ - "top": h + "px", - "left": w + "px", - "padding": "0", - "border": "none", - "position": "fixed", - "z-index": "99999", - "background-color": "#fff", - "border-radius": "10px" - }); - if (close) { - $('#closeIcon').css({ - "top": "-26px", - "left": Width + "px", - "z-index": "100000" - }); - } - - $("#popupWrap").parent().parent().show(); - $('#popupAll').find("#closeIcon").click(function() { - $("#popupAll").hide(); - }); - $('#popupAll').find("a[class*='pop_close']").click(function() { - $("#popupAll").hide(); - }); - // w = ($(window).width() - Width)/2; - // h = ($(window).height() - Height)/2; - // $("#ajax-modal").html(value); - // showModal('ajax-modal', Width + 'px'); - // $('#ajax-modal').siblings().remove(); - // $('#ajax-modal').parent().css({"top": h+"px","left": w+"px","padding":"0","border":"none","position":"fixed"}); - // $('#ajax-modal').parent().removeClass("resourceUploadPopup popbox_polls popbox"); - // $('#ajax-modal').css({"padding":"0","overflow":"hidden"}); - // $('#ajax-modal').parent().attr("id","popupWrap"); - - //拖拽 - function Drag(id) { - this.div = document.getElementById(id); - if (this.div) { - this.div.style.cursor = "move"; - this.div.style.position = "fixed"; - } - this.disX = 0; - this.disY = 0; - var _this = this; - this.div.onmousedown = function(evt) { - _this.getDistance(evt); - document.onmousemove = function(evt) { - _this.setPosition(evt); - } - ; - _this.div.onmouseup = function() { - _this.clearEvent(); - } - } - } - Drag.prototype.getDistance = function(evt) { - var oEvent = evt || event; - this.disX = oEvent.clientX - this.div.offsetLeft; - this.disY = oEvent.clientY - this.div.offsetTop; - } - ; - Drag.prototype.setPosition = function(evt) { - var oEvent = evt || event; - var l = oEvent.clientX - this.disX; - var t = oEvent.clientY - this.disY; - if (l <= 0) { - l = 0; - } else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) { - l = document.documentElement.clientWidth - this.div.offsetWidth; - } - if (t <= 0) { - t = 0; - } else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) { - t = document.documentElement.clientHeight - this.div.offsetHeight; - } - this.div.style.left = l + "px"; - this.div.style.top = t + "px"; - } - ; - Drag.prototype.clearEvent = function() { - this.div.onmouseup = null; - document.onmousemove = null; - } - ; - - new Drag("popupWrap"); - - $("#popupAll input, #popupAll textarea, #popupAll select, #popupAll ul, #popupAll a,#shixun_search_form_div").mousedown(function(event) { - event.stopPropagation(); - new Drag("popupWrap"); - }); - -} - -function hideModal(el) { - if ($("#popupAll").length > 0) { - $("#popupAll").remove(); - } else { - var modal; - if (el) { - modal = $(el).parents('.ui-dialog-content'); - } else { - modal = $('#ajax-modal'); - } - modal.dialog("close"); - } -} - -//提示框:只有一个确定按钮,点击跳转 -// -function notice_box_redirect(url, str) { - var htmlvalue = '
提示
' + '

' + str + '

' + '确定
'; - pop_box_new(htmlvalue, 480, 160); -} -//按钮内容自定义(自定义按钮需要remote=true,且有取消按钮) -function notice_operation_box(url, str, btnstr) { - var htmlvalue = '
提示
' + '

' + str + '

' + '取消' + btnstr + '
'; - pop_box_new(htmlvalue, 480, 160); -} -//点击删除时的确认弹框: 不走destroy方法 -function delete_confirm_box(url, str) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 480, 160); -} -//点击删除时的确认弹框: 走destroy方法,remote为true -function delete_confirm_box_2(url, str) { - var htmlvalue = '
提示
' + '
' + str + '
取消' + '确定
'; - pop_box_new(htmlvalue, 480, 160); -} - -// 点击确定的时候ajax请求,两个按钮 点击确认跳转, 提示信息可以多行 -function op_confirm_box_remote(url, str) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 578, 205); -} - -//点击删除时的确认弹框: post,remote为true -function post_confirm_box(url, str) { - var htmlvalue = '

提示

' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 480, 160); -} - -//提示框:只有一个确定按钮,点击关闭弹框 -// -function notice_box(str) { - var htmlvalue = '
提示
' + '

' + str + '

' + '确定
'; - pop_box_new(htmlvalue, 480, 160); -} - -//点击删除时的确认弹框: 走destroy方法 -function delete_confirm_box_3(url, str) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 480, 160); -} - -//取消和确定,确定会调用自定义方法 -function op_confirm_tip(str, func) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 500, 205); -} - -//取消和确定,确定会调用自定义方法(带参数) -function op_confirm_tip_1(str, func) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 500, 205); -} - -function op_confirm_box_loading(url, str) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 578, 205); -} - -// 两个按钮 点击确认跳转, 提示信息有两行 -function s_op_confirm_box(url, str) { - var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; - pop_box_new(htmlvalue, 480, 205); -} - -function suofang() { - var html = '

可能会影响某些功能的正常使用

'; - sure_confirm_box("页面缩放比例不正确", 600, 310, html); -} - -//一个“知道了”按钮,title和宽度都作为参数 -function sure_confirm_box(title, width, height, str) { - var htmlvalue = '
' + title + '
' + '
' + str + '
' + '知道了
'; - pop_box_new(htmlvalue, width, height); -} - -function throttle(method, context, e) { - clearTimeout(method.tId); - method.tId = setTimeout(function() { - method.call(context, e); - }, 500); -} - -function apply_publish_shixun(url) { - if ($("#apply_publish_shixun").attr("data-option") == '1') { - $("#apply_publish_shixun").attr("data-option", 0); - $("#apply_publish_shixun").addClass("disabled-grey-bg"); - $.ajax({ - url: url, - type: 'get' - }); - } -} - -var autoTextarea = function(elem, extra, maxHeight) { - extra = extra || 0; - var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX'in window - , isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera') - , addEvent = function(type, callback) { - elem.addEventListener ? elem.addEventListener(type, callback, false) : elem.attachEvent('on' + type, callback); - } - , getStyle = elem.currentStyle ? function(name) { - var val = elem.currentStyle[name]; - - if (name === 'height' && val.search(/px/i) !== 1) { - var rect = elem.getBoundingClientRect(); - return rect.bottom - rect.top - parseFloat(getStyle('paddingTop')) - parseFloat(getStyle('paddingBottom')) + 'px'; - } - ; - return val; - } - : function(name) { - return getComputedStyle(elem, null)[name]; - } - , minHeight = parseFloat(getStyle('height')); - - elem.style.resize = 'none'; - - var change = function() { - var scrollTop, height, padding = 0, style = elem.style; - - if (elem._length === elem.value.length) - return; - elem._length = elem.value.length; - - if (!isFirefox && !isOpera) { - padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom')); - } - ;scrollTop = document.body.scrollTop || document.documentElement.scrollTop; - - elem.style.height = minHeight + 'px'; - if (elem.scrollHeight > minHeight) { - if (maxHeight && elem.scrollHeight > maxHeight) { - height = maxHeight - padding; - style.overflowY = 'auto'; - } else { - height = elem.scrollHeight - padding + 10; - style.overflowY = 'hidden'; - } - ;style.height = height + extra + 'px'; - scrollTop += parseInt(style.height) - elem.currHeight; - //document.body.scrollTop = scrollTop; - //document.documentElement.scrollTop = scrollTop; - elem.currHeight = parseInt(style.height); - } - ; - }; - - addEvent('propertychange', change); - addEvent('input', change); - addEvent('focus', change); - change(); -}; - -// 点击按钮复制功能 -function jsCopy() { - var e = document.getElementById("copy_rep_content"); - e.select(); - document.execCommand("Copy"); -} - -// 使用resize事件监听窗口的zoom,如果zoom变化了,弹框提示;初始化时也检查zoom是否是100%。 -function _initZoomCheck() { - if (!IsPC()) { - // 手机端不需要提示 - return; - } - var isNormalZoom = Math.round(window.devicePixelRatio * 100) === 100 - if (!isNormalZoom) { - suofang(); - } - - $(window).resize(function() { - var isNormalZoom = Math.round(window.devicePixelRatio * 100) === 100 - if (!isNormalZoom) { - suofang(); - } else { - $('.task-btn.task-btn-orange:visible').click() - } - }) - -} - -var win_resize = function() { - var _w = $(window).width() - 1200; - if (_w < 0) { - $('.newHeader>.educontent').width('auto') - } else { - $('.newHeader>.educontent').width('1200px') - } -}; - -function initWindowResize() { - if (location.pathname === '/login') { - // 登录页不需要 - return; - } - - $(function() { - setTimeout(function() { - win_resize(); - }, 1000) - }) - - $(window).resize(function() { - win_resize() - }) -} -initWindowResize(); - -// 登录刷新 https://stackoverflow.com/questions/28230845/communication-between-tabs-or-windows -if (window['BroadcastChannel']) { - var bc = new BroadcastChannel('ec_reload'); - bc.onmessage = function(ev) { - if (window['ec_reload_msg_send_window']) { - window['ec_reload_msg_send_window'] = false; - } else { - location.reload(); - } - } -} -function _sendReloadMsg() { - var bc = new BroadcastChannel('ec_reload'); - window['ec_reload_msg_send_window'] = true; - // 消息发出的窗口,不需要处理该消息 - bc.postMessage('ec_reload'); - /* send */ -} -// IE11 没有 startsWith -if (!String.prototype.startsWith) { - String.prototype.startsWith = function(searchString, position) { - position = position || 0; - return this.substr(position, searchString.length) === searchString; - } - ; - String.prototype.endsWith = function(search, this_len) { - if (this_len === undefined || this_len > this.length) { - this_len = this.length; - } - return this.substring(this_len - search.length, this_len) === search; - } - ; -} - -function clickNewsubscript() { - $(".newsubscript").hide(); - $(".newedbox").addClass("newminheight"); - $(".newedbox").removeClass("newedboxheight"); -} - -/** tpm实训开启按钮,不允许多次点击 START */ -//点击模拟实战或者开启实战等,按钮变灰内容变成“开启中” -var operationItem = null; -var operationButtonOldValue = null; -function opClickString(item) { - var value = $(item).html(); - $(item).css({ - 'background': 'gray', - 'border': '1px solid grey', - 'pointer-events': 'none' - }); - $(item).html('开启中'); - - operationButtonOldValue = value - operationItem = item - // setTimeout(function(){ $(item).css('background', '#4CACFF');$(item).html(value); }, 4000) -} -// -// var isOperationSending = false; -$(document).bind('ajaxStop', function(event, xhr, settings) { - if (settings && settings.url && (settings.url.match(/operation\?/))) { - if (operationItem) { - $(operationItem).css('background', '#4CACFF').css('pointer-events', 'inherit'); - $(operationItem).html(operationButtonOldValue); - } - } -}); -$(document).bind('ajaxError', function(event, xhr, settings) { - if (settings && settings.url && (settings.url.match(/operation\?/))) { - if (operationItem) { - $(operationItem).css('background', '#4CACFF').css('pointer-events', 'inherit'); - $(operationItem).html(operationButtonOldValue); - } - } -}); -/** tpm实训开启按钮,不允许多次点击 END */ +document.write(""); + +/*! + * JavaScript Cookie v2.2.0 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ +!function(e) { + var n; + if ("function" == typeof define && define.amd && (define(e), + n = !0), + "object" == typeof exports && (module.exports = e(), + n = !0), + !n) { + var t = window.Cookies + , o = window.Cookies = e(); + o.noConflict = function() { + return window.Cookies = t, + o + } + } +}(function() { + function e() { + for (var e = 0, n = {}; e < arguments.length; e++) { + var t = arguments[e]; + for (var o in t) + n[o] = t[o] + } + return n + } + function n(e) { + return e.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent) + } + return function t(o) { + function r() {} + function i(n, t, i) { + if ("undefined" != typeof document) { + "number" == typeof (i = e({ + path: "/" + }, r.defaults, i)).expires && (i.expires = new Date(1 * new Date + 864e5 * i.expires)), + i.expires = i.expires ? i.expires.toUTCString() : ""; + try { + var c = JSON.stringify(t); + /^[\{\[]/.test(c) && (t = c) + } catch (e) {} + t = o.write ? o.write(t, n) : encodeURIComponent(String(t)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent), + n = encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\(\)]/g, escape); + var f = ""; + for (var u in i) + i[u] && (f += "; " + u, + !0 !== i[u] && (f += "=" + i[u].split(";")[0])); + return document.cookie = n + "=" + t + f + } + } + function c(e, t) { + if ("undefined" != typeof document) { + for (var r = {}, i = document.cookie ? document.cookie.split("; ") : [], c = 0; c < i.length; c++) { + var f = i[c].split("=") + , u = f.slice(1).join("="); + t || '"' !== u.charAt(0) || (u = u.slice(1, -1)); + try { + var a = n(f[0]); + if (u = (o.read || o)(u, a) || n(u), + t) + try { + u = JSON.parse(u) + } catch (e) {} + if (r[a] = u, + e === a) + break + } catch (e) {} + } + return e ? r[e] : r + } + } + return r.set = i, + r.get = function(e) { + return c(e, !1) + } + , + r.getJSON = function(e) { + return c(e, !0) + } + , + r.remove = function(n, t) { + i(n, "", e(t, { + expires: -1 + })) + } + , + r.defaults = {}, + r.withConverter = t, + r + }(function() {}) +}); + +$(function() { + var result = location.search.match(/\?search=(\w*)&?/i) + if (result && result[1]) { + var searchText = result[1] + $('#search-input').val(searchText) + } + // 未报名用户登录时弹框 + // console.log(Cookies.get('enroll_status')); + // if(Cookies.get('enroll_status') == 0){ + // Cookies.remove('enroll_status'); + // var html='
'+ + // '
'+ + // ''+ + // ''+ + // '立即报名'+ + // '
'; + // $(".newContainer").append(html); + // } +}); + +function CloseBox() { + $(".CompetitionEnrollBox").remove(); +} + +//根据页面大小决定侧边栏的位置 +$(window).resize(function() { + rightSlider(); +}); +function rightSlider() { + var poi = parseInt((parseInt($(window).width()) - 1200) / 2) - 34; + // console.log(parseInt($(window).width())+" "+poi); + if (poi > 0) { + $(".-task-sidebar").css("right", poi); + } else { + $(".-task-sidebar").css("right", "0px"); + } + $(".-task-sidebar").show(); +} +function open_course(id, allowVisit) { + if (allowVisit) { + window.open("/courses/" + id); + } +} +function open_project(id, allowVisit) { + if (allowVisit) { + window.open("/projects/" + id); + } +} + +function conver_size(limit) { + var size = ""; + if (limit < 1024) { + //如果小于1KB转化成B + size = limit.toFixed(2) + "B"; + } else if (limit < 1024 * 1024) { + //如果小于1MB转化成KB + size = (limit / 1024).toFixed(2) + "KB"; + } else if (limit < 1024 * 1024 * 1024) { + //如果小于1GB转化成MB + size = (limit / (1024 * 1024)).toFixed(2) + "MB"; + } else { + //其他转化成GB + size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"; + } + + var sizestr = size + ""; + var len = sizestr.indexOf("\."); + var dec = sizestr.substr(len + 1, 2); + if (dec == "00") { + //当小数点后为00时 去掉小数部分 + return sizestr.substring(0, len) + sizestr.substr(len + 3, 2); + } + return sizestr; +} + +function _initSider() { + var $descSide = $("
").appendTo("body"); + $(".-task-sidebar>div").hover(function() { + //移入显示二维码 + if ($(this).hasClass("scan")) { + $(".scan_ewm").show().css({ + right: "75px", + opacity: 0 + }).stop().animate({ + right: "45px", + opacity: 1 + }) + return; + } + var $tool = $(this).attr("tooltips"); + $descSide.html($tool + "
"); + $descSide.data('_dom', this) + $descSide.show().css({ + left: $(this).offset().left - $descSide.width() - 30, + opacity: 0, + top: $(this).offset().top + }).stop().animate({ + left: $(this).offset().left - $descSide.width() - 5, + opacity: 1 + }, 400); + }, function() { + if ($(this).hasClass("scan")) { + $(".scan_ewm").stop().animate({ + right: "75px", + opacity: 0 + }, 200).hide(); + } + $descSide.stop().animate({ + left: $(this).offset().left - $descSide.width() - 30, + opacity: 0 + }, 200).hide(); + }); + rightSlider(); + + $(window).scroll(function() { + if ($descSide.height()) { + var hoverIcon = $descSide.data('_dom') + $descSide.css('top', $(hoverIcon).offset().top) + } + }) +} +$(function() { + loadHeader(); + _initSider(); + + $(window).scroll(function() { + if ($(".gotop").length > 0) { + if ($(document).scrollTop() > 0) { + $(".-task-sidebar .gotop").show(); + $(".gotop").click(function() { + $("html,body").scrollTop(0); + }); + } + if ($(document).scrollTop() == 0) { + $(".-task-sidebar .gotop").hide(); + } + } + }); + + // 翻页的GO + $(".page_GO").live("keydown", function(event) { + var code; + if (!event) { + event = window.event; + //针对ie浏览器 + code = event.keyCode; + } else { + code = event.keyCode; + } + if (code == 13) { + var prev = $(this).prev().find("a").html().trim(); + var page = $(this).val().trim(); + if (parseInt(prev) >= parseInt(page)) { + if (typeof ($(this).prev().children("a").attr("href")) == "undefined") { + var href = $(this).parent().find("li:first-child").children("a").attr("href"); + } else { + var href = $(this).prev().children("a").attr("href"); + } + var new_href = href.replace(/page=(\d*)/, 'page=' + page); + console.log(new_href); + $.get(new_href); + return false; + } + } + }); + + // 试用申请弹框 + $("#apply_trail_submit_btn").live('click', function() { + if ($("#apply_reason").val().trim() == "") { + $("#hint_message").show(); + } else { + $("#hint_message").hide(); + $("#apply_trail_form").submit(); + hideModal(); + } + }); + +}); + +// editor 存在了jquery对象上,应用不需要自己写md_rec_data方法了 +function md_rec_data(k, mdu, id) { + if (window.sessionStorage.getItem(k + mdu) !== null) { + editor = $("#e_tips_" + id).data('editor'); + editor.setValue(window.sessionStorage.getItem(k + mdu)); + + md_clear_data(k, mdu, id); + } +} +// markdown的自动保存 +function md_elocalStorage(editor, mdu, id) { + if (window.sessionStorage) { + var oc = window.sessionStorage.getItem('content' + mdu); + if (oc !== null) { + $("#e_tips_" + id).data('editor', editor); + var h = '您上次有已保存的数据,是否恢复 ? / 不恢复'; + $("#e_tips_" + id).html(h); + } + setInterval(function() { + d = new Date(); + var h = d.getHours(); + var m = d.getMinutes(); + var s = d.getSeconds(); + h = h < 10 ? '0' + h : h; + m = m < 10 ? '0' + m : m; + s = s < 10 ? '0' + s : s; + if (editor.getValue().trim() != "") { + md_add_data("content", mdu, editor.getValue()); + var id1 = "#e_tip_" + id; + var id2 = "#e_tips_" + id; + $(id1).html(" 数据已于 " + h + ':' + m + ':' + s + " 保存 "); + $(id2).html(""); + } + }, 10000); + + } else { + $("#e_tip_" + id).after('您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!'); + } +} +// 保存数据 +function md_add_data(k, mdu, d) { + window.sessionStorage.setItem(k + mdu, d); +} +// 恢复数据 +//function md_rec_data(k,mdu,id, editor){ +// if(window.sessionStorage.getItem(k+mdu) !== null){ +// editor.setValue(window.sessionStorage.getItem(k+mdu)); +// md_clear_data(k,mdu,id); +// } +//} +// 清空保存的数据 +function md_clear_data(k, mdu, id) { + window.sessionStorage.removeItem(k + mdu); + var id1 = "#e_tip_" + id; + var id2 = "#e_tips_" + id; + if (k == 'content') { + $(id2).html(""); + } else { + $(id1).html(""); + } +} + +// editorMD to create +/** + * + * @param id 渲染DOM的id + * @param width 宽度 + * @param high 高度 + * @param placeholder + * @param imageUrl 上传图片的url + * @returns {*} 返回一个editorMD实例 + */ +function create_editorMD(id, width, high, placeholder, imageUrl, readonly) { + var readonly = readonly == undefined ? false : readonly; + var editorName = editormd(id, { + width: width, + height: high, + syncScrolling: "single", + //你的lib目录的路径,我这边用JSP做测试的 + path: "/editormd/lib/", + tex: true, + tocm: true, + emoji: true, + taskList: true, + codeFold: true, + searchReplace: true, + htmlDecode: "style,script,iframe", + sequenceDiagram: true, + autoFocus: false, + readonly: readonly, + toolbarIcons: function() { + // Or return editormd.toolbarModes[name]; // full, simple, mini + // Using "||" set icons align right. + return ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "|", "testIcon", "testIcon1", '|', "image", "table", '|', "watch", "clear"] + }, + toolbarCustomIcons: { + testIcon: "
", + testIcon1: "
" + }, + //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。 + saveHTMLToTextarea: true, + // 用于增加自定义工具栏的功能,可以直接插入HTML标签,不使用默认的元素创建图标 + dialogMaskOpacity: 0.6, + placeholder: placeholder, + imageUpload: true, + imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"], + imageUploadURL: imageUrl, + //url + onload: function(cMirror) { + $("#" + id + " [type=\"latex\"]").bind("click", function() { + editorName.cm.replaceSelection("```latex"); + editorName.cm.replaceSelection("\n"); + editorName.cm.replaceSelection("\n"); + editorName.cm.replaceSelection("```"); + var __Cursor = editorName.cm.getDoc().getCursor(); + editorName.cm.setCursor(__Cursor.line - 1, 0); + }); + + $("#" + id + " [type=\"inline\"]").bind("click", function() { + editorName.cm.replaceSelection("$$$$"); + var __Cursor = editorName.cm.getDoc().getCursor(); + editorName.cm.setCursor(__Cursor.line, __Cursor.ch - 2); + editorName.cm.focus(); + }); + $("[type=\"inline\"]").attr("title", "行内公式"); + $("[type=\"latex\"]").attr("title", "多行公式"); + setTimeout(function() { + editorName.resize(); + editorName.cm.refresh(); + window.new_md = editorName; + }, 300); + } + }); + return editorName; +} + +// editormd to html +/** + * + * @param id 渲染的id + * @param callback onload回調 暫時未用 + */ +function editormd_to_html(id, callback) { + editormd.loadKaTeX(function() { + editormd.markdownToHTML(id, { + htmlDecode: "style,script,iframe", + // you can filter tags decode + onload: function() { + callback && callback() + }, + taskList: true, + tex: true, + // 默认不解析 + flowChart: true, + // 默认不解析 + sequenceDiagram: true// 默认不解析 + }); + }); +} + +function loadHeader() { + //头部导航条的----------显示搜索框 + $("#search-open").on("click", function(e) { + $(this).hide(); + // $("#header-nav").animate({opacity:"0"},1000); + $(".posi-search").show() + // .animate({opacity:"1"},1000); + $("#header-nav").css("z-index", "2"); + $(".posi-search").css("z-index", "3"); + // $(".search-input").val(""); // 不清空 + $(".search-input").focus(); + $(".search-all .search-content").hide(); + e.stopPropagation(); + //阻止冒泡 + }); + $(".search-input").on("click", function(e) { + e.stopPropagation(); + //阻止冒泡 + }); + //搜索框输入内容 + $(".search-input").on("input", function(e) { + if ($(".search-input").val() == "") { + $(".search-all .search-content").hide(); + } else { + $(".search-all .search-content").show(); + } + e.stopPropagation(); + //阻止冒泡 + }); + //搜索 + $("#header_keyword_search").on("click", header_search); + $("input[name='search_keyword']").on("keydown", function(event) { + var code; + if (!event) { + event = window.event; + //针对ie浏览器 + code = event.keyCode; + } else { + code = event.keyCode; + } + if (code == 13) { + header_search(); + return false; + } + }); + $(".search-clear").click(function(e) { + e.stopPropagation(); + }); + //切换搜索条件 + $("#searchkey li").click(function(e) { + var key = $($(this).children("a")[0]).html(); + switch (key) { + case '实训': + $("#search_type").val('1'); + break; + case '课堂': + $("#search_type").val('2'); + break; + case '用户': + $("#search_type").val('3'); + break; + } + $("#searchkey").siblings(".searchkey").html(key); + // $("#searchkey").hide(); + e.stopPropagation(); + //阻止冒泡 + }); + //切换选择导航条 + $("#header-nav li").click(function() { + $("#header-nav li").removeClass("active"); + $(this).addClass("active"); + }); + //点击页面其它(与搜索框无关的地方)都会将搜索框隐藏,所以与搜索框有关的地方需要阻止冒泡 + $("body").on("click", function() { + closeSearch(); + }); + + $(".search_history").on("click", function() { + $("input[name='search_keyword']").val($(this).html()); + header_search(); + }); +} + +function header_search() { + var keyword = $("input[name='search_keyword']").val(); + // 搜索关键字 + var index = $("#search_type").val(); + // 搜索课程/项目 + keyword = encodeURIComponent(keyword); + // $.get('/users/search_shixuns_or_course', + // { search: keyword, + // index: index}); + window.location.href = "/users/search_shixuns_or_courses" + "?search=" + keyword + "&index=" + index; + //e.stopPropagation();//阻止冒泡 +} + +//头部导航条的隐藏 +function closeSearch() { + $('#posi-search').hide(); + $("#search-open").show(); + // $(".posi-search").animate({opacity:"0"},800); + $("#header-nav").animate({ + opacity: "1" + }, 1000); + $(".posi-search").css("z-index", "2"); + $("#header-nav").css("z-index", "3"); +} +(function($) { + $.fn.drag = 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 (_x < maxWidth) { + //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置 + handler.css({ + 'left': 0 + }); + drag_bg.css({ + 'width': 0 + }); + } + }); + + //清空事件 + function dragOk() { + var kuaiwidth = drag.width() - handler.width(); + 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'); + handler.parent().next().find("p").html("").hide(); + } + } + ; +} +)(jQuery); + +//判断是手机端还是电脑端 +function IsPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +//Dom:绑定事件的节点对象,ChangeDOM:操作的相关节点, +function LeaveTitle(Dom, ChangeDom) { + ChangeDom.html("").hide(); + ChangeDom.parent().css({ + opacity: 0, + left: 0, + top: 0 + }).hide(); +} + +$(function() { + //平台tip的样式优化js + var $desc = $("
" + "
" + "
" + "
" + "
" + "
").appendTo("body"); + //Dom:绑定事件的节点对象,ChangeDOM:操作的相关节点, + function LeaveTitle(Dom, ChangeDom) { + Dom.live("mouseleave", function() { + ChangeDom.html("").hide(); + $desc.css({ + opacity: 0, + left: 0, + top: 0 + }).hide(); + }) + } + LeaveTitle($("[data-tip-top]"), $(".data-tip-top")); + LeaveTitle($("[data-tip-down]"), $(".data-tip-down")); + LeaveTitle($("[data-tip-right]"), $(".data-tip-left")); + LeaveTitle($("[data-tip-left]"), $(".data-tip-right")); + $("[data-tip-top]").live("mouseenter", function() { + var $tool = $(this).attr("data-tip-top"); + if ($tool != "") { + $(".data-tip-top").show().html($tool); + $desc.show().css({ + left: $(this).offset().left - ($desc.width() - $(this).outerWidth()) / 2, + opacity: 1, + top: $(this).offset().top - 30 + }); + } + }); + $("[data-tip-down]").live("mouseenter", function() { + var $tool = $(this).attr("data-tip-down"); + if ($tool != "") { + $(".data-tip-down").show().html($tool); + $desc.show().css({ + left: $(this).offset().left - ($desc.width() - $(this).outerWidth()) / 2, + opacity: 1, + top: $(this).offset().top + $(this).height() + 6 + }); + } + }); + $("[data-tip-right]").live("mouseenter", function() { + var $tool = $(this).attr("data-tip-right"); + if ($tool != "") { + console.log($(this).offset().left + " " + $(this).width()); + $(".data-tip-left").show().html($tool); + $desc.show().css({ + left: $(this).offset().left + $(this).outerWidth() + 6, + opacity: 1, + top: $(this).offset().top - ($desc.height() - $(this).height()) / 2 + }); + } + }); + $("[data-tip-left]").live("mouseenter", function() { + var $tool = $(this).attr("data-tip-left"); + if ($tool != "") { + $(".data-tip-right").show().html($tool); + $desc.show().css({ + left: $(this).offset().left - $desc.width() - 6, + opacity: 1, + top: $(this).offset().top - ($desc.height() - $(this).height()) / 2 + }); + } + }); + unitDownOption(); +}); + +function unitDownOption() { + //下拉框 + $("[select-for]").append(""); + $("[select-for]").hover(function() { + $(this).find(".down-select").show(); + }, function() { + $(this).find(".down-select").hide(); + }) + $("[select-for] .down-select p").bind("click", function() { + //alert($(this).attr("data-shixun-value")); + if ($(this).attr("id") == "diy_script") { + return; + // 实训新建-选择自定义脚本diy + } + $(this).parents(".down-select").siblings("input[type=hidden]").attr("value", $(this).attr("data-shixun-value")); + + $(this).parents(".down-select").siblings("input[type=text]").val($(this).html().trim()); + $(this).parents(".down-select").hide(); + }) +} + +//初始化省份 +function showprovince(id) { + var arrary = ["北京", "上海", "广东", "江苏", "浙江", "重庆", "安徽", "福建", "甘肃", "广西", "贵州", "海南", "河北", "黑龙江", "河南", "湖北", "湖南", "江西", "吉林", "辽宁", "内蒙古", "宁夏", "青海", "山东", "山西", "陕西", "四川", "天津", "新疆", "西藏", "云南", "香港特别行政区", "澳门特别行政区", "台湾", "海外"]; + var html = "" + for (var i = 0; i < arrary.length; i++) { + var item = arrary[i]; + html += ""; + } + $("#" + id).html(html); +} + +//省市下拉框 +function showcity(province, cityField) { + switch (province) { + case "北京": + var cityOptions = new Array("东城","西城","朝阳","丰台","石景山","海淀","门头沟","房山","通州","顺义","昌平","大兴","平谷","怀柔","密云","延庆"); + break; + case "上海": + var cityOptions = new Array("崇明","黄浦","卢湾","徐汇","长宁","静安","普陀","闸北","虹口","杨浦","闵行","宝山","嘉定","浦东","金山","松江","青浦","南汇","奉贤"); + break; + case "广东": + var cityOptions = new Array("广州","深圳","珠海","东莞","中山","佛山","惠州","河源","潮州","江门","揭阳","茂名","梅州","清远","汕头","汕尾","韶关","顺德","阳江","云浮","湛江","肇庆"); + break; + case "江苏": + var cityOptions = new Array("南京","常熟","常州","海门","淮安","江都","江阴","昆山","连云港","南通","启东","沭阳","宿迁","苏州","太仓","泰州","同里","无锡","徐州","盐城","扬州","宜兴","仪征","张家港","镇江","周庄"); + break; + case "重庆": + var cityOptions = new Array("万州","涪陵","渝中","大渡口","江北","沙坪坝","九龙坡","南岸","北碚","万盛","双挢","渝北","巴南","黔江","长寿","綦江","潼南","铜梁","大足","荣昌","壁山","梁平","城口","丰都","垫江","武隆","忠县","开县","云阳","奉节","巫山","巫溪","石柱","秀山","酉阳","彭水","江津","合川","永川","南川"); + break; + case "安徽": + var cityOptions = new Array("合肥","安庆","蚌埠","亳州","巢湖","滁州","阜阳","贵池","淮北","淮化","淮南","黄山","九华山","六安","马鞍山","宿州","铜陵","屯溪","芜湖","宣城"); + break; + case "福建": + var cityOptions = new Array("福州","厦门","泉州","漳州","龙岩","南平","宁德","莆田","三明"); + break; + case "甘肃": + var cityOptions = new Array("兰州","白银","定西","敦煌","甘南","金昌","酒泉","临夏","平凉","天水","武都","武威","西峰","张掖"); + break; + case "广西": + var cityOptions = new Array("南宁","百色","北海","桂林","防城港","贵港","河池","贺州","柳州","钦州","梧州","玉林"); + break; + case "贵州": + var cityOptions = new Array("贵阳","安顺","毕节","都匀","凯里","六盘水","铜仁","兴义","玉屏","遵义"); + break; + case "海南": + var cityOptions = new Array("海口","儋县","陵水","琼海","三亚","通什","万宁"); + break; + case "河北": + var cityOptions = new Array("石家庄","保定","北戴河","沧州","承德","丰润","邯郸","衡水","廊坊","南戴河","秦皇岛","唐山","新城","邢台","张家口"); + break; + case "黑龙江": + var cityOptions = new Array("哈尔滨","北安","大庆","大兴安岭","鹤岗","黑河","佳木斯","鸡西","牡丹江","齐齐哈尔","七台河","双鸭山","绥化","伊春"); + break; + case "河南": + var cityOptions = new Array("郑州","安阳","鹤壁","潢川","焦作","济源","开封","漯河","洛阳","南阳","平顶山","濮阳","三门峡","商丘","新乡","信阳","许昌","周口","驻马店"); + break; + case "香港": + var cityOptions = new Array("香港","九龙","新界"); + break; + case "湖北": + var cityOptions = new Array("武汉","恩施","鄂州","黄冈","黄石","荆门","荆州","潜江","十堰","随州","武穴","仙桃","咸宁","襄阳","襄樊","孝感","宜昌"); + break; + case "湖南": + var cityOptions = new Array("长沙","常德","郴州","衡阳","怀化","吉首","娄底","邵阳","湘潭","益阳","岳阳","永州","张家界","株洲"); + break; + case "江西": + var cityOptions = new Array("南昌","抚州","赣州","吉安","景德镇","井冈山","九江","庐山","萍乡","上饶","新余","宜春","鹰潭"); + break; + case "吉林": + var cityOptions = new Array("长春","吉林","白城","白山","珲春","辽源","梅河","四平","松原","通化","延吉"); + break; + case "辽宁": + var cityOptions = new Array("沈阳","鞍山","本溪","朝阳","大连","丹东","抚顺","阜新","葫芦岛","锦州","辽阳","盘锦","铁岭","营口"); + break; + case "澳门": + var cityOptions = new Array("澳门"); + break; + case "内蒙古": + var cityOptions = new Array("呼和浩特","阿拉善盟","包头","赤峰","东胜","海拉尔","集宁","临河","通辽","乌海","乌兰浩特","锡林浩特"); + break; + case "宁夏": + var cityOptions = new Array("银川","固源","石嘴山","吴忠"); + break; + case "青海": + var cityOptions = new Array("西宁","德令哈","格尔木","共和","海东","海晏","玛沁","同仁","玉树"); + break; + case "山东": + var cityOptions = new Array("济南","滨州","兖州","德州","东营","菏泽","济宁","莱芜","聊城","临沂","蓬莱","青岛","曲阜","日照","泰安","潍坊","威海","烟台","枣庄","淄博"); + break; + case "山西": + var cityOptions = new Array("太原","长治","大同","候马","晋城","离石","临汾","宁武","朔州","忻州","阳泉","榆次","运城"); + break; + case "陕西": + var cityOptions = new Array("西安","安康","宝鸡","汉中","渭南","商州","绥德","铜川","咸阳","延安","榆林"); + break; + case "四川": + var cityOptions = new Array("成都","巴中","达川","德阳","都江堰","峨眉山","涪陵","广安","广元","九寨沟","康定","乐山","泸州","马尔康","绵阳","眉山","南充","内江","攀枝花","遂宁","汶川","西昌","雅安","宜宾","自贡","资阳"); + break; + case "台湾": + var cityOptions = new Array("台北","基隆","台南","台中","高雄","屏东","南投","云林","新竹","彰化","苗栗","嘉义","花莲","桃园","宜兰","台东","金门","马祖","澎湖"); + break; + case "天津": + var cityOptions = new Array("天津","和平","东丽","河东","西青","河西","津南","南开","北辰","河北","武清","红挢","塘沽","汉沽","大港","宁河","静海","宝坻","蓟县"); + break; + case "新疆": + var cityOptions = new Array("乌鲁木齐","阿克苏","阿勒泰","阿图什","博乐","昌吉","东山","哈密","和田","喀什","克拉玛依","库车","库尔勒","奎屯","石河子","塔城","吐鲁番","伊宁"); + break; + case "西藏": + var cityOptions = new Array("拉萨","阿里","昌都","林芝","那曲","日喀则","山南"); + break; + case "云南": + var cityOptions = new Array("昆明","大理","保山","楚雄","大理","东川","个旧","景洪","开远","临沧","丽江","六库","潞西","曲靖","思茅","文山","西双版纳","玉溪","中甸","昭通"); + break; + case "浙江": + var cityOptions = new Array("杭州","安吉","慈溪","定海","奉化","海盐","黄岩","湖州","嘉兴","金华","临安","临海","丽水","宁波","瓯海","平湖","千岛湖","衢州","江山","瑞安","绍兴","嵊州","台州","温岭","温州","余姚","舟山"); + break; + case "海外": + var cityOptions = new Array("美国","日本","英国","法国","德国","其他"); + break; + default: + var cityOptions = new Array("请选择所在城市"); + break; + } + + cityField.options.length = 0; + for (var i = 0; i < cityOptions.length; i++) { + cityField.options[i] = new Option(cityOptions[i],cityOptions[i]); + /* + if (cityField.options[i].value==city) + { + //alert("here put City ok!"); + document.oblogform["city"].selectedIndex = i; + }*/ + } +} + +/*弹框*/ +// 公共弹框样式 +// 建议左右栏的:Width:460,Height:190 +// 建议宽屏对应值:Width:760,Height:500 +function pop_box_new(value, Width, Height, close) { + + if ($("#popupAll").length > 0) { + $("#popupAll").remove(); + } + w = ($(window).width() - Width) / 2; + h = ($(window).height() - Height) / 2; + var html = "
"; + if (close) { + value = "" + value; + } + $(document.body).append(html); + $("#popupWrap").html(value); + $('#popupWrap').css({ + "top": h + "px", + "left": w + "px", + "padding": "0", + "border": "none", + "position": "fixed", + "z-index": "99999", + "background-color": "#fff", + "border-radius": "10px" + }); + if (close) { + $('#closeIcon').css({ + "top": "-26px", + "left": Width + "px", + "z-index": "100000" + }); + } + + $("#popupWrap").parent().parent().show(); + $('#popupAll').find("#closeIcon").click(function() { + $("#popupAll").hide(); + }); + $('#popupAll').find("a[class*='pop_close']").click(function() { + $("#popupAll").hide(); + }); + // w = ($(window).width() - Width)/2; + // h = ($(window).height() - Height)/2; + // $("#ajax-modal").html(value); + // showModal('ajax-modal', Width + 'px'); + // $('#ajax-modal').siblings().remove(); + // $('#ajax-modal').parent().css({"top": h+"px","left": w+"px","padding":"0","border":"none","position":"fixed"}); + // $('#ajax-modal').parent().removeClass("resourceUploadPopup popbox_polls popbox"); + // $('#ajax-modal').css({"padding":"0","overflow":"hidden"}); + // $('#ajax-modal').parent().attr("id","popupWrap"); + + //拖拽 + function Drag(id) { + this.div = document.getElementById(id); + if (this.div) { + this.div.style.cursor = "move"; + this.div.style.position = "fixed"; + } + this.disX = 0; + this.disY = 0; + var _this = this; + this.div.onmousedown = function(evt) { + _this.getDistance(evt); + document.onmousemove = function(evt) { + _this.setPosition(evt); + } + ; + _this.div.onmouseup = function() { + _this.clearEvent(); + } + } + } + Drag.prototype.getDistance = function(evt) { + var oEvent = evt || event; + this.disX = oEvent.clientX - this.div.offsetLeft; + this.disY = oEvent.clientY - this.div.offsetTop; + } + ; + Drag.prototype.setPosition = function(evt) { + var oEvent = evt || event; + var l = oEvent.clientX - this.disX; + var t = oEvent.clientY - this.disY; + if (l <= 0) { + l = 0; + } else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) { + l = document.documentElement.clientWidth - this.div.offsetWidth; + } + if (t <= 0) { + t = 0; + } else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) { + t = document.documentElement.clientHeight - this.div.offsetHeight; + } + this.div.style.left = l + "px"; + this.div.style.top = t + "px"; + } + ; + Drag.prototype.clearEvent = function() { + this.div.onmouseup = null; + document.onmousemove = null; + } + ; + + new Drag("popupWrap"); + + $("#popupAll input, #popupAll textarea, #popupAll select, #popupAll ul, #popupAll a,#shixun_search_form_div").mousedown(function(event) { + event.stopPropagation(); + new Drag("popupWrap"); + }); + +} + +function hideModal(el) { + if ($("#popupAll").length > 0) { + $("#popupAll").remove(); + } else { + var modal; + if (el) { + modal = $(el).parents('.ui-dialog-content'); + } else { + modal = $('#ajax-modal'); + } + modal.dialog("close"); + } +} + +//提示框:只有一个确定按钮,点击跳转 +// +function notice_box_redirect(url, str) { + var htmlvalue = '
提示
' + '

' + str + '

' + '确定
'; + pop_box_new(htmlvalue, 480, 160); +} +//按钮内容自定义(自定义按钮需要remote=true,且有取消按钮) +function notice_operation_box(url, str, btnstr) { + var htmlvalue = '
提示
' + '

' + str + '

' + '取消' + btnstr + '
'; + pop_box_new(htmlvalue, 480, 160); +} +//点击删除时的确认弹框: 不走destroy方法 +function delete_confirm_box(url, str) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 480, 160); +} +//点击删除时的确认弹框: 走destroy方法,remote为true +function delete_confirm_box_2(url, str) { + var htmlvalue = '
提示
' + '
' + str + '
取消' + '确定
'; + pop_box_new(htmlvalue, 480, 160); +} + +// 点击确定的时候ajax请求,两个按钮 点击确认跳转, 提示信息可以多行 +function op_confirm_box_remote(url, str) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 578, 205); +} + +//点击删除时的确认弹框: post,remote为true +function post_confirm_box(url, str) { + var htmlvalue = '

提示

' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 480, 160); +} + +//提示框:只有一个确定按钮,点击关闭弹框 +// +function notice_box(str) { + var htmlvalue = '
提示
' + '

' + str + '

' + '确定
'; + pop_box_new(htmlvalue, 480, 160); +} + +//点击删除时的确认弹框: 走destroy方法 +function delete_confirm_box_3(url, str) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 480, 160); +} + +//取消和确定,确定会调用自定义方法 +function op_confirm_tip(str, func) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 500, 205); +} + +//取消和确定,确定会调用自定义方法(带参数) +function op_confirm_tip_1(str, func) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 500, 205); +} + +function op_confirm_box_loading(url, str) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 578, 205); +} + +// 两个按钮 点击确认跳转, 提示信息有两行 +function s_op_confirm_box(url, str) { + var htmlvalue = '
提示
' + '

' + str + '

取消' + '确定
'; + pop_box_new(htmlvalue, 480, 205); +} + +function suofang() { + var html = '

可能会影响某些功能的正常使用

'; + sure_confirm_box("页面缩放比例不正确", 600, 310, html); +} + +//一个“知道了”按钮,title和宽度都作为参数 +function sure_confirm_box(title, width, height, str) { + var htmlvalue = '
' + title + '
' + '
' + str + '
' + '知道了
'; + pop_box_new(htmlvalue, width, height); +} + +function throttle(method, context, e) { + clearTimeout(method.tId); + method.tId = setTimeout(function() { + method.call(context, e); + }, 500); +} + +function apply_publish_shixun(url) { + if ($("#apply_publish_shixun").attr("data-option") == '1') { + $("#apply_publish_shixun").attr("data-option", 0); + $("#apply_publish_shixun").addClass("disabled-grey-bg"); + $.ajax({ + url: url, + type: 'get' + }); + } +} + +var autoTextarea = function(elem, extra, maxHeight) { + extra = extra || 0; + var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX'in window + , isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera') + , addEvent = function(type, callback) { + elem.addEventListener ? elem.addEventListener(type, callback, false) : elem.attachEvent('on' + type, callback); + } + , getStyle = elem.currentStyle ? function(name) { + var val = elem.currentStyle[name]; + + if (name === 'height' && val.search(/px/i) !== 1) { + var rect = elem.getBoundingClientRect(); + return rect.bottom - rect.top - parseFloat(getStyle('paddingTop')) - parseFloat(getStyle('paddingBottom')) + 'px'; + } + ; + return val; + } + : function(name) { + return getComputedStyle(elem, null)[name]; + } + , minHeight = parseFloat(getStyle('height')); + + elem.style.resize = 'none'; + + var change = function() { + var scrollTop, height, padding = 0, style = elem.style; + + if (elem._length === elem.value.length) + return; + elem._length = elem.value.length; + + if (!isFirefox && !isOpera) { + padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom')); + } + ;scrollTop = document.body.scrollTop || document.documentElement.scrollTop; + + elem.style.height = minHeight + 'px'; + if (elem.scrollHeight > minHeight) { + if (maxHeight && elem.scrollHeight > maxHeight) { + height = maxHeight - padding; + style.overflowY = 'auto'; + } else { + height = elem.scrollHeight - padding + 10; + style.overflowY = 'hidden'; + } + ;style.height = height + extra + 'px'; + scrollTop += parseInt(style.height) - elem.currHeight; + //document.body.scrollTop = scrollTop; + //document.documentElement.scrollTop = scrollTop; + elem.currHeight = parseInt(style.height); + } + ; + }; + + addEvent('propertychange', change); + addEvent('input', change); + addEvent('focus', change); + change(); +}; + +// 点击按钮复制功能 +function jsCopy() { + var e = document.getElementById("copy_rep_content"); + e.select(); + document.execCommand("Copy"); +} + +// 使用resize事件监听窗口的zoom,如果zoom变化了,弹框提示;初始化时也检查zoom是否是100%。 +function _initZoomCheck() { + if (!IsPC()) { + // 手机端不需要提示 + return; + } + var isNormalZoom = Math.round(window.devicePixelRatio * 100) === 100 + if (!isNormalZoom) { + suofang(); + } + + $(window).resize(function() { + var isNormalZoom = Math.round(window.devicePixelRatio * 100) === 100 + if (!isNormalZoom) { + suofang(); + } else { + $('.task-btn.task-btn-orange:visible').click() + } + }) + +} + +var win_resize = function() { + var _w = $(window).width() - 1200; + if (_w < 0) { + $('.newHeader>.educontent').width('auto') + } else { + $('.newHeader>.educontent').width('1200px') + } +}; + +function initWindowResize() { + if (location.pathname === '/login') { + // 登录页不需要 + return; + } + + $(function() { + setTimeout(function() { + win_resize(); + }, 1000) + }) + + $(window).resize(function() { + win_resize() + }) +} +initWindowResize(); + +// 登录刷新 https://stackoverflow.com/questions/28230845/communication-between-tabs-or-windows +if (window['BroadcastChannel']) { + var bc = new BroadcastChannel('ec_reload'); + bc.onmessage = function(ev) { + if (window['ec_reload_msg_send_window']) { + window['ec_reload_msg_send_window'] = false; + } else { + location.reload(); + } + } +} +function _sendReloadMsg() { + var bc = new BroadcastChannel('ec_reload'); + window['ec_reload_msg_send_window'] = true; + // 消息发出的窗口,不需要处理该消息 + bc.postMessage('ec_reload'); + /* send */ +} +// IE11 没有 startsWith +if (!String.prototype.startsWith) { + String.prototype.startsWith = function(searchString, position) { + position = position || 0; + return this.substr(position, searchString.length) === searchString; + } + ; + String.prototype.endsWith = function(search, this_len) { + if (this_len === undefined || this_len > this.length) { + this_len = this.length; + } + return this.substring(this_len - search.length, this_len) === search; + } + ; +} + +function clickNewsubscript() { + $(".newsubscript").hide(); + $(".newedbox").addClass("newminheight"); + $(".newedbox").removeClass("newedboxheight"); +} + +/** tpm实训开启按钮,不允许多次点击 START */ +//点击模拟实战或者开启实战等,按钮变灰内容变成“开启中” +var operationItem = null; +var operationButtonOldValue = null; +function opClickString(item) { + var value = $(item).html(); + $(item).css({ + 'background': 'gray', + 'border': '1px solid grey', + 'pointer-events': 'none' + }); + $(item).html('开启中'); + + operationButtonOldValue = value + operationItem = item + // setTimeout(function(){ $(item).css('background', '#4CACFF');$(item).html(value); }, 4000) +} +// +// var isOperationSending = false; +$(document).bind('ajaxStop', function(event, xhr, settings) { + if (settings && settings.url && (settings.url.match(/operation\?/))) { + if (operationItem) { + $(operationItem).css('background', '#4CACFF').css('pointer-events', 'inherit'); + $(operationItem).html(operationButtonOldValue); + } + } +}); +$(document).bind('ajaxError', function(event, xhr, settings) { + if (settings && settings.url && (settings.url.match(/operation\?/))) { + if (operationItem) { + $(operationItem).css('background', '#4CACFF').css('pointer-events', 'inherit'); + $(operationItem).html(operationButtonOldValue); + } + } +}); +/** tpm实训开启按钮,不允许多次点击 END */ diff --git a/public/react/config/webpack.config.dev.js b/public/react/config/webpack.config.dev.js index dfd54f38b..ceddbd81b 100644 --- a/public/react/config/webpack.config.dev.js +++ b/public/react/config/webpack.config.dev.js @@ -114,21 +114,21 @@ module.exports = { // First, run the linter. // It's important to do this before Babel processes the JS. // 上线然后要注释回来 - { - test: /\.(js|jsx|mjs)$/, - enforce: 'pre', - use: [ - { - options: { - formatter: eslintFormatter, - eslintPath: require.resolve('eslint'), - - }, - loader: require.resolve('eslint-loader'), - }, - ], - include: paths.appSrc, - }, + // { + // test: /\.(js|jsx|mjs)$/, + // enforce: 'pre', + // use: [ + // { + // options: { + // formatter: eslintFormatter, + // eslintPath: require.resolve('eslint'), + // + // }, + // loader: require.resolve('eslint-loader'), + // }, + // ], + // include: paths.appSrc, + // }, { // "oneOf" will traverse all following loaders until one will // match the requirements. When no loader matches it will fall diff --git a/public/react/src/modules/home/shixunsHome.js b/public/react/src/modules/home/shixunsHome.js index 0c204a823..07920e2d9 100644 --- a/public/react/src/modules/home/shixunsHome.js +++ b/public/react/src/modules/home/shixunsHome.js @@ -198,13 +198,13 @@ class ShixunsHome extends Component { 更多 -
+
{homedatalist===undefined?"":homedatalist.subjects.map((item,key)=>{ if(key<8) return( -
+
{item.name} @@ -272,10 +272,10 @@ class ShixunsHome extends Component {
更多 -
+
{homedatalist===undefined?"":homedatalist.shixuns.map((item,key)=>{ return( -
+
{item.tag_name} diff --git a/public/react/src/modules/tpm/NewFooter.js b/public/react/src/modules/tpm/NewFooter.js index 9be48597b..9c984b8cd 100644 --- a/public/react/src/modules/tpm/NewFooter.js +++ b/public/react/src/modules/tpm/NewFooter.js @@ -1,49 +1,49 @@ -import React, { Component } from 'react'; -import { Redirect } from 'react-router'; -import { getImageUrl, toPath } from 'educoder' -import PropTypes from 'prop-types'; - -class NewFooter extends Component { - constructor(props) { - super(props) - - } - - componentWillReceiveProps(newProps, newContext) { - - } - - - render() { - return ( -
-
- -
-

© 2019 EduCoder湘ICP备17009477号Trustie   &   IntelliDE inside.

-
-
-
-
- ); - } -} - -export default NewFooter; +import React, { Component } from 'react'; +import { Redirect } from 'react-router'; +import { getImageUrl, toPath } from 'educoder' +import PropTypes from 'prop-types'; + +class NewFooter extends Component { + constructor(props) { + super(props) + + } + + componentWillReceiveProps(newProps, newContext) { + + } + + + render() { + return ( +
+
+ +
+

© 2019 EduCoder湘ICP备17009477号Trustie   &   IntelliDE inside.

+
+
+
+
+ ); + } +} + +export default NewFooter; diff --git a/public/react/src/modules/tpm/SiderBar.js b/public/react/src/modules/tpm/SiderBar.js index f8af121e1..bc1a80ed4 100644 --- a/public/react/src/modules/tpm/SiderBar.js +++ b/public/react/src/modules/tpm/SiderBar.js @@ -23,7 +23,7 @@ $(window).scroll(function(){ }); function rightSlider(){ - var poi=parseInt((parseInt($(window).width())- 1200 )/2)-60; + var poi=parseInt((parseInt($(window).width())- 1200 )/2)-34; // console.log(parseInt($(window).width())+" "+poi); if(poi>0){ $(".-task-sidebar").css("right",poi); diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index 5501ef499..68f3c2e56 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -294,23 +294,34 @@ export function TPMIndexHOC(WrappedComponent) { return (
- - - -
- this.initCommonState(user)} - {...this.props} {...this.state} - showShixun={this.showShixun} aboutFocus={this.aboutFocus} - {...common} - > - - -
- + + + +
+ this.initCommonState(user)} + {...this.props} {...this.state} + showShixun={this.showShixun} aboutFocus={this.aboutFocus} + {...common} + > + + +
+ + +
); } From a1e9416f66ab5a6f5b2457bfc579980be2ae323f Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Mon, 1 Jul 2019 09:39:04 +0800 Subject: [PATCH 02/67] imageTarget --- public/react/src/common/TextUtil.js | 4 +++ public/react/src/common/educoder.js | 2 +- public/react/src/modules/courses/Index.js | 4 ++- .../courses/busyWork/CommonWorkAppraise.js | 5 +-- .../page/layers/ImageLayerOfCommentHOC.js | 32 +++++++++++++------ 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/public/react/src/common/TextUtil.js b/public/react/src/common/TextUtil.js index d39ebb32a..c711143d2 100644 --- a/public/react/src/common/TextUtil.js +++ b/public/react/src/common/TextUtil.js @@ -1,4 +1,8 @@ import { bytesToSize } from 'educoder'; +export function isImageExtension(fileName) { + return fileName ? !!(fileName.match(/.(jpg|jpeg|png|gif)$/i)) : false +} + export function markdownToHTML(oldContent, selector) { window.$('#md_div').html('') // markdown to html diff --git a/public/react/src/common/educoder.js b/public/react/src/common/educoder.js index 2088918da..5026eee28 100644 --- a/public/react/src/common/educoder.js +++ b/public/react/src/common/educoder.js @@ -14,7 +14,7 @@ export { updatePageParams as updatePageParams } from './RouterUti export { bytesToSize as bytesToSize } from './UnitUtil'; -export { markdownToHTML, uploadNameSizeSeperator, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from './TextUtil' +export { markdownToHTML, uploadNameSizeSeperator, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll, isImageExtension } from './TextUtil' export { handleDateString, getNextHalfHourOfMoment,formatDuring } from './DateUtil' diff --git a/public/react/src/modules/courses/Index.js b/public/react/src/modules/courses/Index.js index 3dcdb1c18..dcdb550fd 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -6,6 +6,8 @@ import Loading from '../../Loading'; import axios from 'axios'; import { TPMIndexHOC } from '../tpm/TPMIndexHOC'; import { CNotificationHOC } from './common/CNotificationHOC' +import {ImageLayerOfCommentHOC} from '../page/layers/ImageLayerOfCommentHOC' + import "./css/Courses.css" //引入对应跳转的组件 @@ -862,4 +864,4 @@ class CoursesIndex extends Component{ } } -export default CNotificationHOC() ( SnackbarHOC() ( TPMIndexHOC(CoursesIndex) )); \ No newline at end of file +export default ImageLayerOfCommentHOC({imgSelector: '.imageLayerParent img, .imageLayerParent .imageTarget', parentSelector: '.newMain'}) (CNotificationHOC() ( SnackbarHOC() ( TPMIndexHOC(CoursesIndex) ))); \ No newline at end of file diff --git a/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js b/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js index 936807111..258c5dd40 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js @@ -179,7 +179,7 @@ class CommonWorkAppraise extends Component{ {/*
*/} -
+
+
); } diff --git a/public/react/src/modules/courses/busyWork/UseBank.js b/public/react/src/modules/courses/busyWork/UseBank.js index 3a60b23b0..ea31cf4fa 100644 --- a/public/react/src/modules/courses/busyWork/UseBank.js +++ b/public/react/src/modules/courses/busyWork/UseBank.js @@ -252,7 +252,7 @@ class UseBank extends Component{

通过职业认证的教师才能访问公共题库

- 立即认证 + 立即认证
: diff --git a/public/react/src/modules/courses/coursesPublic/PathModal.js b/public/react/src/modules/courses/coursesPublic/PathModal.js index 787c70d3e..0b69fa15d 100644 --- a/public/react/src/modules/courses/coursesPublic/PathModal.js +++ b/public/react/src/modules/courses/coursesPublic/PathModal.js @@ -1,11 +1,7 @@ import React,{ Component } from "react"; -import { Modal,Checkbox,Select,Input,Tooltip } from "antd"; +import { Modal,Checkbox,Select,Input,Tooltip,Spin,Icon } from "antd"; import axios from'axios'; -import Loading from '@icedesign/base/lib/loading'; -import '@icedesign/base/lib/loading/style.js'; import Modals from '../../modals/Modals'; - -const Option = Select.Option; const Search = Input.Search; class PathModal extends Component{ constructor(props){ @@ -126,7 +122,7 @@ class PathModal extends Component{ render(){ let {Searchvalue,type,Modalstype}=this.state; let {visible,shixunmodallist,hometypepvisible,newshixunmodallist}=this.props; - + const antIcon = ; return(
@@ -148,8 +144,7 @@ class PathModal extends Component{ width="840px" destroyOnClose={true} > - - +
{ shixunmodallist && shixunmodallist.tags.length===0?"":
@@ -203,7 +198,6 @@ class PathModal extends Component{
- { newshixunmodallist&&newshixunmodallist.map((item,key)=>{ @@ -229,7 +223,6 @@ class PathModal extends Component{ }) } -
{ this.state.patheditarrytype===true?{this.state.patheditarryvalue}:""}
@@ -237,7 +230,7 @@ class PathModal extends Component{ 确定
- +
) diff --git a/public/react/src/modules/courses/coursesPublic/SelectResource.js b/public/react/src/modules/courses/coursesPublic/SelectResource.js index 878395144..ef36a2ab4 100644 --- a/public/react/src/modules/courses/coursesPublic/SelectResource.js +++ b/public/react/src/modules/courses/coursesPublic/SelectResource.js @@ -1,9 +1,7 @@ import React,{ Component } from "react"; -import { Modal,Checkbox,Select,Input} from "antd"; +import { Modal,Checkbox,Select,Input,Spin,Icon} from "antd"; import axios from'axios'; import NoneData from "../coursesPublic/NoneData"; -import Loading from '@icedesign/base/lib/loading'; -import '@icedesign/base/lib/loading/style.js'; import Modals from '../../modals/Modals'; const Option = Select.Option; @@ -244,7 +242,7 @@ class Selectresource extends Component{ render(){ let {Searchvalue,type,category_id,Resourcelist,hometypepvisible,patheditarry}=this.state; let {visible,shixunmodallist}=this.props; - + const antIcon = ; return(
{/*提示*/} @@ -275,8 +273,8 @@ class Selectresource extends Component{ ` } - + - - - - -
-
- -
- - 注:该文件有历史版本,请选择您需要的文件,点击文件名 下载。 - -
-
- - - -
    -
  • 资源名称
  • -
  • 版本
  • -
- - - -
- - - - - { - allfiles === undefined ? "": -
- -
- -
  • - {allfiles.title} - 当前版本 -
  • - -
  • - {formatDate(allfiles.created_on)} -
  • - -
    - { - allfiles.attachment_histories.length===0?"":allfiles.attachment_histories.map((item,key)=>{ - return( - -
    - -
  • - {item.title} -
  • - -
  • - {formatDate(item.created_on)} -
  • - -
    - ) - }) - } -
    - } -
    - -
    -
    - :""} -
    - ) - } -} +import React,{ Component } from "react"; +import { Modal,Checkbox,Select,Input} from "antd"; +import axios from'axios'; + +import Modals from '../../modals/Modals'; + +const Option = Select.Option; +const Search = Input.Search; + +function formatDate(date) { + var dateee = new Date(date).toJSON(); + return new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '') +} + +class Showoldfiles extends Component{ + constructor(props){ + super(props); + this.state={ + Searchvalue:undefined, + type:'all', + category_id:0, + page:1, + Resourcelist:undefined, + + getallfiles:false, + searchtype:'getallfiles' + } + } + componentDidMount() { + + } + + componentDidUpdate = (prevProps) => { + + if ( prevProps.visible != this.props.visible ) { + + } + + } + + cloasshanchudiao=()=>{ + this.props.closaoldfilesprops() + } + + render(){ + let {visible,allfiles}=this.props; + + return( +
    + {/*提示*/} + + {visible===true? + + + + + + +
    +
    + +
    + + 注:该文件有历史版本,请选择您需要的文件,点击文件名 下载。 + +
    +
    + + + +
      +
    • 资源名称
    • +
    • 版本
    • +
    + + + +
    + + + + + { + allfiles === undefined ? "": +
    + +
    + +
  • + {allfiles.title} + 当前版本 +
  • + +
  • + {formatDate(allfiles.created_on)} +
  • + +
    + { + allfiles.attachment_histories.length===0?"":allfiles.attachment_histories.map((item,key)=>{ + return( + +
    + +
  • + {item.title} +
  • + +
  • + {formatDate(item.created_on)} +
  • + +
    + ) + }) + } +
    + } +
    + +
    + +
    :""} +
    + ) + } +} export default Showoldfiles; \ No newline at end of file diff --git a/public/react/src/modules/courses/coursesPublic/modal/ShixunModal2.js b/public/react/src/modules/courses/coursesPublic/modal/ShixunModal2.js index d01c8d986..9148845e9 100644 --- a/public/react/src/modules/courses/coursesPublic/modal/ShixunModal2.js +++ b/public/react/src/modules/courses/coursesPublic/modal/ShixunModal2.js @@ -1,8 +1,6 @@ import React,{ Component } from "react"; import { Modal,Checkbox,Select,Input,Tooltip,Spin,Icon} from "antd"; import axios from'axios'; -// import Loading from '@icedesign/base/lib/loading'; -// import '@icedesign/base/lib/loading/style.js'; const Option = Select.Option; const Search = Input.Search; @@ -276,7 +274,7 @@ class ShixunModal extends Component{ ` } - {/**/} + { newshixunmodallist === undefined ? "": newshixunmodallist.map((item,key)=>{ @@ -303,7 +301,6 @@ class ShixunModal extends Component{ }) } - {/**/}
    diff --git a/public/react/src/modules/home/shixunsHome.js b/public/react/src/modules/home/shixunsHome.js index 07920e2d9..9ef26f7a8 100644 --- a/public/react/src/modules/home/shixunsHome.js +++ b/public/react/src/modules/home/shixunsHome.js @@ -10,8 +10,6 @@ import { TPMIndexHOC } from '../tpm/TPMIndexHOC'; import SiderBar from '../tpm/SiderBar'; -import Loading from '@icedesign/base/lib/loading'; - import { SnackbarHOC , getImageUrl} from 'educoder'; import Slider from '@icedesign/base/lib/slider'; @@ -24,9 +22,7 @@ import '@icedesign/base/lib/rating/style.js'; import './home.css'; -import '@icedesign/base/lib/loading/style.js'; - -import {Tooltip} from 'antd'; +import {Tooltip,Spin} from 'antd'; const $ = window.$; @@ -110,7 +106,7 @@ class ShixunsHome extends Component { return (
    - + {/*懒加载*/} @@ -498,8 +494,7 @@ class ShixunsHome extends Component {
    - - +
    ); } diff --git a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js index 393c28c9f..6e2ca0883 100644 --- a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js +++ b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js @@ -1,10 +1,8 @@ import React, { Component } from 'react'; import {getImageUrl} from 'educoder'; -import {Modal,Input,Checkbox,Tooltip} from "antd"; +import {Modal,Input,Checkbox,Tooltip,Spin} from "antd"; import { DragDropContext , Draggable, Droppable} from 'react-beautiful-dnd'; import Modals from '../../modals/Modals'; -import Loading from '@icedesign/base/lib/loading'; -import '@icedesign/base/lib/loading/style.js'; import '../ShixunPaths.css'; import axios from 'axios'; const $ = window.$; @@ -437,7 +435,7 @@ class DetailCardsEditAndAdd extends Component{ width="840px" destroyOnClose={true} > - + - +
    diff --git a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js index 63263dfc1..f822b0de1 100644 --- a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js +++ b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndEdit.js @@ -1,10 +1,8 @@ import React, { Component } from 'react'; import {getImageUrl} from 'educoder'; -import {Modal,Input,Checkbox,Tooltip} from "antd"; +import {Modal,Input,Checkbox,Tooltip,Spin} from "antd"; import { DragDropContext,Draggable, Droppable} from 'react-beautiful-dnd'; import Modals from '../../modals/Modals'; -import Loading from '@icedesign/base/lib/loading'; -import '@icedesign/base/lib/loading/style.js'; import '../ShixunPaths.css'; import axios from 'axios'; const $ = window.$; @@ -478,8 +476,8 @@ class DetailCardsEditAndEdit extends Component{ footer={null} width="840px" destroyOnClose={true} - > - + >Z + - +
    diff --git a/public/react/src/modules/tpm/TPMFork/TPMForklist.js b/public/react/src/modules/tpm/TPMFork/TPMForklist.js index a9c9efd6f..b76683837 100644 --- a/public/react/src/modules/tpm/TPMFork/TPMForklist.js +++ b/public/react/src/modules/tpm/TPMFork/TPMForklist.js @@ -1,193 +1,192 @@ -import React, {Component} from 'react'; - -import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Pagination,Tooltip} from 'antd'; - -import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom"; - -// import "antd/dist/antd.css"; - -import Rating from '@icedesign/base/lib/rating'; - -import Loading from '@icedesign/base/lib/loading'; - -import axios from 'axios'; - -import {getImageUrl, toPath, getUrl} from 'educoder' - -import './shixunCss/fork.css'; - -let origin = getUrl(); - -let path = getUrl("/editormd/lib/") - -const $ = window.$; - -let timeout; - -let currentValue; - - - -export default class TPMFork_listComponent extends Component { - constructor(props) { - super(props) - this.state = { - shixuns:undefined, - total_count:0, - shixunsID:undefined, - Forkvisible: true, - Forkcurrent: 1 - } - } - - - componentDidMount() { - let id = this.props.match.params.shixunId; - - let Url="/shixuns/"+id+"/fork_list.json"; - axios.get(Url, { - params: { - page:1, - limit:8 - } - }).then((response)=> { - this.setState({ - shixunsID:id, - shixuns:response.data.shixuns, - total_count:response.data.total_count, - Forkvisible:false - }) - }).catch((error)=>{ - console.log(error) - }); - } - - - TPMForkonChange=(pageNumber)=>{ - let id = this.props.match.params.shixunId; - this.setState({ - Forkvisible:true - }) - let Url="/shixuns/"+id+"/fork_list.json"; - axios.get(Url, { - params: { - page:pageNumber, - limit:8 - } - }).then((response)=> { - this.setState({ - shixunsID:id, - shixuns:response.data.shixuns, - total_count:response.data.total_count, - Forkvisible: false, - Forkcurrent: pageNumber - }) - }).catch((error)=>{ - console.log(error) - }); - } - render() { - - let {shixuns, total_count, shixunsID, Forkvisible, Forkcurrent} = this.state; - - - return ( - -
    - -
    - Fork实训列表 - 返回 -
    - -
    - - { shixuns===undefined?" ":shixuns.map((item,key)=>{ - return( -
    - -
    - {item.tag_name} - -
    - -
    - -

    非试用内容,需要授权

    -
    - - - - - -
    -

    - - {item.name} - -

    - -

    - - - - {item.score_info===null?"5分":item.score_info+"分"} -

    - -

    - - - - {item.challenges_count} - - - - {/**/} - {/**/} - {/*{item.exp}*/} - {/**/} - {/**/} - - - - {item.stu_num} - - - - - {item.level} -

    - -
    -
    - ) - }) - } -
    - - {/*
    {total_count}
    */} -
    8 ? "block" : "none"}}> - {/*
    */} - -
    - - -
    - - ) - } -} - - +import React, {Component} from 'react'; + +import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Pagination,Tooltip,Spin} from 'antd'; + +import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom"; + +// import "antd/dist/antd.css"; + +import Rating from '@icedesign/base/lib/rating'; + +import axios from 'axios'; + +import {getImageUrl, toPath, getUrl} from 'educoder' + +import './shixunCss/fork.css'; + +let origin = getUrl(); + +let path = getUrl("/editormd/lib/") + +const $ = window.$; + +let timeout; + +let currentValue; + + + +export default class TPMFork_listComponent extends Component { + constructor(props) { + super(props) + this.state = { + shixuns:undefined, + total_count:0, + shixunsID:undefined, + Forkvisible: true, + Forkcurrent: 1 + } + } + + + componentDidMount() { + let id = this.props.match.params.shixunId; + + let Url="/shixuns/"+id+"/fork_list.json"; + axios.get(Url, { + params: { + page:1, + limit:8 + } + }).then((response)=> { + this.setState({ + shixunsID:id, + shixuns:response.data.shixuns, + total_count:response.data.total_count, + Forkvisible:false + }) + }).catch((error)=>{ + console.log(error) + }); + } + + + TPMForkonChange=(pageNumber)=>{ + let id = this.props.match.params.shixunId; + this.setState({ + Forkvisible:true + }) + let Url="/shixuns/"+id+"/fork_list.json"; + axios.get(Url, { + params: { + page:pageNumber, + limit:8 + } + }).then((response)=> { + this.setState({ + shixunsID:id, + shixuns:response.data.shixuns, + total_count:response.data.total_count, + Forkvisible: false, + Forkcurrent: pageNumber + }) + }).catch((error)=>{ + console.log(error) + }); + } + render() { + + let {shixuns, total_count, shixunsID, Forkvisible, Forkcurrent} = this.state; + + + return ( + +
    + +
    + Fork实训列表 + 返回 +
    + {/**/} + +
    + + { shixuns===undefined?" ":shixuns.map((item,key)=>{ + return( +
    + +
    + {item.tag_name} + +
    + +
    + +

    非试用内容,需要授权

    +
    + + + + + +
    +

    + + {item.name} + +

    + +

    + + + + {item.score_info===null?"5分":item.score_info+"分"} +

    + +

    + + + + {item.challenges_count} + + + + {/**/} + {/**/} + {/*{item.exp}*/} + {/**/} + {/**/} + + + + {item.stu_num} + + + + + {item.level} +

    + +
    +
    + ) + }) + } +
    + + {/*
    {total_count}
    */} +
    8 ? "block" : "none"}}> + {/*
    */} + +
    + + {/**/} +
    + + ) + } +} + + diff --git a/public/react/src/modules/tpm/component/TPMright.css b/public/react/src/modules/tpm/component/TPMright.css index 9f2622eda..b0f8315e6 100644 --- a/public/react/src/modules/tpm/component/TPMright.css +++ b/public/react/src/modules/tpm/component/TPMright.css @@ -15,14 +15,14 @@ /*flex-wrap: wrap;*/ /*display: -webkit-flex; !* Safari *!*/ /*display: flex;*/ - width: 340px; + width: 360px; position:relative; overflow: hidden; } .newsubscript{ position: absolute; right: 23px; - bottom: 38px; + bottom: 16px; cursor: pointer; } .newsubscript:hover{ diff --git a/public/react/src/modules/tpm/shixuns/ShixunCard.js b/public/react/src/modules/tpm/shixuns/ShixunCard.js index e0850143c..18e261bb5 100644 --- a/public/react/src/modules/tpm/shixuns/ShixunCard.js +++ b/public/react/src/modules/tpm/shixuns/ShixunCard.js @@ -7,11 +7,9 @@ import PropTypes from 'prop-types'; import classNames from 'classnames'; -// import { Rating,Loading} from '@icedesign/base'; - import {getImageUrl,setImagesUrl, toPath} from 'educoder'; -// import { Pagination,Row,Col } from 'antd'; +import { Spin,Icon } from 'antd'; import 'antd/lib/pagination/style/index.css'; @@ -21,8 +19,6 @@ import Rating from '@icedesign/base/lib/rating'; import Pagination from '@icedesign/base/lib/pagination'; -// import Loading from '@icedesign/base/lib/loading'; - // 引入业务组件样式 import '@icedesign/base/lib/pagination/style.js'; @@ -30,8 +26,6 @@ import '@icedesign/base/lib/rating/style.js'; import { Tooltip } from 'antd'; -// import '@icedesign/base/lib/loading/style.js'; - import axios from 'axios'; const $ = window.$; @@ -63,8 +57,8 @@ class ShixunCard extends Component { let {middleshixundata, pagination, typepvisible, pages, totalcount} = this.props; return (
    - {/**/} +
    @@ -168,7 +162,7 @@ class ShixunCard extends Component {
    - {/*
    */} +
    ) } diff --git a/public/react/src/modules/tpm/shixuns/ShixunsIndex.js b/public/react/src/modules/tpm/shixuns/ShixunsIndex.js index ddb6a22b9..3f1f7e9e8 100644 --- a/public/react/src/modules/tpm/shixuns/ShixunsIndex.js +++ b/public/react/src/modules/tpm/shixuns/ShixunsIndex.js @@ -6,6 +6,8 @@ import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom"; import axios from 'axios'; +import { Spin } from 'antd'; + import { TPMIndexHOC } from '../TPMIndexHOC'; import { SnackbarHOC } from 'educoder'; @@ -16,10 +18,6 @@ import ShixunSearchBar from './ShixunSearchBar'; import ShixunCard from './ShixunCard'; -import Loading from '@icedesign/base/lib/loading'; - -import '@icedesign/base/lib/loading/style.js'; - const queryString = require('query-string'); const $ = window.$; @@ -362,7 +360,7 @@ class ShixunsIndex extends Component { return (
    - + {/*懒加载*/} - +
    ); } From c56717b90543c6049181447ccf9c3f1f6354a4b7 Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Mon, 1 Jul 2019 11:10:34 +0800 Subject: [PATCH 05/67] notRequired --- public/react/src/modules/courses/boards/BoardsNew.js | 2 +- public/react/src/modules/courses/boards/index.js | 4 ++++ public/react/src/modules/courses/common/formCommon.css | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js index 303d683ce..6932b96cf 100644 --- a/public/react/src/modules/courses/boards/BoardsNew.js +++ b/public/react/src/modules/courses/boards/BoardsNew.js @@ -308,7 +308,7 @@ class BoardsNew extends Component{
    {getFieldDecorator('sticky', { valuePropName: 'checked', diff --git a/public/react/src/modules/courses/boards/index.js b/public/react/src/modules/courses/boards/index.js index cc761cd5d..6822d526c 100644 --- a/public/react/src/modules/courses/boards/index.js +++ b/public/react/src/modules/courses/boards/index.js @@ -218,6 +218,9 @@ class Boards extends Component{ } onPressEnter = (e) => { + clearTimeout(this.timeoutHandler) + this.timeoutHandler = null; + this.fetchAll(this.state.searchValue, 1) } onInputSearchChange = (e) => { @@ -227,6 +230,7 @@ class Boards extends Component{ if (this.timeoutHandler) { clearTimeout(this.timeoutHandler) + this.timeoutHandler = null; } this.timeoutHandler = setTimeout(() => { this.fetchAll(this.state.searchValue, 1) diff --git a/public/react/src/modules/courses/common/formCommon.css b/public/react/src/modules/courses/common/formCommon.css index c4a14924c..5b30a338c 100644 --- a/public/react/src/modules/courses/common/formCommon.css +++ b/public/react/src/modules/courses/common/formCommon.css @@ -18,6 +18,10 @@ .courseForm .ant-form-item-label { margin-left: -10px; } +.courseForm .notRequired .ant-form-item-label { + margin-left: 0px; +} + /* 不知道被哪个样式影响,这里需要重置 */ .courseForm .ant-input:focus { From 23ae46b3d2b60b60a72c0192a5a2496fcbbf0b6b Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Mon, 1 Jul 2019 11:23:10 +0800 Subject: [PATCH 06/67] css --- .../src/modules/courses/boards/BoardsNew.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js index 6932b96cf..a7f59f39a 100644 --- a/public/react/src/modules/courses/boards/BoardsNew.js +++ b/public/react/src/modules/courses/boards/BoardsNew.js @@ -26,7 +26,8 @@ class BoardsNew extends Component{ this.state = { fileList: [], - boards: [] + boards: [], + title_num: 60 } } addSuccess = () => { @@ -93,7 +94,8 @@ class BoardsNew extends Component{ status: 'done' } }) - this.setState({ fileList: _fileList, board_name: data.board_name }) + + this.setState({ fileList: _fileList, board_name: data.board_name, title_num: 60 - parseInt(data.subject.length) }) } } }) @@ -228,8 +230,14 @@ class BoardsNew extends Component{ }); } // 附件相关 ------------ END + changeTitle=(e)=>{ + console.log(e.target.value.length); + this.setState({ + title_num: 60 - parseInt(e.target.value.length) + }) + } render() { - let { addGroup, fileList, course_id } = this.state; + let { addGroup, fileList, course_id, title_num } = this.state; const { getFieldDecorator } = this.props.form; const formItemLayout = { @@ -318,6 +326,8 @@ class BoardsNew extends Component{ position: 'absolute' }}>置顶 )} + {/* checkbox 有个边距样式 .ant-checkbox-wrapper + span, */} + {getFieldDecorator('subject', { rules: [{ required: true, message: '请输入标题', @@ -325,7 +335,8 @@ class BoardsNew extends Component{ max: 60, message: '最大限制为60个字符', }], })( - + )} From 5496df9e5edd5e448df0d59c29d5eab46aef4efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Mon, 1 Jul 2019 13:47:07 +0800 Subject: [PATCH 07/67] =?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/javascripts/educoder/edu_application.js | 2 +- public/react/src/modules/tpm/NewHeader.js | 10 +++++----- public/react/src/modules/tpm/SiderBar.js | 2 +- public/react/src/modules/tpm/TPMIndexHOC.js | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/javascripts/educoder/edu_application.js b/public/javascripts/educoder/edu_application.js index feacff0dd..612a5a44b 100644 --- a/public/javascripts/educoder/edu_application.js +++ b/public/javascripts/educoder/edu_application.js @@ -125,7 +125,7 @@ $(window).resize(function() { rightSlider(); }); function rightSlider() { - var poi = parseInt((parseInt($(window).width()) - 1200) / 2) - 34; + var poi = parseInt((parseInt($(window).width()) - 1200) / 2) - 81; // console.log(parseInt($(window).width())+" "+poi); if (poi > 0) { $(".-task-sidebar").css("right", poi); diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index ff0ece9f9..691f8bb1e 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -638,7 +638,7 @@ submittojoinclass=(value)=>{ {/*
  • 实训路径
  • */}
  • - 实训课程
  • + 实践课程 {/*
  • 课堂
  • */}
  • @@ -671,13 +671,13 @@ submittojoinclass=(value)=>{
  • -
  • 教学案例
  • -
  • 竞赛
  • + {/*
  • 教学案例
  • */} +
  • 在线竞赛
  • -
  • 问答
  • +
  • 交流问答
  • 认证
  • + >工程认证 diff --git a/public/react/src/modules/tpm/SiderBar.js b/public/react/src/modules/tpm/SiderBar.js index bc1a80ed4..bc5800153 100644 --- a/public/react/src/modules/tpm/SiderBar.js +++ b/public/react/src/modules/tpm/SiderBar.js @@ -23,7 +23,7 @@ $(window).scroll(function(){ }); function rightSlider(){ - var poi=parseInt((parseInt($(window).width())- 1200 )/2)-34; + var poi=parseInt((parseInt($(window).width())- 1200 )/2)-81; // console.log(parseInt($(window).width())+" "+poi); if(poi>0){ $(".-task-sidebar").css("right",poi); diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index 68f3c2e56..f03d59751 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -131,7 +131,7 @@ export function TPMIndexHOC(WrappedComponent) { }else if(this.props.match.path==="/shixuns"){ document.title="开发社区"; }else if(this.props.match.path==="/paths"){ - document.title="实训课程"; + document.title="实践课程"; }else if(this.props.match.path==="/courses"){ document.title="翻转课堂"; } From dfbfa1259e31605079d7e35fcda7cbe6fc4c28ef Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Mon, 1 Jul 2019 14:00:47 +0800 Subject: [PATCH 08/67] max --- .../react/src/modules/courses/boards/BoardsNew.js | 2 +- .../src/modules/courses/boards/TopicDetail.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js index a7f59f39a..b3c267c94 100644 --- a/public/react/src/modules/courses/boards/BoardsNew.js +++ b/public/react/src/modules/courses/boards/BoardsNew.js @@ -335,7 +335,7 @@ class BoardsNew extends Component{ max: 60, message: '最大限制为60个字符', }], })( - )} diff --git a/public/react/src/modules/courses/boards/TopicDetail.js b/public/react/src/modules/courses/boards/TopicDetail.js index 325bbde0d..702928f80 100644 --- a/public/react/src/modules/courses/boards/TopicDetail.js +++ b/public/react/src/modules/courses/boards/TopicDetail.js @@ -237,16 +237,16 @@ class TopicDetail extends Component { // //

    -
    - +
    + - {fileName && 30 }> - + {/* {fileName && 30 }> } */} + 30 ? fileName : ''} + className="mr12 color9B9B overflowHidden1" length="58" style={{maxWidth: '480px'}}> {fileName} - } + {item.filesize} @@ -646,7 +646,7 @@ class TopicDetail extends Component {
    -
    +
    {/* ${memo.user_praise ? '' : ''} */} From 29d34aaddfc7a49e7dd6591d72177d1c165f4cbe Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Mon, 1 Jul 2019 14:26:00 +0800 Subject: [PATCH 09/67] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=88=86=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/members/studentsList.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index 63ae5683a..c95d76b41 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -498,10 +498,10 @@ class studentsList extends Component{ showSearchInput={total_count >= 10} searchPlaceholder={ '请输入姓名、学号进行搜索' } firstRowRight={ - + { isSuperAdmin && - {/* */} - {/* this.refs['createGroupByImportModal'].setVisible(true)}>导入创建分班 */} + + this.refs['createGroupByImportModal'].setVisible(true)}>导入创建分班 } { isAdmin && isParent && this.addDir()}>新建分班 } { isAdmin && !isParent && course_group_id != 0 && this.deleteDir()}>删除分班 } From 8bc80f741b05c7ee1828633dd2be241fb18b8498 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Mon, 1 Jul 2019 15:55:16 +0800 Subject: [PATCH 10/67] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=88=97=E8=A1=A8=E8=80=81=E5=B8=88=EF=BC=8C?= =?UTF-8?q?=E5=AD=A6=E7=94=9F=E8=BA=AB=E4=BB=BD=E5=A2=9E=E5=8A=A0=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E6=88=90=E7=BB=A9=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/shixunHomework/Listofworks.js | 109 ++++++++-- .../shixunHomework/Listofworksstudentone.js | 195 +++++++++++++----- 2 files changed, 238 insertions(+), 66 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/Listofworks.js b/public/react/src/modules/courses/shixunHomework/Listofworks.js index 636214885..30a0af582 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworks.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworks.js @@ -61,6 +61,7 @@ class Listofworks extends Component { props: props, data: [], page: 1, + computeTimetype:true, limit: 20, loadingstate: true, order: "update_time", @@ -1182,8 +1183,6 @@ class Listofworks extends Component { }).catch((error) => { console.log(error) }); - - } // 立即发布 homeworkstartend = (ds,endtime) => { @@ -1313,10 +1312,24 @@ class Listofworks extends Component { } + setComputeTime=()=>{ + this.setState({ + computeTimetype:false + }) + let homeworkid = this.props.match.params.homeworkid; + let url = "/homework_commons/"+homeworkid+"/update_score.json"; + + axios.get(url).then((response) => { + this.props.showNotification(`${response.data.message}`); + }).catch((error) => { + console.log(error) + }); + + } render() { // console.log("Listofworks.js000") - let {columns, page, boolgalist,limit,experience,course_groupysls, course_groupyslstwo, unlimited, unlimitedtwo, loadingstate, viewtrainingdata, game_list, data, course_group_info, order, teacherdata, task_status, checkedValuesine, searchtext, teacherlist, visible, visibles, jobsettingsdata} = this.state; + let {columns,computeTimetype, page, boolgalist,limit,experience,course_groupysls, course_groupyslstwo, unlimited, unlimitedtwo, loadingstate, viewtrainingdata, game_list, data, course_group_info, order, teacherdata, task_status, checkedValuesine, searchtext, teacherlist, visible, visibles, jobsettingsdata} = this.state; // // console.log(teacherdata&&teacherdata.shixun_identifier) // console.log(course_group_info) @@ -1345,8 +1358,8 @@ class Listofworks extends Component { { ` body { - overflow: hidden !important; - } + overflow: hidden !important; + } ` } @@ -1418,6 +1431,7 @@ class Listofworks extends Component {
    +
    @@ -1481,10 +1495,83 @@ class Listofworks extends Component {
    + + {computeTimetype===false?
  • + + 正在执行成绩计算,请稍后刷新页面查看结果 + 温馨提示:执行时间因作品数量而异 + +
  • :""} {/*作品状态GraduationTaskssettinglist*/}