Pārlūkot izejas kodu

报表,选择材差期相关

MaiXinRong 5 gadi atpakaļ
vecāks
revīzija
e2c742acb1

+ 4 - 0
app/const/report.js

@@ -14,6 +14,10 @@ rptCustomType[JV.NODE_CUS_AUDIT_SELECT] = 1;
 rptCustomType[JV.NODE_CUS_GATHER_SELECT] = 2;
 rptCustomType[JV.NODE_CUS_COMPARE_SELECT] = 3;
 
+const rptDataType = {};
+rptDataType[JV.NODE_CUS_MATERIAL_SELECT] = 1;
+
 module.exports = {
     rptCustomType,
+    rptDataType
 };

+ 7 - 1
app/controller/report_controller.js

@@ -73,6 +73,11 @@ module.exports = app => {
                 }
                 customSelects.gather_select = await ctx.service.rptCustomDefine.getCustomSelectByRpt(cid,
                     reportConst.rptCustomType[JV.NODE_CUS_GATHER_SELECT], ctx.tender.id, -1);
+                const dataSelects = {};
+                dataSelects.material_select = await ctx.service.rptCustomDefine.getDataSelectByRpt(cid,
+                    reportConst.rptDataType[JV.NODE_CUS_MATERIAL_SELECT]);
+
+                const materialList = await ctx.service.material.getValidMaterials(ctx.tender.id);
 
 
                 // const allTpls = await ctx.service.rptTpl.getAllTplByIds(tmpRptIds);
@@ -149,6 +154,8 @@ module.exports = app => {
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.report.main),
                     customSelects,
                     rptCustomType: reportConst.rptCustomType,
+                    materialList,
+                    dataSelects
                 };
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
                 // await this.layout('report/index.ejs', renderData);
