UNPKG

unserver-unify

Version:

198 lines (193 loc) 6.95 kB
'use strict'; angular.module('bamboo.course').service('certBizModel', function(ApiService, $q, CertService, loginService, $filter, userBizModel, CommonService, $timeout) { var self = this; var user = loginService.user; /** * @certTpl - cert template * @serial - cert NO * @cert - cert data * @ICID - Fin Number */ var certTpl, serial, cert, ICID, certOrientation; function getCertTplByCourseId(courseId) { var deferred = $q.defer(); var promise = deferred.promise; CertService.getCertTplByCourseId(courseId, function(data) { console.log(data); certTpl = data.cert; serial = data.serial; certOrientation = data.orientation; deferred.resolve(data); }); return promise; } function getCertById(certId) { var deferred = $q.defer(); var promise = deferred.promise; var info = { action: 'getcert', id: certId }; ApiService.post('/user', info).then(function(result) { console.log(result); if (result.data.success) { cert = result.data.data; deferred.resolve(result.data.data); } }, function(error) { deferred.reject(result.data.data); }); return promise; } function getICID() { var deferred = $q.defer(); var promise = deferred.promise; userBizModel.getProfile().then(function(profile) { console.log(profile); ICID = profile.icId; deferred.resolve(ICID); }, function(error) { deferred.reject(error); }); return promise; } function drawCertification(certinfo) { console.log(certinfo); var circle_canvas = document.getElementById(certinfo.ElementId); var context = circle_canvas.getContext("2d"); var background = new Image(); background.setAttribute('crossOrigin', 'anonymous'); var data = certinfo.certBase64Data; console.log(certinfo); background.onload = function() { console.log('--- step background onload ---'); circle_canvas.width = background.width * 1; circle_canvas.height = background.height * 1; console.log(circle_canvas); context.drawImage(background, 0, 0, circle_canvas.width, circle_canvas.height); if(CommonService.isIE()){ CommonService.convertPNG(data,circle_canvas.width, (circle_canvas.height-120),function(res){ console.log(res); if(res.success){ var img = new Image(); var url = res.data; img.onload = function() { console.log('--- step img onload ---'); context.drawImage(img, 0, 120); }; img.src = url; $timeout(function() { console.log('no user input'); }, 500); } }); } else { var img = new Image(); var url = 'data:image/svg+xml;base64,' + window.btoa((unescape(encodeURIComponent(data)))); console.log(url); img.onload = function() { console.log('--- step img onload ---'); context.drawImage(img, 0, 120); }; img.src = url; } } background.src = certinfo.template; } self.getTplDataByConf = function(config) { console.log(config); var promises = []; //promises.push(getCertById(config.certId)); var deferred = $q.defer(); var promise = deferred.promise; getCertById(config.certId).then(function(res){ if(loginService.isLogged&&config.courseId){ promises.push(getCertTplByCourseId(config.courseId)); promises.push(getICID()); } else if(cert.courseId) { console.log(cert.courseId); promises.push(getCertTplByCourseId(cert.courseId)); } $q.all(promises).then(function(result) { var certInfo = { ElementId: config.ElementId, template: certTpl, paddingtop: config.paddingtop, userfullname: cert.fullName, coursename: cert.courseName, schoolname: config.schoolname, schoolIconUrl: config.schoolIconUrl, time: cert.time, certNo: serial + "_" + $filter("numberFixedLen")(cert.index, 5), icid: ICID, classStart: (cert.classStart)?$filter('date')(cert.classStart,"dd-MMM-yyyy"):'', classStop: (cert.classStop)?$filter('date')(cert.classStop,"dd-MMM-yyyy"):'', orientation: certOrientation, //certBase64Data: config.certBase64Data }; console.log(certInfo); //CertService.drawCanvas(certInfo); deferred.resolve(certInfo); }, function() { deferred.reject(result); console.error("cert biz model draw failed ."); }); }, function() { deferred.reject(res); console.error("cert biz model draw failed ."); }); return promise; } self.drawCERT = function(config) { var promises = []; promises.push(getCertTplByCourseId(config.courseId)); promises.push(getCertById(config.certId)); promises.push(getICID()); $q.all(promises).then(function(result) { var certInfo = { ElementId: config.ElementId, template: certTpl, paddingtop: config.paddingtop, userfullname: cert.fullName, coursename: cert.courseName, schoolname: config.schoolname, schoolIconUrl: config.schoolIconUrl, time: cert.time, certNo: serial + "_" + $filter("numberFixedLen")(cert.index, 5), icid: ICID, orientation: config.orientation, certBase64Data: config.certBase64Data }; console.log(certInfo); CertService.drawCanvas(certInfo); }, function() { console.error("cert biz model draw failed ."); }); } self.renderCERT = function(certInfo) { drawCertification(certInfo); } self.downloadCERT = function(name, canvasID, pdfConf) { if((!loginService.isLogged||!pdfConf.courseId)&&cert&&cert.courseId){ pdfConf.courseId = cert.courseId; } CertService.getCertOriByCourseId(pdfConf.courseId).then(function(data) { //retrun console.log(data); var ori = data.orientation; pdfConf.orientation=data.orientation; var dtcanvas = document.getElementById(canvasID); var fullQualityImgDataURL = dtcanvas.toDataURL('image/jpeg', 1.0); //pdfConf.orientation = pdfConf.orientation || 'landscape'; var doc = new jsPDF(pdfConf); if (ori === 'portrait') { doc.addImage(fullQualityImgDataURL, 'JPEG', 0, 0, 210, 297); } else { console.log('--- not portrait'); doc.addImage(fullQualityImgDataURL, 'JPEG', 0, 0, 297, 210); // doc.addImage(fullQualityImgDataURL, 'JPEG', 0, 0, 210, 297); } doc.save(name); }); }; });