/**
* Created by Tony on 2021/4/2.
*/
let rptArchiveObj = {
treeObj: null,
currentNode: null,
currentArchiveUuid: null,
currentArchiveDateStr: null,
iniPage: function() {
//初始化页面的归档信息
let me = rptArchiveObj;
me.currentNode = null;
me.currentArchiveUuid = null;
me.currentArchiveDateStr = null;
const archivedRptIds = [];
for (let aItem of ARCHIVE_LIST) {
archivedRptIds.push(parseInt(aItem.rpt_id));
}
let private_remove_hide_item = function (items, nlv) {
if (items && items.length > 0) {
for (let i = items.length - 1; i >= 0; i--) {
if (!(items[i].released) && items[i].nodeType === 2) {
items.splice(i, 1);
} else {
if (items[i].items && items[i].items.length > 0) {
private_remove_hide_item(items[i].items, nlv + 1);
if (items[i].items.length === 0 && nlv > 0) {
items.splice(i, 1);
}
}
}
}
}
};
const private_remove_un_archive_item = function(items, nlv) {
if (items && items.length > 0) {
for (let i = items.length - 1; i >= 0; i--) {
if (items[i].nodeType === 2) {
if (archivedRptIds.indexOf(items[i].refId) < 0) {
items.splice(i, 1);
}
} else {
if (items[i].items && items[i].items.length > 0) {
private_remove_un_archive_item(items[i].items, nlv + 1);
if (items[i].items.length === 0 && nlv > 0) {
items.splice(i, 1);
}
} else {
//items[i]是目录,但又没有items子项,
items.splice(i, 1);
}
}
}
}
};
let nodeLv = 0;
private_remove_hide_item(TOP_TREE_NODES, nodeLv);
private_remove_un_archive_item(TOP_TREE_NODES, nodeLv);
zTreeHelper.createTreeDirectly(TOP_TREE_NODES, rpt_prj_folder_setting, "rptTplTree", me);
me.treeObj.expandAll(true);
me.refreshNodes();
rptArchiveObj._countChkedRptTpl();
rptArchiveObj._buildeArchiveDateSelect();
},
toggleBtn: function (enabled) {
if (current_stage_status === 3 && enabled) {
$('#btnArchiveRpt').removeAttr('disabled');
$('#btnArchiveList').removeAttr('disabled');
} else {
$('#btnArchiveRpt').attr('disabled', '');
$('#btnArchiveList').attr('disabled', '');
}
},
refreshNodes: function() {
let me = this;
let private_setupIsParent = function(node){
node.isParent = (node.nodeType === RT.NodeType.NODE || node.level === 0);
if (node.items && node.items.length) {
for (let i = 0; i < node.items.length; i++) {
private_setupIsParent(node.items[i]);
}
}
};
let topNodes = me.treeObj.getNodes();
for (let i = 0; i < topNodes.length; i++) {
private_setupIsParent(topNodes[i]);
}
me.treeObj.refresh();
},
onCheck: function(event, treeId, treeNode) {
rptArchiveObj._countChkedRptTpl();
if (treeNode.isParent) {
rptArchiveObj.treeObj.expandNode(treeNode, true, true, false);
}
},
onClick: function(event,treeId,treeNode) {
let me = rptArchiveObj;
if (treeNode && treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
me.currentNode = treeNode;
for (let aItem of ARCHIVE_LIST) {
if (treeNode.refId === parseInt(aItem.rpt_id)) {
me.currentArchiveUuid = null;
me.currentArchiveDateStr = null;
if (aItem.items && aItem.items.length > 0) {
// me.currentArchiveUuid = aItem.items[0].uuid;
me.currentArchiveUuid = aItem.items[aItem.items.length - 1].uuid;
// me.currentArchiveDateStr = aItem.items[0].updateDate_time;
me.currentArchiveDateStr = '#' + (aItem.items.length) + ' ' + aItem.items[aItem.items.length - 1].updateDate_time;
}
break;
}
}
me._countChkedRptTpl();
me._buildeArchiveDateSelect();
me._requestArchiveReport();
}
},
_requestArchiveReport: function () {
let me = rptArchiveObj;
if (me.currentNode && me.currentArchiveUuid) {
try {
// let uuIdUrl = "/getArchivedFileByUUID/" + me.currentArchiveUuid + "/" + stringUtil.replaceAll(me.currentNode.name, "#", "_");
// console.log(uuIdUrl);
$('#iframe_made').html('');
// NetcaPDFSeal.openPDFWithUrl(window.location.href);
// window.location = uuIdUrl;
} catch (ex) {
console.log(ex.toString());
}
}
},
_changeArchiveDateSelect: function (dom) {
let me = rptArchiveObj;
// me.currentArchiveUuid = dom.uuid; //在dom的onclick时已经设置过了
me.currentArchiveDateStr = dom.innerHTML;
$('#iframe_made').html('');
me._buildeArchiveDateSelect();
},
_buildeArchiveDateSelect: function () {
let me = rptArchiveObj;
let targetDom = document.getElementById("currentDrpArchiveSelect");
targetDom.innerHTML = me.currentArchiveDateStr;
let drpDom = $("#drpArchiveSelect");
drpDom.empty();
if (me.currentNode && me.currentArchiveUuid && me.currentArchiveDateStr) {
for (let aItem of ARCHIVE_LIST) {
if (me.currentNode.refId === parseInt(aItem.rpt_id)) {
for (let [index,item] of aItem.items.entries()) {
if (item.uuid !== me.currentArchiveUuid) {
const str = '' + '#' + (index+1) + ' ' + item.updateDate_time + '';
drpDom.append(str);
}
}
}
}
}
},
_countChkedRptTpl: function () {
let me = rptArchiveObj;
if (me.treeObj) {
me.checkedRptTplNodes = [];
let chkNodes = me.treeObj.getCheckedNodes(true), cnt = 0, hasCurrentNode = false;
for (let node of chkNodes) {
if (node.nodeType === TPL_TYPE_TEMPLATE) {
cnt++;
me.checkedRptTplNodes.push(node);
if (me.currentNode === node) hasCurrentNode = true;
}
}
if (!hasCurrentNode && cnt === 0 && me.currentNode !== null) {
//这里根据实际需求再做处理
cnt++;
me.checkedRptTplNodes.push(me.currentNode);
}
$("#print_div").find("span").each(function(cIdx,elementSpan){
elementSpan.innerText = cnt;
});
$("#export_div").find("span").each(function(cIdx,elementSpan){
elementSpan.innerText = cnt;
});
}
},
showArchivedItem: function(currentNode) {
//初始化当前报表已经归档的信息
//ARCHIVE_LIST结构:[{rpt_id, items: [{uuid, update_time, is_common}...最多3个]}...] (当前项目、当前期的所有报表归档信息)
if (currentNode) {
//1. cardArchiveInfo
let cardArchiveInfo = $('#cardArchiveInfo');
cardArchiveInfo.empty();
let auditDate = null;
let achivedAmt = 0;
let achivedItem = null;
for (let item of ARCHIVE_LIST) {
if (parseInt(item.rpt_id) === currentNode.refId) {
auditDate = new Date(LAST_AUDITOR.begin_time);
achivedAmt = item.items?item.items.length:0;
achivedItem = item;
break;
}
}
if (auditDate) {
cardArchiveInfo.append('
第' + current_stage_order + '期,审批通过时间:' + auditDate.getFullYear() + '-' + (auditDate.getMonth() + 1) + '-' + auditDate.getDate() + '。
');
} else {
cardArchiveInfo.append('第' + current_stage_order + '期');
}
cardArchiveInfo.append('本张报表第' + current_stage_order + '期,已归档' + achivedAmt + '份文件。
');
if (achivedItem && achivedItem.items && achivedItem.items.length === 3) {
cardArchiveInfo.append('本次归档将会覆盖最旧那次归档。
');
}
cardArchiveInfo.append('');
//2. selectionArchiveInfo
let selectionArchiveInfo = $('#selectionArchiveInfo');
selectionArchiveInfo.empty();
if (achivedAmt > 0) {
for (let idx = 0; idx < achivedItem.items.length; idx++) {
selectionArchiveInfo.append('#' + (idx + 1) + ' ' + achivedItem.items[idx].updateDate_time + '');
}
}
}
},
_getCurrentArchives: function (currentNode) {
let rst = null;
if (ARCHIVE_LIST.length > 0 && currentNode) {
for (let aItem of ARCHIVE_LIST) {
if (parseInt(aItem.rpt_id) === currentNode.refId) {
rst = aItem;
break;
}
}
}
return rst;
},
_chkIfFullArchives: function(currentNode) {
let aItem = this._getCurrentArchives(currentNode);
let rst = (aItem && aItem.items && aItem.items.length === 3);
return rst;
},
_getPageSignatureInfo: function(pageData, rpt_id) {
let psInfo = [], psInfoStr = [];
let offsetX = 0, offsetY = 0; //这个跟导出pdf一致,以防万一有变化
let controls = pageData[JV.NODE_CONTROL_COLLECTION];
const _getProperSignatureArea = function(cell, control) {
// 约定默认长宽比例是2:1,图片分辨率是600*300
const rst = [0, 0, 0, 0]; // left, top, right, bottom
if (cell && cell[JV.PROP_AREA]) {
let width = cell[JV.PROP_AREA][JV.PROP_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT],
height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
if (width > height * 2) {
width = height * 2;
} else {
height = width / 2;
}
switch (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]]) {
case 'left':
rst[0] = cell[JV.PROP_AREA][JV.PROP_LEFT];
rst[1] = cell[JV.PROP_AREA][JV.PROP_TOP];
rst[2] = rst[0] + width;
rst[3] = rst[1] + height;
break;
case 'right':
rst[2] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
rst[3] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
rst[0] = rst[2] - width;
rst[1] = rst[3] - height;
break;
default:
//center
rst[0] = (cell[JV.PROP_AREA][JV.PROP_LEFT] + cell[JV.PROP_AREA][JV.PROP_RIGHT] - width) / 2;
rst[1] = cell[JV.PROP_AREA][JV.PROP_TOP];
rst[2] = rst[0] + width;
rst[3] = rst[1] + height;
break;
}
}
rst[0] = rst[0] + offsetX;
rst[2] = rst[2] + offsetX;
rst[1] = rst[1] + offsetY;
rst[3] = rst[3] + offsetY;
return rst;
}
for(let i = 0; i < pageData.items.length; i++) {
let page = pageData.items[i];
for (let sCell of page.signature_cells) {
let control = null;
if (typeof sCell[JV.PROP_CONTROL] === "string") {
control = controls[sCell[JV.PROP_CONTROL]];
} else {
control = sCell[JV.PROP_CONTROL];
}
let idx = psInfoStr.indexOf(sCell.signature_name);
let actSignArea = _getProperSignatureArea(sCell, control);
if (idx < 0) {
psInfoStr.push(sCell.signature_name);
let newPsInfo = {'name': sCell.signature_name, areas: []};
let area = {Left: actSignArea[JV.IDX_LEFT] + offsetX, Top: actSignArea[JV.IDX_TOP] + offsetY, width: (actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT]), height: (actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]), pages: []};
area.pages.push(i + 1);
newPsInfo.areas.push(area);
psInfo.push(newPsInfo);
} else {
let hasArea = false;
for (let areaItem of psInfoStr[idx].areas) {
if (areaItem.Left === actSignArea[JV.IDX_LEFT] + offsetX && areaItem.Top === actSignArea[JV.IDX_TOP] + offsetX &&
areaItem.width === actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT] && areaItem.height === actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]) {
areaItem.pages.push(i + 1);
hasArea = true;
break;
}
}
if (!hasArea) {
let area = {Left: actSignArea[JV.IDX_LEFT] + offsetX, Top: actSignArea[JV.IDX_TOP] + offsetY, width: (actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT]), height: (actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]), pages: []};
area.pages.push(i + 1);
psInfoStr[idx].areas.push(area);
}
}
// sCell.signature_name
}
}
return psInfo;
},
archiveCurrentReport: function(currentRptPageRst, currentNode) {
// 归档当前报表
if (currentRptPageRst !== null) {
try {
let doc = JpcJsPDFHelper._createPdf(currentRptPageRst, rptControlObj.getCurrentPageSize(), ROLE_REL_LIST, STAGE_AUDIT);
let pageEncryptInfo = rptArchiveObj._getPageSignatureInfo(currentRptPageRst, currentNode.refId);
// console.log(pageEncryptInfo);
let formData = new FormData();
formData.append('file', doc.output('blob'), 'upload.pdf'); //上传单个文件的添加方式
if (!rptArchiveObj._chkIfFullArchives(currentNode)) {
postDataWithFile('/tender/report_api/addArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId, formData, function (result) {
// 成功后,更新当前页面
if (result.addedRst) {
// console.log(result);
ARCHIVE_LIST = result.addedRst;
rptArchiveObj.showArchivedItem(currentNode);
zTreeOprObj.refreshNodes();
//第二步:增加
let params = {};
params.prjId = PROJECT_ID;
params.stgId = current_stage_id;
params.rptId = currentNode.refId;
params.ttlPgs = currentRptPageRst.items.length;
params.content = pageEncryptInfo;
CommonAjax.postXsrfEx("/tender/report_api/addArchiveEncryption", params, 10000, true, getCookie('csrfToken_j'),
function(result){
//
}, function(err){
//
}, function(ex){
//
}
);
} else {
// 有冲突,需要删除
CommonAjax.postXsrfEx('/tender/report_api/removeArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + result.fileName, '', 3000, true, getCookie('csrfToken_j'),
function(result){
//
}
);
}
}, function (error){
// alert(error);
});
} else {
let aItem = this._getCurrentArchives(currentNode);
if (aItem && aItem.items && aItem.items.length > 0) {
let orgName = aItem.items[0].uuid;
let compStr = aItem.items[0].updateDate_time;
for (let idx = 1; idx < aItem.items.length; idx++) {
if (aItem.items[idx].updateDate_time < compStr) {
compStr = aItem.items[idx].updateDate_time;
orgName = aItem.items[idx].uuid;
}
}
postDataWithFile('/tender/report_api/updateArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + '/' + orgName, formData, function (result) {
// 成功后,更新当前页面
if (result.updatedRst) {
// console.log(result);
ARCHIVE_LIST = result.updatedRst;
rptArchiveObj.showArchivedItem();
zTreeOprObj.refreshNodes();
} else {
// 有冲突,需要删除
CommonAjax.postXsrfEx('/tender/report_api/removeArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + result.fileName, '', 3000, true, getCookie('csrfToken'),
function(result){
//
}
);
}
}, function (error){
// alert(error);
});
}
}
} catch (ex) {
console.log(ex.toString());
}
} else {
alert('请选择打开一个报表!');
}
}
};
function dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
};
/**
* 获取 blob
* @param {String} url 目标文件地址
* @return {Promise}
*/
function getBlob(url) {
return new Promise(resolve => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = () => {
if (xhr.status === 200) {
resolve(xhr.response);
}
};
xhr.send();
});
}
/**
* 保存
* @param {Blob} blob
* @param {String} filename 想要保存的文件名称
*/
function saveAs(blob, filename) {
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename);
} else {
const link = document.createElement('a');
const body = document.querySelector('body');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
// fix Firefox
link.style.display = 'none';
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}
}
/**
* 下载
* @param {String} url 目标文件地址
* @param {String} filename 想要保存的文件名称
*/
function download(url, filename) {
getBlob(url).then(blob => {
saveAs(blob, filename);
});
}
$(function () {
$('#download_file').click(function () {
if (rptArchiveObj.currentArchiveUuid) {
download(`https://measure-sign-pdf.oss-cn-shenzhen.aliyuncs.com/archive/${rptArchiveObj.currentArchiveUuid}.PDF`, `${rptArchiveObj.currentNode.name} ${rptArchiveObj.currentArchiveDateStr}.pdf`);
} else {
alert('请选择打开一个报表!');
}
});
$('#print_file').click(function () {
if (rptArchiveObj.currentArchiveUuid) {
$('#iframe_made iframe')[0].contentWindow.print();
} else {
alert('请选择打开一个报表!');
}
});
})