Browse Source

调差汇总筛选

ellisran 2 weeks ago
parent
commit
5ab60c4c31
3 changed files with 101 additions and 9 deletions
  1. 68 0
      app/public/js/measure_material.js
  2. 2 0
      app/view/material/index.ejs
  3. 31 9
      app/view/material/modal.ejs

+ 68 - 0
app/public/js/measure_material.js

@@ -199,6 +199,74 @@ $(function () {
         return `${year}<span>${mon}-${day}</span><span>${hour}:${minute}:${scond}</span>`;
     };
 
+    $('#hz-input').on('keypress', function () {
+        if(window.event.keyCode === 13) {
+            $('#hz-btn').trigger('click');
+        }
+    });
+
+    // $('#hz-input').blur(function () {
+    //     $('#hz-btn').trigger('click');
+    // });
+
+    $('#hz-btn').on('click', function () {
+        const radio = parseInt($('input[name="hz-radio"]:checked').val());
+        const materialTotalPrice = {
+            m_tp: 0,
+            tax_tp: 0,
+            ex_tp: 0,
+            ex_tax_tp: 0,
+            m_tax_tp: 0,
+            total_tp: 0,
+            total_tax_tp: 0
+        };
+        let hzMaterials = [];
+        if (radio === 1) {
+            hzMaterials = materials;
+        } else if (radio === 2) {
+            const materialsStr = $('#hz-input').val();
+            if (!materialsStr) {
+                hzMaterials = [];
+            } else {
+                const hzOrders = materialsStr.split(',');
+                for (const order of hzOrders) {
+                    if (order && order.trim() === '') continue; // 跳过空字符串
+                    if (!isNaN(parseFloat(order)) && isFinite(order)) {
+                        const material = materials.find(m => m.order === parseInt(order.trim()));
+                        if (material) {
+                            hzMaterials.push(material);
+                        }
+                    } else if (_.indexOf(order, '-') !== -1) {
+                        const range = order.split('-').map(o => parseInt(o.trim()));
+                        if (range.length === 2 && !isNaN(range[0]) && !isNaN(range[1])) {
+                            hzMaterials = hzMaterials.concat(materials.filter(m => m.order >= range[0] && m.order <= range[1]));
+                        }
+                    }
+                }
+            }
+        }
+        console.log(hzMaterials);
+        for (const s of hzMaterials) {
+            materialTotalPrice.m_tp = ZhCalc.add(materialTotalPrice.m_tp, ZhCalc.round(s.m_tp, s.decimal.tp));
+            materialTotalPrice.tax_tp = !s.material_tax ? ZhCalc.add(materialTotalPrice.tax_tp, ZhCalc.round(ZhCalc.mul(s.m_tp, 1 + s.rate / 100), s.decimal.tp)) : materialTotalPrice.tax_tp;
+            materialTotalPrice.ex_tp = ZhCalc.add(materialTotalPrice.ex_tp, ZhCalc.round(s.ex_tp, s.decimal.tp));
+            materialTotalPrice.ex_tax_tp = ZhCalc.add(materialTotalPrice.ex_tax_tp, ZhCalc.round(ZhCalc.mul(s.ex_tp, 1 + s.exponent_rate / 100), s.decimal.tp));
+            materialTotalPrice.m_tax_tp = s.material_tax ? ZhCalc.add(materialTotalPrice.m_tax_tp, ZhCalc.round(s.m_tax_tp, s.decimal.tp)) : materialTotalPrice.m_tax_tp;
+        }
+        materialTotalPrice.total_tp = ZhCalc.add(materialTotalPrice.m_tp, materialTotalPrice.ex_tp);
+        materialTotalPrice.total_tax_tp = ZhCalc.add(materialTotalPrice.tax_tp, materialTotalPrice.ex_tax_tp);
+        $('#hz-table tr').eq(0).children('td').eq(0).text(materialTotalPrice.m_tp || '');
+        $('#hz-table tr').eq(0).children('td').eq(1).text(materialTotalPrice.ex_tp || '');
+        $('#hz-table tr').eq(0).children('td').eq(2).text(materialTotalPrice.total_tp || '');
+        $('#hz-table tr').eq(1).children('td').eq(0).text(materialTotalPrice.tax_tp || '');
+        $('#hz-table tr').eq(1).children('td').eq(1).text(materialTotalPrice.ex_tax_tp || '');
+        $('#hz-table tr').eq(1).children('td').eq(2).text(materialTotalPrice.total_tax_tp || '');
+        if (openMaterialTax) {
+            $('#hz-table tr').eq(2).children('td').eq(0).text(materialTotalPrice.m_tax_tp || '');
+            $('#hz-table tr').eq(2).children('td').eq(2).text(materialTotalPrice.m_tax_tp || '');
+        }
+    });
+
     // 计量期选中
     $('.select-stage-order').on('click', function () {
         const stageList = $('.select-stage-order:checked');

+ 2 - 0
app/view/material/index.ejs

@@ -140,6 +140,8 @@
     const lastMaterialListNum = parseInt('<%- lastMaterialList ? lastMaterialList.length : 0 %>');
     const materialColShow = JSON.parse(unescape('<%- escape(JSON.stringify(materialColShow)) %>'));
     const auditType = JSON.parse('<%- JSON.stringify(auditType) %>');
+    const materials = JSON.parse(unescape('<%- escape(JSON.stringify(materials)) %>'));
+    const openMaterialTax = JSON.parse(unescape('<%- escape(JSON.stringify(openMaterialTax)) %>'));
     $.subMenu({
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
         toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',

+ 31 - 9
app/view/material/modal.ejs

@@ -189,6 +189,28 @@
                 <h5 class="modal-title">调差期合计</h5>
             </div>
             <div class="modal-body">
+                <div class="form-row align-items-center">
+                    <div class="col-auto">
+                        <div class="form-check mb-2">
+                            <input class="form-check-input" type="radio" name="hz-radio" id="hz-radio1" value="1" checked>
+                            <label class="form-check-label" for="hz-radio1">全部期</label>
+                        </div>
+                    </div>
+                    <div class="col-auto">
+                        <div class="form-check mb-2">
+                            <input class="form-check-input" type="radio" name="hz-radio" id="hz-radio2" value="2">
+                            <label class="form-check-label" for="hz-radio2">指定期</label>
+                        </div>
+                    </div>
+                    <div class="col">
+                        <div class="input-group mb-2">
+                            <input type="text" class="form-control form-control-sm" id="hz-input" placeholder="请输入材差期数(例如汇总第1期,第4至6期则输入:1,4-6)">
+                        </div>
+                    </div>
+                    <div class="col-auto">
+                        <button id="hz-btn" class="btn btn-sm btn-primary mb-2">汇总</button>
+                    </div>
+                </div>
                 <table class="table table-bordered table-sm">
                     <thead>
                     <tr>
@@ -198,25 +220,25 @@
                         <th width="120px" class="text-center">合计</th>
                     </tr>
                     </thead>
-                    <tbody>
+                    <tbody id="hz-table">
                     <tr>
                         <th width="200px">价差费用</th>
-                        <td class="text-right"><%- materialTotalPrice.m_tp %></td>
-                        <td class="text-right"><%- materialTotalPrice.ex_tp %></td>
-                        <td class="text-right"><%- materialTotalPrice.total_tp %></td>
+                        <td class="text-right"><%- materialTotalPrice.m_tp || '' %></td>
+                        <td class="text-right"><%- materialTotalPrice.ex_tp || '' %></td>
+                        <td class="text-right"><%- materialTotalPrice.total_tp || '' %></td>
                     </tr>
                     <tr>
                         <th width="200px">价差费用(含建筑税)</th>
-                        <td class="text-right"><%- materialTotalPrice.tax_tp %></td>
-                        <td class="text-right"><%- materialTotalPrice.ex_tax_tp %></td>
-                        <td class="text-right"><%- materialTotalPrice.total_tax_tp %></td>
+                        <td class="text-right"><%- materialTotalPrice.tax_tp || '' %></td>
+                        <td class="text-right"><%- materialTotalPrice.ex_tax_tp || '' %></td>
+                        <td class="text-right"><%- materialTotalPrice.total_tax_tp || '' %></td>
                     </tr>
                     <% if (openMaterialTax) { %>
                     <tr>
                         <th width="200px">价差费用(含材料税)</th>
-                        <td class="text-right"><%- materialTotalPrice.m_tax_tp %></td>
+                        <td class="text-right"><%- materialTotalPrice.m_tax_tp || '' %></td>
                         <td class="text-right"></td>
-                        <td class="text-right"><%- materialTotalPrice.m_tax_tp %></td>
+                        <td class="text-right"><%- materialTotalPrice.m_tax_tp || '' %></td>
                     </tr>
                     <% } %>
                     </tbody>