MaiXinRong 5 år sedan
förälder
incheckning
fb7af589e4

+ 37 - 0
app/controller/ledger_controller.js

@@ -510,6 +510,43 @@ module.exports = app => {
         }
 
         /**
+         * 台账对比 页面 (Get)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async gather(ctx) {
+            try {
+                const renderData = {
+                    tender: ctx.tender.data,
+                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.ledger.gather)
+                };
+
+                await this.layout('ledger/gather.ejs', renderData);
+            } catch (err) {
+                this.log(err);
+                await this.redirect(ctx.request.header.referer);
+            }
+        }
+
+        /**
+         * 获取 台账对比 数据 (Ajax)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async loadGatherData(ctx) {
+            try {
+                const billsData = await ctx.service.ledger.getData(ctx.tender.id);
+                const posData = this.ctx.tender.data.measure_type === measureType.tz.value
+                    ? await ctx.service.pos.getPosData({tid: ctx.tender.id}) : [];
+                const dealBills = await ctx.service.dealBills.getAllDataByCondition({ where: {tender_id: this.ctx.tender.id} });
+                ctx.body = { err: 0, msg: '', data: {bills: billsData, pos: posData, dealBills: dealBills} };
+            } catch (err) {
+                this.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: [] };
+            }
+        }
+
+        /**
          * 计量台账页面 (Get)
          *
          * @param {object} ctx - egg全局变量

+ 110 - 0
app/public/js/ledger_gather.js

@@ -0,0 +1,110 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+$(document).ready(() => {
+    autoFlashHeight();
+    const gclSpread = SpreadJsObj.createNewSpread($('#gcl-spread')[0]);
+    SpreadJsObj.initSheet(gclSpread.getActiveSheet(), {
+        cols: [
+            {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 120, formatter: '@'},
+            {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 230, formatter: '@'},
+            {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', cellType: 'unit'},
+            {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 80, type: 'Number'},
+            {title: '签约清单|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_bills_qty', hAlign: 2, width: 80, type: 'Number'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_bills_tp', hAlign: 2, width: 80, type: 'Number'},
+            {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
+        ],
+        emptyRows: 0,
+        headRows: 2,
+        headRowHeight: [25, 25],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
+        readOnly: true,
+    });
+    const gclSheet = gclSpread.getActiveSheet();
+    const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
+    SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), {
+        cols: [
+            {title: '项目节编号', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 120, formatter: '@'},
+            {title: '台账数量', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
+            {title: '单位工程', colSpan: '1', rowSpan: '1', field: 'dwgc', hAlign: 0, width: 100, formatter: '@'},
+            {title: '分部工程', colSpan: '1', rowSpan: '1', field: 'fbgc', hAlign: 0, width: 100, formatter: '@'},
+            {title: '分项工程', colSpan: '1', rowSpan: '1', field: 'fxgc', hAlign: 0, width: 100, formatter: '@'},
+            {title: '细目', colSpan: '1', rowSpan: '1', field: 'jldy', hAlign: 0, width: 100, formatter: '@'},
+            {title: '计量单元', colSpan: '1', rowSpan: '1', field: 'bwmx', hAlign: 0, width: 100, formatter: '@'},
+            {title: '图册号', colSpan: '1', rowSpan: '1', field: 'drawing_code', hAlign: 0, width: 120, formatter: '@'},
+        ],
+        emptyRows: 0,
+        headRows: 1,
+        headRowHeight: [32],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
+        readOnly: true,
+    });
+    const leafXmjSheet = leafXmjSpread.getActiveSheet();
+
+    let gclGatherData;
+    // 获取项目节数据
+    function loadLeafXmjData(iGclRow) {
+        const gcl = gclGatherData[iGclRow];
+        if (gcl) {
+            SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, gcl.leafXmjs);
+        } else {
+            SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, []);
+        }
+    }
+    // 切换清单行,读取所属项目节数据
+    gclSpread.getActiveSheet().bind(spreadNS.Events.SelectionChanged, function (e, info) {
+        const iNewRow = info.newSelections[0].row;
+        if (!info.oldSelections || iNewRow !== info.oldSelections[0].row) {
+            loadLeafXmjData(iNewRow);
+        }
+    });
+
+    postData(window.location.pathname + '/load', {}, function (data) {
+        gclGatherModel.loadLedgerData(data.bills);
+        gclGatherModel.loadPosData(data.pos);
+        gclGatherModel.loadDealBillsData(data.dealBills);
+        gclGatherData = gclGatherModel.gatherGclData();
+        SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
+        loadLeafXmjData(0);
+    }, null, true);
+
+    $.subMenu({
+        menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
+        toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
+        key: 'menu.1.0.0',
+        miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
+        callback: function (info) {
+            if (info.mini) {
+                $('.panel-title').addClass('fluid');
+                $('#sub-menu').removeClass('panel-sidebar');
+            } else {
+                $('.panel-title').removeClass('fluid');
+                $('#sub-menu').addClass('panel-sidebar');
+            }
+            autoFlashHeight();
+            gclSpread.refresh();
+            leafXmjSpread.refresh();
+        }
+    });
+    $.divResizer({
+        select: '#main-resize',
+        callback: function () {
+            gclSpread.refresh();
+            let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0;
+            $(".sp-wrap").height(bcontent-40);
+            leafXmjSpread.refresh();
+        }
+    });
+});

+ 2 - 3
app/public/js/stage.js

@@ -569,7 +569,7 @@ $(document).ready(() => {
                         id: node.id
                     };
                     updateData.dgn[col.field] = newValue;
-                } else {
+                } else if (col.field !== 'is_tp') {
                     updateData.stage = {
                         lid: node.id
                     };
@@ -844,8 +844,7 @@ $(document).ready(() => {
                     info.cancel = !node.is_tp;
                     break;
                 case 'is_tp':
-                    const posRange = stagePos.getLedgerPos(node.id);
-                    info.cancel = node.pre_used || node.unit !== '总额' || (posRange && posRange.length > 0);
+                    info.cancel = false;
                     break;
             }
         },

+ 3 - 0
app/router.js

@@ -103,6 +103,9 @@ module.exports = app => {
     app.post('/tender/:id/ledger/audit/delete', sessionAuth, tenderCheck, 'ledgerAuditController.remove');
     app.post('/tender/:id/ledger/audit/start', sessionAuth, tenderCheck, 'ledgerAuditController.start');
     app.post('/tender/:id/ledger/audit/check', sessionAuth, tenderCheck, 'ledgerAuditController.check');
+    // 台账对比
+    app.get('/tender/:id/ledger/gather', sessionAuth, tenderCheck, 'ledgerController.gather');
+    app.post('/tender/:id/ledger/gather/load', sessionAuth, tenderCheck, 'ledgerController.loadGatherData');
     // 台账修订
     app.get('/tender/:id/revise', sessionAuth, tenderCheck, 'reviseController.index');
     app.post('/tender/:id/revise/add', sessionAuth, tenderCheck, 'reviseController.add');

+ 38 - 0
app/view/ledger/gather.ejs

@@ -0,0 +1,38 @@
+<% include ../tender/tender_sub_menu.ejs %>
+<div class="panel-content">
+    <div class="panel-title">
+        <div class="title-main d-flex">
+            <% include ../tender/tender_sub_mini_menu.ejs %>
+            <div>
+                <div class="d-inline-block">
+                    台帐对比
+                </div>
+            </div>
+            <div class="ml-auto">
+            </div>
+        </div>
+    </div>
+    <div class="content-wrap">
+        <div class="c-header p-0"></div>
+        <div class="c-body">
+            <div class="sjs-height-1" id="gcl-spread">
+            </div>
+            <div class="bcontent-wrap">
+                <div id="main-resize" class="resize-y" r-Type="height" div1="#gcl-spread" div2="#main-bottom" store-id="ledger-gather" store-version="1.0.0" min="100"></div>
+                <div class="bc-bar mb-1">
+                    <ul class="nav nav-tabs">
+                        <li class="nav-item">
+                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">所属项目节</a>
+                        </li>
+                    </ul>
+                </div>
+                <div class="tab-content">
+                    <div class="tab-pane active" id="xmujie">
+                        <div class="sp-wrap" id="leaf-xmj-spread">
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 1 - 0
app/view/tender/tender_sub_menu.ejs

@@ -17,6 +17,7 @@
                 <% if (ctx.tender.data.ledger_status !== ctx.tender.auditLedgerConst.status.uncheck) { %>
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/audit') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/audit"><span>台帐审批</span></a></li>
                 <% } %>
+                <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/gather') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/gather"><span>台帐对比</span></a></li>
                 <li <% if (ctx.url.indexOf('/tender/' + ctx.tender.id + '/revise') >= 0) { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/revise"><span>台帐修订</span></a></li>
             </ul>
         </div>

+ 3 - 0
app/view/tender/tender_sub_mini_menu.ejs

@@ -14,7 +14,10 @@
             <h3><i class="fa fa-list-alt"></i> 0号台帐</h3>
             <ul class="nav-list list-unstyled sub-list">
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger"><span>台帐分解</span></a></li>
+                <% if (ctx.tender.data.ledger_status !== ctx.tender.auditLedgerConst.status.uncheck) { %>
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/audit') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/audit"><span>台帐审批</span></a></li>
+                <% } %>
+                <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/gather') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/gather"><span>台帐对比</span></a></li>
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/revise') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/revise"><span>台帐修订</span></a></li>
             </ul>
         </div>

+ 16 - 0
config/web.js

@@ -153,6 +153,22 @@ const JsFiles = {
                 ],
                 mergeFile: 'ledger_audit',
             },
+            gather: {
+                files: [
+                    "/public/js/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js",
+                    "/public/js/decimal.min.js",
+                ],
+                mergeFiles: [
+                    "/public/js/sub_menu.js",
+                    "/public/js/div_resizer.js",
+                    "/public/js/spreadjs_rela/spreadjs_zh.js",
+                    "/public/js/zh_calc.js",
+                    "/public/js/path_tree.js",
+                    "/public/js/gcl_gather.js",
+                    "/public/js/ledger_gather.js",
+                ],
+                mergeFile: 'ledger_gather',
+            },
             revise: {
                 files: [
                     "/public/js/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js",