'use strict'; /** * * * @author Mai * @date * @version */ $(document).ready(() => { let xmjSearch; autoFlashHeight(); const xmjSpread = SpreadJsObj.createNewSpread($('#xmj-spread')[0]); const xmjSheet = xmjSpread.getActiveSheet(); sjsSettingObj.setFxTreeStyle(xmjSpreadSetting, sjsSettingObj.FxTreeStyle.jz); if (thousandth) sjsSettingObj.setTpThousandthFormat(xmjSpreadSetting); SpreadJsObj.initSheet(xmjSheet, xmjSpreadSetting); const unitSpread = SpreadJsObj.createNewSpread($('#unit-spread')[0]); const unitSheet = unitSpread.getActiveSheet(); if (thousandth) sjsSettingObj.setTpThousandthFormat(xmjSpreadSetting); SpreadJsObj.initSheet(unitSheet, unitSpreadSetting); const filterUnitTree = createNewPathTree('filter', { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, fullPath: 'full_path', }); const unitTreeObj = { getFilterUnitTree: function (unitTree) { const filter = $('#unit-filter').val(); if (!filter || unitTree.nodes.length === 0) return unitTree; filterUnitTree.clearDatas(); const filterPath = []; const checkFullPath = function (checkPath, valuePath) { if (valuePath.indexOf(checkPath + '-') >= 0) return true; const pathArray = checkPath.split('-'); const tmpArray = []; for (let i = 0, iLen = pathArray.length; i < iLen; i++) { tmpArray.push(pathArray.slice(0, i+1).join('-')); } for (const ta of tmpArray) { if (ta === valuePath) return true; } return false; }; for (const node of unitTree.nodes) { if ((node.code && node.code.indexOf(filter) >= 0) || (node.b_code && node.b_code.indexOf(filter) >= 0) || (node.name && node.name.indexOf(filter) >= 0) || (node.pos_name && node.pos_name.indexOf(filter) >= 0)) filterPath.push(node.full_path); } for (const node of unitTree.nodes) { for (const fp of filterPath) { if (checkFullPath(fp, node.full_path)) { filterUnitTree.addData(node, ['id', 'ledger_id', 'ledger_pid', 'order', 'level', 'full_path', 'pos_name', 'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price', 'drawing_code_merge', 'memo_merge']); break; } } } filterUnitTree.sortTreeNode(); return filterUnitTree; }, loadCurUnitData: function () { const node = SpreadJsObj.getSelectObject(xmjSheet); SpreadJsObj.resetTopAndSelect(unitSheet); if (node && node.unitTree) { const relaTree = unitTreeObj.getFilterUnitTree(node.unitTree); if ($('#unit-show-1')[0].checked) relaTree.expandByLevel(1); SpreadJsObj.loadSheetData(unitSheet, SpreadJsObj.DataType.Tree, relaTree); } else { SpreadJsObj.initSheet(unitSheet, unitSpreadSetting); } SpreadJsObj.resetTopAndSelect(unitSheet); } }; xmjSpread.bind(spreadNS.Events.SelectionChanged, function (e, info) { unitTreeObj.loadCurUnitData(); }); postData(window.location.pathname + '/load', {}, function (result) { const setting = { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, fullPath: 'full_path', }; const xmjTree = createNewPathTree('base', setting); xmjTree.loadDatas(result); for (const n of xmjTree.nodes) { if (n.unitTreeData) { n.unitTree = createNewPathTree('base', setting); n.unitTree.loadDatas(n.unitTreeData); } } SpreadJsObj.loadSheetData(xmjSheet, SpreadJsObj.DataType.Tree, xmjTree); unitTreeObj.loadCurUnitData(); }); $.subMenu({ menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list', toMenu: '#to-menu', toMiniMenu: '#to-mini-menu', key: 'menu.1.0.0', miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1', callback: function (info) { if (info.mini) { $('.panel-title').addClass('fluid'); $('#sub-menu').removeClass('panel-sidebar'); } else { $('.panel-title').removeClass('fluid'); $('#sub-menu').addClass('panel-sidebar'); } autoFlashHeight(); xmjSpread.refresh(); unitSpread.refresh(); } }); // 加载上下窗口resizer $.divResizer({ select: '#main-resize', callback: function () { xmjSpread.refresh(); let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0; $(".sp-wrap").height(bcontent-30); unitSpread.refresh(); } }); $.divResizer({ select: '#right-spr', callback: function () { xmjSpread.refresh(); unitSpread.refresh(); if (xmjSearch) { xmjSearch.spread.refresh(); } } }); $('a', '.side-menu').bind('click', function (e) { e.preventDefault(); const tab = $(this), tabPanel = $(tab.attr('content')); const showSideTools = function (show) { const left = $('#left-view'), right = $('#right-view'), parent = left.parent(); if (show) { right.show(); autoFlashHeight(); /** * right.show()后, parent被撑开成2倍left.height, 导致parent.width减少了10px * 第一次left.width调整后,parent的缩回left.height, 此时parent.width又增加了10px * 故需要通过最终的parent.width再计算一次left.width * * Q: 为什么不通过先计算left.width的宽度,以避免计算两次left.width? * A: 右侧工具栏不一定显示,当右侧工具栏显示过一次后,就必须使用parent和right来计算left.width * */ //left.css('width', parent.width() - right.outerWidth()); //left.css('width', parent.width() - right.outerWidth()); const percent = 100 - right.outerWidth() /parent.width() * 100; left.css('width', percent + '%'); } else { left.width(parent.width()); right.hide(); } }; // 展开工具栏、切换标签 if (!tab.hasClass('active')) { const close = $('.active', '#side-menu').length === 0; $('a', '#side-menu').removeClass('active'); tab.addClass('active'); $('.tab-content .tab-pane').removeClass('active'); tabPanel.addClass('active'); showSideTools(tab.hasClass('active')); if (tab.attr('content') === '#search' && !xmjSearch) { if (!xmjSearch) { xmjSearch = $.billsSearch({ selector: '#search', searchSpread: xmjSpread, searchRangeStr: '项目节编号/名称', resultSpreadSetting: { cols: [ {title: '项目节编号', field: 'code', hAlign: 0, width: 120, formatter: '@', readOnly: true}, {title: '名称', field: 'name', width: 150, hAlign: 0, formatter: '@', readOnly: true}, {title: '单位', field: 'unit', width: 50, hAlign: 1, formatter: '@', readOnly: true}, {title: '台账金额', field: 'total_price', hAlign: 2, width: 80, readOnly: true}, ], emptyRows: 0, headRows: 1, headRowHeight: [32], headColWidth: [30], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', selectedBackColor: '#fffacd', }, afterLocated: function () { unitTreeObj.loadCurUnitData(); } }); } xmjSearch.spread.refresh(); } } else { // 收起工具栏 tab.removeClass('active'); tabPanel.removeClass('active'); showSideTools(tab.hasClass('active')); } xmjSpread.refresh(); unitSpread.refresh(); }); $('#unit-filter').bind('keydown', function (e) { const evt = window.event || e; if (e.keyCode == 13) unitTreeObj.loadCurUnitData(); }); $('#unit-show-1').bind('change', function () { if (this.checked) { unitSheet.zh_tree.expandByLevel(1); SpreadJsObj.refreshTreeRowVisible(unitSheet); } else { unitSheet.zh_tree.expandByCustom(() => { return true; }); SpreadJsObj.refreshTreeRowVisible(unitSheet); } }); // 显示层次 (function (select, sheet) { $(select).click(function () { const tag = $(this).attr('tag'); const tree = sheet.zh_tree; if (!tree) return; switch (tag) { case "1": case "2": case "3": case "4": case "5": tree.expandByLevel(parseInt(tag)); SpreadJsObj.refreshTreeRowVisible(sheet); break; case "last": tree.expandByCustom(() => { return true; }); SpreadJsObj.refreshTreeRowVisible(sheet); break; } }); })('a[name=showLevel]', xmjSheet); $('#exportBwtz').click(function () { const data = []; const setting = { cols: [ {title: '项目节编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 100, formatter: '@'}, {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 70, formatter: '@'}, {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 300, formatter: '@'}, {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@'}, {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 80, type: 'Number'}, {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'}, {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'}, {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 100, formatter: '@'}, {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo', hAlign: 0, width: 100, formatter: '@'}, ], headRows: 2, headRowHeight: [25, 25], defaultRowHeight: 21, headerFont: 'bold 10px 微软雅黑', font: '10px 微软雅黑' }; if (!xmjSheet.zh_tree) return; for (const node of xmjSheet.zh_tree.nodes) { data.push({ code: node.code, b_code: node.b_code, name: node.name, unit: node.unit, unit_price: node.unit_price, quantity: node.quantity, total_price: node.total_price, drawing_code: node.drawing_code, memo: node.memo }); if (node.unitTree) { for (const unitNode of node.unitTree.nodes) { data.push({ code: unitNode.code, b_code: unitNode.b_code, name: unitNode.pos_name ? unitNode.pos_name : unitNode.name, unit: unitNode.unit, unit_price: unitNode.unit_price, quantity: unitNode.quantity, total_price: unitNode.total_price, drawing_code: unitNode.drawing_code_merge, memo: unitNode.memo_merge }); } } } SpreadExcelObj.exportSimpleXlsxSheet(setting, data, $('.sidebar-title').attr('data-original-title') + "-部位台账.xlsx"); }); });