Browse Source

电子签名交互

TonyKang 5 years ago
parent
commit
23c87071fd

+ 0 - 12
app/controller/report_controller.js

@@ -86,21 +86,9 @@ module.exports = app => {
                 }
                 rptTpl = JSON.parse(rptTpl[0].rpt_content);
                 // console.log('get the template!');
-                // test
                 const pageRst = await getAllPagesCommon(ctx, rptTpl, params, JV.PAGING_OPTION_NORMAL, JV.OUTPUT_TYPE_NORMAL);
                 // console.log(pageRst);
                 const roleRel = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id);
-                /*
-                // --------------------------
-                const printCom = JpcEx.createNew();
-                const defProperties = await ctx.service.rptPreDefineCfg.getCfgById('Administrator');
-                // console.log(rptTpl);
-                rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
-                printCom.initialize(rptTpl);
-                // console.log('initialize the template!');
-                const pageRst = printCom.outputAsPreviewPage(rptTpl, JSON.parse(defProperties[0].defined_content));
-                // console.log(pageRst);
-                */
                 ctx.body = { data: pageRst, signatureRelInfo: roleRel };
                 // ctx.body = { data: { msg: 'test the network' } };
                 ctx.status = 201;

+ 34 - 1
app/controller/signature_controller.js

@@ -7,7 +7,7 @@ module.exports = app => {
     class ReportController extends app.BaseController {
 
         /**
-         * 获取报表数据
+         * 创建电子签名角色
          *
          * @param {Object} ctx - egg全局context
          * @return {void}
@@ -21,6 +21,39 @@ module.exports = app => {
             // ctx.body = { data: { msg: 'test the network' } };
             ctx.status = 201;
         }
+
+        /**
+         * 创建签名角色关联
+         *
+         * @param {Object} ctx - egg全局context
+         * @return {void}
+         */
+        async createRoleRel(ctx) {
+            const params = JSON.parse(ctx.request.body.params);
+            // console.log(params);
+            const rst = await ctx.service.roleRptRel.createRoleRelationship(params.tender_id, params.rpt_id, params.rel_content);
+            // console.log(rst);
+            ctx.body = { data: rst };
+            // ctx.body = { data: { msg: 'test the network' } };
+            ctx.status = 201;
+        }
+
+        /**
+         * 更新签名角色关联
+         *
+         * @param {Object} ctx - egg全局context
+         * @return {void}
+         */
+        async updateRoleRel(ctx) {
+            const params = JSON.parse(ctx.request.body.params);
+            // console.log(params);
+            const rst = await ctx.service.roleRptRel.updateRoleRelationship(params.id, params.tender_id, params.rpt_id, params.rel_content);
+            // console.log(rst);
+            ctx.body = { data: rst };
+            // ctx.body = { data: { msg: 'test the network' } };
+            ctx.status = 201;
+        }
+
     }
 
     return ReportController;

+ 19 - 1
app/public/report/js/rpt_main.js

@@ -241,7 +241,25 @@ let zTreeOprObj = {
             function(result){
                 // hintBox.unWaitBox();
                 let pageRst = result.data;
-                ROLE_REL_LIST = result.signatureRelInfo;
+                if (result.signatureRelInfo && result.signatureRelInfo.length > 0) {
+                    CURRENT_ROLE_REL_ID = result.signatureRelInfo[0].id;
+                    ROLE_REL_LIST = JSON.parse(result.signatureRelInfo[0].rel_content);
+                    for (const page of pageRst.items) {
+                        if (page.signature_cells) {
+                            for (const sCell of page.signature_cells) {
+                                for (const role_rel of ROLE_REL_LIST) {
+                                    if (role_rel.signature_name === sCell.signature_name) {
+                                        sCell.path = role_rel.sign_path;
+                                        sCell.pre_path = role_rel.sign_path;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    CURRENT_ROLE_REL_ID = -1;
+                    ROLE_REL_LIST = [];
+                }
                 // if (ROLE_REL_LIST)
                 let canvas = zTreeOprObj.canvas;
                 if (pageRst && pageRst.items && pageRst.items.length > 0) {

+ 31 - 45
app/public/report/js/rpt_signature.js

@@ -58,43 +58,6 @@ let rptSignatureHelper = {
         accDiv.append(prj_accounts.join(''));
         accSelect.append(prj_sel_option_accounts.join(''));
     },
-    drawEsignature: function (accIdx) {
-        let dftSignSrc = '/public/images/user-sign.PNG';
-        if (PRJ_ACCOUNT_LIST[accIdx].sign_path !== '') {
-            dftSignSrc = '/public/images/' + PRJ_ACCOUNT_LIST[accIdx].sign_path;
-        }
-        //找到相关签名地方,stamp!
-        if (rptSignatureHelper.currentSelectedESignAccName !== null) {
-            for (const page of zTreeOprObj.currentRptPageRst.items) {
-                if (page.signature_cells) {
-                    for (const sCell of page.signature_cells) {
-                        if (sCell.signature_name === rptSignatureHelper.currentSelectedESignAccName) {
-                            sCell.pre_path = dftSignSrc;
-                        }
-                    }
-                }
-            }
-            // 1. 删除不需要的child dom
-            $(rptSignatureHelper.currentSelectedESignAccDom).empty();
-            // 2. 创建已选择签名相关 dom
-            const canvasWidth = 60;
-            const canvasHeight = 30;
-            // 2.1 canvas / X
-            const elementsStrArr = [];
-            elementsStrArr.push('<p class=" d-flex justify-content-between m-0"><canvas id="signCanvas' + accIdx + '" width="' + canvasWidth + '" height="' + canvasHeight + '"></canvas><a onclick="rptSignatureHelper.removeSignature(this)" class="text-danger"><i class="fa fa-remove" title="移除签名"></i></a></p>');
-            $(rptSignatureHelper.currentSelectedESignAccDom).append(elementsStrArr.join(' '));
-            let imgObj = new Image();
-            imgObj.src = dftSignSrc;
-            imgObj.onload = function(){
-                let canvasNode = document.getElementById('signCanvas' + accIdx);
-                let ctx = canvasNode.getContext('2d');
-                ctx.drawImage(this, 0, 0, canvasWidth, canvasHeight);
-            }
-            //.appendChild(pNode);
-            //*/
-            // 2.2 date-picker
-        }
-    },
     createEsignatureByAccIdx: function (accIdx) {
         rptSignatureHelper.createPreSelectedSignature(PRJ_ACCOUNT_LIST[accIdx], null);
     },
@@ -238,9 +201,7 @@ let rptSignatureHelper = {
             }
         }
         // 还有ROLE_REL_LIST
-        for (let idx = 0; idx < ROLE_REL_LIST.length; idx++) {
-            //
-        }
+        rptSignatureHelper.cleanOldSignature(accTxtName);
     },
     removeSelectSignature: function () {
         for (const page of zTreeOprObj.currentRptPageRst.items) {
@@ -255,6 +216,7 @@ let rptSignatureHelper = {
         zTreeOprObj.showPage(zTreeOprObj.currentPage, zTreeOprObj.canvas);
     },
     setupAfterSelectSignature: function () {
+        //1. 重刷page
         for (const page of zTreeOprObj.currentRptPageRst.items) {
             if (page.signature_cells) {
                 for (const sCell of page.signature_cells) {
@@ -266,6 +228,24 @@ let rptSignatureHelper = {
             }
         }
         zTreeOprObj.showPage(zTreeOprObj.currentPage, zTreeOprObj.canvas);
+        //2. 更新数据
+        const params = {};
+        params.id = CURRENT_ROLE_REL_ID;
+        params.tender_id = TENDER_ID;
+        params.rpt_id = zTreeOprObj.currentNode.refId;
+        params.rel_content = ROLE_REL_LIST;
+        CommonAjax.postXsrfEx("/tender/report_api/updateRoleRelationship", params, 10000, true, getCookie('csrfToken'),
+            function(result){
+                console.log(result);
+                if (result.data && result.data.insertId >= 0) {
+                    CURRENT_ROLE_REL_ID = result.data.insertId;
+                }
+            }, function(err){
+                // hintBox.unWaitBox();
+            }, function(ex){
+                // hintBox.unWaitBox();
+            }
+        );
     },
     switchAddRoleDiv: function (dom) {
         if (dom.nextElementSibling.children[0].style.display === 'none') {
@@ -286,16 +266,22 @@ let rptSignatureHelper = {
             CommonAjax.postXsrfEx("/tender/report_api/createSignatureRole", params, 10000, true, getCookie('csrfToken'),
                 function(result){
                     console.log(result);
+                    const newRole = {};
+                    newRole.name = params.name;
+                    newRole.bind_acc_id = selectedAcc.id;
+                    newRole.prj_id = PROJECT_ID;
+                    newRole.tender_id = TENDER_ID;
+                    ROLE_LIST.push(newRole);
                     const domArr = [];
                     domArr.push('<li class="add-sign-list-item">');
                     //1. apply签名
-                    domArr.push('<a href="javascript:void(0)" onclick="rptSignatureHelper.drawEsignature(' + $('#project_account_select_dom')[0].selectedIndex + ')" class="btn-link pull-right" title="添加" data-dismiss="modal">');
+                    domArr.push('<a href="javascript:void(0)" onclick="rptSignatureHelper.createEsignatureByRoleIdx(' + (ROLE_LIST.length - 1) +')" class="btn-link pull-right" title="添加" data-dismiss="modal">');
                     domArr.push('<i class="fa fa-plus"></i>');
                     domArr.push('</a>');
-                    //2. 编辑角色(暂缓)
-                    // domArr.push('<a href="" class="btn-link pull-right mr-1" title="编辑">');
-                    // domArr.push('<i class="fa fa-pencil-square-o"></i>');
-                    // domArr.push('</a>');
+                    //2. 编辑角色(暂缓处理click事件)
+                    domArr.push('<a href="javascript:void(0)" onclick="" class="btn-link pull-right mr-1" title="编辑">');
+                    domArr.push('<i class="fa fa-pencil-square-o"></i>');
+                    domArr.push('</a>');
                     //3. 显示名称
                     domArr.push('<i class="fa fa-user"></i> ' + $('#acc_role_name')[0].value + '<p>' + selectedAcc.name + '-<small class="text-muted">' + roleName + '</small></p>');
                     $('#existed_roles_ul').append(domArr.join(' '));

+ 1 - 0
app/router.js

@@ -174,6 +174,7 @@ module.exports = app => {
     app.get('/tender/:id/measure/stage/:order/report', sessionAuth, tenderCheck, stageCheck, 'reportController.index');
     app.post('/tender/report_api/getReport', sessionAuth, 'reportController.getReport');
     app.post('/tender/report_api/createSignatureRole', sessionAuth, 'signatureController.createSignatureRole');
+    app.post('/tender/report_api/updateRoleRelationship', sessionAuth, 'signatureController.updateRoleRel');
     // 计量附件
     app.post('/tender/:id/measure/stage/:order/upload/file', sessionAuth, 'stageController.uploadFile');
     app.get('/tender/:id/measure/stage/:order/download/file/:fid', sessionAuth, 'stageController.downloadFile');

+ 18 - 19
app/service/role_rpt_rel.js

@@ -82,25 +82,24 @@ module.exports = app => {
             return rst;
         }
 
-        // async updateRoleRelationship(tender_id, rpt_id, relArr) {
-        //     let rst = null;
-        //     this.transaction = await this.db.beginTransaction();
-        //     try {
-        //         const data = {
-        //             id: 0,
-        //             tender_id: tender_id,
-        //             rpt_id: rpt_id,
-        //             rel_content: JSON.stringify(relArr),
-        //         };
-        //         rst = await this.transaction.insert(this.tableName, data);
-        //         await this.transaction.commit();
-        //     } catch (ex) {
-        //         console.log(ex);
-        //         // 回滚
-        //         await this.transaction.rollback();
-        //     }
-        //     return rst;
-        // }
+        async updateRoleRelationship(id, tender_id, rpt_id, relArr) {
+            let rst = null;
+            if (id < 0) {
+                rst = this.createRoleRelationship(tender_id, rpt_id, relArr);
+            } else {
+                this.transaction = await this.db.beginTransaction();
+                try {
+                    const data = { id: id, tender_id: tender_id, rpt_id: rpt_id, rel_content: JSON.stringify(relArr) };
+                    rst = await this.transaction.update(this.tableName, data);
+                    this.transaction.commit();
+                } catch (ex) {
+                    console.log(ex);
+                    // 回滚
+                    await this.transaction.rollback();
+                }
+            }
+            return rst;
+        }
     }
     return RoleRptRel;
 };

+ 1 - 0
app/view/report/index.ejs

@@ -187,6 +187,7 @@
     const ROLE_LIST = <%- role_list %>;
     const STAGE_STATUS = <%- stg_status %>;
     let ROLE_REL_LIST = [];
+    let CURRENT_ROLE_REL_ID = -1;
     let current_stage_order = -1;
     let current_stage_id = -1;
     let current_stage_times = -1;