Explorar el Código

code debug for datepicker

TonyKang hace 5 años
padre
commit
240e7d95d5

+ 18 - 3
app/controller/report_controller.js

@@ -24,7 +24,7 @@ module.exports = app => {
                 const tender = ctx.tender;
                 const stage = ctx.stage;
                 // console.log(tender.data);
-                // console.log(tender.data.project_id);
+                // console.log(stage);
                 let stage_id = -1;
                 let stage_order = -1;
                 let stage_times = -1;
@@ -34,6 +34,7 @@ module.exports = app => {
                 const stageList = await ctx.service.stage.getValidStagesShort(tender.id);
                 const prjAccList = await ctx.service.projectAccount.getAllAccountByProjectId(tender.data.project_id);
                 const roleList = await ctx.service.signatureRole.getSignatureRolesByTenderId(tender.id);
+
                 // console.log(maxStageAmt[0].maxAmt);
                 if (stage !== null && stage !== undefined) {
                     stage_id = stage.id;
@@ -62,6 +63,7 @@ module.exports = app => {
                 };
                 // await this.layout('report/index.ejs', renderData, 'ledger/audit_modal.ejs');
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
+                // await this.layout('report/index.ejs', renderData);
             } catch (err) {
                 this.log(err);
                 console.log(err);
@@ -89,7 +91,9 @@ module.exports = app => {
                 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);
-                ctx.body = { data: pageRst, signatureRelInfo: roleRel };
+                const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
+
+                ctx.body = { data: pageRst, signatureRelInfo: roleRel, stageAudit: stgAudit };
                 // ctx.body = { data: { msg: 'test the network' } };
                 ctx.status = 201;
             } catch (ex) {
@@ -97,7 +101,6 @@ module.exports = app => {
             }
         }
     }
-
     return ReportController;
 };
 
@@ -348,3 +351,15 @@ function setupCustomizeCfg(customizeCfg, rptTpl, defProperties) {
     }
 }
 
+function hasSignatureDate(pageRst) {
+    let rst = false;
+    if (pageRst && pageRst.items.length > 0) {
+        for (const page of pageRst.items) {
+            if (page[JV.PROP_SIGNATURE_DATE_CELLS] && page[JV.PROP_SIGNATURE_DATE_CELLS].length > 0) {
+                rst = true;
+                break;
+            }
+        }
+    }
+    return rst;
+}

+ 22 - 0
app/public/css/main.css

@@ -48,6 +48,9 @@ font-size: .875rem;
 .custom-control {
   min-height: 1.2rem
 }
+.custom-control-label {
+  cursor: pointer;
+}
 /*自定义css*/
 .in-1{padding-left:5px!important}
 .in-2{padding-left:21px!important}
@@ -671,4 +674,23 @@ font-size: .875rem;
 }
 .showtoolsbar:hover .flowtoolsbar{
   display: block
+}
+.edit-tag-btn{
+  display: none
+}
+.tag-item:hover .edit-tag-btn{
+  display: block
+}
+/*电子签名*/
+.add-sign-list-item{
+  padding:.5rem .5rem .5rem 1rem;
+}
+.add-sign-list-item:hover{
+  box-shadow:0 0 3px rgba(0,0,0,.18)
+}
+.add-sign-list-item .btn-link {
+  display: none
+}
+.add-sign-list-item:hover .btn-link {
+  display: block
 }

+ 2 - 5
app/public/js/datepicker/datepicker.zh.js

@@ -1,5 +1,4 @@
-;(function (jQuery) {
-    jQuery.fn.datepicker.language['zh'] = {
+;(function (jQuery) { jQuery.fn.datepicker.language['zh'] = {
     days: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
     daysShort: ['日', '一', '二', '三', '四', '五', '六'],
     daysMin: ['日', '一', '二', '三', '四', '五', '六'],
@@ -10,6 +9,4 @@
     dateFormat: 'yyyy-mm-dd',
     timeFormat: 'hh:ii',
     firstDay: 0
-    };
-    jQuery.fn.datepicker.autoClose = true;
-})(jQuery);
+}; })(jQuery);

+ 3 - 0
app/public/report/js/rpt_main.js

@@ -244,6 +244,9 @@ let zTreeOprObj = {
                 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);
