Преглед на файлове

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

MaiXinRong преди 3 години
родител
ревизия
bd2509a683

+ 32 - 6
app/controller/material_controller.js

@@ -388,16 +388,16 @@ module.exports = app => {
                     }
                 }
                 // 取所有已被调用的工料清单表
-                renderData.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, ctx.material.id);
-                renderData.materialNotJoinListData = await ctx.service.materialListNotjoin.getAllDataByCondition({ where: { tid: ctx.tender.id, mid: ctx.material.id } });
+                // renderData.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, ctx.material.id);
+                // renderData.materialNotJoinListData = await ctx.service.materialListNotjoin.getAllDataByCondition({ where: { tid: ctx.tender.id, mid: ctx.material.id } });
                 renderData.materialType = JSON.stringify(materialConst);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.material.list);
                 // 获取清单数据
-                renderData.ledger = await ctx.service.ledger.getData(ctx.tender.id);
-                renderData.pos = await ctx.service.pos.getPosData({ tid: ctx.tender.id });
+                // renderData.ledger = await ctx.service.ledger.getData(ctx.tender.id);
+                // renderData.pos = await ctx.service.pos.getPosData({ tid: ctx.tender.id });
                 // 获取所选期数据并合并相加同类清单项
-                renderData.curLedgerData = await ctx.service.stageBills.getStagesData(ctx.tender.id, ctx.material.stage_id);
-                renderData.curPosData = await ctx.service.stagePos.getStagesData(ctx.tender.id, ctx.material.stage_id);
+                // renderData.curLedgerData = await ctx.service.stageBills.getStagesData(ctx.tender.id, ctx.material.stage_id);
+                // renderData.curPosData = await ctx.service.stagePos.getStagesData(ctx.tender.id, ctx.material.stage_id, 'list');
                 await this.layout('material/list.ejs', renderData, 'material/list_modal.ejs');
             } catch (err) {
                 this.log(err);
@@ -406,6 +406,32 @@ module.exports = app => {
         }
 
         /**
+         * 调差清单页面 (Get)
+         * @param {Object} ctx - egg全局变量
+         * @return {Promise<void>}
+         */
+        async loadListsData(ctx) {
+            try {
+                // const data = JSON.parse(ctx.request.body.data);
+                // const filter = data.filter.split(';');
+                const responseData = { err: 0, msg: '', data: {} };
+                // 取所有已被调用的工料清单表
+                responseData.data.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, ctx.material.id);
+                responseData.data.materialNotJoinListData = await ctx.service.materialListNotjoin.getAllDataByCondition({ where: { tid: ctx.tender.id, mid: ctx.material.id } });
+                // 获取清单数据
+                responseData.data.ledger = await ctx.service.ledger.getData(ctx.tender.id);
+                responseData.data.pos = await ctx.service.pos.getPosData({ tid: ctx.tender.id });
+                // 获取所选期数据并合并相加同类清单项
+                responseData.data.curLedgerData = await ctx.service.stageBills.getStagesData(ctx.tender.id, ctx.material.stage_id);
+                responseData.data.curPosData = await ctx.service.stagePos.getStagesData(ctx.tender.id, ctx.material.stage_id, 'list');
+                ctx.body = responseData;
+            } catch (err) {
+                this.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: null };
+            }
+        }
+
+        /**
          * 指数调差页面 (Get)
          * @param {Object} ctx - egg全局变量
          * @return {Promise<void>}

+ 65 - 0
app/public/js/change_information_set.js

@@ -664,6 +664,7 @@ $(document).ready(() => {
         $('#code-input').val('');
         $('#code-input').siblings('a').hide();
         $('#code-list').html(codeHtml);
+        checkSelectAll();
     });
 
     // 右边项目节选择
@@ -721,6 +722,7 @@ $(document).ready(() => {
                 $('#table-list-select tr[data-index="' + index + '"]').attr('data-bwmx', '');
             }
         }
+        checkSelectAll();
     });
 
     // 添加空白清单or签约清单
@@ -776,6 +778,7 @@ $(document).ready(() => {
         $('#code-input').val('');
         $('#code-input').siblings('a').hide();
         $('#code-list').html('');
+        $('#code-select-all').prop('checked', false);
     });
 
     $('#code-input').on('valuechange', function (e, previous) {
@@ -786,6 +789,7 @@ $(document).ready(() => {
             $(this).siblings('a').hide();
         }
         makeCodeTable($(this).val());
+        checkSelectAll();
     });
 
     $('.remove-btn').on('click', function () {
@@ -798,6 +802,53 @@ $(document).ready(() => {
         } else {
             makeCodeTable();
         }
+        checkSelectAll();
+    });
+    // 全选及取消
+    $('#code-select-all').click(function () {
+        // 全选checkbox
+        let index = $('#code-list').attr('data-index');
+        if (index) {
+            if ($(this).is(':checked')){
+                $('#code-list tr').each(function () {
+                    if ($(this).css('display') !== 'none') {
+                        $(this).find('input').prop('checked', true);
+                    }
+                })
+            } else {
+                $('#code-list tr').each(function () {
+                    if ($(this).css('display') !== 'none' && $(this).find('input').prop('disabled') !== true) {
+                        $(this).find('input').prop('checked', false);
+                    }
+                });
+            }
+            // 判断还有无选中项目节编号
+            if ($('#code-list input').is(':checked')) {
+                // 去除部分data-detail值
+                let data_bwmx = [];
+                $('#code-list input:checked').each(function () {
+                    const tr = $(this).parents('tr');
+                    const length = tr.children('td').length;
+                    const gcl_id = tr.attr('gcl_id');
+                    const bwmx = length === 8 ?
+                        tr.children('td').eq(0).text() + '!_!' +
+                        tr.children('td').eq(1).text() + '!_!' +
+                        tr.children('td').eq(2).text() + '!_!' +
+                        tr.children('td').eq(3).text() + '!_!' +
+                        tr.children('td').eq(4).text() + '!_!' + gcl_id + '!_!' +
+                        (tr.children('td').eq(5).text() !== '' ? tr.children('td').eq(5).text() : tr.children('td').eq(1).text()) : '0';
+                    const quantity = tr.attr('quantity');
+                    const de_qu = bwmx + '*;*' + quantity;
+                    data_bwmx.push(de_qu);
+                });
+                data_bwmx = data_bwmx.join('$#$');
+                $('#table-list-select tr[data-index="' + index + '"]').attr('data-bwmx', data_bwmx);
+                $('#table-list-select tr[data-index="' + index + '"]').addClass('table-success');
+            } else {
+                $('#table-list-select tr[data-index="' + index + '"]').removeClass('table-success');
+                $('#table-list-select tr[data-index="' + index + '"]').attr('data-bwmx', '');
+            }
+        }
     });
 
     // 记录变更信息操作
@@ -869,6 +920,16 @@ $(document).ready(() => {
         toastr.success('已还原到上次保存状态');
     });
 });
+function checkSelectAll() {
+    let check = $('#code-list tr').length > 0 ? true : false;
+    $('#code-list tr').each(function () {
+        if ($(this).css('display') !== 'none' && !$(this).find('input').is(':checked')) {
+            check = false;
+        }
+    });
+    $('#code-select-all').prop('checked', check);
+}
+
 function checkChangeFrom() {
     let returnFlag = false;
     // 表单判断
@@ -920,6 +981,10 @@ function tableDataRemake(changeListData) {
     $('#table-list-select tr').removeClass('table-success');
     $('#table-list-select tr').attr('data-bwmx', '');
     $('#code-list').html('');
+    $('#code-list').attr('data-index', '');
+    $('#code-input').val('');
+    $('#code-select-all').prop('checked', false);
+    $('#code-input').siblings('a').hide();
     // 根据已添加的清单显示
     if (changeList.length > 0 && changeList[0]) {
         const removeList = [];

+ 37 - 18
app/public/js/material_list.js

@@ -153,24 +153,20 @@ $(document).ready(() => {
         font: '12px 微软雅黑',
         readOnly: true,
     };
-    // 解析清单汇总数据
-    gclGatherModel.loadLedgerData(ledger, curLedgerData);
-    gclGatherModel.loadPosData(pos, curPosData);
-    let gclGatherData = gclGatherModel.gatherGclData().filter(item => {
-        return item.qc_qty || item.contract_qty
-    });
-    calculateJiaCha(gclGatherData);
-
     // let gclGatherData = gclGatherModel.gatherGclData()
     // 获取项目节数据
     function loadLeafXmjData(iGclRow) {
         const gcl = gclGatherData[iGclRow];
         if (gcl) {
+            gcl.leafXmjs = gcl.leafXmjs.filter(item => {
+                return item.qc_qty || item.contract_qty
+            });
             for (const [index, xmj] of gcl.leafXmjs.entries()) {
                 const jiacha = calcOneBQJC(xmj);
                 gcl.leafXmjs[index].jiacha = jiacha !== 0 ? ZhCalc.round(jiacha, 2) : null;
             }
             SpreadJsObj.loadSheetData(leafXmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gcl.leafXmjs);
+
             // 对清单调差工料table的单位数量进行改变
             materialSpreadSetting.cols[materialSpreadSetting.cols.length - 2].title = '|' + gcl.unit + '数量 �';
             // SpreadJsObj.initSheet(materialSpread.getActiveSheet(), materialSpreadSetting);
@@ -205,6 +201,32 @@ $(document).ready(() => {
         font: '12px 微软雅黑',
         readOnly: true,
     };
+    // 加载清单数据 - 暂时统一加载,如有需要,切换成动态加载并缓存
+    postData(window.location.pathname + '/load', {}, function (result) {
+        ledger = result.ledger;
+        curLedgerData = result.curLedgerData;
+        pos = result.pos;
+        curPosData = result.curPosData;
+        materialListData = result.materialListData;
+        notJoinList = result.materialNotJoinListData;
+        // 解析清单汇总数据
+        gclGatherModel.loadLedgerData(ledger, curLedgerData);
+        gclGatherModel.loadPosData(pos, curPosData);
+        gclGatherData = gclGatherModel.gatherGclData().filter(item => {
+            return item.qc_qty || item.contract_qty
+        });
+        calculateJiaCha(gclGatherData);
+        SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
+        // 加载清单数据
+        SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gclGatherData);
+        loadLeafXmjData(0);
+        loadMaterialData(0, 0);
+        const sheet = materialSpread.getActiveSheet();
+        sheet.suspendPaint();
+        sheet.setCellType(1, 3, new TipCellType(), spreadNS.SheetArea.colHeader);
+        sheet.resumePaint();
+        checkNotJoinMaterialData();
+    });
     // const leafXmjCol = {
     //     getValue: {
     //         jiacha: function (data) {
@@ -222,9 +244,6 @@ $(document).ready(() => {
     //     }
     // };
     // SpreadJsObj.initSpreadSettingEvents(leafXmjSpreadSetting, leafXmjCol);
-    SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
-    // 加载清单数据
-    SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gclGatherData);
 
     // 调差清单工料table
     const materialSpread = SpreadJsObj.createNewSpread($('#material-spread')[0]);
@@ -283,12 +302,12 @@ $(document).ready(() => {
     }
 
     // SpreadJsObj.locateTreeNode(ledgerSpread.getActiveSheet(), )
-    loadLeafXmjData(0);
-    loadMaterialData(0, 0);
-    const sheet = materialSpread.getActiveSheet();
-    sheet.suspendPaint();
-    sheet.setCellType(1, 3, new TipCellType(), spreadNS.SheetArea.colHeader);
-    sheet.resumePaint();
+    // loadLeafXmjData(0);
+    // loadMaterialData(0, 0);
+    // const sheet = materialSpread.getActiveSheet();
+    // sheet.suspendPaint();
+    // sheet.setCellType(1, 3, new TipCellType(), spreadNS.SheetArea.colHeader);
+    // sheet.resumePaint();
     // 不参与调差数据值变灰
     function checkNotJoinMaterialData() {
         const sheet = ledgerSpread.getActiveSheet();
@@ -304,7 +323,7 @@ $(document).ready(() => {
             }
         }
     }
-    checkNotJoinMaterialData();
+    // checkNotJoinMaterialData();
     // 对添加工料表格赋值
     function changeMaterialTable() {
         $('#materialBills tr').removeClass('table-secondary');

+ 1 - 0
app/router.js

@@ -438,6 +438,7 @@ module.exports = app => {
     // 调差清单
     app.get('/tender/:id/measure/material/:order/list', sessionAuth, tenderCheck, uncheckTenderCheck, materialCheck, 'materialController.list');
     app.post('/tender/:id/measure/material/:order/list/save', sessionAuth, tenderCheck, uncheckTenderCheck, materialCheck, 'materialController.saveListsData');
+    app.post('/tender/:id/measure/material/:order/list/load', sessionAuth, tenderCheck, uncheckTenderCheck, materialCheck, 'materialController.loadListsData');
 
     // 附件
     app.get('/tender/:id/measure/material/:order/file', sessionAuth, tenderCheck, uncheckTenderCheck, materialCheck, 'materialController.file');

+ 3 - 2
app/service/stage_pos.js

@@ -663,9 +663,10 @@ module.exports = app => {
          * 多期清单数据整合 (材料调差调用)
          * @param {Number} tid - 标段id
          * @param {String} stage_id_list - 期id列表
+         * @param {String} comefrom - 来源(部分不调用计量不获取)
          * @returns {Promise<void>}
          */
