| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720 |
- const reportFormatSetupObj = {
- treeObj: null,
- templateObj: {},
- canvas: null,
- fieldParamOptions: null,
- maxFieldID: -1,
- onCheck: (event, treeId, treeNode) => {
- //
- },
- onClick: (event,treeId,treeNode) => {
- const me = reportFormatSetupObj;
- if (treeNode.nodeType === RT.NodeType.TEMPLATE) {
- me.initialize(treeNode);
- }
- },
- onDeleteInfo: (dom) => {
- // 删除表眉、表脚项
- // console.log(dom.parentElement.parentElement);
- $(dom.parentElement.parentElement).remove();
- },
- onAddInfo: (dom, lv) => {
- // 增加表眉、表脚细项
- const me = reportFormatSetupObj;
- const domStrs = [];
- domStrs.push('<tr class="text-center">');
- domStrs.push('<td></td>');
- domStrs.push(`<td>${me._createTypeSelection(0)}</td>`);
- domStrs.push(`<td class="text-left"><input class="form-control form-control-sm" value="" type="text"></td>`);
- domStrs.push(`<td class="text-left"><input class="form-control form-control-sm" value="0" type="text"></td>`);
- domStrs.push(`<td class="text-left"><input class="form-control form-control-sm" value="0" type="text"></td>`);
- domStrs.push(`<td class="text-left"><input class="form-control form-control-sm" value="" type="text"></td>`);
- domStrs.push(`<td class="text-left"><input class="form-control form-control-sm" value="" type="text"></td>`);
- domStrs.push('<td><a href="#" onclick="reportFormatSetupObj.onDeleteInfo(this)" class="text-danger mr-2" title="删除">删除</a></td>');
- domStrs.push('</tr>');
- $(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('<tr class="text-center">');
- lvDtl.push(`<td>${maxCnt + 1}</td>`);
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td><a href="#" onclick="reportFormatSetupObj.onAddInfo(this)" class="text-primary mr-2" title="新增插入子项">新增</a></td>');
- lvDtl.push('</tr>');
- $(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('<input class="form-control form-control-sm" value="" type="text">');
- 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;
- me.maxFieldID++;
- const newSignature = [];
- newSignature.push('<li class="d-flex justify-content-start align-items-center mb-3">');
- newSignature.push(`<span class="col-auto"><input class="form-control form-control-sm" FID="${me.maxFieldID}" value="" type="text"></span>`);
- newSignature.push('<span><a href="#" onclick="reportFormatSetupObj.onRemoveSignature(this)" class="btn-sm text-danger px-1" title="移除"><i class="fa fa-remove"></i></a></span>');
- newSignature.push('</li>');
- $(dom.parentElement).before(newSignature.join(''));
- },
- onRemoveSignature: (dom) => {
- $(dom.parentElement.parentElement).remove();
- },
- initialize: (rptNode) => {
- const me = reportFormatSetupObj;
- me.canvas = document.getElementById("rptSetupPreviewCanvas");
- // 1. 先清理
- me.clearTplProperties();
- // 2. 再加表标题、表眉、表脚、电子签名内容
- const params = { rpt_tpl_id: rptNode.refId };
- 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);
- $.bootstrapLoading.end();
- }, function(err){
- console.log(err);
- $.bootstrapLoading.end();
- }, function(ex){
- console.log(ex);
- $.bootstrapLoading.end();
- }
- );
- },
- clearTplProperties: () => {
- // 表眉
- $("#rpt_header_div").empty();
- // const str1 = '<div>表眉</div><div><input id="header_band_height_input" class="form-control form-control-sm" value="" type="text"></input></div><div><a href="#" onclick="reportFormatSetupObj.onAddLvInfo(this)" class="btn btn-sm btn-light text-primary">新增行</a></div>';
- const str1Arr = [];
- str1Arr.push('<div>表眉');
- str1Arr.push('</div>');
- str1Arr.push('<div>');
- str1Arr.push('<div>默认行高: ');
- str1Arr.push('<input id="header_band_height_input" value="" type="number" step="0.1" width="10"></input>');
- str1Arr.push('<a href="#" onclick="reportFormatSetupObj.onAddLvInfo(this)" class="btn btn-sm btn-light text-primary">新增行</a>');
- str1Arr.push('</div>');
- str1Arr.push('</div>');
- const str1 = str1Arr.join('');
- $("#rpt_header_div").append(str1);
- $("#rpt_header_table_div").empty();
- // 表脚
- $("#rpt_footer_div").empty();
- // const str2 = '<div>表脚</div><div><input id="footer_band_height_input" class="form-control form-control-sm" value="" type="text"></input></div><div><a href="#" onclick="reportFormatSetupObj.onAddLvInfo(this)" class="btn btn-sm btn-light text-primary">新增行</a></div>';
- const str2Arr = [];
- str2Arr.push('<div>表脚');
- str2Arr.push('</div>');
- str2Arr.push('<div>');
- str2Arr.push('<div>默认行高: ');
- str2Arr.push('<input id="footer_band_height_input" value="" type="number" step="0.1" width="10"></input>');
- str2Arr.push('<a href="#" onclick="reportFormatSetupObj.onAddLvInfo(this)" class="btn btn-sm btn-light text-primary">新增行</a>');
- str2Arr.push('</div>');
- str2Arr.push('</div>');
- 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('<li class="pl-3" id="signature_li_list"><a href="#" onclick="reportFormatSetupObj.onAddSignature(this)"><i class="fa fa-plus"></i> 添加新签字人</a></li>');
- },
- 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('<li class="d-flex justify-content-start align-items-center mb-3">');
- newSignature.push(`<span class="col-auto"><input class="form-control form-control-sm" FID="${disF.ID}" value="${disF.Name}" type="text"></span>`);
- newSignature.push('<span><a href="#" onclick="reportFormatSetupObj.onRemoveSignature(this)" class="btn-sm text-danger px-1" title="移除"><i class="fa fa-remove"></i></a></span>');
- newSignature.push('</li>');
- 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);
- }
- }
- }
- return rst;
- },
- _createTypeSelection: (dftSelection = 0) => {
- const rst = [];
- rst.push('<select class="form-control form-control-sm" onchange="reportFormatSetupObj.onTypeChange(this)">');
- rst.push(`<option${dftSelection === 0 ? ' selected' : ''}>文本</option>`);
- rst.push(`<option${dftSelection !== 0 ? ' selected' : ''}>指标</option>`);
- rst.push('</select>');
- 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 });
- }
- 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('<select class="form-control form-control-sm">');
- for (const fd of rptTpl['指标_数据_映射']['离散指标_集合']) {
- if (!hasSelected) {
- hasSelected = fd.ID === currentFieldID;
- }
- const selectedStr = fd.ID === currentFieldID ? ' selected' : '';
- rst.push(`<option${selectedStr} FID="${fd.ID}">${fd.Name}</option>`);
- }
- if (!hasSelected) {
- // 如果没有在选项中,那表示是一个额外的指标(可能在: a. '电子签名离散指标_集合' b. '无映射离散指标_集合'中 etc...),需要在模板中全扫描一把
- // 有2种情况,一种是离散的指标,另一种是特殊参数(页码)
- if (ParamID) {
- for (const pd of rptTpl['离散参数_集合']) {
- if (`${pd.ID}` === `${ParamID}`) {
- rst.push(`<option selected PID="${ParamID}">${pd.Name}</option>`);
- break;
- }
- }
- } else {
- const selField = me._scanField(rptTpl, currentFieldID);
- if (selField) {
- rst.push(`<option selected FID="${currentFieldID}">${selField.Name}</option>`);
- }
- }
- }
- rst.push('</select>');
- return rst.join('');
- },
- _createSelectionFields: (currentFieldID, ParamID) => {
- const me = reportFormatSetupObj;
- const rst = [];
- let hasSelected = false;
- rst.push('<select class="form-control form-control-sm">');
- for (const fd of reportFormatSetupObj.fieldParamOptions.fields_collection) {
- const selectedStr = `${fd.FID}` === `${currentFieldID}` ? ' selected' : '';
- rst.push(`<option${selectedStr} FID="${fd.FID}">${fd.name}</option>`);
- }
- for (const pd of reportFormatSetupObj.fieldParamOptions.params_collection) {
- const selectedStr = `${pd.PID}` === `${ParamID}` ? ' selected' : '';
- rst.push(`<option${selectedStr} PID="${pd.PID}">${pd.name}</option>`);
- }
- rst.push('</select>');
- 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(' <table class="table table-bordered">')
- rst.push(' <thead>');
- rst.push(' <tr>');
- rst.push(' <th width="5%" style="text-align: center;">行号</th>');
- rst.push(' <th width="10%" style="text-align: center;">类型</th>');
- rst.push(' <th width="20%" style="text-align: center;">值</th>');
- rst.push(' <th width="10%" style="text-align: center;">左位置</th>');
- rst.push(' <th width="10%" style="text-align: center;">右位置</th>');
- rst.push(' <th width="15%" style="text-align: center;">前缀</th>');
- rst.push(' <th width="15%" style="text-align: center;">后缀</th>');
- rst.push(' <th width="15%" style="text-align: center;">操作</th>');
- rst.push(' </tr>');
- rst.push(' </thead>');
- rst.push(' <tbody>')
- // --------
- const lvs = [];
- for (let idx = 0; idx < posArr.length; idx++) {
- const lvDtl = [];
- lvDtl.push('<tr class="text-center">');
- lvDtl.push(`<td>${idx + 1}</td>`);
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td></td>');
- lvDtl.push('<td><a href="#" onclick="reportFormatSetupObj.onAddInfo(this)" class="text-primary mr-2" title="新增插入子项">新增</a></td>');
- lvDtl.push('</tr>');
- 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('<tr class="text-center">');
- lvs[btIdx].push('<td></td>');
- lvs[btIdx].push(`<td>${me._createTypeSelection(0)}</td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${txt.Label || ''}" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${txt.area.Left || '0'}" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${txt.area.Right || '0'}" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="" type="text"></td>`);
- // lvs[btIdx].push('<td></td>');
- // lvs[btIdx].push('<td></td>');
- lvs[btIdx].push('<td><a href="#" onclick="reportFormatSetupObj.onDeleteInfo(this)" class="text-danger mr-2" title="删除">删除</a></td>');
- lvs[btIdx].push('</tr>');
- }
- }
- }
- 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('<tr class="text-center">');
- lvs[btIdx].push('<td></td>');
- lvs[btIdx].push(`<td>${me._createTypeSelection(1)}</td>`);
- // lvs[btIdx].push(`<td>${me._createSelectionFields_BK(rptTpl, field.FieldID, field.ParamID)}</td>`);
- lvs[btIdx].push(`<td>${me._createSelectionFields(field.FieldID, field.ParamID)}</td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${field.area.Left || '0'}" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${field.area.Right || '0'}" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${field.Prefix || ''}" type="text"></td>`);
- lvs[btIdx].push(`<td class="text-left"><input class="form-control form-control-sm" value="${field.Suffix || ''}" type="text"></td>`);
- lvs[btIdx].push('<td><a href="#" onclick="reportFormatSetupObj.onDeleteInfo(this)" class="text-danger mr-2" title="删除">删除</a></td>');
- lvs[btIdx].push('</tr>');
- }
- }
- }
- //...
- for (const lv of lvs) {
- rst.push(...lv);
- }
- rst.push(' </tbody>')
- rst.push(' </table>')
- }
- 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('<div class="form-group row">');
- signs.push(`<label for="staticEmail" class="col-sm-3 col-form-label pr-0">${signName || ''}</label>`);
- signs.push('<div class="col-sm-9">');
- signs.push('<ul class="list-group">');
- signs.push('<li class="list-group-item"><a class="text-muted"><i class="fa fa-plus"></i> 添加签字</a></li>');
- signs.push('</ul>');
- signs.push('</div>');
- signs.push('</div>');
- }
- $("#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 {
- fieldObj.ParamID = fIdOpt.attributes[fIdOpt.attributes.length - 1].nodeValue;
- 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];
- }
- },
- };
|