unserver-unify
Version:
234 lines (225 loc) • 7.13 kB
JavaScript
;
angular.module('bamboo.course').controller('KnowledgesCtrl', function($stateParams, $localStorage, ExamService, CommonService, loginService, ApiService, $scope, $q) {
var self = this;
/* CourseApi.getKnowledges($stateParams.cid, function(list) {
console.log(list);
self.Knowledges = list;
});*/
this.pid = $stateParams.pid;
this.totalq=0;
$scope.knowledgesData = [];
function getcalresult(val, key) {
// console.log(key);
var total = self.counters[key];
if (total) {
// self.totalq+=total;
// console.log(self.totalq);
var options = {
total: total,
counter: val.counter,
qs: val.qs,
completeRate: val.qs * 100 / total,
correctRate: val.correct * 100 / (val.total),
}
if (options.qs > total) {
options.qs = total;
}
// console.log(options);
return options;
}
// console.log(val);
// console.log(key);
// console.log(self.counters[key]);
return {};
}
this.totalscore=0;
function getKnowLedgeSummary() {
var deferred = $q.defer();
var info = {
action: "getKnowledgeTestSummary",
cid: $stateParams.cid,
};
// console.log('--regen cat');
ExamService.examApi(info, function(result) {
console.log(result);
if (result) {
angular.forEach(self.Knowledges, function(item) {
var key = item.key;
// console.log(key);
if (result[key]) {
item.result = getcalresult(result[key], key);
self.totalscore+=result[key].score*10;
}
if (item.items && item.items.length) {
angular.forEach(item.items, function(_item) {
var _key = _item.key;
if (result[_key]) {
self.totalscore+=result[_key].score*10;
// console.log(_key,result[_key]);
_item.result = getcalresult(result[_key], _key);
}
})
}
})
// console.log(self.Knowledges);
deferred.resolve(true);
} else {
deferred.resolve(false);
}
});
return deferred.promise;
}
function getKnowledgeData() {
var deferred = $q.defer();
var info = {
cid: $stateParams.cid,
id: loginService.user._id,
action: "getusercourseknowledges",
}
// console.log(info);
ApiService.post('/user', info).then(function(result) {
if (result.data.success) {
var examresult = result.data.data;
// console.log(examresult);
angular.forEach(self.Knowledges, function(item) {
var key = item.key;
// console.log(key);
for (var _tkey in examresult) {
// console.log(_tkey);
if (_tkey.indexOf(key) == 0) {
console.log('matched');
if (item.exam) {
item.exam.correct += examresult[_tkey].correct || 0;
item.exam.counter += examresult[_tkey].counter || 0;
} else {
item.exam = examresult[_tkey];
}
}
}
if (item.items && item.items.length) {
angular.forEach(item.items, function(_item) {
var _key = item.key;
for (var _tkey in examresult) {
if (_tkey.indexOf(_key) == 0) {
if (_item.exam) {
_item.exam.correct += examresult[_tkey].correct || 0;
_item.exam.counter += examresult[_tkey].counter || 0;
} else {
_item.exam = examresult[_tkey];
}
}
}
})
}
})
// console.log(self.Knowledges);
deferred.resolve(true);
} else {
deferred.resolve(false);
}
});
return deferred.promise;
}
//getKnowLedgeSummary();
function getKnowLedges() {
var info = {
action: "getCourseKnowledgeQuestionCounters",
lid: $stateParams.cid,
// key:'Physics',
};
// console.log('--regen cat');
ExamService.examApi(info, function(result) {
console.log(result)
var category = {};
angular.forEach(result.courses, function(course, index) {
if (course.knowledgeCat) {
category = angular.merge({}, category, course.knowledgeCat);
}
});
if (result.cat) {
category = angular.merge({}, category, result.cat);
}
var resultCopy = angular.copy(result);
console.log(category);
if(self.pid&&self.practice.knowledges&&resultCopy.cat)
{
var cat = {};
var counterinfo = {};
angular.forEach(self.practice.knowledges,function(val,key){
//var index = result.cat.indexOf(val);
if(category[val]){
cat[val] = category[val];
}
if(resultCopy.counterinfo[val]){
counterinfo[val] = resultCopy.counterinfo[val];
}
});
category = cat;
if(result.counterinfo){
result.counterinfo = counterinfo;
}
}
console.log(result);
self.counters = result.counterinfo;
angular.forEach(self.counters,function(val,key){
self.totalq+=val;
// console.log(key);
// console.log(val);
})
var catList = [];
CommonService.getArray(category, catList, 0, '');
self.Knowledges = catList;
getKnowledgeData().then(function(res){
getKnowLedgeSummary().then(function(result){
console.log(self.Knowledges);
generateKnowledgeResult(angular.copy(self.Knowledges));
});
});
// console.log(catList);
// callback(catList);
});
}
function generateKnowledgeResult(items)
{
angular.forEach(items,function(val){
var arr = val.key.split(',');
if(arr.length!=1){
val.subkey = arr[arr.length-1];
val.parent = 1;
}
$scope.knowledgesData.push(val);
if(val.items){
generateKnowledgeResult(val.items);
}
});
}
if(self.pid){
getPracticeInfo();
} else {
getKnowLedges();
}
function getPracticeInfo()
{
var info = {
action: 'getKnowledgeGroup',
id: self.pid,
};
ApiService.post('/lcourses', info).then(function(result) {
if(result.data.success){
self.practice = result.data.data || {};
console.log(self.practice);
getKnowLedges();
}
});
}
this.gotoTest = function(node) {
// console.log(node);
$localStorage.userTestKey = node.key;
ExamService.redirect2Uapp($stateParams.cid, 'knowledge');
}
this.gotoPractise = function(node) {
// console.log(node);
$localStorage.userTestKey = node.key;
ExamService.redirect2Practise($stateParams.cid, 'knowledge');
}
});