Browse Source

fix: TASK #5329 调整 + 签名

Tony Kang 2 tuần trước cách đây
mục cha
commit
653d6ccf01

+ 158 - 40
app/public/report/js/rpt_format_setup.js

@@ -3,6 +3,7 @@ const reportFormatSetupObj = {
     templateObj: {},
     templateObj: {},
     canvas: null,
     canvas: null,
     fieldParamOptions: null,
     fieldParamOptions: null,
+    maxFieldID: -1,
     onCheck: (event, treeId, treeNode) => {
     onCheck: (event, treeId, treeNode) => {
         //
         //
     },
     },
@@ -38,10 +39,12 @@ const reportFormatSetupObj = {
         console.log(dom);
         console.log(dom);
         let maxCnt = 0;
         let maxCnt = 0;
         // for (const td of dom.parentElement.parentElement.nextElementSibling.children[0].children[1].children) {
         // for (const td of dom.parentElement.parentElement.nextElementSibling.children[0].children[1].children) {
-        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;
+        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]
         // dom.parentElement.parentElement.nextElementSibling.children[0].children[1]
@@ -80,6 +83,19 @@ const reportFormatSetupObj = {
             }           
             }           
         }
         }
     },
     },
+    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) => {
     initialize: (rptNode) => {
         const me = reportFormatSetupObj;
         const me = reportFormatSetupObj;
         me.canvas = document.getElementById("rptSetupPreviewCanvas");
         me.canvas = document.getElementById("rptSetupPreviewCanvas");
@@ -100,7 +116,12 @@ const reportFormatSetupObj = {
                     me.canvas.height = 820;
                     me.canvas.height = 820;
                     me.canvas.width = 1150;
                     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.fieldParamOptions = me.initialSelectionFields(result.data);
+                me.maxFieldID = me._getTheMaxFieldID(result.data);
                 me.initialTitle(result.data);
                 me.initialTitle(result.data);
                 me.initialHeader(result.data);
                 me.initialHeader(result.data);
                 me.initialFooter(result.data);
                 me.initialFooter(result.data);
@@ -148,6 +169,10 @@ const reportFormatSetupObj = {
         $("#rpt_footer_table_div").empty();
         $("#rpt_footer_table_div").empty();
         // 表标题
         // 表标题
         $("#rpt_title_input")[0].value = '';
         $("#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) => {
     initialHeader: (rptTpl) => {
         const me = reportFormatSetupObj;
         const me = reportFormatSetupObj;
@@ -189,7 +214,17 @@ const reportFormatSetupObj = {
         }
         }
     },
     },
     initialSignature: (rptTpl) => {
     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) => {
     _getTitle: (rptTpl) => {
         const me = reportFormatSetupObj;
         const me = reportFormatSetupObj;
@@ -297,6 +332,30 @@ const reportFormatSetupObj = {
         collectAdhocFields(footerBandInfo);
         collectAdhocFields(footerBandInfo);
         return rst;
         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) => {
     _createSelectionFields_BK: (rptTpl, currentFieldID, ParamID) => {
         const me = reportFormatSetupObj;
         const me = reportFormatSetupObj;
         const rst = [];
         const rst = [];
@@ -486,6 +545,24 @@ const reportFormatSetupObj = {
             );
             );
         }
         }
     },
     },
+    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: () => {
     _prepareReportTemplate: () => {
         let rst = null;
         let rst = null;
         const me = reportFormatSetupObj;
         const me = reportFormatSetupObj;
@@ -493,9 +570,10 @@ const reportFormatSetupObj = {
         if (curNodes.length > 0) {
         if (curNodes.length > 0) {
             const headers = me._createCommonCollctInfo('#rpt_header_table_div');
             const headers = me._createCommonCollctInfo('#rpt_header_table_div');
             const footers = me._createCommonCollctInfo('#rpt_footer_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}`];
             const rptTemplate = me.templateObj[`${curNodes[0].ID}`];
             if (rptTemplate) {
             if (rptTemplate) {
-                me._setupTemplate(rptTemplate, headers, footers, null);
+                me._setupTemplate(rptTemplate, headers, footers, signatures);
                 rst = rptTemplate;
                 rst = rptTemplate;
             }
             }
         }
         }
@@ -512,46 +590,48 @@ const reportFormatSetupObj = {
         };
         };
         const ParamDftValMap = { '5010': '第 X 页', '5011': '共 X 页' };
         const ParamDftValMap = { '5010': '第 X 页', '5011': '共 X 页' };
         const domObj = $(containerId);
         const domObj = $(containerId);
-        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] || '';
+        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;
                                     }
                                     }
-                                    break;
                                 }
                                 }
+                                rst.fields.push(fieldObj);
                             }
                             }
-                            rst.fields.push(fieldObj);
+                        } else {
+                            break;
                         }
                         }
-                    } else {
-                        break;
                     }
                     }
+                    if (dtlCnt > 0) lvCnt++; // 有子项的才会被统计进来
+                    
+                    // lvCnt++; // 不能无条件的统计增加层次
                 }
                 }
