소스 검색

0号台账模式,增加签约数量、单价,受标段概况-显示设置控制

MaiXinRong 2 년 전
부모
커밋
f7237648f7

+ 6 - 6
app/const/spread.js

@@ -8,7 +8,7 @@
  * @version
  */
 
-const tzWithoutCols = ['deal_qty', 'deal_tp'];
+const dealCols = ['deal_qty', 'deal_tp'];
 const dgnCols = ['dgn_qty1', 'dgn_qty2', 'dgn_price'];
 const clCols = ['sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price'];
 const stageDgnCols = ['deal_dgn_qty1', 'deal_dgn_qty2', 'c_dgn_qty1', 'c_dgn_qty2', 'final_dgn_price'];
@@ -31,6 +31,8 @@ const withCl = {
             {title: '项目节数量|数量1',  colSpan: '2|1', rowSpan: '1|1', field: 'dgn_qty1', hAlign: 2, width: 60, type: 'Number'},
             {title: '|数量2',  colSpan: '|1', rowSpan: '|1', field: 'dgn_qty2', hAlign: 2, width: 60, type: 'Number'},
             {title: '经济指标',  colSpan: '1', rowSpan: '2', field: 'dgn_price', hAlign: 2, width: 60, type: 'Number', readOnly: true},
+            {title: '签约|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_qty', hAlign: 2, width: 60, type: 'Number'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '设计量|数量', colSpan: '2|1', rowSpan: '1|1', field: 'sgfh_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'sgfh_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '设计错漏增减|数量', colSpan: '2|1', rowSpan: '1|1', field: 'sjcl_qty', hAlign: 2, width: 60, type: 'Number'},
@@ -39,8 +41,6 @@ const withCl = {
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'qtcl_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '台账小计|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 60, type: 'Number', readOnly: true},
-            {title: '签约|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
             {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
             {title: 'ex_memo2', colSpan: '1', rowSpan: '2', field: 'ex_memo2', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
@@ -87,10 +87,10 @@ const withoutCl = {
             {title: '项目节数量|数量1',  colSpan: '2|1', rowSpan: '1|1', field: 'dgn_qty1', hAlign: 2, width: 60, type: 'Number'},
             {title: '|数量2',  colSpan: '|1', rowSpan: '|1', field: 'dgn_qty2', hAlign: 2, width: 60, type: 'Number'},
             {title: '经济指标',  colSpan: '1', rowSpan: '2', field: 'dgn_price', hAlign: 2, width: 60, type: 'Number', readOnly: true},
-            {title: '设计量|数量', colSpan: '2|1', rowSpan: '1|1', field: 'sgfh_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'sgfh_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '签约|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
+            {title: '设计量|数量', colSpan: '2|1', rowSpan: '1|1', field: 'sgfh_qty', hAlign: 2, width: 60, type: 'Number'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'sgfh_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
             {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
             {title: 'ex_memo2', colSpan: '1', rowSpan: '2', field: 'ex_memo2', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
@@ -603,7 +603,7 @@ module.exports = {
     stageNoCl,
     stageGather,
     stageCompare,
-    filterCols: { tzWithoutCols, dgnCols, clCols, stageDgnCols, realCompleteCols, thirdPartyCols, minusNoValueCols},
+    filterCols: { dealCols, dgnCols, clCols, stageDgnCols, realCompleteCols, thirdPartyCols, minusNoValueCols},
     measure,
     blank,
 };

+ 1 - 0
app/const/tender_info.js

@@ -106,6 +106,7 @@ const defaultInfo = {
     // 显示设置
     display: {
         ledger: {
+            deal: false,
             dgnQty: false,
             clQty: false,
         },

+ 1 - 1
app/controller/change_controller.js

@@ -1661,7 +1661,7 @@ module.exports = app => {
                 pos.readOnly = true;
             }
             if (tender.data.measure_type === measureType.tz.value) {
-                removeFieldCols(ledger, spreadConst.filterCols.tzWithoutCols);
+                removeFieldCols(ledger, spreadConst.filterCols.dealCols);
             }
             if (!tender.info.display.ledger.dgnQty) {
                 removeFieldCols(ledger, spreadConst.filterCols.dgnCols);

+ 2 - 30
app/controller/ledger_audit_controller.js

@@ -8,9 +8,9 @@
  * @version
  */
 const auditConst = require('../const/audit').ledger;
-const spreadConst = require('../const/spread');
 const shenpiConst = require('../const/shenpi');
 const measureType = require('../const/tender').measureType;
+const spreadSetting = require('../lib/spread_setting');
 
 module.exports = app => {
     class LedgerAuditController extends app.BaseController {
@@ -26,34 +26,6 @@ module.exports = app => {
         }
 
         /**
-         * 获取SpreadSetting
-         * @private
-         */
-        _getSpreadSetting() {
-            const _ = this.app._;
-            function removeFieldCols(setting, cols) {
-                _.remove(setting.cols, function(c) {
-                    return cols.indexOf(c.field) > -1;
-                });
-            }
-            const tender = this.ctx.tender;
-            const setting = tender.data.measure_type === measureType.tz.value
-                ? (tender.info.display.ledger.clQty ? spreadConst.withCl : spreadConst.withoutCl)
-                : (tender.info.display.ledger.clQty ? spreadConst.withClGcl : spreadConst.withoutClGcl);
-            const ledger = JSON.parse(JSON.stringify(setting.ledger));
-            const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank;
-            ledger.readOnly = true;
-            pos.readOnly = true;
-            if (tender.data.measure_type === measureType.tz.value) {
-                removeFieldCols(ledger, spreadConst.filterCols.tzWithoutCols);
-            }
-            if (!tender.info.display.ledger.dgnQty) {
-                removeFieldCols(ledger, spreadConst.filterCols.dgnCols);
-            }
-            return [ledger, pos];
-        }
-
-        /**
          * 台账审批页面(get)
          *
          * @param ctx
@@ -68,7 +40,7 @@ module.exports = app => {
                     preUrl: '/tender/' + ctx.tender.id,
                     measureType,
                 };
-                const [ledgerSpread, posSpread] = this._getSpreadSetting();
+                const [ledgerSpread, posSpread] = await spreadSetting.getLedgerSpreadSetting(ctx, ctx.tender.id, true);
                 const sjsRela = await this.ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
                 this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [ledgerSpread, posSpread]);
 

+ 5 - 47
app/controller/ledger_controller.js

@@ -18,7 +18,6 @@ const moment = require('moment');
 const auditConst = audit.ledger;
 const tenderMenu = require('../../config/menu').tenderMenu;
 const measureType = require('../const/tender').measureType;
-const spreadConst = require('../const/spread');
 const shenpiConst = require('../const/shenpi');
 const externalDataConst = require('../const/external_data.js');
 const fs = require('fs');
@@ -30,6 +29,7 @@ const billsPosConvert = require('../lib/bills_pos_convert');
 const xlsx = require('js-xlsx');
 const stdConst = require('../const/standard');
 const sendToWormhole = require('stream-wormhole');
+const spreadSetting = require('../lib/spread_setting');
 
 module.exports = app => {
 
@@ -72,56 +72,13 @@ module.exports = app => {
                 (tender.ledger_status === auditConst.status.checked && isAuditor && upPermission);
         }
 
-        /**
-         * 获取SpreadSetting
-         * @private
-         */
-        _getSpreadSetting() {
-            const _ = this.app._;
-            function removeFieldCols(setting, cols) {
-                _.remove(setting.cols, function(c) {
-                    return cols.indexOf(c.field) > -1;
-                });
-            }
-            function hideFieldCols(setting, cols) {
-                for (const c of setting.cols) {
-                    if (cols.indexOf(c.field) > -1) {
-                        c.visible = false;
-                    }
-                }
-            }
-            const tender = this.ctx.tender;
-            const setting = tender.data.measure_type === measureType.tz.value
-                ? (tender.info.display.ledger.clQty ? spreadConst.withCl : spreadConst.withoutCl)
-                : (tender.info.display.ledger.clQty ? spreadConst.withClGcl : spreadConst.withoutClGcl);
-            const ledger = JSON.parse(JSON.stringify(setting.ledger));
-            const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank;
-
-            if (this._ledgerReadOnly(tender.data)) {
-                ledger.readOnly = true;
-                pos.readOnly = true;
-            }
-            // if (tender.data.measure_type === measureType.tz.value) {
-            //     removeFieldCols(ledger, spreadConst.filterCols.tzWithoutCols);
-            // }
-            if (!tender.info.display.ledger.dgnQty) {
-                removeFieldCols(ledger, spreadConst.filterCols.dgnCols);
-            }
-
-            return [ledger, pos];
-        }
-
         _getLedgerColumn(sjsRela) {
             const tender = this.ctx.tender;
-            // const ledgerColumn = [
-            //     'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
-            //     'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price',
-            //     'sgfh_qty', 'sgfh_expr', 'sgfh_tp', 'memo', 'drawing_code', 'node_type'];
-            // if (tender.data.measure_type === measureType.gcl.value) ledgerColumn.push('deal_qty', 'deal_tp');
             const ledgerColumn = [
                 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
-                'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price', 'deal_qty', 'deal_tp',
+                'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price',
                 'sgfh_qty', 'sgfh_expr', 'sgfh_tp', 'memo', 'drawing_code', 'node_type'];
+            if (tender.info.display.ledger.deal) ledgerColumn.push('deal_qty', 'deal_tp');
             if (tender.info.display.ledger.dgnQty) ledgerColumn.push('dgn_qty1', 'dgn_qty2');
             if (tender.info.display.ledger.clQty) ledgerColumn.push('sjcl_qty', 'qtcl_qty', 'sjcl_expr', 'qtcl_expr', 'sjcl_tp', 'qtcl_tp');
             const posColumn = ['id', 'tid', 'lid', 'name', 'position', 'porder', 'sgfh_qty', 'sgfh_expr', 'add_stage_order', 'drawing_code', 'quantity'];
@@ -144,7 +101,8 @@ module.exports = app => {
         async explode(ctx) {
             try {
                 const tender = ctx.tender;
-                const [ledgerSpread, posSpread] = await this._getSpreadSetting();
+                const [ledgerSpread, posSpread] = await spreadSetting.getLedgerSpreadSetting(ctx, tender.id,
+                    this._ledgerReadOnly(tender.data));
                 const sjsRela = await this.ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
                 this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [ledgerSpread, posSpread]);
                 const times = tender.data.ledger_status === auditConst.status.checkNo ? tender.data.ledger_times - 1 : tender.data.ledger_times;

+ 5 - 36
app/controller/revise_controller.js

@@ -17,11 +17,11 @@ const audit = require('../const/audit');
 const accountGroup = require('../const/account_group').group;
 const tenderMenu = require('../../config/menu').tenderMenu;
 const measureType = require('../const/tender').measureType;
-const spreadConst = require('../const/spread');
 const shenpiConst = require('../const/shenpi');
 const fs = require('fs');
 const LzString = require('lz-string');
 const stdConst = require('../const/standard');
+const spreadSetting = require('../lib/spread_setting');
 
 module.exports = app => {
     class ReviseController extends app.BaseController {
@@ -257,41 +257,9 @@ module.exports = app => {
             }
         }
 
-        /**
-         * 获取SpreadSetting
-         * @private
-         */
-        _getSpreadSetting(revise) {
-            const _ = this.app._;
-            function removeFieldCols(setting, cols) {
-                _.remove(setting.cols, function(c) {
-                    return cols.indexOf(c.field) > -1;
-                });
-            }
-            const tender = this.ctx.tender;
-            const setting = tender.data.measure_type === measureType.tz.value
-                ? (tender.info.display.ledger.clQty ? spreadConst.withCl : spreadConst.withoutCl)
-                : (tender.info.display.ledger.clQty ? spreadConst.withClGcl : spreadConst.withoutClGcl);
-            const ledger = JSON.parse(JSON.stringify(setting.ledger));
-            const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank;
-
-            if (revise.status === audit.revise.status.checking || revise.status === audit.revise.status.checked) {
-                ledger.readOnly = true;
-                pos.readOnly = true;
-            }
-            if (tender.data.measure_type === measureType.tz.value) {
-                removeFieldCols(ledger, spreadConst.filterCols.tzWithoutCols);
-            }
-            if (!tender.info.display.ledger.dgnQty) {
-                removeFieldCols(ledger, spreadConst.filterCols.dgnCols);
-            }
-            return [ledger, pos];
-        }
-
         async _getDefaultReviseInfoData(ctx, revise) {
-            const [ledgerSpread, posSpread] = this._getSpreadSetting(revise);
-            const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
-            this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [ledgerSpread, posSpread]);
+            const [ledgerSpread, posSpread] = await spreadSetting.getLedgerSpreadSetting(ctx, revise.tid,
+                revise.status === audit.revise.status.checking || revise.status === audit.revise.status.checked);
             const [stdBills, stdChapters] = await this.ctx.service.valuation.getValuationStdList(
                 ctx.tender.data.valuation, ctx.tender.data.measure_type);
             const curAuditor = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
@@ -486,7 +454,8 @@ module.exports = app => {
             try {
                 const revise = ctx.revise;
 
-                const [ledgerSpread, posSpread] = this._getSpreadSetting(revise);
+                const [ledgerSpread, posSpread] = await spreadSetting.getLedgerSpreadSetting(ctx, revise.tid,
+                    revise.status === audit.revise.status.checking || revise.status === audit.revise.status.checked);
                 const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
                 this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [ledgerSpread, posSpread]);
                 ledgerSpread.readOnly = true;

+ 4 - 74
app/controller/stage_controller.js

@@ -26,6 +26,7 @@ const billsPosConvert = require('../lib/bills_pos_convert');
 const fs = require('fs');
 const stdConst = require('../const/standard');
 const LzString = require('lz-string');
+const spreadSetting = require('../lib/spread_setting');
 
 module.exports = app => {
     class StageController extends app.BaseController {
@@ -85,57 +86,6 @@ module.exports = app => {
         }
 
         /**
-         * 获取SpreadSetting
-         * @private
-         */
-        _getSpreadSetting(funInfo) {
-            const _ = this.app._;
-            function removeFieldCols(setting, cols) {
-                _.remove(setting.cols, function(c) {
-                    return cols.indexOf(c.field) > -1;
-                });
-            }
-            function hiddenFieldCols(setting, cols) {
-                setting.cols.forEach(x => {
-                    if (cols.indexOf(x.field) >= 0) {
-                        x.defaultVisible = false;
-                        x.visible = false;
-                    }
-                });
-            }
-            const tender = this.ctx.tender,
-                stage = this.ctx.stage;
-            const stageSetting = tender.data.measure_type === measureType.tz.value
-                ? spreadConst.stageTz
-                : (tender.info.display.ledger.clQty ? spreadConst.stageCl : spreadConst.stageNoCl);
-            const ledger = JSON.parse(JSON.stringify(stageSetting.ledger));
-            if (!tender.info.display.ledger.dgnQty) {
-                removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols);
-            }
-            const pos = JSON.parse(JSON.stringify(stageSetting.pos));
-            if (!tender.info.display.stage.realComplete) {
-                removeFieldCols(pos, spreadConst.filterCols.realCompleteCols);
-            }
-            if (!this.ctx.session.sessionProject.gxby) {
-                removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.gxby);
-                removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.gxby);
-            }
-            if (!this.ctx.session.sessionProject.dagl) {
-                removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.dagl);
-                removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.dagl);
-            }
-            if (!funInfo.minusNoValue || !tender.info.fun_rela.stage_change.minusNoValue) {
-                hiddenFieldCols(ledger, spreadConst.filterCols.minusNoValueCols);
-                hiddenFieldCols(pos, spreadConst.filterCols.minusNoValueCols);
-            }
-            if (this.ctx.stage.readOnly || this.ctx.stage.revising) {
-                ledger.readOnly = true;
-                pos.readOnly = true;
-            }
-            return [ledger, pos];
-        }
-
-        /**
          * 获取审批界面所需的 原报、审批人数据等
          * @param ctx
          * @return {Promise<void>}
@@ -182,9 +132,8 @@ module.exports = app => {
                 const renderData = await this._getDefaultRenderData(ctx);
                 const projectFunInfo = await this.ctx.service.project.getFunRela(ctx.session.sessionProject.id);
                 renderData.minusNoValue = projectFunInfo.minusNoValue && ctx.tender.info.fun_rela.stage_change.minusNoValue;
-                [renderData.ledgerSpread, renderData.posSpread] = this._getSpreadSetting({minusNoValue: renderData.minusNoValue});
-                const sjsRela = await this.ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
-                this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [renderData.ledgerSpread, renderData.posSpread]);
+                [renderData.ledgerSpread, renderData.posSpread] = await spreadSetting.getStageSpreadSetting(ctx, ctx.tender.id,
+                    this.ctx.stage.readOnly || this.ctx.stage.revising, {minusNoValue: renderData.minusNoValue});
                 renderData.changeConst = changeConst;
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.stage.index);
                 renderData.whiteList = this.ctx.app.config.multipart.whitelist;
@@ -1362,25 +1311,6 @@ module.exports = app => {
             }
         }
 
-        // 清单汇总相关
-        _getGatherSpreadSetting() {
-            const _ = this.app._;
-            function removeFieldCols(setting, cols) {
-                _.remove(setting.cols, function(c) {
-                    return cols.indexOf(c.field) > -1;
-                });
-            }
-            const gcl = JSON.parse(JSON.stringify(spreadConst.stageGather.gcl));
-
-            const leafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.leafXmj));
-            const tender = this.ctx.tender;
-            if (tender.data.measure_type === measureType.tz.value) {
-                removeFieldCols(gcl, spreadConst.filterCols.tzWithoutCols);
-            } else {
-                removeFieldCols(leafXmj, ['quantity']);
-            }
-            return [gcl, leafXmj];
-        }
         /**
          * 清单汇总 页面 (Get)
          * @param ctx
@@ -1390,7 +1320,7 @@ module.exports = app => {
             try {
                 await this._getStageAuditViewData(ctx);
                 const renderData = await this._getDefaultRenderData(ctx);
-                [renderData.gclSpread, renderData.leafXmjSpread] = this._getGatherSpreadSetting();
+                [renderData.gclSpread, renderData.leafXmjSpread] = await spreadSetting.getStageGatherSpreadSetting(ctx);
                 const projectFunInfo = await this.ctx.service.project.getFunRela(ctx.session.sessionProject.id);
                 renderData.hintOver = projectFunInfo.hintOver && ctx.tender.info.fun_rela.hintOver;
 

+ 5 - 0
app/lib/analysis_excel.js

@@ -516,6 +516,8 @@ class AnalysisExcelTree {
             pos: {value: ['计量单元'], type: colDefineType.match},
             name: {value: ['名称'], type: colDefineType.match},
             unit: {value: ['单位'], type: colDefineType.match},
+            deal_qty: {value: ['签约数量'], type: colDefineType.match},
+            deal_tp: {value: ['签约金额'], type: colDefineType.match},
             quantity: {value: ['清单数量'], type: colDefineType.match},
             dgn_qty1: {value: ['设计数量1'], type: colDefineType.match},
             dgn_qty2: {value: ['设计数量2'], type: colDefineType.match},
@@ -552,6 +554,7 @@ class AnalysisExcelTree {
             node.unit = this.ctx.helper.replaceReturn(row[this.colsDef.unit]);
             node.dgn_qty1 = aeUtils.toNumber(row[this.colsDef.dgn_qty1]);
             node.dgn_qty2 = aeUtils.toNumber(row[this.colsDef.dgn_qty2]);
+            node.deal_tp = this.ctx.helper.round(aeUtils.toNumber(row[this.colsDef.deal_tp]), this.decimal.tp);
             node.total_price = this.ctx.helper.round(aeUtils.toNumber(row[this.colsDef.total_price]), this.decimal.tp);
             node.drawing_code = this.ctx.helper.replaceReturn(row[this.colsDef.drawing_code]);
             node.memo = this.ctx.helper.replaceReturn(row[this.colsDef.memo]);
@@ -583,11 +586,13 @@ class AnalysisExcelTree {
         node.name = this.ctx.helper.replaceReturn(row[this.colsDef.name]);
         node.unit = this.ctx.helper.replaceReturn(row[this.colsDef.unit]);
         const precision = this.ctx.helper.findPrecision(this.precision, node.unit);
+        node.deal_qty = this.ctx.helper.round(aeUtils.toNumber(row[this.colsDef.deal_qty]), precision.value);
         node.quantity = this.ctx.helper.round(aeUtils.toNumber(row[this.colsDef.quantity]), precision.value);
         node.sgfh_qty = node.quantity;
         node.unit_price = this.ctx.helper.round(aeUtils.toNumber(row[this.colsDef.unit_price]), this.decimal.up);
         node.drawing_code = this.ctx.helper.replaceReturn(row[this.colsDef.drawing_code]);
         node.memo = this.ctx.helper.replaceReturn(row[this.colsDef.memo]);
+        node.deal_tp = node.deal_qty && node.unit_price ? this.ctx.helper.mul(node.deal_qty, node.unit_price, this.decimal.tp) : 0;
         if (node.quantity && node.unit_price) {
             node.total_price = this.ctx.helper.mul(node.quantity, node.unit_price, this.decimal.tp);
         } else {

+ 17 - 1
app/lib/spread_setting.js

@@ -13,6 +13,8 @@ const _ = require('lodash');
 const measureType = require('../const/tender').measureType;
 
 const getCtxTender = async function (ctx, tid) {
+    if (tid === ctx.tender.id) return ctx.tender;
+
     const tender = { id: tid };
     tender.data = await ctx.service.tender.getDataById(tid);
     tender.info = await ctx.service.tenderInfo.getTenderInfo(tid);
@@ -63,7 +65,8 @@ const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
     const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank;
     ledger.readOnly = readOnly;
     pos.readOnly = readOnly;
-    if (tender.data.measure_type === measureType.tz.value) removeFieldCols(ledger, spreadConst.filterCols.tzWithoutCols);
+    if (tender.data.measure_type === measureType.tz.value && !tender.info.display.ledger.deal)
+        removeFieldCols(ledger, spreadConst.filterCols.dealCols);
     if (!tender.info.display.ledger.dgnQty) removeFieldCols(ledger, spreadConst.filterCols.dgnCols);
 
     const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
@@ -107,7 +110,20 @@ const getStageSpreadSetting = async function (ctx, tid, readOnly, funInfo) {
     return [ledger, pos];
 };
 
+const getStageGatherSpreadSetting = async function (ctx, tid) {
+    const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
+    const gcl = JSON.parse(JSON.stringify(spreadConst.stageGather.gcl));
+    const leafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.leafXmj));
+
+    if (tender.data.measure_type === measureType.tz.value && !tender.info.display.ledger.deal)
+        removeFieldCols(ledger, spreadConst.filterCols.dealCols);
+
+    if (tender.data.measure_type === measureType.gcl.value) removeFieldCols(leafXmj, ['quantity']);
+    return [gcl, leafXmj];
+};
+
 module.exports = {
     getLedgerSpreadSetting,
     getStageSpreadSetting,
+    getStageGatherSpreadSetting,
 };

+ 8 - 42
app/service/ledger.js

@@ -645,37 +645,6 @@ module.exports = app => {
             return result;
         }
 
-        async _importCacheTreeNodes(transaction, nodes) {
-            const datas = [];
-            for (const node of nodes) {
-                datas.push({
-                    id: node.id,
-                    tender_id: this.ctx.tender.id,
-                    ledger_id: node.ledger_id,
-                    ledger_pid: node.ledger_pid,
-                    level: node.level,
-                    order: node.order,
-                    is_leaf: !node.children || node.children.length === 0,
-                    full_path: node.full_path,
-                    code: node.code,
-                    b_code: node.b_code,
-                    name: node.name,
-                    unit: node.unit,
-                    sgfh_qty: node.sgfh_qty,
-                    sgfh_tp: node.sgfh_tp,
-                    quantity: node.quantity,
-                    unit_price: node.unit_price,
-                    total_price: node.total_price,
-                    dgn_qty1: node.dgn_qty1,
-                    dgn_qty2: node.dgn_qty2,
-                    memo: node.memo,
-                    drawing_code: node.drawing_code,
-                });
-            }
-            await transaction.insert(this.tableName, datas);
-            return datas;
-        }
-
         /**
          * 导入Excel数据
          * @param excelData
@@ -712,18 +681,15 @@ module.exports = app => {
                         memo: node.memo,
                         drawing_code: node.drawing_code,
                         node_type: node.node_type,
+                        // 项目节不导入金额
+                        // todo 最底层项目节其实应该导入,但是由于目前项目节不能输入金额,也不能计量,导入金额就会有矛盾,故暂时不导入
+                        sgfh_qty: node.quantity,
+                        sgfh_tp: node.b_code ? node.total_price : 0,
+                        quantity: node.quantity,
+                        total_price: node.b_code ? node.total_price : 0,
+                        deal_qty: node.deal_qty,
+                        deal_tp: node.b_code ? node.deal_tp : 0,
                     };
-                    // 项目节不导入金额
-                    // todo 最底层项目节其实应该导入,但是由于目前项目节不能输入金额,也不能计量,导入金额就会有矛盾,故暂时不导入
-                    if (this.ctx.tender.data.measure_type === measureType.tz.value) {
-                        data.sgfh_qty = node.quantity;
-                        data.sgfh_tp = node.b_code ? node.total_price : 0;
-                        data.quantity = node.quantity;
-                        data.total_price = node.b_code ? node.total_price : 0;
-                    } else if (this.ctx.tender.data.measure_type === measureType.gcl.value) {
-                        data.deal_qty = node.quantity;
-                        data.deal_tp = node.b_code ? node.total_price : 0;
-                    }
                     datas.push(data);
                 }
                 await transaction.insert(this.tableName, datas);

+ 6 - 1
app/view/tender/detail_modal.ejs

@@ -691,6 +691,10 @@
             <div class="modal-body">
                 <div class="form-group">
                     <div class="custom-control custom-checkbox mb-2">
+                        <input type="checkbox" class="custom-control-input" id="ledger-deal" checked="">
+                        <label class="custom-control-label" for="ledger-deal">签约数量、金额</label>
+                    </div>
+                    <div class="custom-control custom-checkbox mb-2">
                         <input type="checkbox" class="custom-control-input" id="ledger-dgn-qty" checked="">
                         <label class="custom-control-label" for="ledger-dgn-qty">项目节数量</label>
                     </div>
@@ -1486,6 +1490,7 @@
 
     // 显示设置
     function loadDisplayProperty () {
+        $('#ledger-deal')[0].checked = property.display.ledger.deal;
         $('#ledger-dgn-qty')[0].checked = property.display.ledger.dgnQty;
         $('#ledger-cl-qty')[0].checked = property.display.ledger.clQty;
         $('#ex-memo')[0].checked = property.display.exMemo;
@@ -1500,7 +1505,7 @@
     function post5 () {
         const prop = {
             display: {
-                ledger: { dgnQty: $('#ledger-dgn-qty')[0].checked, clQty: $('#ledger-cl-qty')[0].checked, },
+                ledger: { deal: $('#ledger-deal')[0].checked, dgnQty: $('#ledger-dgn-qty')[0].checked, clQty: $('#ledger-cl-qty')[0].checked, },
                 exMemo: $('#ex-memo')[0].checked,
                 thousandth: $('#thousandth')[0].checked,
                 stage: { realComplete: $('#stage-rc')[0].checked, correct: $('#stage-correct')[0].checked },