'use strict'; /** * 台账搜索相关(多个页面均使用:台账分解、台账审批、台账修订) * * 搜索基于spreadjs,请放在gc.spread.sheets.all.10.0.1.min.js/spreadjs_zh.js之后 * * @author Mai * @date * @version */ (function($){ $.posSearch = function (setting) { if (!setting.selector || !setting.searchSpread) return; const searchHtml = '
\n' + '
\n' + ' \n' + '
\n' + ' 结果:0\n' + '
\n' + '
\n' + ' \n' + ' \n' + '
\n' + '
\n' + '
\n'; $(setting.selector).html(searchHtml); const sheet = setting.searchSpread.getActiveSheet(); const searchObj = (function () { let resultArr = []; const search = function (keyword) { if (keyword && keyword !== '') { resultArr = []; const sortData = sheet.zh_data; 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}); } } } } else { resultArr = []; } $('#pos-search-hint').html('结果:' + resultArr.length); }; const searchAndLocate = function (keyword) { search(keyword); if (resultArr.length > 0) { const sel = sheet.getSelections()[0]; const curRow = sel ? sel.row : 0; const pos = resultArr[0]; if (pos.index !== curRow) { sheet.setSelection(pos.index, sel ? sel.col : 0, 1, 1); sheet.showRow(pos.index, spreadNS.VerticalPosition.center); } } }; const locateNext = function () { if (resultArr.length > 0) { 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 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-keyword').bind('input propertychange', function () { // posSearch.search(this.value); // }); $('#pos-keyword').bind('keydown', function(e){ if (e.keyCode == 13) searchObj.searchAndLocate(this.value); }); $('#search-pre-pos').click(function () { searchObj.locatePre(); }); $('#search-next-pos').click(function () { searchObj.locateNext(); }); return searchObj; } $.billsSearch = function (setting) { if (!setting.selector || !setting.searchSpread || !setting.resultSpreadSetting) return; const resultId = setting.id + '-search-result'; const obj = $(setting.selector); obj.html( '
\n' + '
\n' + ' \n' + '
\n' + ' \n' + '
\n' + '
\n' + '
\n' + '
\n' + '
' ); autoFlashHeight(); const resultSpread = SpreadJsObj.createNewSpread($('#' + resultId)[0]); SpreadJsObj.initSheet(resultSpread.getActiveSheet(), setting.resultSpreadSetting); SpreadJsObj.forbiddenSpreadContextMenu('#' + resultId, resultSpread); const searchSheet = setting.searchSpread.getActiveSheet(); let searchResult = []; const searchBills = function () { const keyword = $('input', obj).val(); searchResult = []; const sortData = SpreadJsObj.getSortData(searchSheet); for (const node of sortData) { if ((node.code && node.code.indexOf(keyword) > -1) || node.b_code && node.b_code.indexOf(keyword) > -1 || node.name && node.name.indexOf(keyword) > -1) { const data = JSON.parse(JSON.stringify(node)); data.visible = true; searchResult.push(data); } } SpreadJsObj.loadSheetData(resultSpread.getActiveSheet(), 'data', searchResult); }; $('input', this.obj).bind('keydown', function (e) { if (e.keyCode == 13) searchBills(); }); $('button', this.obj).bind('click', () => {searchBills()}); resultSpread.getActiveSheet().bind(spreadNS.Events.CellDoubleClick, function (e, info) { const sheet = info.sheet; const data = sheet.zh_data; if (!data) { return } const curBills = data[info.row]; if (!curBills) { return } SpreadJsObj.locateTreeNode(searchSheet, curBills.ledger_id, true); if (setting.afterLocated) { setting.afterLocated(); } }); return {spread: resultSpread}; } })(jQuery);