/** * 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('
'); if (achivedAmt > 0) { for (let idx = 0; idx < achivedItem.items.length; idx++) { cardArchiveInfo.append('
'); // if (achivedAmt === 3) { // cardArchiveInfo.append(''); // } cardArchiveInfo.append(''); 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('请选择打开一个报表!'); } }); })