-        async getStagesData(tid, stage_id_list) {
+        async getStagesData(tid, stage_id_list, comefrom = '') {
             const sids = stage_id_list.split(',');
             const result = [];
             for (const sid of sids) {
@@ -680,7 +681,7 @@ module.exports = app => {
                     if (rsp) {
                         rsp.contract_qty = this.ctx.helper.add(rsp.contract_qty, sp.contract_qty);
                         rsp.qc_qty = this.ctx.helper.add(rsp.qc_qty, sp.qc_qty);
-                    } else {
+                    } else if (!comefrom || (comefrom === 'list' && (sp.contract_qty || sp.qc_qty))) {
                         result.push({
                             id: sp.id, tid: sp.tid, lid: sp.lid, pid: sp.pid,
                             contract_qty: sp.contract_qty, qc_qty: sp.qc_qty,

+ 11 - 3
app/view/change/information_modal.ejs

@@ -128,9 +128,17 @@
                         </div>
                     </div>
                     <div class="col-12">
-                        <div class="mb-2 col-6 p-0 search-group mt-2">
-                            <input class="form-control form-control-sm" id="code-input" placeholder="输入 项目节编号、名称、计量单元 检索">
-                            <a href="javascript:void(0);" style="display: none" data-btn="code" class="text-danger remove-btn" title="移除关键词"><i class="fa fa-times-circle "></i></a>
+                        <div class="row mb-2 mt-2 mx-0 p-0">
+                            <div class="col-6 pl-0 p-0 search-group mt-2">
+                                <input class="form-control form-control-sm" id="code-input" placeholder="输入 项目节编号、名称、计量单元 检索">
+                                <a href="javascript:void(0);" style="display: none" data-btn="code" class="text-danger remove-btn" title="移除关键词"><i class="fa fa-times-circle "></i></a>
+                            </div>
+                            <div class="ml-auto mt-2">
+                                <div class="custom-control custom-checkbox mt-1">
+                                    <input type="checkbox" id="code-select-all" class="custom-control-input">
+                                    <label class="custom-control-label" for="code-select-all">全选</label>
+                                </div>
+                            </div>
                         </div>
                         <div style="overflow-y:auto" class="sjs-biangeng-height">
                             <table class="table table-striped table-bordered table-hover table-sm fixed_headers2">

+ 1 - 6
app/view/material/list.ejs

@@ -71,13 +71,8 @@
 <script>
     const materialType = JSON.parse('<%- materialType %>');
     const materialBillsData = JSON.parse(unescape('<%- escape(JSON.stringify(materialBillsData)) %>'));
-    let materialListData = JSON.parse(unescape('<%- escape(JSON.stringify(materialListData)) %>'));
-    const notJoinList = JSON.parse('<%- JSON.stringify(materialNotJoinListData) %>');
-    const ledger = JSON.parse(unescape('<%- escape(JSON.stringify(ledger)) %>'));
-    const curLedgerData = JSON.parse(unescape('<%- escape(JSON.stringify(curLedgerData)) %>'));
-    const pos = JSON.parse(unescape('<%- escape(JSON.stringify(pos)) %>'));
-    const curPosData = JSON.parse(unescape('<%- escape(JSON.stringify(curPosData)) %>'));
     const readOnly = <%- material.readOnly %>;
     const stage_order = <%- material.order %>;
     const materialID = <%- material.id %>;
+    let materialListData, notJoinList, ledger, curLedgerData, pos, curPosData, gclGatherData;
 </script>

+ 1 - 1
app/view/setting/user.ejs

@@ -3,7 +3,7 @@
     <div class="panel-title">
         <div class="title-main">
             <h2>账号管理
-                <% if (projectData.max_user > user_total) { %>
+                <% if (projectData.max_user === 0 || projectData.max_user > user_total) { %>
                 <a href="#ver" data-toggle="modal" data-target="#add-user" class="btn btn-primary btn-sm pull-right">添加账号</a>
                 <% } else { %>
                 <a href="#add-unpass" data-toggle="modal" data-target="#add-unpass" class="btn btn-primary btn-sm pull-right">添加账号(受限)</a>

+ 1 - 1
app/view/setting/user_permission.ejs

@@ -3,7 +3,7 @@
     <div class="panel-title">
         <div class="title-main">
             <h2>账号管理
-                <% if (projectData.max_user > user_total) { %>
+                <% if (projectData.max_user === 0 || projectData.max_user > user_total) { %>
                 <a href="#ver" data-toggle="modal" data-target="#add-user" class="btn btn-primary btn-sm pull-right">添加账号</a>
                 <% } else { %>
                 <a href="#add-unpass" data-toggle="modal" data-target="#add-unpass" class="btn btn-primary btn-sm pull-right">添加账号(受限)</a>