123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <html>
- <head>
- <meta charset="UTF-8">
- <title>作业批改 - 旧版</title>
- <link rel="stylesheet" href="css/index.css">
- <link rel="stylesheet" href="http://cdn.staticfile.org/semantic-ui/2.3.1/semantic.css">
- </head>
- <body style="background-color: #E5E4E5;overflow-x: hidden;">
- <div style="margin-top:10px;">
- <div style="width:50px;float:left;">
- <ul id="toolsul" class="tools">
- <li data-type="right" class="active" title="整题正确">
- <i class="icon-right-select" data-default='icon-right-black'></i>
- </li>
- <li data-type="wrong" title="整题错误">
- <i class="icon-wrong-black" data-default='icon-wrong-black'></i>
- </li>
- <li data-type="smallright" title="题目内单个正确">
- <i class="icon-right-small-black" data-default='icon-right-small-black'></i>
- </li>
- <li data-type="smallwrong" title="题目内单个错误">
- <i class="icon-wrong-small-black" data-default='icon-wrong-small-black'></i>
- </li>
- <li data-type="rectangle" title="错题圈定">
- <i class="icon-tools icon-square-black" data-default="icon-tools icon-square-black"></i>
- </li>
- <li data-type="remove" title="橡皮擦">
- <i class="icon-tools icon-remove-black" data-default='icon-tools icon-remove-black'></i>
- </li>
- <li onclick="cutFun()" title="成绩查看">
- <i class="icon-submit-black" data-default='icon-submit-black'></i>
- </li>
- </ul>
- </div>
- <div id="canvasDiv" class="canvasDiv" style="width:auto;height: auto;">
- <canvas id="c" height="890">请使用支持HTML5的浏览器</canvas>
- </div>
- <div style="color:red;margin-top: 10px;margin-left: 60px;">注意:错题必须使用工具栏“错题圈定”圈定错题。</div>
- <div id="wrongImg"></div>
- </div>
- <script src="/js/jquery.min.js"></script>
- <script src="/js/fabric.min.js"></script>
- <script src="js/check-bak.js"></script>
- <script src="js/canvasZoom.js"></script>
- <script src="https://unpkg.com/qiniu-js@2.2.2/dist/qiniu.min.js"></script>
- <script src="http://cdn.staticfile.org/semantic-ui/2.3.1/semantic.js"></script>
- <script>
- var qiniuToken = undefined;
- jQuery.ajax({
- type: "GET",
- cache: false,
- dataType: "jsonp",
- url: 'http://127.0.0.1:8360/qiniu/gettoken',
- data: {},
- success: function (res) {
- qiniuToken = res.token;
- }
- });
- canvas.on("mouse:up", function () {
- if (window.drawType && (window.drawType == "wrong" || window.drawType == "smallwrong")) {
- //错题批注
- // $('.ui.modal').modal();
- }
- });
- function cutFun() {
- var objs = canvas.getObjects();
- var checkObj = [];
- for (var i = 0; i < objs.length; i++) {
- if (objs[i].type && objs[i].type != 'image') {
- checkObj.push(objs[i]);
- }
- }
- checkObj.sort(function (x, y) { return x.top - y.top; }); //根据控件top排序
- var checkJson = [];
- var itemSmallRight = 0, itemSmallWrong = 0, prevSmallType = true;
- for (var i = 0; i < checkObj.length; i++) {
- switch (checkObj[i].type) {
- case 'smallright':
- ++itemSmallRight;
- break;
- case 'smallwrong':
- ++itemSmallWrong;
- break;
- case 'right':
- case 'wrong':
- case 'rectangle': //框
- prevSmallType = false;
- break;
- default:
- break;
- }
- if (prevSmallType == false || i == (checkObj.length - 1)) {
- //上一个为整题对/错 || 最后一题
- if (itemSmallRight > 0 || itemSmallWrong > 0) {
- checkJson.push({ 'r': 0, 'w': 0, 'sr': itemSmallRight, 'sw': itemSmallWrong, 'url': '' });
- itemSmallRight = 0, itemSmallWrong = 0;
- }
- prevSmallType = true;
- }
- //录入本次大题
- if (checkObj[i].type == 'right') {
- checkJson.push({ 'r': 1, 'w': 0, 'sr': 0, 'sw': 0, 'url': '' });
- } else if (checkObj[i].type == 'wrong') {
- checkJson.push({ 'r': 0, 'w': 1, 'sr': 0, 'sw': 0, 'url': '' });
- }
- //圈定的错图上传
- if (checkObj[i].type == 'rectangle') {
- toImgUpload(checkObj[i], checkObj[i].left, checkObj[i].top, checkObj[i].width, checkObj[i].height);
- }
- }
- // var msg = "";
- // for (var i = 0; i < checkJson.length; i++) {
- // msg += ("第" + (i + 1) + "题:");
- // if (checkJson[i].r) {
- // msg += "全对";
- // } else if (checkJson[i].w) {
- // msg += "全错";
- // } else {
- // msg += "对:" + checkJson[i].sr + "个" + ",错:" + checkJson[i].sw + "个";
- // }
- // msg += "\n";
- // }
- // if (msg) {
- // alert(msg);
- // }
- }
- //转换成图片并上传
- function toImgUpload(cObj, left, top, width, height) {
- canvas.remove(cObj);
- var base64 = canvas.toDataURL({
- format: 'png',
- left: left - 12,
- top: top - 10,
- width: width,
- height: height
- });
- // data:image/png;base64,
- jQuery("#wrongImg").append('<img src="' + base64 + '"/><br />');
- canvas.add(cObj);
- //上传,返回地址
- var putExtra = {
- fname: "",
- params: {},
- mimeType: [] || null
- };
- var config = {
- useCdnDomain: true
- };
- // var contentType = 'image/png';
- // var blob = base64ToBlob(base64.replace('data:image/png;base64,', ''), contentType);
- // var observable = qiniu.upload(blob, "test5.png", qiniuToken, putExtra, config);
- // var subscription = observable.subscribe({
- // next(res) {
- // console.log(res);
- // },
- // error(err) {
- // console.log(err);
- // },
- // complete(res) {
- // console.log(res);
- // }
- // });
- // return "";
- }
- //base64转blob
- function base64ToBlob(base64, contentType, sliceSize) {
- contentType = contentType || '';
- sliceSize = sliceSize || 512;
- var byteCharacters = atob(base64);
- var byteArrays = [];
- for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
- var slice = byteCharacters.slice(offset, offset + sliceSize);
- var byteNumbers = new Array(slice.length);
- for (var i = 0; i < slice.length; i++) {
- byteNumbers[i] = slice.charCodeAt(i);
- }
- var byteArray = new Uint8Array(byteNumbers);
- byteArrays.push(byteArray);
- }
- var blob = new Blob(byteArrays, { type: contentType });
- return blob;
- }
- </script>
- </body>
- </html>
|