@@ -315,7 +322,6 @@ module.exports = app => {
         }
 
         async _saveCustomSelects(params) {
-            console.log(params);
             for (const [i, cs] of params.customSelect.entries()) {
                 if (!cs) continue;
                 cs.tender_id = params.tender_id;

+ 33 - 1
app/public/report/js/rpt_custom.js

@@ -328,6 +328,7 @@ const rptCustomObj = (function () {
         data.stage_status = getStageStatus();
         data.stage_order = getStageOrder();
         data.stage_times = getStageTimes();
+        data.material_order = getMaterialOrder();
     };
 
     const resetAuditSelect = function () {
@@ -482,5 +483,36 @@ const rptCustomObj = (function () {
         $('#gather-select').modal('hide');
     };
 
-    return {init, resetAuditSelect, resetGatherSelect, initTenderTree, getCustomSelect};
+    const showMaterialSelect = function () {
+        const needShow = function () {
+            if (zTreeOprObj.currentNode) {
+                const ms = dataSelects.material_select.find(function (x) { return x.id === zTreeOprObj.currentNode.refId});
+                if (ms) return true;
+            }
+            const chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
+            for (const node of chkNodes) {
+                const ms = dataSelects.material_select.find(function (x) { return x.id === node.refId});
+                if (ms) return true;
+            }
+            return false;
+        };
+
+        if (needShow()) {
+            $('#material').show();
+        } else {
+            $('#material').hide();
+        }
+    };
+
+    const changeMaterial = function (obj) {
+        $('#material-select').attr('m-order', $(obj).attr('m-order')).html(obj.innerText);
+    };
+
+    return {
+        init,
+        resetAuditSelect, resetGatherSelect,
+        initTenderTree,
+        getCustomSelect,
+        showMaterialSelect, changeMaterial
+    };
 })();

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

@@ -210,6 +210,7 @@ let zTreeOprObj = {
     },
     onCheck: function(event, treeId, treeNode) {
         zTreeOprObj.countChkedRptTpl();
+        rptCustomObj.showMaterialSelect();
     },
     onClick: function(event,treeId,treeNode) {
         let me = zTreeOprObj;
@@ -225,6 +226,7 @@ let zTreeOprObj = {
             params.stage_status = getStageStatus();
             params.stage_order = getStageOrder();
             params.stage_times = getStageTimes();
+            params.material_order = getMaterialOrder();
             params.custCfg = CUST_CFG;
 
             const gather_select = customSelects.gather_select.find(function (x) {
@@ -237,6 +239,7 @@ let zTreeOprObj = {
 
             me.requestNormalReport(params);
             me.countChkedRptTpl();
+            rptCustomObj.showMaterialSelect();
         }
     },
     changePageSize: function(dom) {
@@ -270,6 +273,7 @@ let zTreeOprObj = {
             params.stage_status = getStageStatus();
             params.stage_order = getStageOrder();
             params.stage_times = getStageTimes();
+            params.material_order = getMaterialOrder();
             me.requestNormalReport(params);
         }
     },
@@ -482,6 +486,7 @@ let rptControlObj = {
         rst.stage_status = getStageStatus();
         rst.stage_order = getStageOrder();
         rst.stage_times = getStageTimes();
+        params.material_order = getMaterialOrder();
         rst.custCfg = CUST_CFG;
 
         return rst;
@@ -804,6 +809,10 @@ function getStageOrder() {
     return CUR_ORDER;
 }
 
+function getMaterialOrder() {
+    return parseInt($('#material-select').attr('m-order'));
+}
+
 function getStageTimes() {
     return current_stage_times;
 }

+ 1 - 0
app/reports/rpt_component/jpc_value_define.js

@@ -53,6 +53,7 @@ module.exports = {
     NODE_CUS_AUDIT_SELECT: 'audit_select',
     NODE_CUS_GATHER_SELECT: 'gather_select',
     NODE_CUS_COMPARE_SELECT: 'compare_select',
+    NODE_CUS_MATERIAL_SELECT: 'material_select',
 
     NODE_MAP_DATA_HANDLE_INFO: '映射数据预处理',
     PROP_DATA_KEY: '映射数据对象',

+ 12 - 22
app/service/rpt_custom_define.js

@@ -92,28 +92,18 @@ module.exports = app => {
                     r.gather_select = JSON.parse(cs.gather_select);
                 }
             }
-            // const sql = 'SELECT rt.id, rt.cid, rt.rpt_c_type, rt.rpt_content, rcd.tid, rcd.sid, rcd.audit_select, rcd.gather_select' +
-            //     '  FROM ' + this.ctx.service.rptTpl.tableName + ' rt' +
-            //     '  LEFT JOIN ' + this.tableName + ' rcd' +
-            //     '  ON rcd.rid = rt.id' +
-            //     this.ctx.helper.whereSql({cid: cid, rpt_c_type: rpt_c_type}, 'rt') + ' AND rcd.tid = ? AND rcd.sid = ?';
-            // const sqlParam = [tid, sid];
-            // console.log(this.db.format(sql, sqlParam));
-            // const result = await this.db.query(sql, sqlParam);
-            // for (const r of result) {
-            //     try {
-            //         if (r.audit_select) {
-            //             r.audit_select = JSON.parse(r.audit_select);
-            //         }
-            //         if (r.gather_select) {
-            //             r.gather_select = JSON.parse(r.gather_select);
-            //         }
-            //         const rptObj = JSON.parse(r.rpt_content);
-            //         if (rptObj) r.custom_define = rptObj[JV.NODE_CUSTOM_DEFINE];
-            //     } catch (err) {
-            //     }
-            //     delete r.rpt_content;
-            // }
+            return result;
+        }
+
+        async getDataSelectByRpt(cid, rpt_d_type) {
+            const result = await this.ctx.service.rptTpl.getAllDataByCondition({
+                where: {cid: cid, rpt_d_type: rpt_d_type}
+            });
+            for (const r of result) {
+                const rptObj = JSON.parse(r.rpt_content);
+                if (rptObj) r.custom_define = rptObj[JV.NODE_CUSTOM_DEFINE];
+                delete r.rpt_content;
+            }
             return result;
         }
     }

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

@@ -125,6 +125,28 @@
                                     翻页
                                 </div>
                             </div>
+                            <div class="panel" id="material" style="display: none;">
+                                <div class="panel-body">
+                                    <div class="btn-group" role="group">
+                                        <div class="btn-group" role="group">
+                                            <button type="button" class="btn btn-outline-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
+                                                    <% if (materialList.length === 0) { %>disabled<% } %>>
+                                                <span id="material-select" class="d-inline-flex" style="min-width: 40px" m-order="<%- (materialList.length === 0 ? 0 : materialList[0].order) %>">
+                                                    <%- (materialList.length === 0 ? '无' : '第' + materialList[0].order + '期') %>
+                                                </span>
+                                            </button>
+                                            <div class="dropdown-menu" aria-labelledby="btnGroupDrop1" style="min-width:112px" id="material-list">
+                                                <% for (const ml of materialList) { %>
+                                                <a class="dropdown-item" href="javascript: void(0);" m-order="<%- ml.order %>" onclick="rptCustomObj.changeMaterial(this)">第<%- ml.order %>期</a>
+                                                <% } %>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="panel-foot text-muted">
+                                    材料调差
+                                </div>
+                            </div>
                             <div class="panel" id="pnl_audit_select" style="display: none;">
                                 <div class="panel-body">
                                     <button class="btn btn-outline-primary btn-sm" type="button" data-toggle="modal" data-target="#audit-select">
@@ -245,6 +267,7 @@
     let current_stage_times = -1;
     let current_stage_status = -1;
     const customSelects = <%- JSON.stringify(customSelects) %>;
+    const dataSelects = <%- JSON.stringify(dataSelects) %>;
 
     if (STAGE_ORDER > 0) {
         current_stage_order = STAGE_ORDER;