'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 unitTreeObj = { loadCurUnitData: function () { const node = SpreadJsObj.getSelectObject(xmjSheet); SpreadJsObj.resetTopAndSelect(unitSheet); if (node && node.unitTree) { SpreadJsObj.loadSheetData(unitSheet, SpreadJsObj.DataType.Tree, node.unitTree); } 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); } } console.log(xmjTree); 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(); }); // 显示层次 (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"); }); });