浏览代码

调差工料项目节汇总功能

ellisran 2 月之前
父节点
当前提交
90e4031eb3
共有 2 个文件被更改,包括 134 次插入2 次删除
  1. 95 1
      app/public/js/material.js
  2. 39 1
      app/view/material/info.ejs

+ 95 - 1
app/public/js/material.js

@@ -1284,6 +1284,75 @@ $(document).ready(() => {
     SpreadJsObj.initSheet(materialSourceSpread.getActiveSheet(), materialSourceSpreadSetting);
     SpreadJsObj.loadSheetData(materialSourceSpread.getActiveSheet(), SpreadJsObj.DataType.Data, []);
 
+    // 项目节汇总sjs
+    const material_xmj_gather_cols = [
+        {title: '单位工程', colSpan: '1', rowSpan: '2', field: 'dwgc', hAlign: 0, width: 80, formatter: '@', visible: false},
+        {title: '分部工程', colSpan: '1', rowSpan: '2', field: 'fbgc', hAlign: 0, width: 80, formatter: '@', visible: false},
+        {title: '分项工程', colSpan: '1', rowSpan: '2', field: 'fxgc', hAlign: 0, width: 80, formatter: '@', visible: false},
+        {title: '细目', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@', visible: false},
+        {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
+        {title: '本期应耗数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 100, type: 'Number'},
+        {title: '本期调差金额', colSpan: '1', rowSpan: '2', field: 'm_tp', hAlign: 2, width: 100, type: 'Number'},
+    ];
+    const materialXmjGatherSpread = SpreadJsObj.createNewSpread($('#material-xmj-gather-spread')[0]);
+    const materialXmjGatherSpreadSetting = {
+        cols: material_xmj_gather_cols,
+        emptyRows: 0,
+        headRows: 1,
+        headRowHeight: [32],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
+        readOnly: true,
+        localCache: {
+            key: 'material-gather-gatherLeafXmj',
+            colWidth: true,
+        }
+    };
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(materialXmjGatherSpreadSetting);
+    const materialXmjGatherSheet = materialXmjGatherSpread.getActiveSheet();
+    SpreadJsObj.initSheet(materialXmjGatherSheet, materialXmjGatherSpreadSetting);
+    // SpreadJsObj.loadSheetData(materialXmjGatherSpread.getActiveSheet(), SpreadJsObj.DataType.Data, []);
+
+    // 下部设置显示相关
+    $('a', '[id=material-bills-tab]').click(function() {
+        const relaTab = this.getAttribute('href');
+        const optionTab = $('#optionTab').children();
+        for (const ot of optionTab) {
+            if (ot.getAttribute('rela-tab') === relaTab) {
+                $(ot).show();
+            } else {
+                $(ot).hide();
+            }
+        }
+        setTimeout(refreshRelaSpread, 100);
+    });
+    $('[name=gather-xmj]').change(function() {
+        const checkOption = $('[name=gather-xmj]:checked');
+        if (checkOption.length === 0) {
+            toastr.warning('请至少选择一个汇总条件');
+            $(this).prop('checked', true);
+            return;
+        }
+
+        const fields = [];
+        for (const co of checkOption) {
+            fields.push(co.value);
+        }
+        for (const col of materialXmjGatherSpreadSetting.cols) {
+            col.visible = col.type === 'Number' || fields.indexOf(col.field) >= 0;
+        }
+        gatherFields = fields;
+        SpreadJsObj.refreshColumnVisible(materialXmjGatherSheet);
+        const data = SpreadJsObj.getSelectObject(materialSpread.getActiveSheet());
+        setCurBillSourceList(data ? (data.mb_id || data.id) : null, $('#myTab').find('.active').data('msid') || null, fields);
+    });
+
+    function refreshRelaSpread() {
+        materialSourceSpread.refresh();
+        materialXmjGatherSpread.refresh();
+    }
+
     let first = true;
     function setListsData(sid = null, ms_id = null) {
         if (first) {
@@ -1460,8 +1529,9 @@ $(document).ready(() => {
         }, 1000);
     });
     // 本条工料应耗来源数据信息
-    function setCurBillSourceList(mb_id, ms_id = null) {
+    function setCurBillSourceList(mb_id, ms_id = null, fields = gatherFields) {
         const showSourceList = [];
+        const showXmjList = [];
         if (mb_id) {
             const list = _.filter(materialListData2, function (item) {
                 return item.mb_id === mb_id && item.ms_id === ms_id && (item.is_join === 1 || item.is_join === 2);
@@ -1484,12 +1554,36 @@ $(document).ready(() => {
                         } else {
                             showSourceList[index].quantity = ZhCalc.add(showSourceList[index].quantity, ZhCalc.mul(calcQty(l), l.quantity));
                         }
+
+                        // const indexXmj = _.findIndex(showXmjList, { gcl_id: l.gcl_id, xmj_id: l.xmj_id, mx_id: l.mx_id });
+                        const xmj = _.find(gcl.leafXmjs, { gcl_id: l.gcl_id, id: l.xmj_id, mx_id: l.mx_id });
+                        if (xmj) {
+                            const condition = {};
+                            for (const f of fields) {
+                                condition[f] = xmj[f];
+                            }
+                            let glx = _.find(showXmjList, condition);
+                            if (!glx) {
+                                const newGcl = _.cloneDeep(xmj);
+                                newGcl.quantity = ZhCalc.mul(calcQty(l), l.quantity);
+                                showXmjList.push(newGcl);
+                            } else {
+                                glx.quantity = ZhCalc.add(glx.quantity, ZhCalc.mul(calcQty(l), l.quantity));
+                            }
+                        }
                     }
                 }
             }
+            const data = SpreadJsObj.getSelectObject(materialSpread.getActiveSheet());
+            for (const xmj of showXmjList) {
+                const m_spread = data ? (data.m_spread || data.spread) : 0;
+                xmj.m_tp = ZhCalc.mul(m_spread, xmj.quantity);
+            }
         }
         // 按清单编号排序
         SpreadJsObj.loadSheetData(materialSourceSpread.getActiveSheet(), SpreadJsObj.DataType.Data, showSourceList.sort(sortByCode));
+        console.log(showXmjList);
+        SpreadJsObj.loadSheetData(materialXmjGatherSheet, SpreadJsObj.DataType.Data, showXmjList);
     }
 
     function calcQty(info) {

+ 39 - 1
app/view/material/info.ejs

@@ -93,10 +93,42 @@
                     <div class="row">
                         <div class="col-6">
                             <div class="bc-bar mb-1">
-                                <ul class="nav nav-tabs">
+                                <ul class="nav nav-tabs" id="material-bills-tab">
                                     <li class="nav-item">
                                         <a class="nav-link active" data-toggle="tab" href="#yhly" 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" id="optionTab">
+                                        <div rela-tab="#xmjGather" style="display: none">
+                                            <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>
+                                        </div>
+                                    </li>
                                 </ul>
                             </div>
                             <div class="tab-content">
@@ -130,6 +162,10 @@
                                         <!--</table>-->
                                     </div>
                                 </div>
+                                <div class="tab-pane" id="xmjGather">
+                                    <div class="sp-wrap" id="material-xmj-gather-spread">
+                                    </div>
+                                </div>
                             </div>
                         </div>
                         <div class="col-6">
@@ -292,6 +328,7 @@
 <!--<script src="/public/js/jquery-ui/datepicker.js"></script>-->
 <!--<script src="/public/js/jquery-ui/datepicker-zh-CN.js"></script>-->
 <script>
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
     const materialType = JSON.parse('<%- materialType %>');
     const isStageSelf = parseInt('<%- material.is_stage_self %>');
     const editTaxPermission = <%- material.editTaxPermission ? material.editTaxPermission : false %>;
@@ -327,4 +364,5 @@
     const gljLists = JSON.parse(unescape('<%- escape(JSON.stringify(gljLists)) %>'));
     const openMaterialChecklist = parseInt(<%- ctx.subProject.page_show.openMaterialChecklist %>);
     let materialListData2, materialChecklistData, notJoinList, ledger, curLedgerData, pos, curPosData, gclGatherData, gclList, selfList, gclGatherListData;
+    let gatherFields = ['bwmx'];
 </script>