app.controller('JudgeCtrl', ['$rootScope','$scope','$timeout',function($rootScope, $scope,$timeout) { $scope.currStep = 'LoginName'; $scope.clientMac = ''; $scope.isWillCheckPhoneCode = false; $scope.checkCodeForm = { phone_code : "" } $scope.sendPhoneCodeSuccess = ""; $scope.showScorePanel = false; $scope.judge_scores = []; //document.title = "无纸化评分"; //解决弹出输入框 ,tabbar上升遮盖的问题 也可用css响应式处理 $scope.win_height = $(window).height(); $(window).resize(function () { if(($scope.currStep != 'LoginName' && $scope.currStep != 'ConfrimJudge') ){ if($(window).height() < $scope.win_height){ $("#tabbar").hide(); }else{ $("#tabbar").show(); } } }); $scope.changeLoginName = function($event) { if ($event.target.value == '' || $event.target.value.length < 3) return; if ($event.keyCode == 13) { $scope.queryJudge($.trim($event.target.value)); } } $scope.showLoginName = function() { $scope.group = undefined; $scope.room = undefined; $scope.judge = undefined; $scope.currStep = 'LoginName'; $timeout(function() { $('#login_name').focus(); }, 100); } //秘钥验证登陆 $scope.queryJudge = function(login_name) { $rootScope.ajaxRequest({ url : '../exam/judge/grade/info/loginname.htm', data : { login_name : login_name } }, function(response) { $scope.group = response.map.Room.group; $scope.room = response.map.Room; $scope.judge = response.map.Judge; // 单独评分 手机短信验证 $scope.isWillCheckPhoneCode = (($scope.ParamMap['ExamJudgeGradeType'] !== undefined && $scope.ParamMap['ExamJudgeGradeType'].param_value == 'Judge')?true:false); if(!$scope.isWillCheckPhoneCode) $scope.currStep = 'ConfrimJudge'; }) } $scope.showGroup = function() { $rootScope.ajaxRequest({ url : '../exam/judge/grade/group/list.htm', data : { exam_date : '2020-02-12' } }, function(response) { $scope.groupArray = response.array; $scope.currStep = 'ChooseGroup'; }) } $scope.chooseGroup = function(group) { $scope.group = group; $rootScope.ajaxRequest({ url : '../exam/judge/grade/room/list.htm', data : { exam_date : '2020-02-12', ly_group_id : group.ly_group_id } }, function(response) { $scope.roomArray = response.array; $scope.currStep = 'ChooseRoom'; }) } $scope.chooseRoom = function(room) { $scope.room = room; $rootScope.ajaxRequest({ url : '../exam/judge/grade/judge/list.htm', data : { ly_room_id : room.ly_room_id } }, function(response) { $scope.judgeArray = response.array; $scope.currStep = 'ChooseJudge'; }) } $scope.chooseJudge = function(judge) { $scope.judge = judge; $scope.currStep = 'ConfrimJudge'; } $scope.judgeLogin = function() { // 生成mac $rootScope.ajaxRequest({ url : '../exam/judge/grade/login.htm', data : { ly_room_id : $scope.room.ly_room_id, judge_id : $scope.judge.judge_id, login_name : $scope.judge.login_name, client_mac : ($scope.judge.room_id + '_' + $scope.judge.judge_seq + "_" + $scope.judge.room_id+"_"+$scope.clientMac) } }, function(response) { $scope.ExamParamMap = response.map; var key = ""; angular.forEach(response.map.Judge.des_type, function(k) { if (k == '1') key += response.map.Judge.judge_id; else if (k == '2') key += response.map.Judge.judge_seq; else if (k == '3') key += response.map.Judge.login_name; else if (k == '4') key += $scope.room.ly_room_id; else if (k == '5') key += $scope.room.room_key; else if (k == '6') key += $scope.room.ly_group_id; else if (k == '7') key += $scope.room.ly_agent_id; }); // 444111 if (key.length < 16) { var len = 16 - key.length; for (var i = 0; i < len; i++) key = "0" + key; } key = key.substring(0, 16); response.map.Judge.des_key = key; response.map.Judge.real_exam_seq = 0; $scope.judge = response.map.Judge; $scope.StdArray = []; $scope.nextExamSeq(); $scope.currStep = 'Examing'; $scope.scoreStdTotal = 0; setTimeout(function(){ if($scope.pageHeight == 0){ $scope.initPageHeight(); } },1000); }) } /* $scope.pageHeight = 0; $scope.initPageHeight = function() { $scope.pageHeight = window.innerHeight; } */ /*************************************************************************** * 评分相关函数 */ $scope.getParamValue = function(param_name, default_value) { if ($scope.ParamMap == undefined) return undefined; if ($scope.ParamMap[param_name] == undefined) return default_value; return $scope.ParamMap[param_name].param_value; } //保存考生分数: $scope.saveStdScore = function() { $scope.gradeScore(); } //跳转考生列表 $scope.goStdList = function() { $scope.showScorePanel = false; } /*************************************************************************** * 查找下一个考生 */ $scope.nextExamSeq = function() { if ($scope.judge == undefined) return; if ($scope.group.judge_cache_num<=$scope.StdArray.length) { // 超出等待限制 $timeout($scope.nextExamSeq, parseInt($scope.getParamValue('NextExamSeqTicketSeconds', '5000'), 10)); return; } $scope.last_next_time = new Date(); $rootScope.ajaxRequest({ url : '../exam/judge/grade/std/next.htm', data : $scope.judge, error : function() { // 网络错误等情况,要考虑延迟的问题 $timeout($scope.nextExamSeq, parseInt($scope.getParamValue('NextExamSeqTicketSeconds', '5000'), 10)); } }, function(data) { $scope.lastRequestTime = data.map.QueryNextTime; $scope.jsonValue = angular.toJson(data); var std = data.map.ExamStd; if(data.map.ExVideo && data.map.ExVideo['video_file']) std['material_file'] = data.map.ExVideo['video_file']; if (data.map.RealExamSeq) { $scope.judge.real_exam_seq = data.map.RealExamSeq; console.log(data.map.RealExamSeq); } if (std && std.std_id) { // 是否是新考生 var flag = true; for (var k = 0; k < $scope.StdArray.length; k++) { if ($scope.StdArray[k].std_id - std.std_id == 0) { flag = false; return; } } if (flag) { std.SubjectArray = data.map.SubjectArray; var avoid = false; angular.forEach(std.SubjectArray, function(sb) { if (sb.judge_avoid == 'Active') { avoid = true; } else { if (sb.judge_record_score != undefined && sb.judge_record_score != sb.judge_score) { sb.judge_score = sb.judge_record_score; } } }); // 该考生被回避 if (avoid) { angular.forEach(std.SubjectArray, function(sb) { sb.judge_avoid = 'Active'; sb.judge_score = undefined; sb.judge_record_score = undefined; }); std.avoid_flag = 'Active'; } else { std.avoid_flag = undefined; } std.tracksArray = data.map.TracksArry; $scope.StdArray.push(std); // 如果当前考生不为空,判断是否焦点要自动下移 if ($scope.currentStd != undefined) { // 判断是否给过分 var score_flag = true; angular.forEach($scope.currentStd.SubjectArray, function(sb) { if (sb.judge_score == undefined && sb.judge_avoid != 'Active') { score_flag = false; } }); if (score_flag) { // 所有科目已经给过分,光标下移 $scope.chooseStd(std); } } else { $scope.chooseStd(std); } $scope.checkGradeTotol(); } $scope.judge.real_exam_seq = std.real_exam_seq; // 有新考生,1秒轮询 $timeout($scope.nextExamSeq, 1000); } else { // 没有新考生,按照规定的时间去轮询 $timeout($scope.nextExamSeq, parseInt($scope.getParamValue('NextExamSeqTicketSeconds', '5000'), 10)); } }); } /*************************************************************************** * 选择某个考生 */ $scope.chooseStd = function(std) { var avoid = false; angular.forEach(std.SubjectArray, function(sb) { if (sb.judge_avoid == 'Active') { avoid = true; } else { if (sb.judge_record_score != undefined && sb.judge_record_score != sb.judge_score) { sb.judge_score = sb.judge_record_score; } } }); // 该考生被回避 if (avoid) { angular.forEach(std.SubjectArray, function(sb) { sb.judge_avoid = 'Active'; sb.judge_score = undefined; sb.judge_record_score = undefined; }); std.avoid_flag = 'Active'; } else { std.avoid_flag = undefined; } // 首次自动加载初始化视频 if(!$scope.currentStd){ $scope.currentStd = std; //$scope.showScorePanel == true; /* setTimeout(function(){ var v = document.getElementById('video-player'); if(v){ $scope.showVideo(); $scope.first_load = false; } },2000); */ } // test // $scope.currentStd['material_file'] = 'http://player.alicdn.com/video/aliyunmedia.mp4' ; if (std.SubjectArray.length == 1) { $scope.chooseSubject(std.SubjectArray[0]); } else { $scope.scoreStep = 'subjectPanel'; } } /*************************************************************************** * 点击列表选择某个考生 */ $scope.clickChooseStd = function(std) { var avoid = false; angular.forEach(std.SubjectArray, function(sb) { if (sb.judge_avoid == 'Active') { avoid = true; } else { if (sb.judge_record_score != undefined && sb.judge_record_score != sb.judge_score) { sb.judge_score = sb.judge_record_score; } } }); // 该考生被回避 if (avoid) { angular.forEach(std.SubjectArray, function(sb) { sb.judge_avoid = 'Active'; sb.judge_score = undefined; sb.judge_record_score = undefined; }); std.avoid_flag = 'Active'; } else { std.avoid_flag = undefined; } $scope.currentStd = std; $scope.showScorePanel = true; setTimeout(function(){ var scoreDomArr = document.getElementsByName("judge_scores"); for(var i=0;i= score.score_min; value = value - (score.score_tick)) { var score_value = value; if (value < score.score_min) score_value = score.score_min; array.push({ score_value : score_value }); } $scope.currentScore = score; $scope.scoreArray = array; } /*************************************************************************** * 对某个科目进行评分(未提交) */ $scope.gradeScore = function() { var scoreDomArr = document.getElementsByName("judge_scores"); var score_Arr = []; var subject_id_Arr = []; for(var i=0;i falsePosition && falsePosition != -1) { // alert('前面的考生未打分,请打分后在提交分数!'); $.alert("前面的考生未打分,请打分后在提交分数!"); $scope.currentStd = $scope.StdArray[falsePosition]; return ; } var array = new Array(); for (var i = 0; i < $scope.StdArray.length; i++) { if ($scope.StdArray[i].score_flag == true) { var confirm_score_value = ""; for (var k = 0; k < $scope.StdArray[i].SubjectArray.length; k++) { var subject = $scope.StdArray[i].SubjectArray[k]; confirm_score_value = confirm_score_value + (k > 0 ? "
" : "") + subject.subject_name + "【" + (subject.judge_avoid == 'Active' ? "回避" : subject.judge_score) + "】"; } $scope.StdArray[i].confirm_score_value = confirm_score_value; array.push($scope.StdArray[i]); } else { break; } } if (array.length == 0) return; $scope.confirmStdArray = array; $scope.currStep = 'ConfirmScore'; } /*************************************************************************** * 查看分数 */ $scope.lookScore = function() { $rootScope.ajaxRequest({ url : '../exam/judge/grade/judge/lookScore.htm', data : { room_id : $scope.room.ly_room_id, judge_id : $scope.judge.judge_id } }, function(response) { $scope.stdScoreArray = response.array; }); $scope.currStep = 'LookScore'; } // 选中上一个考生 $scope.chooseLastStd = function(){ // 当前选中考生 var curStd = $scope.currentStd; if(!curStd) return; for (var k = 0; k < $scope.StdArray.length; k++) { var std = $scope.StdArray[k]; if (std.std_id === curStd.std_id){ if (k>0){ $scope.currentStd = $scope.StdArray[k-1]; //$scope.changeVideoSource($scope.currentStd); $scope.clickChooseStd($scope.currentStd); break; }else{ // alert('已经是第一个考生!') $.alert("已经是第一个考生!"); } } } } // 选中下一个考生 $scope.chooseNextStd = function(){ // 当前选中考生 var curStd = $scope.currentStd; if(!curStd) return; for (var k = 0; k < $scope.StdArray.length; k++) { var std = $scope.StdArray[k]; if (std.std_id === curStd.std_id){ if ((k+1) < $scope.StdArray.length){ $scope.currentStd = $scope.StdArray[k+1]; //$scope.changeVideoSource($scope.currentStd); $scope.clickChooseStd($scope.currentStd); break; }else{ // 无下一个考生 提示 TODO // alert('已经是最后一个考生!') $.alert('已经是最后一个考生!'); } } } } // aes加密 $scope.aesValue = function(value) { var key = CryptoJS.enc.Utf8.parse($scope.judge.des_key); var str = CryptoJS.enc.Utf8.parse(value); var base64 = CryptoJS.enc.Base64.stringify(str); var encrypted = CryptoJS.AES.encrypt(str, key, { mode : CryptoJS.mode.ECB, padding : CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } /*************************************************************************** * 提交分数 */ $scope.submitScore = function() { var std = undefined; $scope.commitScoreFlag = true; for (var i = 0; i < $scope.confirmStdArray.length; i++) { if ($scope.confirmStdArray[i].commit_flag != true) { std = $scope.confirmStdArray[i]; break; } } if (std == undefined) { $scope.commitScoreFlag = undefined; $scope.currentSubject = undefined; $scope.currentScore = undefined; $scope.currentStd = undefined; // 已经完成评分 $scope.confirmStdArray = []; $scope.currStep = 'Examing'; if ($scope.StdArray.length > 0) { $scope.chooseStd($scope.StdArray[0]); } return; } if ($scope.requestingStdId == undefined) { $scope.requestingStdId = std.std_id; $scope.submitStdScore(std); } // 1秒钟等待 $timeout($scope.submitScore, 1000); } /*************************************************************************** * 提交分数,单个考生 */ $scope.submitStdScore = function(std) { angular.forEach(std.SubjectArray, function(sb) { sb.room_id = $scope.room.ly_room_id; sb.agent_id = $scope.judge.agent_id; sb.judge_id = $scope.judge.judge_id; sb.judge_seq = $scope.judge.judge_seq; sb.real_exam_seq = std.real_exam_seq; if (sb.judge_avoid == 'Active') std.judge_avoid = 'Active'; }); var data = angular.extend({}, $scope.judge, { score_json : $scope.aesValue(angular.toJson(std.SubjectArray)), std_id : std.std_id, real_exam_seq : std.real_exam_seq, judge_avoid : std.judge_avoid, remark: std.remark }); $rootScope.ajaxRequest({ url : '../exam/judge/grade/std/score.htm', data : data, error : function() { //$scope.submitStdScore(std); //出现评分分差,跳转到打分界面 $scope.confirmStdArray = []; $scope.requestingStdId = undefined; } }, function(response) { std.commit_flag = true; $scope.scoreStdTotal = $scope.scoreStdTotal - 1; // 移除队列 for (var i = 0; i < $scope.StdArray.length; i++) { if ($scope.StdArray[i].std_id == std.std_id) { $scope.StdArray.splice(i, 1); break; } } $scope.requestingStdId = undefined; }) } $scope.cancelConfirm = function() { $scope.currStep = 'Examing'; $scope.showScorePanel = false; // setTimeout(function(){ // var v = document.getElementById('video-player'); // if(v){ // $scope.showVideo(); // $scope.first_load = false; // } // // },1000); } $scope.showJudge = function() { $scope.modifyJudge = angular.extend({}, $scope.judge, {}); $scope.currStep = 'editJudge'; } $scope.toExaming = function() { $scope.currStep = 'Examing'; } $scope.changeJudge = function() { $rootScope.ajaxRequest({ url : '../exam/judge/grade/judge/modify.htm', data : $scope.modifyJudge }, function(response) { $scope.judge = response.entity; $.toast("评委信息已修改", function() { console.log('close'); }); }) } $scope.exitJudge = function() { $scope.judge = undefined; $scope.currentSubject = undefined; $scope.currentScore = undefined; $scope.currentStd = undefined; $scope.scoreStdTotal = 0; $scope.StdArray = []; $scope.confirmStdArray = undefined; $scope.requestingStdId == undefined; if ($scope.groupArray != undefined) { $scope.chooseRoom($scope.room); } else { $scope.currStep = 'LoginName'; } } $scope.getBatchName = function(tracks) { var current_batch = 1; angular.forEach($scope.currentStd.tracksArray, function(t) { if (t.tracks_batch > current_batch) current_batch = t.tracks_batch; }); if (current_batch == 1) { return ''; } if (tracks.tracks_batch == 2) return '复试:' return '三试:' } $scope.getTracksClass = function(tracks) { var current_batch = 1; angular.forEach($scope.currentStd.tracksArray, function(t) { if (t.tracks_batch > current_batch) current_batch = t.tracks_batch; }); if (current_batch == tracks.tracks_batch) { return 'text-success'; } return ''; } $scope.login = function() { var login_name = document.getElementById('login_name').value; if(!login_name) { $.alert("请输入评委登录账号!"); // alert('请输入评委登录账号!'); return; } $scope.queryJudge($.trim(login_name)); } $rootScope.ajaxRequest({ url : '../exam/judge/grade/param.htm' }, function(response) { var map = {}; for (var i = 0; i < response.array.length; i++) { map[response.array[i].param_name] = response.array[i]; } $scope.ParamMap = map; if($scope.getParamValue('JudgeLoginType','LoginName') == 'ChooseGroup') { $scope.showGroup(); } }); /*************************************************************************** * 获取客户端的MAC地址 */ $rootScope.ajaxRequest({ url:'../exam/judge/grade/judge/getMac.htm' }, function(response) { if(response) { $scope.clientMac = response.entity; } }); $timeout(function() { $('#login_name').focus(); }, 100); } ])