| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 | '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");    });});
 |