| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 | '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);    SpreadJsObj.initSheet(xmjSheet, xmjSpreadSetting);    const unitSpread = SpreadJsObj.createNewSpread($('#unit-spread')[0]);    const unitSheet = unitSpread.getActiveSheet();    SpreadJsObj.initSheet(unitSheet, unitSpreadSetting);    const unitTreeObj = {        loadCurUnitData: function () {            const node = SpreadJsObj.getSelectObject(xmjSheet);            if (node && node.unitTree) {                SpreadJsObj.loadSheetData(unitSheet, SpreadJsObj.DataType.Tree, node.unitTree);            } else {                SpreadJsObj.initSheet(unitSheet, unitSpreadSetting);            }        }    };    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],                            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, $('h2')[0].innerHTML + "-部位台账.xlsx");    });});
 |