const reportFormatSetupObj = { treeObj: null, templateObj: {}, canvas: null, fieldParamOptions: null, maxFieldID: -1, currentRptId: -1, currentTopNode: '定制报表', onCheck: (event, treeId, treeNode) => { // }, switchButtonEnables: (isSetupEnabled = true, isPermissionEnabled = false) => { $('#btn_confirm_format_setup').attr("disabled", !isSetupEnabled); $('#rpt_title_input').attr("disabled", !isSetupEnabled); $("#add_user_dropdownMenuButton").attr('disabled', !isPermissionEnabled); $("#apply_users_toOtherMenuButton")[0].style.display = !isPermissionEnabled ? 'none' : ''; }, onClick: (event,treeId,treeNode) => { const me = reportFormatSetupObj; if (treeNode.nodeType !== RT.NodeType.TEMPLATE) { me.currentRptId = -1; me.clearTplProperties(); const jDom = $("#report-permission-div"); jDom.empty(); me.switchButtonEnables(false, false); return; } let pNode = treeNode; while (pNode.level > 0) { pNode = pNode.getParentNode(); } me.currentTopNode = pNode.name; me.currentRptId = treeNode.refId; me.initialize(treeNode); if (me.currentTopNode === '定制报表') { me.switchButtonEnables(true, true); } else { me.switchButtonEnables(false, true); me.clearTplProperties(); } }, onDeleteInfo: (dom) => { // 删除表眉、表脚项 // console.log(dom.parentElement.parentElement); $(dom.parentElement.parentElement).remove(); }, onAddInfo: (dom, lv) => { // 增加表眉、表脚细项 const me = reportFormatSetupObj; const domStrs = []; domStrs.push(''); domStrs.push(''); domStrs.push(`${me._createTypeSelection(0)}`); domStrs.push(``); domStrs.push(``); domStrs.push(``); domStrs.push(``); domStrs.push(``); domStrs.push('删除'); domStrs.push(''); $(dom.parentElement.parentElement).after(domStrs.join('')); }, onAddLvInfo: (dom) => { // 增加表眉、表脚层次项 console.log(dom); let maxCnt = 0; // for (const td of dom.parentElement.parentElement.nextElementSibling.children[0].children[1].children) { if (dom.parentElement.parentElement.parentElement.nextElementSibling.children.length > 0) { for (const td of dom.parentElement.parentElement.parentElement.nextElementSibling.children[0].children[1].children) { if (td.cells[0].innerText !== '') { const lv = parseInt(td.cells[0].innerText) || 0; if (lv > maxCnt) maxCnt = lv; } } } // dom.parentElement.parentElement.nextElementSibling.children[0].children[1] const lvDtl = []; lvDtl.push(''); lvDtl.push(`${maxCnt + 1}`); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push('新增'); lvDtl.push(''); $(dom.parentElement.parentElement.parentElement.nextElementSibling.children[0].children[1]).append(lvDtl.join('')); }, onTypeChange: (dom) => { const me = reportFormatSetupObj; console.log(dom); // 根据新选项清理、初始化 if (dom.selectedIndex === 0) { // 文本 $(dom.parentElement.nextSibling).html(''); dom.parentElement.nextSibling.nextSibling.nextSibling.nextSibling.children[0].value = ''; dom.parentElement.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.children[0].value = ''; } else { // 指标 const curNodes = me.treeObj.getSelectedNodes(); if (curNodes.length > 0) { const rptTemplate = me.templateObj[`${curNodes[0].ID}`]; if (rptTemplate) { $(dom.parentElement.nextSibling).html(`${me._createSelectionFields(-1, 5010)}`); dom.parentElement.nextSibling.nextSibling.nextSibling.nextSibling.children[0].value = ''; dom.parentElement.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.children[0].value = ''; } } } }, onAddSignature: (dom) => { const me = reportFormatSetupObj; if (me.currentRptId === -1) return; me.maxFieldID++; const newSignature = []; newSignature.push('
  • '); newSignature.push(``); newSignature.push(''); newSignature.push('
  • '); $(dom.parentElement).before(newSignature.join('')); me.fieldParamOptions.fields_collection.push({ FID: me.maxFieldID, name: '' }); }, onSignNameChange: (dom) => { const me = reportFormatSetupObj; const fid = +dom.attributes[1].value; for (const opt of me.fieldParamOptions.fields_collection) { if (opt.FID === fid) { opt.name = dom.value; break; } } }, onRemoveSignature: (dom) => { $(dom.parentElement.parentElement).remove(); }, refreshFieldOptions: () => { // 重新更新已存在页面的指标选择下拉项 }, initialize: (rptNode) => { const me = reportFormatSetupObj; me.canvas = document.getElementById("rptSetupPreviewCanvas"); // 1. 先清理 me.clearTplProperties(); // 2. 再加表标题、表眉、表脚、电子签名内容 const params = { rpt_tpl_id: rptNode.refId, tender_id: TENDER_ID }; const url = '/report_api/getReportTemplate'; $.bootstrapLoading.start(); CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'), async function(result){ console.log(result); me.templateObj[`${rptNode.refId}`] = result.data; if (result.data['主信息']['打印页面_信息']['方向'] === 'PORTRAIT') { me.canvas.height = 1150; me.canvas.width = 820; } else { me.canvas.height = 820; me.canvas.width = 1150; } if (result.data['主信息']['打印页面_信息']['页规格'] === 'A3') { me.canvas.height = me.canvas.height * 1.414; me.canvas.width = me.canvas.width * 1.414; } me.fieldParamOptions = me.initialSelectionFields(result.data); me.maxFieldID = me._getTheMaxFieldID(result.data); me.initialTitle(result.data); me.initialHeader(result.data); me.initialFooter(result.data); me.initialSignature(result.data); reportPermissionObj.permissions = result.permissions; reportPermissionObj.iniReportPermission(); reportPermissionObj.updateSelectedMarks(); $.bootstrapLoading.end(); }, function(err){ console.log(err); $.bootstrapLoading.end(); }, function(ex){ console.log(ex); $.bootstrapLoading.end(); } ); }, clearTplProperties: () => { // 表眉 $("#rpt_header_div").empty(); // const str1 = '
    表眉
    新增行
    '; const str1Arr = []; str1Arr.push('
    表眉'); str1Arr.push('
    '); str1Arr.push('
    '); str1Arr.push('
    默认行高: '); str1Arr.push(''); str1Arr.push('新增行'); str1Arr.push('
    '); str1Arr.push('
    '); const str1 = str1Arr.join(''); $("#rpt_header_div").append(str1); $("#rpt_header_table_div").empty(); // 表脚 $("#rpt_footer_div").empty(); // const str2 = '
    表脚
    新增行
    '; const str2Arr = []; str2Arr.push('
    表脚'); str2Arr.push('
    '); str2Arr.push('
    '); str2Arr.push('
    默认行高: '); str2Arr.push(''); str2Arr.push('新增行'); str2Arr.push('
    '); str2Arr.push('
    '); const str2 = str2Arr.join(''); $("#rpt_footer_div").append(str2); $("#rpt_footer_table_div").empty(); // 表标题 $("#rpt_title_input")[0].value = ''; // 电子签名 // signature_ul_list $("#signature_ul_list").empty(); $("#signature_ul_list").append('
  • 添加新签字人
  • '); }, initialHeader: (rptTpl) => { const me = reportFormatSetupObj; const bandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'HeaderBand'); if (bandInfo) { const posArr = me._checkLevelInfo(bandInfo); const html = me._buildHeaderFooterHTML(rptTpl, bandInfo, posArr); const actBand = rptTpl['布局框_集合'].find(band => band.Name === 'HeaderBand'); const dftRowHeight = +(actBand.Height || 0.6) / (posArr.length || 1); $("#header_band_height_input")[0].value = dftRowHeight; // console.log(html); // $("#rpt_header_parent_div").empty(); $("#rpt_header_table_div").append(html.join('')); // rpt_header_div } }, initialFooter: (rptTpl) => { const me = reportFormatSetupObj; const bandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'FooterBand'); if (bandInfo) { const posArr = me._checkLevelInfo(bandInfo); const html = me._buildHeaderFooterHTML(rptTpl, bandInfo, posArr); const actBand = rptTpl['布局框_集合'].find(band => band.Name === 'FooterBand'); const dftRowHeight = +(actBand.Height || 0.6) / (posArr.length || 1); $("#footer_band_height_input")[0].value = dftRowHeight; // console.log(html); // $("#rpt_header_parent_div").empty(); $("#rpt_footer_table_div").append(html.join('')); // rpt_header_div } // }, initialTitle: (rptTpl) => { const me = reportFormatSetupObj; $("#rpt_title_input")[0].value = me._getTitle(rptTpl); const curNodes = me.treeObj.getSelectedNodes(); if (curNodes.length > 0) { $("#rename_rpt_confirm")[0].innerText=`确认更新报表模板「${curNodes[0].name}」?`; } }, initialSignature: (rptTpl) => { const jDom = $("#signature_li_list"); if (rptTpl['电子签名离散指标_集合'] && rptTpl['电子签名离散指标_集合'].length > 0) { for (const disF of rptTpl['电子签名离散指标_集合']) { const newSignature = []; newSignature.push('
  • '); newSignature.push(``); newSignature.push(''); newSignature.push('
  • '); jDom.before(newSignature.join('')); } } }, _getTitle: (rptTpl) => { const me = reportFormatSetupObj; let rst = ''; const bandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'TitleBand'); if (bandInfo && bandInfo.text_s) { const titleTxt = bandInfo.text_s.find(item => item.font === 'ReportTitle_Main'); if (titleTxt) { rst = titleTxt.Label; } else { rst = bandInfo.text_s[0].Label; } } return rst; }, _setTitle: (rptTpl, newTitle) => { const me = reportFormatSetupObj; const bandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'TitleBand'); if (bandInfo && bandInfo.text_s) { const titleTxt = bandInfo.text_s.find(item => item.font === 'ReportTitle_Main'); if (titleTxt) { titleTxt.Label = newTitle; } else { bandInfo.text_s[0].Label = newTitle; } } }, _getRightInfoObj: (rptTpl) => { let rst = null; if (rptTpl) { if (rptTpl['流水式表_信息']) { rst = rptTpl['流水式表_信息']; } else if (rptTpl['账单式表_信息']) { rst = rptTpl['账单式表_信息']; } else if (rptTpl['交叉表_信息']) { rst = rptTpl['交叉表_信息']; } } return rst; }, _getRightBandInfoObj: (infoObj, bandName) => { let rst = null; if (infoObj) { for (let info of infoObj['离散信息']) { if (info['BandName'] === bandName) { rst = info; break; } } } return rst; }, _checkLevelInfo: (bandInfo) => { let rst = []; if (bandInfo) { if (bandInfo.discrete_field_s) { for (const field of bandInfo.discrete_field_s) { const bt = +field.area.Bottom; if (!rst.includes(bt)) rst.push(bt); } } if (bandInfo.text_s) { for (const txt of bandInfo.text_s) { const bt = +txt.area.Bottom; if (!rst.includes(bt)) rst.push(bt); } } } rst.sort((i1, i2) => {return i1 - i2}); return rst; }, _createTypeSelection: (dftSelection = 0) => { const rst = []; rst.push(''); return rst.join(''); }, initialSelectionFields: (rptTpl) => { // 这里统一收集可选指标范围(有默认范围 + 报表本身特别的指标) const me = reportFormatSetupObj; const rst = { fields_collection: [], params_collection: [] }; for (const param of rptTpl['离散参数_集合']) { rst.params_collection.push({ PID: + param.ID, name: param.Name, dftValue: param.Default_Value || '' }); } for (const fd of rptTpl['指标_数据_映射']['离散指标_集合']) { rst.fields_collection.push({ FID: + fd.ID, name: fd.Name }); } for (const fd of rptTpl['电子签名离散指标_集合']) { rst.fields_collection.push({ FID: + fd.ID, name: fd.Name }); } for (const param of rptTpl['动态日期离散参数_集合']) { rst.params_collection.push({ PID: + param.ID, name: param.Name }); } for (const param of rptTpl['电子签名审核意见指标_集合']) { rst.params_collection.push({ PID: + param.ID, name: param.Name }); } const collectAdhocFields = (hfBandInfo) => { if (hfBandInfo && hfBandInfo.discrete_field_s) { for (const field of hfBandInfo.discrete_field_s) { if (!field.ParamID) { const selField = rst.fields_collection.find(item => item.FID === +field.FieldID); if (!selField) { const ahocSelField = me._scanField(rptTpl, field.FieldID); rst.fields_collection.push({ FID: +ahocSelField.ID, name: ahocSelField.Name }); } } } } }; const headerBandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'HeaderBand'); collectAdhocFields(headerBandInfo); const footerBandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'FooterBand'); collectAdhocFields(footerBandInfo); return rst; }, _getTheMaxFieldID: (rptTpl) => { let rst = -1; if (rptTpl['无映射离散指标_集合'] && rptTpl['无映射离散指标_集合'].length > 0) { rptTpl['无映射离散指标_集合'].forEach((disF) => { if (+(disF.ID || -1) > rst) rst = +disF.ID; }); } if (rptTpl['电子签名离散指标_集合'] && rptTpl['电子签名离散指标_集合'].length > 0) { rptTpl['电子签名离散指标_集合'].forEach((disF) => { if (+(disF.ID || -1) > rst) rst = +disF.ID; }); } if (rptTpl['动态日期离散参数_集合'] && rptTpl['动态日期离散参数_集合'].length > 0) { rptTpl['动态日期离散参数_集合'].forEach((disF) => { if (+(disF.ID || -1) > rst) rst = +disF.ID; }); } if (rptTpl['电子签名审核意见指标_集合'] && rptTpl['电子签名审核意见指标_集合'].length > 0) { rptTpl['电子签名审核意见指标_集合'].forEach((disF) => { if (+(disF.ID || -1) > rst) rst = +disF.ID; }); } return rst; }, _createSelectionFields_BK: (rptTpl, currentFieldID, ParamID) => { const me = reportFormatSetupObj; const rst = []; let hasSelected = false; rst.push(''); return rst.join(''); }, _createSelectionFields: (currentFieldID, ParamID) => { const me = reportFormatSetupObj; const rst = []; let hasSelected = false; rst.push(''); return rst.join(''); }, _scanField: (rptTpl, curFieldId) => { let rst = null; rst = rptTpl['无映射离散指标_集合'].find(item => item.ID === curFieldId); if (!rst) rst = rptTpl['电子签名离散指标_集合'].find(item => `${item.ID}` === `${curFieldId}`); if (!rst) rst = rptTpl['动态日期离散参数_集合'].find(item => `${item.ID}` === `${curFieldId}`); if (!rst) rst = rptTpl['电子签名审核意见指标_集合'].find(item => `${item.ID}` === `${curFieldId}`); if (!rst) rst = rptTpl['指标_数据_映射']['从数据指标_集合'].find(item => `${item.ID}` === `${curFieldId}`); if (!rst) rst = rptTpl['指标_数据_映射']['主数据指标_集合'].find(item => `${item.ID}` === `${curFieldId}`); return rst; }, _buildHeaderFooterHTML: (rptTpl, hfBandInfo, posArr) => { const me = reportFormatSetupObj; const rst = []; if (hfBandInfo && posArr.length > 0) { // 1. 增加一些必要html rst.push(' ') rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' '); rst.push(' ') // -------- const lvs = []; for (let idx = 0; idx < posArr.length; idx++) { const lvDtl = []; lvDtl.push(''); lvDtl.push(``); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvDtl.push(''); lvs.push(lvDtl); } if (hfBandInfo.text_s) { for (const txt of hfBandInfo.text_s) { const bt = +txt.area.Bottom; const btIdx = posArr.indexOf(bt); if (btIdx >= 0) { lvs[btIdx].push(''); lvs[btIdx].push(''); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); // lvs[btIdx].push(''); // lvs[btIdx].push(''); lvs[btIdx].push(''); lvs[btIdx].push(''); } } } if (hfBandInfo.discrete_field_s) { for (const field of hfBandInfo.discrete_field_s) { const bt = +field.area.Bottom; const btIdx = posArr.indexOf(bt); if (btIdx >= 0) { lvs[btIdx].push(''); lvs[btIdx].push(''); lvs[btIdx].push(``); // lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(``); lvs[btIdx].push(''); lvs[btIdx].push(''); } } } //... for (const lv of lvs) { rst.push(...lv); } rst.push(' ') rst.push('
    行号类型左位置右位置前缀后缀操作
    ${idx + 1}新增
    ${me._createTypeSelection(0)}删除
    ${me._createTypeSelection(1)}${me._createSelectionFields_BK(rptTpl, field.FieldID, field.ParamID)}${me._createSelectionFields(field.FieldID, field.ParamID)}删除
    ') } return rst; }, updateReportTemplate: () => { const me = reportFormatSetupObj; const rptTemplate = me._prepareReportTemplate(); const curNodes = me.treeObj.getSelectedNodes(); if (rptTemplate && curNodes.length > 0) { const params = { tplId: curNodes[0].ID, tplName: curNodes[0].name, tplObj: JSON.stringify(rptTemplate) }; const url = '/report_api/updateReportTemplate'; $.bootstrapLoading.start(); CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'), async function(result){ console.log(result); $.bootstrapLoading.end(); }, function(err){ console.log(err); $.bootstrapLoading.end(); }, function(ex){ console.log(ex); $.bootstrapLoading.end(); } ); } }, preview: () => { // alert('hi'); const me = reportFormatSetupObj; const rptTemplate = me._prepareReportTemplate(); if (rptTemplate) { const params = { tplObj: JSON.stringify(rptTemplate) }; const url = '/report_api/getPreviewReport'; $.bootstrapLoading.start(); CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'), async function(result){ // console.log(result); JpcCanvasOutput.cleanCanvas(me.canvas); JpcCanvasOutput.drawPageBorder(result.pageRst, me.canvas, getScreenDPI()); JpcCanvasOutput.highlightConflictArea(result.pageRst, 1); JpcCanvasOutput.drawToCanvas(result.pageRst, me.canvas, 1); $.bootstrapLoading.end(); }, function(err){ console.log(err); $.bootstrapLoading.end(); }, function(ex){ console.log(ex); $.bootstrapLoading.end(); } ); } }, previewSign: () => { const me = reportFormatSetupObj; $("#dummy_sign_preview").empty(); const signs = []; const domObj = $("#signature_ul_list")[0]; for (let dIdx = 0; dIdx < domObj.children.length - 1; dIdx++) { const signName = domObj.children[dIdx].children[0].children[0].value; // 电子签名名称 signs.push('
    '); signs.push(``); signs.push('
    '); signs.push(''); signs.push('
    '); signs.push('
    '); } $("#dummy_sign_preview").append(signs.join('')); }, _prepareReportTemplate: () => { let rst = null; const me = reportFormatSetupObj; const curNodes = me.treeObj.getSelectedNodes(); if (curNodes.length > 0) { const headers = me._createCommonCollctInfo('#rpt_header_table_div'); const footers = me._createCommonCollctInfo('#rpt_footer_table_div'); const signatures = me._createSignatureInfo(me.templateObj[`${curNodes[0].ID}`]); const rptTemplate = me.templateObj[`${curNodes[0].ID}`]; if (rptTemplate) { me._setupTemplate(rptTemplate, headers, footers, signatures); rst = rptTemplate; } } return rst; }, _createCommonCollctInfo: (containerId) => { let lvCnt = 0; const rst = { texts: [], fields: [], levels: 0 }; const createAreaFromDom = (firstDom, lv) => { const rst = { Top: lv, Left: 0, Right: 0, Bottom: lv + 1, H_CalculationType: "percentage", V_CalculationType: "percentage" }; rst.Left = firstDom.cells[3].childNodes[0].value || 0; rst.Right = firstDom.cells[4].childNodes[0].value || 0; return rst; }; const ParamDftValMap = { '5010': '第 X 页', '5011': '共 X 页' }; const domObj = $(containerId); if (domObj[0].childNodes.length > 0) { for (let idx = 0; idx < domObj[0].childNodes[1].childNodes[3].childNodes.length; idx++) { const hDom = domObj[0].childNodes[1].childNodes[3].childNodes[idx]; if (hDom.innerText && hDom.innerText.includes('新增')) { let dtlCnt = 0; for (let idxN = idx + 1; idxN < domObj[0].childNodes[1].childNodes[3].childNodes.length; idxN++) { // 开始创建文本对象或指标对象 const hnDom = domObj[0].childNodes[1].childNodes[3].childNodes[idxN]; if (hnDom.innerText && !hnDom.innerText.includes('新增')) { dtlCnt++; const areaObj = createAreaFromDom(hnDom, lvCnt); if (hnDom.cells[1].childNodes[0][0].selected) { // 创建文本对象 const txtObj = { area: areaObj, font: 'Header', control: 'Header', style: 'Default_None', Label: ''}; txtObj.Label = hnDom.cells[2].childNodes[0].value || ''; rst.texts.push(txtObj); } else { // 创建指标对象 const fieldObj = { area: areaObj, font: 'Header', control: 'Header', style: 'Default_None', Prefix: '', Suffix: ''}; fieldObj.Prefix = hnDom.cells[5].childNodes[0].value || ''; fieldObj.Suffix = hnDom.cells[6].childNodes[0].value || ''; for (const fIdOpt of hnDom.cells[2].childNodes[0]) { if (fIdOpt.selected) { if (fIdOpt.attributes['fid']) { fieldObj.FieldID = +fIdOpt.attributes[fIdOpt.attributes.length - 1].nodeValue; } else { let pid = +fIdOpt.attributes[fIdOpt.attributes.length - 1].nodeValue; if ([5001, 5010, 5011].includes(pid)) { pid = `${pid}`; } fieldObj.ParamID = pid; fieldObj.Default_Value = ParamDftValMap[fieldObj.ParamID] || ''; } break; } } rst.fields.push(fieldObj); } } else { break; } } if (dtlCnt > 0) lvCnt++; // 有子项的才会被统计进来 // lvCnt++; // 不能无条件的统计增加层次 } } } if (lvCnt > 0) { // 所有rst的text、field的纵坐标都要重新整理一遍 rst.levels = lvCnt; const lvH = +(100 / lvCnt).toFixed(3); for (const txt of rst.texts) { txt.area.Top = lvH * txt.area.Top; txt.area.Bottom = lvH * txt.area.Bottom; } for (const fld of rst.fields) { fld.area.Top = lvH * fld.area.Top; fld.area.Bottom = lvH * fld.area.Bottom; } } return rst; }, _createSignatureInfo: (rptTpl) => { const me = reportFormatSetupObj; const rst = [[], [], []]; // 电子签名、日期、审核意见 三件套 const domObj = $("#signature_ul_list")[0]; const createReplaceField = (fid, name) => { return { ID: +fid, Name: name, DataType: 'string', Default_Value: '' }; }; for (let dIdx = 0; dIdx < domObj.children.length - 1; dIdx++) { const signName = domObj.children[dIdx].children[0].children[0].value; // 电子签名名称 const signFId = +domObj.children[dIdx].children[0].children[0].attributes[1].value; // 指标ID rst[0].push(createReplaceField(signFId, signName)); let dftFieldID = 0; const assField1 = rptTpl['动态日期离散参数_集合'].find(disF => disF.Name === signName + '_签字日期') if (!assField1) { me.maxFieldID++; dftFieldID = me.maxFieldID; } else { dftFieldID = +assField1.ID; } rst[1].push(createReplaceField(dftFieldID, signName + '_签字日期')); const assField2 = rptTpl['电子签名审核意见指标_集合'].find(disF => disF.Name === signName + '_审核意见') if (!assField2) { me.maxFieldID++; dftFieldID = me.maxFieldID; } else { dftFieldID = +assField2.ID; } rst[2].push(createReplaceField(dftFieldID, signName + '_审核意见')); } return rst; }, _setupTemplate: (rptTpl, headersInfo, footersInfo, signatureInfo = null) => { const me = reportFormatSetupObj; me._setTitle(rptTpl, $("#rpt_title_input")[0].value); const headerBandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'HeaderBand'); if (headerBandInfo) { const headerBand = rptTpl['布局框_集合'].find(item => item.Name === 'HeaderBand'); // 1. 高度 if (headerBand) { let dftHeight = $("#header_band_height_input")[0].value || 0.6; if (dftHeight === '') dftHeight = 0.6; headerBand.Height = dftHeight * headersInfo.levels; } // 2. headerBandInfo.text_s = headersInfo.texts; headerBandInfo.discrete_field_s = headersInfo.fields; } const footerBandInfo = me._getRightBandInfoObj(me._getRightInfoObj(rptTpl), 'FooterBand'); if (footerBandInfo) { const footerBand = rptTpl['布局框_集合'].find(item => item.Name === 'FooterBand'); // 1. 高度 if (footerBand) { let dftHeight = $("#footer_band_height_input")[0].value || 1; if (dftHeight === '') dftHeight = 1; // 计量的表脚默认高度给1(签名缘故) footerBand.Height = dftHeight * footersInfo.levels; } // 2. footerBandInfo.text_s = footersInfo.texts; footerBandInfo.discrete_field_s = footersInfo.fields; } if (signatureInfo && signatureInfo.length === 3) { rptTpl['电子签名离散指标_集合'] = signatureInfo[0]; rptTpl['动态日期离散参数_集合'] = signatureInfo[1]; rptTpl['电子签名审核意见指标_集合'] = signatureInfo[2]; } }, }; const reportPermissionObj = { permissions: [], selectedIdsArray: [], treeObj: null, iniReportPermission: () => { const me = reportPermissionObj; const jDom = $("#report-permission-div"); jDom.empty(); const permissionsHtml = []; permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); permissionsHtml.push(''); // ...内容 me.selectedIdsArray.splice(0, me.selectedIdsArray.length); me.permissions.forEach((permission) => { const id = parseInt(permission.user_id); if (reportFormatSetupObj.currentRptId === permission.rpt_id && !me.selectedIdsArray.includes(id)) me.selectedIdsArray.push(id); }); const permissionStrs = []; me.permissions.forEach(permission => { if (permission.rpt_id === reportFormatSetupObj.currentRptId) { permissionStrs.push(me.createPermissionTbStr(permission)); } }); if (permissionStrs.length > 0) permissionsHtml.push(permissionStrs.join('')); permissionsHtml.push(''); permissionsHtml.push('
    用户职位/角色添加时间操作
    '); jDom.append(permissionsHtml.join('')); }, beforeRemove: (dom, user_id) => { $('#remove_user_id').val(user_id); }, removeUser: (dom) => { const me = reportPermissionObj; const curNodes = reportFormatSetupObj.treeObj.getSelectedNodes(); if (curNodes.length > 0) { const id = parseInt($('#remove_user_id').val()); const params = { user_id: id, rpt_id: curNodes[0].ID, tid: TENDER_ID }; const url = '/report_api/removeReportPermission'; $.bootstrapLoading.start(); CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'), async function(result){ console.log(result); $.bootstrapLoading.end(); // after remove const uId = me.selectedIdsArray.indexOf(id); if (uId >= 0) { me.selectedIdsArray.splice(uId, 1); } for (let idx = me.permissions.length - 1; idx >= 0; idx--) { if (parseInt(me.permissions[idx].user_id) === id) { me.permissions.splice(idx, 1); break; } } me.iniReportPermission(); }, function(err){ console.log(err); $.bootstrapLoading.end(); }, function(ex){ console.log(ex); $.bootstrapLoading.end(); } ); } }, createPermissionTbStr: (permission) => { const rstArr = []; rstArr.push(''); rstArr.push(`${permission.user_name || permission.name}`); rstArr.push(`${permission.user_role || permission.role}`); rstArr.push(`${(new Date(permission.create_time)).Format('yyyy-MM-dd hh:mm:ss')}`); rstArr.push(`移除`); rstArr.push(''); return rstArr.join(''); }, addUser: (userId) => { const me = reportPermissionObj; let b = false; for (let grp of ACCOUNT_LIST) { for (let user of grp.groupList) { if (user.id === userId) { b = true; const newPermission = { tid: TENDER_ID, user_id: userId, rpt_id: reportFormatSetupObj.currentRptId, name: user.name, role: user.role, create_time: new Date() }; me.permissions.push(newPermission); // me.createPermissionTbStr(user); me.iniReportPermission(); break; } } if (b) break; } }, updateSelectedMarks: (userId = null) => { // 此方法是更新下拉菜单的勾选符号(根据permissions列表) const me = reportPermissionObj; // const selectedIdsArray = []; // if (userId) selectedIdsArray.push(userId); if ($('#format-setup-add-user .book-list').length > 0) { $('.user-item').each(function() { const userIdStr = $(this).data('id'); const userId = parseInt(userIdStr, 10); const $mark = $(this).find('.selected-mark'); if (!isNaN(userId) && me.selectedIdsArray.includes(userId)) { $mark.show(); $(this).addClass('bg-light'); } else { $mark.hide(); $(this).removeClass('bg-light'); } }); } // }, iniPermissionRpts: () => { const me = reportPermissionObj; if (!me.treeObj) { zTreeHelper.createTreeDirectly(INDI_TOP_TREE_NODES, rpt_permission_setting, "rptFormatSetupTplTree2", reportPermissionObj); refreshNodes(reportPermissionObj); } }, batchApplyPermissions: () => { const me = reportPermissionObj; // 1. 收集用户列表 const userIds = []; me.permissions.forEach(permission => { if (permission.rpt_id === reportFormatSetupObj.currentRptId) { userIds.push(permission.user_id); } }); // 2. 收集报表模板列表 const rptIds = []; const curNodes = me.treeObj.getCheckedNodes(true); // if (treeNode.nodeType === RT.NodeType.TEMPLATE) { curNodes.forEach(node => { if (node.nodeType === RT.NodeType.TEMPLATE && reportFormatSetupObj.currentRptId !== node.ID) rptIds.push(node.ID); }); if (userIds.length > 0 && rptIds.length > 0) { const params = { tid: TENDER_ID, userIds, rptIds }; const url = '/report_api/batchApplyReportPermission'; $.bootstrapLoading.start(); CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'), async function(result){ console.log(result); $.bootstrapLoading.end(); }, function(err){ console.log(err); $.bootstrapLoading.end(); }, function(ex){ console.log(ex); $.bootstrapLoading.end(); } ); } }, }; const rpt_format_setting = { view: { selectedMulti: false }, check: { enable: true }, data: { keep: { parent:true, leaf:true }, key: { children: "items", title: "title", isHidden: "hidden" }, simpleData: { enable: true, rootPId: -1 } }, callback: { onCheck: reportFormatSetupObj.onCheck, onClick: reportFormatSetupObj.onClick } }; const rpt_permission_setting = { view: { selectedMulti: false }, check: { enable: true }, data: { keep: { parent:true, leaf:true }, key: { children: "items", title: "title", isHidden: "hidden" }, simpleData: { enable: true, rootPId: -1 } }, callback: { // onCheck: reportFormatSetupObj.onCheck, // onClick: reportFormatSetupObj.onClick } };