class srObject { constructor(setting) { this.firstInit = true; this.setting = setting; const self = this; this.selectTree = null; const srSpreadSetting = { cols: [ {title: '选择', field: 'selected', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'}, {title: '名称', field: 'name', hAlign: 0, width: 180, formatter: '@', cellType: 'tree'}, {title: '期数', field: 'lastStageOrder', hAlign: 1, width: 60, formatter: '@'}, {title: '审批状态', field: 'lastStageStatus', hAlign: 1, width: 60, formatter: '@'}, ], emptyRows: 0, headRows: 1, headRowHeight: [32], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', headColWidth: [30], selectedBackColor: '#fffacd', readOnly: true, }; this.spread = SpreadJsObj.createNewSpread($('#sr-source-spread')[0]); this.sheet = this.spread.getActiveSheet(); SpreadJsObj.initSheet(this.sheet, srSpreadSetting); const srResultSpreadSetting = { cols: [ {title: '名称', field: 'name', hAlign: 0, width: 180, formatter: '@', }, ], emptyRows: 0, headRows: 1, headRowHeight: [32], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', headColWidth: [30], readOnly: true, }; this.resultSpread = SpreadJsObj.createNewSpread($('#sr-result-spread')[0]); this.resultSheet = this.resultSpread.getActiveSheet(); SpreadJsObj.initSheet(this.resultSheet, srResultSpreadSetting); this.spread.bind(spreadNS.Events.ButtonClicked, function (e, info) { if (!info.sheet.zh_setting) return; const col = info.sheet.zh_setting.cols[info.col]; if (col.field !== 'selected') return; const node = SpreadJsObj.getSelectObject(info.sheet); self.selectNode(node, !node[col.field]); SpreadJsObj.reloadColData(info.sheet, 0); self.refreshResult(); }); $('#sr-select-all').click(function () { if (!self.selectTree) return; for (const n of self.selectTree.nodes) { n.selected = this.checked; } SpreadJsObj.reloadColData(self.sheet, 0); self.refreshResult(); }); $('#select-rela-ok').click(() => { const rela = self.getSelects(); postData('/subproj/rela/save', { id: self.relaProject.id, rela_tender: rela.join(',') }, function () { $(`[tree_id=${self.relaProject.id}]`)[0].setAttribute('rela-tender', rela.join(',')); $('#select-rela').modal('hide'); }); }); $('#select-rela').on('shown.bs.modal', () => { self.init(self.setting.getRelaProject()); }); } selectNode(node, select) { const posterity = this.selectTree.getPosterity(node); posterity.unshift(node); for (const p of posterity) { p.selected = select; } } getSelects() { const select = []; for (const n of this.selectTree.nodes) { if ((!n.children || n.children.length === 0) && n.selected) select.push(n.tid); } return select; } refreshResult() { const result = []; for (const n of this.selectTree.nodes) { if ((!n.children || n.children.length === 0) && n.selected) result.push(n); } SpreadJsObj.loadSheetData(this.resultSheet, SpreadJsObj.DataType.Data, result); } init(relaProject) { $('#sr-select-all')[0].checked = false; const self = this; if (this.firstInit) { this.spread.refresh(); this.resultSpread.refresh(); this.firstInit = false; } self.relaProject = relaProject; postData(`/subproj/rela?id=${relaProject.id}`, {}, tenders => { const rela = relaProject.rela_tender ? relaProject.rela_tender.split(',') : []; self.selectTree = Tender2Tree.convert(category, tenders, null, null, function (node, source) { node.lastStageOrder = `第${source.lastStageOrder}期`; node.lastStageStatus = source.lastStageStatus; }); for (const node of self.selectTree.nodes) { node.selected = rela.indexOf(node.tid + '') >= 0; } SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Tree, this.selectTree); self.refreshResult(); }); } }