Browse Source

计量台账,部位明细,查找定位

MaiXinRong 6 years atrás
parent
commit
7005b17961
2 changed files with 140 additions and 12 deletions
  1. 114 2
      app/public/js/stage.js
  2. 26 10
      app/view/stage/index.ejs

+ 114 - 2
app/public/js/stage.js

@@ -551,8 +551,11 @@ $(document).ready(() => {
             }
         },
         selectionChanged: function (e, info) {
-            stagePosSpreadObj.loadCurPosData();
-            SpreadJsObj.resetTopAndSelect(spSpread.getActiveSheet());
+            if (!info.oldSelections[0] || info.newSelections[0].row !== info.oldSelections[0].row) {
+                stagePosSpreadObj.loadCurPosData();
+                SpreadJsObj.resetTopAndSelect(spSpread.getActiveSheet());
+                posSearch.search();
+            }
             SpreadJsObj.saveTopAndSelect(info.sheet, ckBillsSpread);
         },
         deletePress(sheet) {
@@ -1227,6 +1230,115 @@ $(document).ready(() => {
         }
     }
     let searchLedger;
+
+    const posSearch = (function () {
+        let resultArr = [];
+        const search = function () {
+            resultArr = [];
+            const keyword = $('#pos-search-keyword').val();
+            const checkOver = $('#pos-over-search')[0].checked;
+            const checkEmpty = $('#pos-empty-search')[0].checked;
+            const sortData = spSpread.getActiveSheet().zh_data;
+            if (checkOver || checkEmpty) {
+                if (sortData) {
+                    for (let i = 0, iLength = sortData.length; i < iLength; i++) {
+                        const sd = sortData[i];
+                        let match = false;
+                        if (checkOver) {
+                            if (sd.end_gather_qty) {
+                                if (!sd.quantity || Math.abs(sd.end_gather_qty) > Math.abs(sd.quantity)) match = true;
+                            }
+                        }
+                        if (checkEmpty) {
+                            if (sd.quantity) {
+                                if (!sd.end_gather_qty || checkZero(sd.end_gather_qty)) match = true;
+                            }
+                        }
+                        if (keyword && keyword !== '' && sd.name && sd.name.indexOf(keyword) === -1) match = false;
+                        if (match) {
+                            resultArr.push({index: i, data: sd});
+                        }
+                    }
+                }
+            } else if (keyword && keyword !== '') {
+                if (sortData) {
+                    for (let i = 0, iLength = sortData.length; i < iLength; i++) {
+                        const sd = sortData[i];
+                        if (sd.name && sd.name.indexOf(keyword) > -1) {
+                            resultArr.push({index: i, data: sd});
+                        }
+                    }
+                }
+            }
+            $('#pos-search-result').html('结果:' + resultArr.length);
+        };
+        const searchAndLocate = function () {
+            search();
+            if (resultArr.length > 0) {
+                const sheet = spSpread.getActiveSheet();
+                const sel = sheet.getSelections()[0];
+                const curRow = sel ? sel.row : 0;
+                const pos = resultArr[0];
+                if (pos.index !== curRow) {
+                    sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
+                    sheet.showRow(next.index, spreadNS.VerticalPosition.center);
+                }
+            }
+        };
+        const locateNext = function () {
+            if (resultArr.length > 0) {
+                const sheet = spSpread.getActiveSheet();
+                const sel = sheet.getSelections()[0];
+                const curRow = sel ? sel.row : 0;
+                let next = _.find(resultArr, function (d) {
+                    return d.index > curRow;
+                });
+                if (!next) next = resultArr[0];
+                if (next.index !== curRow) {
+                    sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
+                    sheet.showRow(next.index, spreadNS.VerticalPosition.center);
+                }
+            }
+        };
+        const locatePre = function () {
+            if (resultArr.length > 0) {
+                const sheet = spSpread.getActiveSheet();
+                const sel = sheet.getSelections()[0];
+                const curRow = sel ? sel.row : 0;
+                let next = _.findLast(resultArr, function (d) {
+                    return d.index < curRow;
+                });
+                if (!next) next = resultArr[resultArr.length - 1];
+                if (next.index !== curRow) {
+                    sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
+                    sheet.showRow(next.index, spreadNS.VerticalPosition.center);
+                }
+            }
+        };
+        return {search, searchAndLocate, locateNext, locatePre};
+    })();
+    $('#pos-search-keyword').bind('keydown', function(e){
+        if (e.keyCode == 13) posSearch.searchAndLocate();
+    });
+    $('#pos-empty-search').click(function () {
+        if (this.checked) {
+            $('[for=' + this.id +']').addClass('text-warning');
+        } else {
+            $('[for=' + this.id +']').removeClass('text-warning');
+        }
+        posSearch.searchAndLocate();
+    });
+    $('#pos-over-search').click(function () {
+        if (this.checked) {
+            $('[for=' + this.id +']').addClass('text-danger');
+        } else {
+            $('[for=' + this.id +']').removeClass('text-danger');
+        }
+        posSearch.searchAndLocate();
+    });
+    $('#pos-search-next').click(() => {posSearch.locateNext()});
+    $('#pos-search-pre').click(() => {posSearch.locatePre()});
+
     $.divResizer({
         select: '#right-spr',
         callback: function () {

+ 26 - 10
app/view/stage/index.ejs

@@ -57,19 +57,35 @@
                                 <a class="nav-link active" href="#">部位明细</a>
                             </li>
                             <!--工程量清单模式操作-->
-                            <% if (ctx.tender.data.measure_type === measureType.gcl) { %>
                             <li class="nav-item">
-                                <div class="mt-1 ml-3">
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="插入"><i class="fa fa-sign-in" aria-hidden="true"></i></a>
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="复制"><i class="fa fa-files-o" aria-hidden="true"></i></a>
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
-                                    <a href="" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
+                                <div class="mt-1 ml-2">
+                                    <div class="input-group input-group-sm">
+                                        <div class="input-group-prepend">
+                                            <div class="input-group-text">
+                                                <div class="form-group form-check mb-0">
+                                                    <input type="checkbox" class="form-check-input group-checkbox" id="pos-over-search">
+                                                    <label class="form-check-label" for="pos-over-search">超计</label><!--勾选状态增加颜色text-danger-->
+                                                </div>
+                                            </div>
+                                            <div class="input-group-text">
+                                                <div class="form-group form-check mb-0">
+                                                    <input type="checkbox" class="form-check-input group-checkbox" id="pos-empty-search">
+                                                    <label class="form-check-label" for="pos-empty-search">漏计</label><!--勾选状态增加颜色text-warning-->
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <input type="text" class="form-control" placeholder="漏计中按名称查找" id="pos-search-keyword">
+                                        <!--搜索结果显示-->
+                                        <div class="input-group-append" >
+                                            <span class="input-group-text" id="pos-search-result">结果:0</span>
+                                        </div>
+                                        <div class="input-group-append" >
+                                            <button class="btn btn-outline-secondary" type="button" title="上一个" id="pos-search-pre"><i class="fa fa-angle-double-left"></i></button>
+                                            <button class="btn btn-outline-secondary" type="button" title="下一个" id="pos-search-next"><i class="fa fa-angle-double-right"></i></button>
+                                        </div>
+                                    </div>
                                 </div>
                             </li>
-                            <% } %>
                         </ul>
                     </div>
                     <div class="sp-wrap" id="stage-pos">