Просмотр исходного кода

清单对比,项目节汇总

MaiXinRong 1 год назад
Родитель
Сommit
3a393d177d
3 измененных файлов с 134 добавлено и 0 удалено
  1. 37 0
      app/public/js/gcl_gather.js
  2. 63 0
      app/public/js/ledger_gather.js
  3. 34 0
      app/view/ledger/gather.ejs

+ 37 - 0
app/public/js/gcl_gather.js

@@ -595,6 +595,42 @@ const gclGatherModel = (function () {
         return result;
     }
 
+    function _gatherLeafXmj(gcl, fields = ['bwmx']) {
+        gcl.gatherLeafXmjs = [];
+        for (const lx of gcl.leafXmjs) {
+            const condition = {};
+            for (const f of fields) {
+                condition[f] = lx[f];
+            }
+            let glx = _.find(gcl.gatherLeafXmjs, condition);
+            if (!glx) {
+                glx = JSON.parse(JSON.stringify(lx));
+                gcl.gatherLeafXmjs.push(glx);
+            } else {
+                gatherfields(glx, lx, posGatherFields);
+            }
+        }
+        for (const xmj of gcl.gatherLeafXmjs) {
+            xmj.pre_gather_qty = ZhCalc.add(xmj.pre_contract_qty, xmj.pre_qc_qty);
+            xmj.gather_qty = ZhCalc.add(xmj.contract_qty, xmj.qc_qty);
+            xmj.end_contract_qty = ZhCalc.add(xmj.pre_contract_qty, xmj.contract_qty);
+            xmj.end_qc_qty = ZhCalc.add(xmj.pre_qc_qty, xmj.qc_qty);
+            xmj.end_gather_qty = ZhCalc.add(xmj.pre_gather_qty, xmj.gather_qty);
+            xmj.end_final_qty = ZhCalc.add(xmj.end_qc_qty, xmj.quantity);
+            xmj.end_qc_minus_qty = ZhCalc.add(xmj.pre_qc_minus_qty, xmj.qc_minus_qty);
+            xmj.final_1_qty = ZhCalc.add(xmj.quantity, xmj.end_qc_minus_qty);
+            xmj.end_final_1_qty = ZhCalc.add(xmj.final_1_qty, xmj.end_qc_qty);
+            xmj.end_gather_percent = ZhCalc.mul(ZhCalc.div(xmj.end_gather_qty, xmj.end_final_qty), 100, 2);
+            xmj.end_final_1_percent = ZhCalc.mul(ZhCalc.div(xmj.end_gather_qty, xmj.end_final_1_qty), 100, 2);
+        }
+    }
+
+    function reGatherLeafXmj(fields) {
+        gclList.forEach(g => {
+            _gatherLeafXmj(g, fields);
+        });
+    }
+
     return {
         loadGatherField,
         loadDecimal,
@@ -605,5 +641,6 @@ const gclGatherModel = (function () {
         gatherGclData,
         checkDiffer,
         gatherChapterData,
+        reGatherLeafXmj,
     };
 })();

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

@@ -73,6 +73,7 @@ $(document).ready(() => {
     if (thousandth) sjsSettingObj.setTpThousandthFormat(gclSpreadSetting);
     SpreadJsObj.initSheet(gclSpread.getActiveSheet(), gclSpreadSetting);
     const gclSheet = gclSpread.getActiveSheet();
+
     const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
     const leafXmjSpreadSetting = {
         cols: [
@@ -103,6 +104,36 @@ $(document).ready(() => {
     SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
     const leafXmjSheet = leafXmjSpread.getActiveSheet();
 
+    const gatherLeafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-gather-spread')[0]);
+    const gatherLeafXmjSpreadSetting = {
+        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],
+        headColWidth: [30],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
+        readOnly: true,
+        localCache: {
+            key: 'ledger-gather-leafXmj',
+            colWidth: true,
+        },
+    };
+    if (!isTz) gatherLeafXmjSpreadSetting.cols.splice(1, 1);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(gatherLeafXmjSpreadSetting);
+    const gatherLeafXmjSheet = gatherLeafXmjSpread.getActiveSheet();
+    SpreadJsObj.initSheet(gatherLeafXmjSheet, gatherLeafXmjSpreadSetting);
+
     let gclGatherData;
     // 获取项目节数据
     function loadLeafXmjData(iGclRow) {
@@ -114,6 +145,16 @@ $(document).ready(() => {
             SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, []);
         }
     }
+    function loadGatherLeafXmjData(iGclRow) {
+        const gcl = iGclRow ? gclGatherData[iGclRow] : SpreadJsObj.getSelectObject(gclSheet);
+        SpreadJsObj.resetTopAndSelect(gatherLeafXmjSheet);
+        console.log(gcl.gatherLeafXmjs);
+        if (gcl) {
+            SpreadJsObj.loadSheetData(gatherLeafXmjSheet, SpreadJsObj.DataType.Data, gcl.gatherLeafXmjs);
+        } else {
+            SpreadJsObj.loadSheetData(gatherLeafXmjSheet, SpreadJsObj.DataType.Data, []);
+        }
+    }
     // 标红显示 签约-台账≠0
     function checkCompareData() {
         const sheet = gclSheet;
@@ -134,6 +175,7 @@ $(document).ready(() => {
         const iNewRow = info.newSelections[0].row;
         if (!info.oldSelections || iNewRow !== info.oldSelections[0].row) {
             loadLeafXmjData(iNewRow);
+            loadGatherLeafXmjData(iNewRow);
         }
     });
 
@@ -168,6 +210,7 @@ $(document).ready(() => {
         gclGatherModel.loadDealBillsData(data.dealBills);
         gclGatherData = gclGatherModel.gatherGclData();
         gclGatherModel.checkDiffer(gclGatherData);
+        gclGatherModel.reGatherLeafXmj();
         for (const gcl of gclGatherData) {
             gcl.compare_qty = ZhCalc.sub(gcl.quantity, gcl.deal_bills_qty);
             gcl.compare_tp = ZhCalc.sub(gcl.total_price, gcl.deal_bills_tp);
@@ -176,6 +219,7 @@ $(document).ready(() => {
         SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
         checkCompareData();
         loadLeafXmjData(0);
+        loadGatherLeafXmjData(0);
 
         const chapterData = gclGatherModel.gatherChapterData(chapter, data.spec, ['total_price']);
         for (const c of chapterData) {
@@ -222,6 +266,7 @@ $(document).ready(() => {
         },
         afterLocated: function () {
             loadLeafXmjData();
+            loadGatherLeafXmjData();
         },
         calcSum: function (result) {
             const sum = { name: '合计', searchIndex: -1 };
@@ -252,6 +297,21 @@ $(document).ready(() => {
         leafXmjSpread.refresh();
     });
 
+    $('[name=gather-xmj]').change(function() {
+        const checkOption = $('[name=gather-xmj]:checked');
+        if (checkOption.length === 0) {
+            toastr.warning('请至少选择一个汇总条件');
+            return;
+        }
+
+        const fields = [];
+        for (const co of checkOption) {
+            fields.push(co.value);
+        }
+        gclGatherModel.reGatherLeafXmj(fields);
+        loadGatherLeafXmjData();
+    });
+
     $.subMenu({
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
         toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
@@ -268,6 +328,7 @@ $(document).ready(() => {
             autoFlashHeight();
             gclSpread.refresh();
             leafXmjSpread.refresh();
+            gatherLeafXmjSpread.refresh();
         }
     });
     $.divResizer({
@@ -277,6 +338,7 @@ $(document).ready(() => {
             let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0;
             $(".sp-wrap").height(bcontent-30);
             leafXmjSpread.refresh();
+            gatherLeafXmjSpread.refresh();
         }
     });
     $.divResizer({
@@ -284,6 +346,7 @@ $(document).ready(() => {
         callback: function () {
             gclSpread.refresh();
             leafXmjSpread.refresh();
+            gatherLeafXmjSpread.refresh();
         }
     });
     $('#exportExcel').click(function () {

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

@@ -29,6 +29,36 @@
                             <li class="nav-item">
                                 <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">所属项目节</a>
                             </li>
+                            <li class="nav-item">
+                                <a class="nav-link" data-toggle="tab" href="#xmjGather" role="tab">项目节汇总</a>
+                            </li>
+                            <li class="nav-item">
+                                <div class="d-inline-block ml-2 mt-1">
+                                    <span>汇总条件:</span>
+                                    <div class="d-inline-block" style="vertical-align: middle">
+                                        <div class="form-check form-check-inline">
+                                            <input class="form-check-input pt-1" type="checkbox" id="gather-xmj-dwgc" value="dwgc" name="gather-xmj">
+                                            <label class="form-check-label" for="gather-xmj-dwgc">单位工程</label>
+                                        </div>
+                                        <div class="form-check form-check-inline">
+                                            <input class="form-check-input" type="checkbox" id="gather-xmj-fbgc" value="fbgc" name="gather-xmj">
+                                            <label class="form-check-label" for="gather-xmj-fbgc">分部工程</label>
+                                        </div>
+                                        <div class="form-check form-check-inline">
+                                            <input class="form-check-input" type="checkbox" id="gather-xmj-fxgc" value="fxgc" name="gather-xmj">
+                                            <label class="form-check-label" for="gather-xmj-fxgc">分项工程</label>
+                                        </div>
+                                        <div class="form-check form-check-inline">
+                                            <input class="form-check-input" type="checkbox" id="gather-xmj-xm" value="jldy" name="gather-xmj">
+                                            <label class="form-check-label" for="gather-xmj-xm">细目</label>
+                                        </div>
+                                        <div class="form-check form-check-inline">
+                                            <input class="form-check-input" type="checkbox" id="gather-xmj-jldy" value="bwmx" checked name="gather-xmj">
+                                            <label class="form-check-label" for="gather-xmj-jldy">计量单元</label>
+                                        </div>
+                                    </div>
+                                </div>
+                            </li>
                         </ul>
                     </div>
                     <div class="tab-content">
@@ -36,6 +66,10 @@
                             <div class="sp-wrap" id="leaf-xmj-spread">
                             </div>
                         </div>
+                        <div class="tab-pane active" id="xmjGather">
+                            <div class="sp-wrap" id="leaf-xmj-gather-spread">
+                            </div>
+                        </div>
                     </div>
                 </div>
             </div>