'use strict'; /** * 台账修订页面js * * @author Mai * @date * @version */ const billsCompareField = [ 'code', 'b_code', 'name', 'unit', 'unit_price', 'dgn_qty1', 'dgn_qty2', 'dgn_price', 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price', 'deal_qty', 'deal_tp' ]; const posCompareField = [ 'name', 'position', 'sgfh_qty', 'sjcl_qty', 'qtcl_qty', 'quantity' ]; const compareColor = { add: '#D9EDF7' } $(document).ready(() => { let searchLedger; autoFlashHeight(); // 初始化spread const billsSpread = SpreadJsObj.createNewSpread($('#bills-spread')[0]); const billsSheet = billsSpread.getActiveSheet(); sjsSettingObj.setFxTreeStyle(billsSpreadSetting, sjsSettingObj.FxTreeStyle.jz); if (thousandth) sjsSettingObj.setTpThousandthFormat(billsSpreadSetting); billsSpreadSetting.getColor = function (sheet, data, row, col, defaultColor) { // 增 if (data.differ.indexOf('add') >= 0) return '#cce5ff'; // 删 if (data.differ.indexOf('del') >= 0) return '#DCDCDC'; // 结构变动 if (data.differ.indexOf('tree') >= 0) return '#d0f6fd'; // 修改计算或文字 if (data.differ.indexOf('calc') >= 0) return '#f8d7da'; if (data.differ.indexOf('info') >= 0) return '#d4edda'; // 层次结构 if (data.level === 2) { return '#C4CAFB'; } else if ((!data.b_code || data.b_code === '') && data.level > 2) { return '#DFE8F9'; } else { return defaultColor; } }; SpreadJsObj.initSheet(billsSheet, billsSpreadSetting); const posSpread = SpreadJsObj.createNewSpread($('#pos-spread')[0]); const posSheet = posSpread.getActiveSheet(); sjsSettingObj.setGridSelectStyle(posSpreadSetting); if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting); SpreadJsObj.initSheet(posSheet, posSpreadSetting); const posSearch = $.posSearch({selector: '#pos-search', searchSpread: posSpread}); // 初始化 节点树结构 const treeSetting = { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', full_path: 'full_path', rootId: -1, keys: ['id', 'tender_id', 'ledger_id'], calcFields: ['sgfh_tp', 'sjcl_tp', 'qtcl_tp', 'total_price'], findNode: function (tree, node, parent) { const sameId = tree.datas.find(x => {return x.id === node.id}); if (sameId) { sameId.org_pid = parent ? parent[tree.setting.id] : tree.setting.rootId; if (sameId[tree.setting.pid] !== sameId.org_pid) { sameId.changeParent = true; } return sameId; } else { const siblings = parent ? parent.children : tree.children; return siblings.find(function (x) { return node.b_code ? x.b_code === node.b_code && x.name === node.name && x.unit === node.unit && x.unit_price === node.unit_price : x.code === node.code && x.name === node.name; }); } }, loadInfo1: function (node, source) { for (const f of billsCompareField) { node['new_' + f] = source[f]; } node.id = source.id; node.isNew = true; }, loadInfo2: function (node, source) { for (const f of billsCompareField) { node['org_' + f] = source[f]; } node.isOrg = true; }, afterLoad: function (tree) { for (const data of tree.datas) { data.differ = []; data.differ_str = []; if (data.isNew && !data.isOrg) { data.differ.push('add'); data.differ_str.push('增'); } else if (!data.isNew && data.isOrg) { data.differ.push('del'); data.differ_str.push('删'); } else { if (data.changeParent) data.differ.push('tree'); if (!data.children || data.children.length === 0) { const orgCalc = getCompare(data, compareFields.leafCalc, 'org_', 0); const newCalc = getCompare(data, compareFields.leafCalc, 'new_', 0); if (!_.isMatch(newCalc, orgCalc)) data.differ.push('calc'); } else { const orgCalc = getCompare(data, compareFields.parentCalc, 'org_', 0); const newCalc = getCompare(data, compareFields.parentCalc, 'new_', 0); if (!_.isMatch(newCalc, orgCalc)) data.push('calc'); } const orgInfo = getCompare(data, compareFields.info, 'org_', ''); const newInfo = getCompare(data, compareFields.info, 'new_', ''); if (!_.isMatch(newInfo, orgInfo)) data.differ.push('info'); if (data.differ.length > 0) data.differ_str.push('改'); } } } }; if (!isTz) { treeSetting.calcFields.push('deal_tp'); } treeSetting.calcFun = function (node) { node.dgn_price = ZhCalc.round(ZhCalc.div(node.total_price, node.dgn_qty1), 2); }; const billsTree = createNewPathTree('compare', treeSetting); // 初始化 计量单元 const pos = new PosData({ id: 'id', ledgerId: 'lid' }); // 清单 相关方法&绑定spreadjs事件 const billsTreeSpreadObj = { selectionChanged: function (e, info) { if (info.newSelections) { if (!info.oldSelections || info.newSelections[0].row !== info.oldSelections[0].row) { posSpreadObj.loadCurPosData(); posSearch.search($('#pos-keyword').val()); } } }, }; billsSpread.bind(spreadNS.Events.SelectionChanged, billsTreeSpreadObj.selectionChanged); // 计量单元 相关方法&绑定spreadjs事件 const posSpreadObj = { /** * 加载计量单元 根据当前台账选择节点 */ loadCurPosData: function () { const node = SpreadJsObj.getSelectObject(billsSheet); if (node) { const posData = pos.getLedgerPos(node.id) || []; SpreadJsObj.loadSheetData(posSheet, 'data', posData); } else { SpreadJsObj.loadSheetData(posSheet, 'data', []); } }, }; // 加载清单&计量单元数据 postData('/tender/' + window.location.pathname.split('/')[2] + '/revise/load', {filter: 'bills;pos;reviseBills;revisePos'}, function (result) { const tenderTreeSetting = { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, keys: ['id', 'tender_id', 'ledger_id'], calcFields: ['deal_tp', 'sgfh_tp', 'sjcl_tp', 'qtcl_tp', 'total_price'], }; const reviseLedger = { billsTree: createNewPathTree('ledger', tenderTreeSetting), }; reviseLedger.billsTree.loadDatas(result.reviseBills); const orgLedger = { billsTree: createNewPathTree('ledger', tenderTreeSetting), }; 202-orgLedger.billsTree.loadDatas(result.bills); billsTree.loadCompareData(reviseLedger, orgLedger); console.log(billsTree.nodes); SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, billsTree); pos.loadDatas(result.pos); posSpreadObj.loadCurPosData(); }, null); $.divResizer({ select: '#revise-resize', callback: function () { billsSpread.refresh(); let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0; $(".sp-wrap").height(bcontent-30); posSpread.refresh(); } }); $.divResizer({ select: '#revise-right-spr', callback: function () { billsSpread.refresh(); if (posSpread) { posSpread.refresh(); } if (searchLedger) { searchLedger.spread.refresh(); } } }); $.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(); billsSpread.refresh(); if (posSpread) { posSpread.refresh(); } if (searchLedger) { searchLedger.spread.refresh(); } } }); // 展开收起标准节点 $('a', '#side-menu').bind('click', function (e) { e.preventDefault(); const tab = $(this), tabPanel = $(tab.attr('content')); // 展开工具栏、切换标签 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') { if (!searchLedger) { searchLedger = $.billsSearch({ selector: '#search', searchSpread: billsSpread, resultSpreadSetting: { cols: [ {title: '项目节编号', field: 'code', hAlign: 0, width: 90, formatter: '@', readOnly: true}, {title: '清单编号', field: 'b_code', hAlign: 0, width: 80, formatter: '@', readOnly: true}, {title: '名称', field: 'name', width: 150, hAlign: 0, formatter: '@', readOnly: true}, {title: '单位', field: 'unit', width: 50, hAlign: 1, formatter: '@', readOnly: true}, ], emptyRows: 0, headRows: 1, headRowHeight: [32], headColWidth: [30], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', selectedBackColor: '#fffacd', }, afterLocated: function () { posSpreadObj.loadCurPosData(); } }); } searchLedger.spread.refresh(); } } else {// 收起工具栏 tab.removeClass('active'); tabPanel.removeClass('active'); showSideTools(tab.hasClass('active')); } billsSpread.refresh(); if (posSpread) { posSpread.refresh(); } }); // 显示层次 (function (select, sheet) { $(select).click(function () { if (!sheet.zh_tree) return; const tag = $(this).attr('tag'); const tree = sheet.zh_tree; 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; case "leafXmj": tree.expandToLeafXmj(); SpreadJsObj.refreshTreeRowVisible(sheet); break; } }); })('a[name=showLevel]', billsSheet); });