-                if (dtlCnt > 0) lvCnt++; // 有子项的才会被统计进来
-                
-                // lvCnt++; // 不能无条件的统计增加层次
             }
             }
         }
         }
         if (lvCnt > 0) {
         if (lvCnt > 0) {
@@ -569,6 +649,39 @@ const reportFormatSetupObj = {
         }
         }
         return rst;
         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) => {
     _setupTemplate: (rptTpl, headersInfo, footersInfo, signatureInfo = null) => {
         const me = reportFormatSetupObj;
         const me = reportFormatSetupObj;
         me._setTitle(rptTpl, $("#rpt_title_input")[0].value);
         me._setTitle(rptTpl, $("#rpt_title_input")[0].value);
@@ -598,5 +711,10 @@ const reportFormatSetupObj = {
             footerBandInfo.text_s = footersInfo.texts;
             footerBandInfo.text_s = footersInfo.texts;
             footerBandInfo.discrete_field_s = footersInfo.fields;
             footerBandInfo.discrete_field_s = footersInfo.fields;
         }
         }
+        if (signatureInfo && signatureInfo.length === 3) {
+            rptTpl['电子签名离散指标_集合'] = signatureInfo[0];
+            rptTpl['动态日期离散参数_集合'] = signatureInfo[1];
+            rptTpl['电子签名审核意见指标_集合'] = signatureInfo[2];
+        }
     },
     },
 };
 };

+ 25 - 0
app/view/report/rpt_format_popup.ejs

@@ -36,3 +36,28 @@
         </div>
         </div>
     </div>
     </div>
 </div> 
 </div> 
+<!--弹出抽屉预览电子签名-->
+<div class="modal fade" id="view-sign" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document" >
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">预览电子签名</h5>
+            </div>
+            <div class="modal-body">
+                <div class="" style="width:600px;margin: auto;" id="dummy_sign_preview">
+                    <div class="form-group row">
+                        <label for="staticEmail" class="col-sm-3 col-form-label pr-0">承包人</label>
+                        <div class="col-sm-9">
+                        <ul class="list-group">
+                            <li class="list-group-item"><a class="text-muted"><i class="fa fa-plus"></i> 添加签字</a></li>
+                        </ul>
+                        </div>
+                    </div>
+                </div>                    
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div> 

+ 5 - 5
app/view/report/rpt_format_setup.ejs

@@ -65,7 +65,7 @@
                             <div class="d-inline-block">
                             <div class="d-inline-block">
                                 <ul class="nav nav-pills m-0">
                                 <ul class="nav nav-pills m-0">
                                     <li class="nav-item mr-1"><a onclick="reportFormatSetupObj.preview()" data-toggle="modal" data-target="#setup_view-bb" class=" btn btn-light btn-sm text-primary">预览报表</a></li>
                                     <li class="nav-item mr-1"><a onclick="reportFormatSetupObj.preview()" data-toggle="modal" data-target="#setup_view-bb" class=" btn btn-light btn-sm text-primary">预览报表</a></li>
-                                    <!-- <li class="nav-item mr-1"><a href="#view-sign" data-toggle="modal" data-target="#view-sign" class=" btn btn-light btn-sm  text-primary">预览电子签名</a></li> -->
+                                    <li class="nav-item mr-1"><a onclick="reportFormatSetupObj.previewSign()" data-toggle="modal" data-target="#view-sign" class=" btn btn-light btn-sm  text-primary">预览电子签名</a></li>
                                     <li class="nav-item"><button onclick="$('#show_confirm_format_setup').trigger('click')" class="btn btn-outline-primary btn-sm">更新报表模板</button></li>
                                     <li class="nav-item"><button onclick="$('#show_confirm_format_setup').trigger('click')" class="btn btn-outline-primary btn-sm">更新报表模板</button></li>
                                     <li class="nav-item"><a id="show_confirm_format_setup" href="#" class=" btn btn-sm btn-primary" data-toggle="modal" data-target="#updaterp" style="display:none"></a></li>
                                     <li class="nav-item"><a id="show_confirm_format_setup" href="#" class=" btn btn-sm btn-primary" data-toggle="modal" data-target="#updaterp" style="display:none"></a></li>
                                 </ul>
                                 </ul>
@@ -102,16 +102,16 @@
                                                 </div>
                                                 </div>
                                             </div>                                                
                                             </div>                                                
                                         </div>
                                         </div>
-                                        <!-- <div class="card mb-3">
+                                        <div class="card mb-3">
                                             <div class="card-header d-flex justify-content-between">
                                             <div class="card-header d-flex justify-content-between">
                                                 <div>电子签名</div>
                                                 <div>电子签名</div>
                                             </div>
                                             </div>
                                             <div class="card-body">
                                             <div class="card-body">
-                                                <ul class="list-unstyled">
-                                                    <li class="pl-3"><a href=""><i class="fa fa-plus"></i> 添加新签字人</a></li>
+                                                <ul class="list-unstyled" id="signature_ul_list">
+                                                    <li class="pl-3"><a href="#" onclick="reportFormatSetupObj.onAddSignature(this)"><i class="fa fa-plus"></i> 添加新签字人</a></li>
                                                 </ul>
                                                 </ul>
                                             </div>
                                             </div>
-                                        </div> -->
+                                        </div>
                                     </div>
                                     </div>
                                 </div>
                                 </div>
                             </div>
                             </div>