/** * 进度台账相关js * * @author Ellisran * @date 2020/11/6 * @version */ function getTenderId() { return window.location.pathname.split('/')[2]; } const selects = []; $(function () { autoFlashHeight(); // 初始化台账 const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]); const treeSetting = { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, fullPath: 'full_path', calcFields: ['total_price'] //treeCacheKey: 'ledger_bills_fold' + '_' + getTenderId(), // markFoldKey: 'bills-fold', // markFoldSubKey: window.location.pathname.split('/')[2], }; treeSetting.calcFun = function (node) { node.dgn_price = ZhCalc.round(ZhCalc.div(node.total_price, node.dgn_qty1), 2); }; const ledgerTree = createNewPathTree('base', treeSetting); const ledgerSpreadSetting = { cols: [ {title: '', colSpan: '1', rowSpan: '2', field: 'is_select', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'}, {title: '编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 185, formatter: '@', readOnly: true, cellType: 'tree'}, {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 205, formatter: '@', readOnly: true}, {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 100, formatter: '@', readOnly: true}, {title: '经济指标', colSpan: '1', rowSpan: '2', field: 'dgn_price', hAlign: 2, width: 100, type: 'Number', readOnly: true}, {title: '工程量', colSpan: '1', rowSpan: '2', field: 'dgn_qty1', hAlign: 2, width: 100, type: 'Number', readOnly: true}, {title: '金额', colSpan: '1', rowSpan: '2', field: 'total_price', hAlign: 2, width: 100, type: 'Number', readOnly: true}, ], emptyRows: 0, headRows: 1, headRowHeight: [25, 25], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', // readOnly: true, localCache: { key: 'ledger-bills', colWidth: true, } }; sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz); if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting); SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting); SpreadJsObj.selChangedRefreshBackColor(ledgerSpread.getActiveSheet()); postData(window.location.pathname + '/load', {}, function (data) { data = addIsSelect(data); ledgerTree.loadDatas(data); treeCalc.calculateAll(ledgerTree); // console.log(ledgerTree); SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Tree, ledgerTree); }, null, true); const ledgerSpreadObj = { getselectButton: function() { return { select_siblings: $('#select_siblings').is(':checked'), select_other_siblings: $('#select_other_siblings').is(':checked'), select_children: $('#select_children').is(':checked'), } }, refreshTree: function (sheet, data) { SpreadJsObj.massOperationSheet(sheet, function () { const tree = sheet.zh_tree; // 处理删除 if (data.delete) { data.delete.sort(function (x, y) { return y.deleteIndex - x.deleteIndex; }); for (const d of data.delete) { sheet.deleteRows(d.deleteIndex, 1); } } // 处理新增 if (data.create) { const newNodes = data.create; if (newNodes) { newNodes.sort(function (a, b) { return a.index - b.index; }); for (const node of newNodes) { sheet.addRows(node.index, 1); SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(node), 1); } } } // 处理更新 if (data.update) { const rows = []; for (const u of data.update) { rows.push(tree.nodes.indexOf(u)); } SpreadJsObj.reLoadRowsData(sheet, rows); } // 处理展开 if (data.expand) { const expanded = []; for (const e of data.expand) { if (expanded.indexOf(e) === -1) { const posterity = tree.getPosterity(e); for (const p of posterity) { sheet.setRowVisible(tree.nodes.indexOf(p), p.visible); expanded.push(p); } } } } }); }, buttonClicked: function (e, info) { if (info.sheet.zh_setting) { const select = SpreadJsObj.getSelectObject(info.sheet); const col = info.sheet.zh_setting.cols[info.col]; // if (materialCol.readOnly.isEdit(select)) { // return; // } if (col.field === 'is_select') { if (info.sheet.isEditing()) { info.sheet.endEdit(true); } // 选中和去除关联 select.is_select = info.sheet.getValue(info.row, info.col) ? 1 : 0; selects.splice(0, selects.length); selects.push(select); const select_msg = ledgerSpreadObj.getselectButton(); if (select_msg.select_children || select.is_select === 0) { updateChildrenSelect(select.children, select.is_select); } if (!select_msg.select_other_siblings && select_msg.select_siblings) { updateSiblingsSelect(info.sheet.zh_tree, select.ledger_pid, select.is_select, select_msg); } if (select_msg.select_other_siblings) { updateSiblingsSelect(info.sheet.zh_tree, select.ledger_pid, select.is_select, select_msg); updateOtherSiblingsSelect(info.sheet.zh_tree, select.ledger_pid, select.is_select, select_msg); } if(select.is_select === 1) { updateParentSelect(info.sheet.zh_tree, select.ledger_pid, select.is_select); } // console.log(selects); const refreshNode = ledgerTree.loadPostData({update: selects}); ledgerSpreadObj.refreshTree(info.sheet, refreshNode); } } }, }; ledgerSpread.bind(spreadNS.Events.ButtonClicked, ledgerSpreadObj.buttonClicked); // // 显示层次 // (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; // case "leafXmj": // tree.expandToLeafXmj(); // SpreadJsObj.refreshTreeRowVisible(sheet); // break; // } // }); // })('a[name=showLevel]', ledgerSpread.getActiveSheet()); }); function addIsSelect(datas) { for (const d of datas) { d.is_select = selectedLedgerList.length === 0 ? 1: selectedLedgerList.indexOf(d.ledger_id) !== -1 ? 1 : 0; } return datas; } function updateChildrenSelect(datas, is_select) { for (const data of datas) { data.is_select = is_select; if(data.children && data.children.length > 0) { updateChildrenSelect(data.children, is_select); } selects.push(data); } } function updateSiblingsSelect(tree, pid, is_select, select_msg) { const parent = pid !== -1 ? _.find(tree.nodes, { 'ledger_id': pid }) : tree; if (parent) { for(const d of parent.children) { d.is_select = is_select; if (select_msg.select_children || is_select === 0) { updateChildrenSelect(d.children, is_select); } selects.push(d); } } } function updateOtherSiblingsSelect(tree, pid, is_select, select_msg) { if(pid === -1) { return; } const parent = _.find(tree.nodes, { 'ledger_id': pid }); if (parent) { const grandparent = parent.ledger_pid === -1 ? tree : _.find(tree.nodes, { 'ledger_id': parent.ledger_pid }); if (grandparent) { for (const d of grandparent.children) { if (d.ledger_id !== pid) { if(d.children && d.children.length > 0) { for (const dd of d.children) { dd.is_select = is_select; if (select_msg.select_children || is_select === 0) { updateChildrenSelect(dd.children, is_select); } selects.push(dd); } } } } } } } function updateParentSelect(tree, pid, is_select) { if (pid !== -1) { const parent = _.find(tree.nodes, { 'ledger_id': pid }); if (parent) { const hadselectInfo = is_select === 0 ? _.findIndex(parent.children, { 'is_select': 1 }) : 1; parent.is_select = (hadselectInfo !== -1 && is_select === 0) || is_select === 1 ? 1 : 0; selects.push(parent); updateParentSelect(tree, parent.ledger_pid, is_select); } } }