+                    rptSignatureHelper.originalRoleRelList = JSON.parse(result.signatureRelInfo[0].rel_content);
+                    STAGE_AUDIT = result.stageAudit;
+                    rptSignatureHelper.mergeSignDate();
                     for (const page of pageRst.items) {
                         if (page.signature_cells) {
                             for (const sCell of page.signature_cells) {

+ 58 - 0
app/public/report/js/rpt_signature.js

@@ -7,6 +7,7 @@
 let rptSignatureHelper = {
     currentSelectedESignAccDom: null,
     currentSelectedESignAccName: null,
+    originalRoleRelList: [],
     buildSelectableAccount: function () {
         //PRJ_ACCOUNT_LIST
         //1. 清理所有选择项
@@ -95,7 +96,10 @@ let rptSignatureHelper = {
                 let roleRelObj = {};
                 roleRelObj.signature_name = rptSignatureHelper.currentSelectedESignAccName;
                 roleRelObj.sign_path = dftSignSrc;
+                roleRelObj.sign_date = '';
+                roleRelObj.sign_date_format = 'yyyy年M月d日';
                 roleRelObj.user_name = userAcc.name;
+                roleRelObj.acc_id = userAcc.id;
                 roleRelObj.type = '用户';
                 roleRelObj.role = (userAcc.role === '')?"工程师":userAcc.role;
                 ROLE_REL_LIST.push(roleRelObj);
@@ -106,7 +110,10 @@ let rptSignatureHelper = {
                 let roleRelObj = {};
                 roleRelObj.signature_name = rptSignatureHelper.currentSelectedESignAccName;
                 roleRelObj.sign_path = dftSignSrc;
+                roleRelObj.sign_date = '';
+                roleRelObj.sign_date_format = 'yyyy年M月d日';
                 roleRelObj.user_name = userAcc.name;
+                roleRelObj.acc_id = userAcc.id;
                 roleRelObj.type = '角色';
                 roleRelObj.role = (userAcc.role === '')?"工程师":userAcc.role;
                 roleRelObj.role_name = roleAcc.name;
@@ -144,6 +151,7 @@ let rptSignatureHelper = {
         }
         if (signature_cells.length > 0) {
             const elementsStrArr = [];
+            const elementsDateStrArr = [];
             for (let scIdx = 0; scIdx < signature_cells.length; scIdx++) {
                 const sCell = signature_cells[scIdx];
                 elementsStrArr.push('<div class="form-group row">');
@@ -152,6 +160,7 @@ let rptSignatureHelper = {
                 elementsStrArr.push('<ul class="list-group">');
                 elementsStrArr.push('<li class="list-group-item">');
                 if (sCell.path || sCell.pic) {
+                    let hasPic = false;
                     for (const role_rel of ROLE_REL_LIST) {
                         if (role_rel.signature_name === sCell.signature_name) {
                             if (role_rel.type === '用户') {
@@ -160,8 +169,38 @@ let rptSignatureHelper = {
                                 //角色
                                 rptSignatureHelper.pushDomElementByRole(elementsStrArr, role_rel.role_name, role_rel.user_name);
                             }
+                            elementsStrArr.push('<div class="dropdown">');
+                            if (role_rel.sign_date !== '') {
+                                //elementsStrArr.push('<a href="" data-toggle="dropdown">' + (new Date(role_rel.sign_date)).Format('yyyy-M-d') + '</a>');
+                                elementsStrArr.push('<a href="" data-toggle="dropdown"><i class="fa fa-calendar" title="添加签名日期"></i></a>');
+                            } else {
+                                elementsStrArr.push('<a href="" data-toggle="dropdown"><i class="fa fa-calendar" title="添加签名日期"></i></a>');
+                            }
+                            elementsStrArr.push('<form class="dropdown-menu p-2">');
+                            elementsStrArr.push('<div class="form-group">');
+                            elementsStrArr.push('<label for="exampleDropdownFormEmail2">签名日期</label>');
+                            if (role_rel.sign_date !== '') {
+                                //elementsStrArr.push('<input class="datepicker-here form-control form-control-sm mt-0" placeholder="选择签名日期" data-language="zh" type="text" value="' + (new Date(role_rel.sign_date)).Format('yyyy-M-d') + '">');
+                                elementsStrArr.push('<input class="datepicker-here form-control form-control-sm mt-0" placeholder="选择签名日期" data-language="zh" type="text">');
+                            } else {
+                                elementsStrArr.push('<input class="datepicker-here form-control form-control-sm mt-0" placeholder="选择签名日期" data-language="zh" type="text">');
+                            }
+                            elementsStrArr.push('</div>');
+                            if (role_rel.sign_date !== '') {
+                                //elementsStrArr.push('<button type="submit" class="btn btn-sm btn-outline-danger">移除日期</button> <button type="submit" class="btn btn-sm btn-primary">确认</button>');
+                                elementsStrArr.push('<button type="submit" class="btn btn-sm btn-primary">确认</button>');
+                            } else {
+                                elementsStrArr.push('<button type="submit" class="btn btn-sm btn-primary">确认</button>');
+                            }
+                            elementsStrArr.push('</form>');
+                            elementsStrArr.push('</div>');
+                            hasPic = true;
                             break;
                         }
+                        if (!hasPic) {
+                            // 在交互操作中,有可能实际上是没有
+                            // elementsStrArr.push('<a href="#add-sign" onclick="rptSignatureHelper.currentSelectedESignAccDom = this.parentNode; rptSignatureHelper.currentSelectedESignAccName = \'' + sCell.signature_name + '\'" data-toggle="modal" data-target="#add-sign"><i class="fa fa-plus"></i> 添加签名</a>');
+                        }
                     }
                 } else {
                     elementsStrArr.push('<a href="#add-sign" onclick="rptSignatureHelper.currentSelectedESignAccDom = this.parentNode; rptSignatureHelper.currentSelectedESignAccName = \'' + sCell.signature_name + '\'" data-toggle="modal" data-target="#add-sign"><i class="fa fa-plus"></i> 添加签名</a>');
@@ -170,6 +209,7 @@ let rptSignatureHelper = {
                 elementsStrArr.push('</ul>');
                 elementsStrArr.push('</div>');
                 elementsStrArr.push('</div>');
+                //还有签名日期(用不用得上不管,先放上去再说)
             }
             body.append(elementsStrArr.join(' '));
         }
@@ -213,6 +253,8 @@ let rptSignatureHelper = {
                 }
             }
         }
+        ROLE_REL_LIST = [];
+        ROLE_REL_LIST = ROLE_REL_LIST.concat(rptSignatureHelper.originalRoleRelList);
         zTreeOprObj.showPage(zTreeOprObj.currentPage, zTreeOprObj.canvas);
     },
     setupAfterSelectSignature: function () {
@@ -234,6 +276,8 @@ let rptSignatureHelper = {
         params.tender_id = TENDER_ID;
         params.rpt_id = zTreeOprObj.currentNode.refId;
         params.rel_content = ROLE_REL_LIST;
+        rptSignatureHelper.originalRoleRelList = [];
+        rptSignatureHelper.originalRoleRelList = rptSignatureHelper.originalRoleRelList.concat(ROLE_REL_LIST);
         CommonAjax.postXsrfEx("/tender/report_api/updateRoleRelationship", params, 10000, true, getCookie('csrfToken'),
             function(result){
                 console.log(result);
@@ -325,5 +369,19 @@ let rptSignatureHelper = {
             }
         }
         return rst;
+    },
+    mergeSignDate: function () {
+        if (ROLE_REL_LIST && ROLE_REL_LIST.length > 0 && STAGE_AUDIT && STAGE_AUDIT.length > 0) {
+            for (const role_rel of ROLE_REL_LIST) {
+                if (role_rel.sign_date === undefined || role_rel.sign_date ===  null || role_rel.sign_date ===  '') {
+                    for (const stg_audit of STAGE_AUDIT) {
+                        if (role_rel.acc_id === stg_audit.aid) {
+                            role_rel.sign_date = stg_audit.end_time;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
     }
 }

+ 16 - 0
app/service/stage_audit.js

@@ -735,6 +735,22 @@ module.exports = app => {
             }
             return auditor;
         }
+
+        /**
+         * 取某一期已批准审核信息(报表用)
+         *
+         * @param {Number} stageId - 期id
+         * @param {Number} times - 期次数
+         * @return {Promise<boolean>}
+         */
+        async getStageAudit(stageId, times = 1) {
+            const sql = 'SELECT a1.aid, a1.end_time, a1.opinion ' +
+                'FROM ?? AS a1 ' +
+                'WHERE a1.`sid` = ? and a1.`status` = 3 and a1.`times` = ?';
+            const sqlParam = [this.tableName, stageId, times];
+            const rst = await this.db.query(sql, sqlParam);
+            return rst;
+        }
     }
 
     return StageAudit;

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

@@ -156,9 +156,15 @@
 </script>
 
 <script type="text/javascript">  autoFlashHeight();</script>
+<script src="/public/js/datepicker/datepicker.min.js"></script>
+<script src="/public/js/datepicker/datepicker.zh.js"></script>
+
 <!-- zTree -->
 <script type="text/javascript" src="/public/js/ztree/jquery.ztree.core.js"></script>
 <script type="text/javascript" src="/public/js/ztree/jquery.ztree.excheck.js"></script>
+
+<!--
+-->
 <script type="text/javascript" src="/public/js/rpt_tpl_def.js"></script>
 <script type="text/javascript" src="/public/js/common_ajax.js"></script>
 <script type="text/javascript" src="/public/js/treeDataHelper.js"></script>
@@ -186,6 +192,7 @@
     const PRJ_ACCOUNT_LIST = <%- prj_account_list %>;
     const ROLE_LIST = <%- role_list %>;
     const STAGE_STATUS = <%- stg_status %>;
+    let STAGE_AUDIT = [];
     let ROLE_REL_LIST = [];
     let CURRENT_ROLE_REL_ID = -1;
     let current_stage_order = -1;
@@ -265,5 +272,24 @@
         //还有必要触发报表刷新!
     }
 
+    function setupDateFormat() {
+        Date.prototype.Format = function (fmt) {
+            let o = {
+                "M+": this.getMonth() + 1, //月份
+                "d+": this.getDate(), //日
+                "h+": this.getHours(), //小时
+                "m+": this.getMinutes(), //分
+                "s+": this.getSeconds(), //秒
+                "q+": Math.floor((this.getMonth() + 3) / 3), //季度
+                "S": this.getMilliseconds() //毫秒
+            };
+            if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+            for (let k in o)
+                if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+            return fmt;
+        };
+    }
+
+    setupDateFormat();
     rptTplObj.iniPage();
 </script>