Pārlūkot izejas kodu

数据检查,改版

MaiXinRong 4 gadi atpakaļ
vecāks
revīzija
91dd2cff9d

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 43 - 0
app/public/css/radar-animation.css


+ 47 - 24
app/public/js/ledger.js

@@ -963,6 +963,21 @@ $(document).ready(function() {
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
     if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
     ledgerTreeCol.initSpreadSetting(ledgerSpreadSetting);
+    ledgerSpreadSetting.rowHeader = [
+        {
+            rowHeaderType: 'tag',
+            setting: {
+                getColor: function (index, data) {
+                    if (!data) return;
+                    if (index%10 === 0) return '#007bff';
+                    if (index%10 === 1) return '#28a745';
+                    if (index%10 === 2) return '#dc3545';
+                    if (index%10 === 3) return '#da9500';
+                    if (index%10 === 4) return '#17a2b8';
+                }
+            },
+        },
+    ];
     // ledgerSpreadSetting.cols.push(
     //     {title: 'ledger_id', colSpan: '1', rowSpan: '2', field: 'ledger_id', hAlign: 2, width: 60, type: 'Number', readOnly: true},
     //     {title: 'ledger_pid', colSpan: '1', rowSpan: '2', field: 'ledger_pid', hAlign: 2, width: 60, type: 'Number', readOnly: true},
@@ -3228,30 +3243,38 @@ $(document).ready(function() {
         return false;
     });
 
-    LedgerChecker({
-        ledgerTree: ledgerTree,
-        ledgerPos: pos,
-        checkList: checkList,
-        decimal: tenderInfo.decimal,
-        checkOption: {
-            sibling: { enable: 1 },
-            empty_code: { enable: 1 },
-            calc: {
-                enable: 1,
-                fields: ['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity'],
-            },
-            zero: { enable: 1 },
-            tp: {
-                enable: 1,
-                fields: [
-                    {qty: 'sgfh_qty', tp: 'sgfh_tp'},
-                    {qty: 'sjcl_qty', tp: 'sjcl_tp'},
-                    {qty: 'qtcl_qty', tp: 'qtcl_tp'},
-                    {qty: 'quantity', tp: 'total_price'},
-                    {qty: 'deal_qty', tp: 'deal_tp'},
-                ],
-            },
-        }
+    $('#ledger-check2').click(() => {
+        const result = ledgerCheck2({
+            ledgerTree: ledgerTree,
+            ledgerPos: pos,
+            checkList: checkList,
+            decimal: tenderInfo.decimal,
+            checkOption: {
+                sibling: { enable: 1 },
+                empty_code: { enable: 1 },
+                calc: {
+                    enable: 1,
+                    fields: ['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity'],
+                },
+                zero: { enable: 1 },
+                tp: {
+                    enable: 1,
+                    fields: [
+                        {qty: 'sgfh_qty', tp: 'sgfh_tp'},
+                        {qty: 'sjcl_qty', tp: 'sjcl_tp'},
+                        {qty: 'qtcl_qty', tp: 'qtcl_tp'},
+                        {qty: 'quantity', tp: 'total_price'},
+                        {qty: 'deal_qty', tp: 'deal_tp'},
+                    ],
+                },
+            }
+        });
+        check2Viewing({
+            randomWait: true,
+            prefix: 'check2-',
+            checks: result,
+            checkList: checkList,
+        })
     });
 });
 

+ 184 - 0
app/public/js/ledger_check.js

@@ -0,0 +1,184 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+
+const ledgerCheckType = {
+    sibling: {value: 1, text: '项目节、清单同层'},
+    empty_code: {value: 2, text: '项目节、清单编号同时为空'},
+    calc: {value: 3, text: '清单数量不等于计量单元之和'},
+    zero: {value: 4, text: '清单数量或单价为0'},
+    tp: {value: 5, text: '清单金额≠数量×单价'},
+    over: {value: 6, text: '超计'},
+};
+const ledgerCheckUtil = {
+    checkSibling: function (ledgerTree) {
+        const error = [];
+        for (const node of ledgerTree.nodes) {
+            if (!node.children || node.children.length === 0) continue;
+            let hasXmj, hasGcl;
+            for (const child of node.children) {
+                if (child.b_code) hasXmj = true;
+                if (!child.b_code) hasGcl = true;
+            }
+            if (hasXmj && hasGcl) error.push(node);
+        }
+        return error;
+    },
+    checkCodeEmpty: function (ledgerTree) {
+        const error = [];
+        const checkNodeCode = function (node) {
+            if ((!node.code || node.code === '') && (!node.b_code || node.b_code === '')) error.push(node);
+            if (node.children && node.children.length > 0) {
+                for (const child of node.children) {
+                    checkNodeCode(child);
+                }
+            }
+        }
+        for (const topLevel of ledgerTree.children) {
+            if (topLevel.node_type !== 1) continue;
+
+            checkNodeCode(topLevel);
+        }
+        return error;
+    },
+    checkCalc: function (ledgerTree, ledgerPos, option) {
+        const error = [];
+        for (const node of ledgerTree.nodes) {
+            if (node.children && node.children.length > 0) continue;
+
+            const nodePos = ledgerPos.getLedgerPos(node.id);
+            if (!nodePos || nodePos.length === 0) continue;
+
+            const checkData = {}, calcData = {};
+            for (const f of option.fields) {
+                checkData[f] = node[f] || 0;
+                calcData[f] = 0;
+            }
+            for (const np of nodePos) {
+                for (const f of option.fields) {
+                    calcData[f] = ZhCalc.add(calcData[f], np[f]) || 0;
+                }
+            }
+            if (!_.isMatch(checkData, calcData)) error.push(node);
+        }
+        return error;
+    },
+    checkZero: function (ledgerTree) {
+        const error = [];
+        for (const node of ledgerTree.nodes) {
+            if ((!node.b_code || node.b_code === '')) continue;
+            if (node.children && node.children.length > 0) continue;
+
+            if ((checkZero(node.sgfh_qty) && checkZero(node.qtcl_qty) && checkZero(node.sjcl_qty)
+                    && checkZero(node.deal_qty) && checkZero(node.quantity))
+                || checkZero(node.unit_price)) error.push(node);
+        }
+        return error;
+    },
+    checkTp: function (ledgerTree, decimal, option) {
+        const error = [];
+        for (const node of ledgerTree.nodes) {
+            if (node.children && node.children.length > 0) continue;
+            if (option.filter && option.filter(node)) continue;
+
+            const checkData = {}, calcData = {};
+            for (const f of option.fields) {
+                checkData[f.tp] = node[f.tp] || 0;
+                calcData[f.tp] = ZhCalc.mul(node.unit_price, node[f.qty], decimal.tp) || 0;
+            }
+            if (!_.isMatch(checkData, calcData)) error.push(node);
+        }
+        return error;
+    },
+    checkOver: function(ledgerTree, ledgerPos, option) {
+        const error = [];
+        for (const node of ledgerTree.nodes) {
+            if (node.children && node.children.length > 0) continue;
+
+            if (option.isTz) {
+                const posRange = ledgerPos.getLedgerPos(node.id) || [];
+                if (posRange.length > 0) {
+                    for (const p of posRange) {
+                        if (p.end_contract_qty > p.quantity) {
+                            error.push(node);
+                            continue;
+                        }
+                    }
+                }
+            }
+            if (node.is_tp) {
+                if (node.end_contract_tp > node.total_price) error.push(node);
+            } else {
+                if (node.end_contract_qty > node.quantity) error.push(node);
+            }
+        }
+        return error;
+    },
+};
+
+const ledgerCheck2 = function (setting) {
+    const ledger = setting.ledgerTree, ledgerPos = setting.ledgerPos, decimal = setting.decimal;
+    const checkOption = setting.checkOption;
+
+    const assignWarningData = function (nodes, checkType, warningData) {
+        for (const node of nodes) {
+            warningData.push({
+                type: checkType,
+                ledger_id: node.ledger_id,
+                code: node.code,
+                b_code: node.b_code,
+                name: node.name,
+            })
+        }
+    };
+
+    const checkData = {
+        check_time: new Date(),
+        warning_data: [],
+    };
+    const progressData = [];
+    if (checkOption.sibling.enable) {
+        const sibling = ledgerCheckUtil.checkSibling(ledger, checkOption.sibling) || [];
+        assignWarningData(sibling, ledgerCheckType.sibling.value, checkData.warning_data);
+        progressData.push({key: 'sibling', caption: ledgerCheckType.sibling.text, error: sibling.length});
+    }
+    if (checkOption.empty_code.enable) {
+        const empty_code = ledgerCheckUtil.checkCodeEmpty(ledger, checkOption.empty_code) || [];
+        assignWarningData(empty_code, ledgerCheckType.empty_code.value, checkData.warning_data);
+        progressData.push({key: 'empty_code', caption: ledgerCheckType.empty_code.text, error: empty_code.length});
+    }
+    if (checkOption.calc.enable) {
+        const calc = ledgerCheckUtil.checkCalc(ledger, ledgerPos, checkOption.calc) || [];
+        assignWarningData(calc, ledgerCheckType.calc.value, checkData.warning_data);
+        progressData.push({key: 'calc', caption: ledgerCheckType.calc.text, error: calc.length});
+    }
+    if (checkOption.zero.enable) {
+        const zero = ledgerCheckUtil.checkZero(ledger, checkOption.zero) || [];
+        assignWarningData(zero, ledgerCheckType.zero.value, checkData.warning_data);
+        progressData.push({key: 'zero', caption: ledgerCheckType.zero.text, error: zero.length});
+    }
+    if (checkOption.tp.enable) {
+        const tp = ledgerCheckUtil.checkTp(ledger, decimal, checkOption.tp) || [];
+        assignWarningData(tp, ledgerCheckType.tp.value, checkData.warning_data);
+        progressData.push({key: 'tp', caption: ledgerCheckType.tp.text, error: tp.length});
+    }
+    if (checkOption.over && checkOption.over.enable) {
+        const over = ledgerCheckUtil.checkOver(ledger, ledgerPos, checkOption.over) || [];
+        assignWarningData(over, ledgerCheckType.over.value, checkData.warning_data);
+        progressData.push({key: 'over', caption: ledgerCheckType.over.text, error: over.length});
+    }
+    setting.checkList.clearCheckData();
+    if (checkData.warning_data.length > 0) {
+        setting.checkList.loadCheckData(checkData);
+    } else {
+        setting.checkList.hide();
+    }
+    return progressData;
+};

+ 12 - 1
app/public/js/stage.js

@@ -3606,6 +3606,9 @@ $(document).ready(() => {
                     return node.is_tp;
                 }
             },
+            over: {
+                enable: 1, isTz: checkTzMeasureType(),
+            }
         }
     };
     if (!checkTzMeasureType()) {
@@ -3617,7 +3620,15 @@ $(document).ready(() => {
             {qty: 'quantity', tp: 'total_price'},
         );
     }
-    LedgerChecker(stageCheckerSetting);
+    $('#ledger-check2').click(() => {
+        const result = ledgerCheck2(stageCheckerSetting);
+        check2Viewing({
+            randomWait: true,
+            prefix: 'check2-',
+            checks: result,
+            checkList: checkList,
+        })
+    });
 
     const dataChecker = DataChecker({
         checkUrl: window.location.pathname + '/check',

+ 1 - 0
app/view/layout/layout.ejs

@@ -20,6 +20,7 @@
     <link rel="stylesheet" href="/public/css/datepicker/datepicker.min.css" type="text/css">
     <link rel="stylesheet" href="/public/css/toastr.css">
     <link rel="shortcut icon" href="/public/images/favicon.ico">
+    <link rel="stylesheet" href="/public/css/radar-animation.css">
     <!-- JS. -->
     <% for (const file of jsFiles) { %>
     <script type="text/javascript" src="<%- file %>"></script>

+ 1 - 1
app/view/ledger/explode.ejs

@@ -45,7 +45,7 @@
             </div>
             <div class="ml-auto">
                 <% if (tender.ledger_status !== auditConst.status.checked) { %>
-                    <a class="btn btn-sm btn-primary mr-1" href="#ledger-check-modal" data-toggle="modal" data-target="#ledger-check-modal">数据检查</a>
+                    <a class="btn btn-sm btn-primary mr-1" id="ledger-check2" href="javascript: void(0);">数据检查</a>
                 <% } %>
                 <% if (tender.ledger_status === auditConst.status.checkNo) { %>
                     <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm text-dark sp-list-btn">审批退回</a>

+ 1 - 1
app/view/ledger/explode_modal.ejs

@@ -402,4 +402,4 @@
 <% include ../shares/import_excel_modal.ejs %>
 <% include ../shares/delete_hint_modal.ejs %>
 <% include ../shares/check_data_modal.ejs %>
-<% include ../shares/ledger_check_modal.ejs %>
+<% include ../shares/check_modal2.ejs %>

+ 204 - 0
app/view/shares/check_modal2.ejs

@@ -0,0 +1,204 @@
+<!--数据检查-->
+<div class="modal fade" id="checking2" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">数据检查</h5>
+            </div>
+            <div class="modal-body">
+                <div class="row">
+                    <div class="col-6">
+                        <!--雷达扫描动画-->
+                        <div class="L_transform">
+                            <div class="trans_bg">
+                                <div class="bg_shade"></div>
+                                <div class="circles topcircle active">
+                                    <div class="trio"><p class="c-icon"></p></div>
+                                </div>
+                                <div class="circles leftcircle ">
+                                    <div class="trio"><p class="c-icon"></p></div>
+                                </div>
+                                <div class="circles leftcircle2 ">
+                                    <div class="trio"><p class="c-icon"></p></div>
+                                </div>
+                                <div class="circles rightcircle ">
+                                    <div class="trio"><p class="c-icon"></p></div>
+                                </div>
+                                <div class="circles rightcircle2">
+                                    <div class="trio"><p class="c-icon"></p></div>
+                                </div>
+                                <div class="heart_box">
+                                    <div class="heart"></div>
+                                    <div class="shan" style="transform: rotate(274deg);"></div>
+                                </div>
+                            </div>
+                        </div>
+                        <!--雷达扫描动画结束-->
+                    </div>
+                    <div class="col-6">
+                        <p>数据检查,将检查罗列台账中以下内容:</p>
+                        <div id="check2-list">
+                            <div class="card p-2 border-success border-0">
+                                <div class="d-flex justify-content-start">
+                                    <span class="text-success mr-2"><i class="fa fa-check-circle fa-2x"></i></span>
+                                    <div class="w-100">
+                                        项目节、清单同层
+                                        <div class="progress mt-1">
+                                            <div class="progress-bar bg-success" role="progressbar" style="width: 100%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">100%</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="card p-2 border-success border-0">
+                                <div class="d-flex justify-content-start">
+                                    <span class="text-warning mr-2"><i class="fa fa-info-circle fa-2x"></i></span>
+                                    <div class="w-100">
+                                        项目节、清单编号同时为空
+                                        <div class="progress mt-1">
+                                            <div class="progress-bar bg-warning" role="progressbar" style="width: 100%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">100%</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="card p-2 border-success border-0">
+                                <div class="d-flex justify-content-start">
+                                    <span class="text-primary mr-2"><i class="fa fa-cog fa-spin fa-2x"></i></span>
+                                    <div class="w-100">
+                                        清单数量不等于计量单元之和
+                                        <div class="progress mt-1">
+                                            <div class="progress-bar" role="progressbar" style="width: 30%;" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">30%</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <p class="text-center text-primary" id="check2-hint">检查中,请等待...</p>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-sm btn-primary" id="check2-result">查看结果</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script>
+    const getmatrix = function(a,b,c,d,e,f){
+        var aa=Math.round(180*Math.asin(a)/ Math.PI);
+        var bb=Math.round(180*Math.acos(b)/ Math.PI);
+        var cc=Math.round(180*Math.asin(c)/ Math.PI);
+        var dd=Math.round(180*Math.acos(d)/ Math.PI);
+        var deg=0;
+        if(aa==bb||-aa==bb){
+            deg=dd;
+        }else if(-aa+bb==180){
+            deg=180+cc;
+        }else if(aa+bb==180){
+            deg=360-cc||360-dd;
+        }
+        return deg>=360?0:deg;
+
+    }
+    const radarFind = function (select) {
+        $('.circles').removeClass('active');
+        $(select).addClass('active');
+    }
+    let radarHandle, progressHandle;
+    const check2Viewing = function (setting) {
+        if (!setting.prefix) setting.prefix = 'check2-';
+        if (setting.randomWait) {
+            for (const c of setting.checks) {
+                c.wait = _.random(1, 5);
+            }
+        }
+
+        // 雷达
+        let radarObj=$('.shan');
+        radarHandle = setInterval(function(){
+            var transform = radarObj.css('transform');
+            var deg= transform === 'none' ? 0 : eval('get'+ transform);//构造getmatrix函数,返回上次旋转度数
+            var step=45;
+            radarObj.css({'transform':'rotate('+(deg+step)%360+'deg)'});
+            var dd = radarObj.css({'transform':'rotate('+(deg+step)%360+'deg)'});
+            //上
+            if(deg>300&&deg<360 ||deg>0 &&deg<20){
+                radarFind('.topcircle');
+                // 右
+            }else if(deg>20 && deg<45){
+                radarFind('.rightcircle');
+            }else if(deg>70 && deg<90){
+                radarFind('.rightcircle2');
+                // 左
+            }else if(deg>150 && deg<180){
+                radarFind('.leftcircle2');
+            }else if(deg>230 && deg<300){
+                radarFind('.leftcircle');
+            }
+        }, 100);
+
+        const initCheckList = function (prefix, checks) {
+            $('#check2-result').hide();
+            $('#check2-hint').removeClass('text-warning').removeClass('text-success').addClass('text-primary').html('检查中,请等待...');
+            const html = [];
+            for (const c of checks) {
+                const domid = prefix + c.key;
+                html.push(`<div class="card p-2 border-success border-0" id="${domid}">`);
+                html.push('<div class="d-flex justify-content-start">');
+                html.push('<span class="text-muted mr-2"><i class="fa fa-circle-o fa-2x"></i></span>');
+                html.push('<div class="w-100">', c.caption);
+                html.push('<div class="progress mt-1">', '<div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0%</div>', '</div>');
+                html.push('</div>');
+                html.push('</div>');
+                html.push('</div>');
+            }
+            $('#check2-list').html(html.join(''));
+        }
+        const doSomeCheck = function (setting, index) {
+            const check = setting.checks[index];
+            console.log(check.wait);
+            if (!check) return;
+
+            setting.total = setting.total + (check.error || 0);
+            const obj = $('#' + setting.prefix + check.key);
+            $('.fa-circle-o', obj).removeClass('fa-circle-o').addClass('fa-cog');
+            $('.text-muted').removeClass('text-muted').addClass('text-primary');
+            $('.progress-bar', obj).attr('aria-valuemax', check.wait*10);
+            const handle = setInterval(function () {
+                const now = _.toInteger($('.progress-bar', obj).attr('aria-valuenow')) || 0;
+                if (now < check.wait * 10) {
+                    const percent = Math.min(ZhCalc.div((now + 1) * 10, check.wait, 0), 100);
+                    $('.progress-bar', obj).attr('aria-valuenow', Math.min(now + 1, check.wait*10)).html(percent + '%').width(percent + '%');
+                }
+            }, 100);
+            setTimeout(() => {
+                clearInterval(handle);
+                $('.fa-cog', obj).removeClass('fa-cog').addClass(check.error > 0 ? 'fa-info-circle' : 'fa-check-circle');
+                $('.text-primary', obj).removeClass('text-primary').addClass(check.error > 0 ? 'text-warning' : 'text-success');
+                $('.progress-bar', obj).addClass(check.error > 0 ? 'bg-warning' : 'bg-success');
+                if (index === setting.checks.length - 1) {
+                    if (setting.total > 0) {
+                        $('#check2-result').show();
+                        $('#check2-hint').removeClass('text-primary').addClass('text-warning').html('检查完成,发现问题,请查阅检查结果。');
+                    } else {
+                        $('#check2-hint').removeClass('text-primary').addClass('text-success').html('检查完成,没有任何问题。');
+                    }
+                } else {
+                    doSomeCheck(setting, index + 1);
+                }
+            }, check.wait*1000 + 500);
+        }
+
+        initCheckList(setting.prefix, setting.checks);
+        $('#checking2').modal('show');
+        setting.total = 0;
+        doSomeCheck(setting, 0);
+        $('#check2-result').click(() => {
+            $('#checking2').modal('hide');
+            setting.checkList.show();
+        });
+    }
+    $('#checking2').bind('hidden.bs.modal', function () {
+        clearInterval(radarHandle);
+    });
+</script>

+ 0 - 81
app/view/shares/ledger_check_modal.ejs

@@ -112,87 +112,6 @@
             return result;
         }
 
-        const ledgerCheckUtil = {
-            checkSibling: function (ledgerTree) {
-                const error = [];
-                for (const node of ledgerTree.nodes) {
-                    if (!node.children || node.children.length === 0) continue;
-                    let hasXmj, hasGcl;
-                    for (const child of node.children) {
-                        if (child.b_code) hasXmj = true;
-                        if (!child.b_code) hasGcl = true;
-                    }
-                    if (hasXmj && hasGcl) error.push(node);
-                }
-                return error;
-            },
-            checkCodeEmpty: function (ledgerTree) {
-                const error = [];
-                const checkNodeCode = function (node) {
-                    if ((!node.code || node.code === '') && (!node.b_code || node.b_code === '')) error.push(node);
-                    if (node.children && node.children.length > 0) {
-                        for (const child of node.children) {
-                            checkNodeCode(child);
-                        }
-                    }
-                }
-                for (const topLevel of ledgerTree.children) {
-                    if (topLevel.node_type !== 1) continue;
-
-                    checkNodeCode(topLevel);
-                }
-                return error;
-            },
-            checkCalc: function (ledgerTree, option) {
-                const error = [];
-                for (const node of ledgerTree.nodes) {
-                    if (node.children && node.children.length > 0) continue;
-
-                    const nodePos = ledgerPos.getLedgerPos(node.id);
-                    if (!nodePos || nodePos.length === 0) continue;
-
-                    const checkData = {}, calcData = {};
-                    for (const f of option.fields) {
-                        checkData[f] = node[f] || 0;
-                        calcData[f] = 0;
-                    }
-                    for (const np of nodePos) {
-                        for (const f of option.fields) {
-                            calcData[f] = ZhCalc.add(calcData[f], np[f]) || 0;
-                        }
-                    }
-                    if (!_.isMatch(checkData, calcData)) error.push(node);
-                }
-                return error;
-            },
-            checkZero: function (ledgerTree) {
-                const error = [];
-                for (const node of ledgerTree.nodes) {
-                    if ((!node.b_code || node.b_code === '')) continue;
-                    if (node.children && node.children.length > 0) continue;
-
-                    if ((checkZero(node.sgfh_qty) && checkZero(node.qtcl_qty) && checkZero(node.sjcl_qty)
-                        && checkZero(node.deal_qty) && checkZero(node.quantity))
-                        || checkZero(node.unit_price)) error.push(node);
-                }
-                return error;
-            },
-            checkTp: function (ledgerTree, option) {
-                const error = [];
-                for (const node of ledgerTree.nodes) {
-                    if (node.children && node.children.length > 0) continue;
-                    if (option.filter && option.filter(node)) continue;
-
-                    const checkData = {}, calcData = {};
-                    for (const f of option.fields) {
-                        checkData[f.tp] = node[f.tp] || 0;
-                        calcData[f.tp] = ZhCalc.mul(node.unit_price, node[f.qty], decimal.tp) || 0;
-                    }
-                    if (!_.isMatch(checkData, calcData)) error.push(node);
-                }
-                return error;
-            }
-        };
 
         const assignWarningData = function (nodes, checkType, warningData) {
             for (const node of nodes) {

+ 1 - 1
app/view/stage/index.ejs

@@ -34,7 +34,7 @@
                 </div>
                 <div class="d-inline-block ml-3">
                     <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">导出计量台账Excel</a>
-                    <a class="btn btn-sm btn-primary" href="#ledger-check-modal" data-toggle="modal" data-target="#ledger-check-modal">数据检查</a>
+                    <a class="btn btn-sm btn-primary" href="javascript: void(0);" id="ledger-check2">数据检查</a>
                 </div>
                 <div class="d-inline-block">
                     <a class="btn btn-sm btn-primary" href="#correct" data-toggle="modal" data-target="#correct"><i class="fa fa-cog"></i></a>

+ 1 - 1
app/view/stage/modal.ejs

@@ -470,4 +470,4 @@
 </div>
 <% include ./audit_modal.ejs %>
 <% include ../shares/merge_peg_modal.ejs %>
-<% include ../shares/ledger_check_modal.ejs %>
+<% include ../shares/check_modal2.ejs %>

+ 2 - 0
config/web.js

@@ -132,6 +132,7 @@ const JsFiles = {
                     '/public/js/path_tree.js',
                     '/public/js/ledger_tree_col.js',
                     '/public/js/std_lib.js',
+                    '/public/js/ledger_check.js',
                     '/public/js/ledger.js',
                 ],
                 mergeFile: 'explode',
@@ -304,6 +305,7 @@ const JsFiles = {
                     '/public/js/zh_calc.js',
                     '/public/js/path_tree.js',
                     '/public/js/stage_im.js',
+                    '/public/js/ledger_check.js',
                     '/public/js/stage.js',
                     '/public/js/stage_audit.js',
                 ],