<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>北师大实验中学数字校园</title> <script type="text/javascript" src="/js/jquery.min.js"></script> <link rel="stylesheet" href="/css/bootstrap.min.css"> <script type="text/javascript" src="/js/bootstrap.min.js"></script> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Anonymous+Pro:ital,wght@0,400;0,700;1,400;1,700 &family=Noto+Serif+SC:wght@300;400;500;600;700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="/css/style.css"> <script> var status = 0, oid, user, pwd, paused = [] const rot = '43.143.233.184:81', root = 'https://43.143.233.184:81/' function getCookie(name) { let arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) return arr[2]; return null; } function delCookie(name, path = 'u') { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = getCookie(name); if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString() + ((path == 'u') ? '' : ';path=' + path) } function getUrl(e) { return e.replace('dd.sdsz.com.cn', rot).replace(/^http:/, 'https:').replace(rot.split(':')[0] + '/', rot + '/').replace('service=http%3A%2F%2F' + root, 'service=http%3A%2F%2Fdd.sdsz.com.cn') } function setStatus(e, fast) { console.log('STATUS', e) status = e if (e == 1) { paused = [] $('#loginSt').text('登录成功') $('.login').hide(200) $('#loginSt').addClass('label-success') $('#loginSt').removeClass('label-danger') $('.reqLogin').show(300) } else if (e == 2) { $('#loginSt').text('登录失败') $('#loginSt').removeClass('label-success') $('#loginSt').addClass('label-danger') } else { $('.login').show(200) $('#loginSt').text('未登录') $('#loginSt').removeClass('label-success') $('#loginSt').removeClass('label-danger') $('.reqLogin').hide(300 * !fast) $('#avatar').attr('src', '') $('#user').text('-') } } function delCookies(force = 0) { if (force) { delCookie('CASTGC', '/') delCookie('gosh', '/score/') if (force <= 2) { delCookie('gosh', '/sso/') delCookie('gowd', '/sso/') } } if (force >= 2) { delCookie('JSESSIONID', '/bxn-portal/') delCookie('JSESSIONID', '/bxn-library/') delCookie('JSESSIONID', '/bxn-core-uic/') } delCookie('JSESSIONID', '/') delCookie('JSESSIONID', '/sso/') } function getMail(from, i, id, uid) { $('.mil-' + i).toggleClass('active') if ($('.mail-' + i).text() == '') { get(`${['bxn-office/mails/user/showMailDetail?source=&mailItemId', 'bxn-office/messages/sys/sysMsgDetail?unwrap=true&sysMsgId', 'bxn-office/notices/user/getNoticeDetail?unwrap=true¬iceId'][from]}=${id}${['&userMailItemId=', '&ownerId=', ''][from]}${uid || ''}${['', '&_=0', '&_=0'][from]}`, e => { f = '' if (from == 0) { f = `<a onclick="$(this).hasClass('confirm')?removeMail('${uid}'):$(this).addClass('confirm').html('<span class=\\'glyphicon glyphicon-trash\\'></span> 确认?')"><span class="glyphicon glyphicon-trash"></span> 删除邮件</a>` if (e.match('"下载"')) { f += '<br>' + e.replace(/.*?ico.*?(bxn-office\/a.*?)title.*?file-info">(.*?)<.*?/gs, '<a href="https://43.143.233.184:81/$1>~ $2</a>,\n').split('/span')[0].replace(/,/g, '<br>').replace(/~/g, '<span class="glyphicon glyphicon-link"></span>') } e = e.replace(/^.*"bbcode-content">(.*?)<\/div>.*/gs, '$1') } else if (from == 1) { e = e.replace(/.*容:<\/label>(.*?)<\/p>.*/gs, '$1') } else if (from == 2) { if (e.match('"下载"')) { f = e.replace(/.*件:.*?<a.*?(<a.*?href=")(.*?) .*?fo">[ \t\n\r]*(.*?)[ \t\n\r]*<.*/gs, '$1https://43.143.233.184:81$2><span class="glyphicon glyphicon-link"></span> $3</a>') } e = e.replace(/.*?通..容:.*?tent">(.*?)<\/td.*/gs, '$1') } e = e.replace(/\[right\](.*?)\[\/right\]/gs, '<div class="pull-right">$1</div><br>').replace(/( *([\t\n\r ]| |<br>|<p><br\/><\/p>) *)+/g, '<br>').replace(/<br>(style|class)/g, ' $1').replace(/<br>$/gs, '') $('.mail-' + i).html(f + e) $('.mail-' + i).toggle(300) }) } else { $('.mail-' + i).toggle(300) } } function getTime(time) { let a = new Date(), b = new Date(time) a.setHours(0) b.setHours(0) let diff = Math.ceil(a.getTime() / 86400000) - Math.ceil(b.getTime() / 86400000) if (diff < 1) return '今天' if (diff < 2) return '昨天' if (diff < 3) return '前天' if (diff < 7) return diff + '天前' return time.split(' ')[0] } var mails = [] function insertMail(e) { e = '[' + e.slice(0, e.length - 1) + ']' e = JSON.parse(e) $('#mailList').empty() e = e.concat(mails).sort(function (a, b) { return new Date(b.time) - new Date(a.time) }); mails = e str = '' for (let i = 0; i < e.length; i++) { str += `<li class="mail mil-${i}"><span class="full" onclick="getMail(${e[i].from},${i},'${e[i].id}',${e[i].uid})"><b>${e[i].title}</b><span class="pull-right" style="color:#999;">${e[i].name} ${getTime(e[i].time)} <span class="full-time" style="color:#bbb;">${e[i].time.split(' ')[1]}</span></span></span><span class="mail-text mail-${i}"></span></span></li>` } $('#mailList').append(str) $('.mail-text,.full-time').hide() } function refreshMail() { mails = [] $('#mailList').empty() $('#mailList').append('<il>获取中...</il>') get('bxn-office/mails/user/index', e => { // 这代码谁写的?真是太烂了,我一行就把他五行干掉了(是刚才的我写的) // e = e.replace(/\n^(?!.*(sender|mailDetail|mailItemId)).*$/gm, '').replace(/[\r\n ]+/g, '') // e = e.replace(/<(a|td|span)[^<]*>([^<]*)<\/\1>/g, ',$2') // e = e.replace(/<(a|td|span)[^<]*>([^<]*)<\/\1>/g, ',$2') // e = e.replace(/<tr[^"]*"([^"]*)"[^"]*"([^"]*)"><td[^>]*>/g, '\n,$1,$2').replace(/(.sender{\n|\t.*)/gm, '') // e = e.replace(/^,(.*),(.*),(.*),(.*),(.*),(.{10,10})(.{8,8})$/gm, '{"id":"$1","uid":"$2","name":"$3","title":"$5","time":"$6 $7"},').replace(/\n/g, '') e = e.replace(/.*?mailItemId=(.*?) .*?MailItemId=(.*?)>.*?sender">(.*?) ?<.*?tail">(.*?)<.*?tail">(.*?)</gs, '{"from":0,"id":$1,"uid":$2,"name":"$3","title":"$4","time":"$5"},').split('/td')[0] insertMail(e) }) get('bxn-office/messages/sys/sysInfoList', e => { e = e.replace(/.*?a-id="(.*?)".*?erId="(.*?)".*?d-td t.*?>\n?[\t\n\r]*(.*?)\n?[\t\n\r]*<\/td>.*?>(.*?)</gs, '{"from":1,"id":"$1","uid":"$2","name":"<i>消息</i>","title":"$3","time":"$4"},').split('/td')[0] insertMail(e) }) get('bxn-office/notices/user/received', e => { e = e.replace(/.*?ta-id="(.*?)".*?d-td.*?d-td .*?on"> ?(.*?)<.*?ta-id.*?>(.*?)<(?:.*?d-td){4,4}">[\t\n\r ]*(.*?)[\t\n\r ]*</gs, '{"from":2,"id":"$1","title":"$2","name":"<i>通知</i> - $3","time":"$4"},').split('/td')[0] insertMail(e) }) } function postLogin() { debug('LOGIN DONE.', 'initiate fetching.') if (status != 1) return; if (!user) user = getCookie('gosh'), pwd = getCookie('gowd') document.cookie = "gosh=" + user + ";path=/score/"; document.cookie = "gosh=" + user + ";path=/sso/"; document.cookie = "gowd=" + pwd + ";path=/sso/"; $('#changePwd').val(pwd) get('bxn-library/library/jumpExamreport?jumpUrl=http://36.112.23.77/analysis/auto/%23/autoLogin', e => { $('#scoreOld').attr('href', e) }) get('bxn-portal/portal/osforstudent/index', e => { let f = e.match(/'https:\/\/service.*?'/gs)[0].split("'")[1] $('.service').attr('href', f) $('.serviceLearn').attr('href', f + encodeURIComponent('/fe-pc/b/fe_leco_student/portal/?system_partition_gId=3')) }) get('bxn-portal/portal/api/proxy?username=true&userId=true&needvalidate=true&t=http%3A%2F%2F202.94.10.118%2Fbxn-library%2Fapi%2Flibrary%2FgetLatestBorrowBook%3Fcategory%3D1&resourceId=103519&cache=nocache&systime=0', e => { e = JSON.parse(e) $('#user').text(e.requestParams[0].ownerName) oid = e.requestParams[0].ownerId $('#avatar').attr('src', root + 'avatar/tiny/' + oid) }) refreshMail() } function debug(e, str = '') { $('.debugList').append(`<li class="auto-warp"><b>${e}</b> ${str} <span class="pull-right" style="color:#999">${status}</span></li>`) } function login() { debug('LOGIN.') if (status == 1) return; delCookies() user = $('#loginId').val(), pwd = $('#loginPwd').val() return fetch(root + "sso/login", { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" }, "method": "GET", "mode": "cors", "credentials": 'include' }).then(() => { return fetch('https://43.143.233.184/andlogin', { method: 'POST', headers: { 'Content-type': 'application/json' }, body: JSON.stringify({ user: user, pwd: pwd, cook: getCookie('JSESSIONID') }), credentials: 'include', }) }).then(e => e.text()).then(e => { setStatus((e != 'success') + 1), Promise.resolve() }) } function matches(e) { return e.match(/(^\[\]$|param":"|<tr>|DOCTYPE|in\?username=|requestParams|\"newmessage\"|Sorry, Page Not Found|北师大实验中学--登录)/s) } async function next(e, call, ac, login) { if (e.length < 3000 && !matches(e) && (!e.match('\/login\\?') || login)) { return fetch(getUrl(e), { method: 'GET', credentials: 'include', headers: { Accept: ac } }).then(e => e.text()).then(res => { next(res, call, ac, login) }) } else return call(e), new Promise((resolve, reject) => { }) }// 异步递归嘿嘿嘿,再多 302 也不怕;再加上回调函数,真是妙 function pre(e, url, call) { if (e.match('北师大实验中学--登录')) { debug('OUTDATED CAS! NEED RELOGIN') delCookie('CASTGC', '/') tryLogin() } if (e.length < 3000 && e.match('\/login\\?')) { var name = url.split('/')[0], f = paused.filter(e => e.name == name) debug('FAILED', url) if (url.match('\/login\\?')) return if (f.length) f[0].arr.push(url), f[0].carr.push(call) else { paused.push({ name: name, arr: [url], carr: [call] }) debug('GET COOKIE...') get(name + '/casfailed.jsp', () => { let f = paused.filter(e => e.name == name)[0] for (let i = 0; i < f.arr.length; i++)get(f.arr[i], f.carr[i]) paused.splice(paused.indexOf(f), 1) }, '*/*', 1) } } else { $('#bxn' + url.split('bxn')[1].split(/(\/|%2F)/)[0]).addClass('bg-success').addClass('text-success') if (status == 1) call(e) } } function get(url, call = () => { }, ac = '*/*', login = 0) { console.log("GET", url) debug('GET', url) if (status != 1) return next(root + url, e => { pre(e, url, call); }, ac, login) } function change() { if (status != 1 || pwd == $('#changePwd').val()) return var fd = new URLSearchParams() fd.append('rating', '4') fd.append('ratingWord', '极佳') fd.append('oldPassword', pwd) fd.append('newPassword', $('#changePwd').val()) fd.append('reNewPassword', $('#changePwd').val()) fetch(root + 'bxn-core-uic/uic-public/personal/management/password/save', { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" }, method: 'POST', body: fd, credentials: 'include', }) $('#changeBtn').addClass('btn-success') } let trying = 0 function tryLogin() { if (trying) return debug('LOGIN', 'already in progress.') if (getCookie('CASTGC')) { debug('LOGIN', 'using CAS.') setStatus(1), postLogin() } else if (getCookie('gosh') && getCookie('gosh') != 'null' && getCookie('gowd') != 'null') { debug('LOGIN', 'using stored cookie.') setStatus(0) trying = 1 $('#loginId').val(getCookie('gosh')) $('#loginPwd').val(getCookie('gowd')) login().then(() => { status == 2 ? setStatus(0, 1) : (trying = 0, postLogin()); }) } else debug('LOGIN', 'no available method.'), setStatus(0, 1) } scrollToBottom = () => { (function smoothscroll() { const currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // 已经被卷掉的高度 const clientHeight = document.documentElement.clientHeight; // 浏览器高度 const scrollHeight = document.documentElement.scrollHeight; // 总高度 if (scrollHeight - 10 > currentScroll + clientHeight) { window.requestAnimationFrame(smoothscroll); window.scrollTo(0, currentScroll + (scrollHeight - currentScroll - clientHeight) / 2); } })(); }; var mp = new Map(), ans = new Map() function getPar(e) { if (e === undefined) return '' let g = ans.get(e) if (!g) { if (e.parentId == 'null') g = `{id:'${e.param}',name:'${e.label}',rule:'${e.nextRuleId}'}` else g = getPar(mp.get(e.parentId)) + `,{id:'${e.param}',name:'${e.label}',rule:'${e.nextRuleId}'}` ans.set(e, g) } return g } var target = [], base function delRec(e) { target = target.filter(u => u != e) } function addRec(e, c, l) { if (target.filter(u => u == e).length) return $('#recSel').append(`<li onclick="delRec('${e}');$(this).remove()" style="cursor:pointer"><span style="font-size:10px">${e} ${c}</span> ${l}</li>`) target.push(e) } function getRec(re) { get(`bxn-office/participant-select/rule-id/${re.rule}/param/${re.id}?unwrap=true&_=0`, e => { e = JSON.parse(e) if (e.length == 0) { $('.s-' + re.id + '>a').hide(); return } $('#recList>li').hide() let str = '' for (let i = 0; i < e.length; i++) { mp.set(e[i].param, e[i]) } for (let i = 0; i < e.length; i++) { let par = getPar(e[i]) let full = '' if (e.filter(u => u.parentId == e[i].param).length) full = `setRec([${par}],1)` else full = `setRec([${par}])` if (e[i].nextRuleId === null) full = `addRec('${e[i].param}','${e[i].code}','${e[i].label}')` str += `<li class="${e[i].parentId} s-${e[i].param} ${e[i].nextRuleId === null ? 'endRec' : ''}">${e.filter(u => u.parentId == e[i].param).length ? `${e[i].param.match('1-') ? `<a onclick="setRec([${par}])" style="position: absolute;transform: translateX(-25px);"><span class="glyphicon glyphicon-pencil"></span></a> ` : '<span style="position: absolute;transform: translateX(-15px);">></span>'}<span class="full" onclick="${full}">${e[i].label}` : `<span class="full" onclick="${full}">${e[i].label}`}<span class="pull-right" style="color:#999">${e[i].code ? e[i].code + ' - ' : ''}${e[i].param}</span></span></li>` } $('#recList').append(str) if (re.rule == 'getOrganizationsAndTagsByUserCategoryRule') { $('#recList>li').hide() $('li.1-401,li.4-403,li.3-403,li.2-404').show() } }, 'application/json, text/javascript, */*') } var getBase = [, { id: '1', rid: '1-401', rule: 'getOrganizationsAndTagsByUserCategoryRule', name: '学校(部门)', rname: '老师' }, , { id: '3', rid: '3-403', rule: 'getOrganizationsAndTagsByUserCategoryRule', rname: '家长', name: '学校(班级)' }, { id: '4', rid: '4-403', rule: 'getOrganizationsAndTagsByUserCategoryRule', rname: '学生', name: '学校(班级)' }] function setRec(e, ex = 0) { if (e.length == 0) { $('#recList').html(oof) $('#recNav').empty() } if (!e[0]) return $('#recNav').empty() $('#recNav').append(`<li onclick="setRec([])"><span style="font-size:10px">${getBase[base].id}</span> ${getBase[base].rname}</li>`) let str = '' for (let i = 0; i < e.length; i++) { str += `${i ? ',' : ''}{id:'${e[i].rid || e[i].id}',name:'${e[i].name}',rule:'${e[i].rule}'}` $('#recNav').append(`<li onclick="setRec([${str}],1)"><span style="font-size:10px">${e[i].rid || e[i].id}</span> ${e[i].name}</li>`) } let f = e[e.length - 1] if (ex) { $('#recList>li').hide() $('#recList>li.' + f.id).show() } else { getRec(f) } } function toggleWrite() { $('.boxWrite').is(':visible') ? ($('.box').show(300), $('.boxWrite').hide(300)) : (setTimeout(scrollToBottom, 200), $('.box').hide(300), $('.boxWrite').show(300)); } function sendMail() { var fd = new URLSearchParams() str = '' for (let i = 0; i < target.length; i++) { str += ',' + target[i] } fd.append('filelist', '[]') fd.append('mailItemId', '') fd.append('forwardMailItemId', '') fd.append('replyMailItemId', '') fd.append('targetIds', str.slice(1)) fd.append('subject', $('#writeSub').val()) fd.append('files', '') fd.append('content', $('#writeCt').val()) fetch(root + 'bxn-office/mails/user/sendMail?unwrap=true', { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, method: 'POST', body: fd, credentials: 'include', }).then(e => { $('#writeBtn>span').removeClass('glyphicon-send').removeClass('glyphicon-exclamation-sign').addClass(e.status == 200 ? 'glyphicon-ok' : 'glyphicon-exclamation-sign'); refreshMail() }) } function removeMail(e) { var fd = new URLSearchParams() fd.append('checkmail', e) fetch(root + 'bxn-office/mails/user/removeMail?unwrap=true', { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, method: 'POST', body: fd, credentials: 'include', }).then(refreshMail) } $().ready(() => { $('.e').addClass('reqLogin') $('.e').removeClass('e') tryLogin() $("[data-toggle='tooltip']").tooltip(); $('.recL').hide(300) $('#recList').html(oof) $('.banner').text('庆祝数字校园建站 ' + Math.ceil((new Date().getTime() - 1675136714191) / 86400000) + ' 天') }) oof = `<li onclick="base=1;setRec([getBase[base]])">老师</li><li onclick="base=4;setRec([getBase[base]])">学生</li><li onclick="base=3;setRec([getBase[base]])">家长</li>` </script> <style> .pass { font-weight: bold; font-family: 'Courier New', Courier, monospace; } li { border-bottom: 3px solid #eee; word-wrap: break-word; } li:hover { background-color: #eee; } :is(#recList, #recNav)>li { cursor: pointer; } li.endRec { color: #1a5e93 } .box { transition-duration: 300ms; min-height: 210px; } .box::before { content: ''; display: block; width: 100%; height: 3px; margin-top: 10px; border-bottom: 1px solid; border-image: linear-gradient(to right, transparent, #6aaad8, #75ddb6, transparent) 1; } .box:hover::before { border-bottom: 3px solid; border-image: linear-gradient(to right, transparent, #6aaad8, #75ddb6, transparent) 1; } .box:hover { background-image: linear-gradient(#faffef, transparent); } .page-header.nohr { margin-bottom: 0; border-bottom: none; } .lim { max-height: 210px; overflow: auto; } .lim:hover { max-height: 500px; overflow: auto; } .boxMail::-webkit-scrollbar { width: 5px; } .boxMail::-webkit-scrollbar-track { background-color: transparent; } .boxMail::-webkit-scrollbar-thumb { background-color: transparent; border-radius: 2px; } .boxMail:hover::-webkit-scrollbar-thumb { background-color: #bbb; } .mail, .mail b { transition-duration: 300ms; } .mail b { font-weight: 400; } .mail.active { background-image: linear-gradient(to right, #fffaf0, #f4f2ef); border-left: 3px solid #ccc; padding-left: 5px; } .mail.active b { font-weight: 700; font-size: 16px; } span.full { width: 100%; display: inline-block; cursor: pointer; } .breadcrumb { padding: 0; margin-bottom: 5px; } .auto-warp { word-wrap: break-word; word-break: break-all; overflow: hidden; transition-duration: 500ms; max-height: 22.4px; } .auto-warp:hover { max-height: 100px; } </style> </head> <body> <div class="page-header nohr"> <h2><img src="RC.png" width="32px" style="position:relative;top:-4px"> 数字校园 <small id="detail" style="display:none">.</small> <button class="btn btn-default btn-xs"> <span class="glyphicon glyphicon-question-sign" onclick="$('#detail').toggle(300)"></span> </button> </h2> <span id="loginSt" class="label label-default">未登录</span> <span id="user" class="label label-default">-</span> <button class="btn btn-danger btn-xs e" onclick="postLogin()" title="刷新数据"> <span class="glyphicon glyphicon-refresh"></span> </button> <button class="btn btn-danger btn-xs e" onclick="delCookies(1);setStatus(0)" onmouseenter="$('#double-off').css('scale','100%')" onmouseleave="$('#double-off').css('scale','0')" title="退出登录"> <span class="glyphicon glyphicon-log-out"></span> </button> <button id="double-off" class="btn btn-danger btn-xs e" onclick="delCookies(2);location.reload()" onmouseenter="$('#double-off').css('scale','100%')" onmouseleave="$('#double-off').css('scale','0')" style="scale:0;transition-duration: 1000ms;" data-toggle="tooltip" data-placement="right" title="全部重置"> <span class="glyphicon glyphicon-off"></span> </button> <button class="btn btn-danger btn-xs login" onclick="delCookies(2);location.reload()" data-toggle="tooltip" data-placement="right" title="全部重置"> <span class="glyphicon glyphicon-off"></span> </button> <img id="avatar" style="position:absolute;right:10px;top:10px;"> </div> <div class="col-md-4 col-sm-6 box"> <div class="page-header"> <h3><span class="glyphicon glyphicon-link"></span> 链接</h3> </div> <div class="btn-group" style="margin-bottom: 10px;"> <a id="scoreOld" class="btn btn-default e" target="_blank">心意答</a> <a class="btn btn-default e" href="/score" target="_blank"><span class="glyphicon glyphicon-stats"></span> 成绩整理</a> </div> <div class="btn-group" style="margin-bottom: 10px;"> <a class="btn btn-default e service" target="_blank"><span class="glyphicon glyphicon-tasks"></span> 中台</a> <a class="btn btn-default e serviceLearn" target="_blank"><span class="glyphicon glyphicon-book"></span> 学习平台</a> </div> </div> <div class="col-md-4 col-sm-6 box"> <div class="page-header"> <h3><span class="glyphicon glyphicon-user"></span> 账号 <ul class="btn-group breadcrumb debug" style="display: none;font-size:10px;top:5px"> <li id="bxn-portal" onclick="get('bxn-portal/portal/osforstudent/index')">bxn-portal</li> <li id="bxn-core-uic" onclick="get('bxn-core-uic/uic/index')">bxn-core-uic</li> <li id="bxn-library" onclick="get('bxn-library/library/jumpExamreport?jumpUrl=')">bxn-library</li> <li id="bxn-office" onclick="get('bxn-office/mail/index')">bxn-office</li> </ul> </h3> </div> <button class="btn btn-default e" onclick="$('#change').toggle(200)"><span class="glyphicon glyphicon-edit"></span> 修改密码</button> <button class="btn btn-default e" onclick="$('.debug').toggle(200)">debug</button> <div class="login"> <br> <div class="input-group"> <span class="input-group-addon">账号</span> <input id="loginId" type="id" class="pass form-control" placeholder="20222222"> </div> <br> <div class="input-group"> <span class="input-group-addon">密码</span> <input id="loginPwd" type="password" class="pass form-control" placeholder="password"> <span class="input-group-btn"> <button class="btn btn-default" type="button" onclick="login().then(postLogin)"> <span class="glyphicon glyphicon-log-out"></span> 登录 </button> </span> </div> </div> <div class="debug" style="display: none;"> <button class="btn btn-default btn-xs" onclick="$('.debugList').empty()"><span class="glyphicon glyphicon-trash"></span> 清除</button> <ul class="debugList list-unstyled" style="font-family: 'Courier New', Courier, monospace;"></ul> </div> <div id="change" style="display: none;"> <br> <div class="input-group"> <span class="input-group-addon">新密码</span> <input id="changePwd" type="password" class="pass form-control" placeholder="password" onmouseenter="this.type='id'" onmouseleave="this.type='password'"> <span class="input-group-btn"><button id="changeBtn" class="btn btn-default" type="button" onclick="change()">修改</button></span> </div> </div> </div> <div class="col-md-4 col-sm-6 box boxMail lim"> <div class="page-header"> <h3><span class="glyphicon glyphicon-envelope"></span> 消息 <button class="btn btn-default btn-xs e" onclick="toggleWrite();">写信</button> <button class="btn btn-default btn-xs e" onclick="$('.mail-text').hide(300);$('.mail').removeClass('active')">全部收起</button> <button class="btn btn-default btn-xs e pull-right" onclick="$('.boxMail').toggleClass('col-sm-6').toggleClass('col-md-4').toggleClass('col-sm-12').toggleClass('lim');$('.full-time').toggle();$(this).children().toggleClass('glyphicon-remove').toggleClass('glyphicon-fullscreen')"> <span class="glyphicon glyphicon-fullscreen"></span> </button> </h3> </div> <ul id="mailList" class="list-unstyled e"></ul> </div> <div class="col-sm-12 box boxWrite" style="display: none;"> <div class="page-header"> <h3><span class="glyphicon glyphicon-pencil"></span> 写信 <button class="btn btn-default btn-xs e" onclick="toggleWrite();">关闭</button> </h3> </div> <div class="rec"> 收件人: <ul id="recSel" class="breadcrumb list-unstyled e" style="display: inline-block;"></ul> <button class="btn btn-default btn-xs e" onclick="$('.recL').toggle(300,()=>$('#recList').html(oof));$('#recNav').empty();$(this).children().toggleClass('glyphicon-chevron-down')"><span class="glyphicon glyphicon-plus"></span></button> <div> <ul id="recNav" class="recL breadcrumb list-unstyled e"></ul> <ul id="recList" class="recL list-unstyled e"></ul> </div> </div> <br> <form class="bs-example bs-example-form" role="form"> <div class="col-md-6"> <div class="input-group"> <!-- <span class="input-group-addon"></span> --> <input id="writeSub" class="form-control" placeholder="标题"> <span class="input-group-btn"> <button id="writeBtn" type="button" class="btn btn-default" onclick="sendMail()" id="chatBtn" style="height: 34px;"><span class="glyphicon glyphicon-send"></span> 发送</button> </span> </div> <textarea id="writeCt" type="text" class="form-control" autocomplete="off" style="resize:vertical;top:-1px;position: relative;" placeholder="内容"></textarea> </div> </form> </div> <div style="position:fixed;bottom:10px;left:10px;color:#ccc"> 北师大实验中学 </div> <div style="position:fixed;bottom:10px;right:10px;color:#ccc" class="banner"> 庆祝数字校园建站 </div> </body>