'use strict'; const AddRela = function (setting) { const tsObj = { setting, tenderSpread: null, tenderSheet: null, resultSpread: null, resultSheet: null, tenderSourceTree: null, trArray: [], _rebuildStageSelect: function () { const getItems = function (data) { if (!data) return []; const items = []; for (let i = 1; i <= data.stageCount; i++) { items.push({value: i, text: `第${i}期`}); } return items; }; for (let i = 0; i < tsObj.resultSheet.getRowCount(); i++) { const cellType2 = new spreadNS.CellTypes.ComboBox().itemHeight(10).editorValueType(spreadNS.CellTypes.EditorValueType.value).items(getItems(tsObj.trArray[i])); tsObj.resultSheet.getCell(i, 1).cellType(cellType2); } }, _addTender: function (tender) { const tr = tsObj.trArray.find(x => { return x.tid === tender.tid; }); const t = {tid: tender.tid, name: tender.name, stageCount: tender.stageCount}; if (!tr) tsObj.trArray.push(t); return t; }, _removeTender: function (tender) { const gri = tsObj.trArray.findIndex(function (x, i, arr) { return x.tid === tender.tid; }); if (gri >= 0) tsObj.trArray.splice(gri, 1); }, reloadResultData: function () { SpreadJsObj.reLoadSheetData(tsObj.resultSheet); this._rebuildStageSelect(); }, asButtonClicked: 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); node.selected = !node.selected; if (node.children && node.children.length > 0) { const posterity = tsObj.tenderSourceTree.getPosterity(node); for (const p of posterity) { p.selected = node.selected; if (!p.children || p.children.length === 0){ if (p.selected) { tsObj._addTender(p); } else { tsObj._removeTender(p); } } } SpreadJsObj.reLoadRowData(info.sheet, info.row, posterity.length + 1); } else { if (node.selected) { if (tsObj.trArray.length > 0) { const orgTender = tsObj.tenderSourceTree.nodes.find(x => { return x.tid === tsObj.trArray[0].tid}); orgTender.selected = false; tsObj._removeTender(orgTender); SpreadJsObj.reLoadRowData(info.sheet, tsObj.tenderSourceTree.getNodeIndex(orgTender), 1); } tsObj._addTender(node); } else { tsObj._removeTender(node); } SpreadJsObj.reLoadRowData(info.sheet, info.row, 1); } tsObj.reloadResultData(); }, arEditEnded: function (e, info) { const data = SpreadJsObj.getSelectObject(info.sheet); const col = info.sheet.zh_setting.cols[info.col]; data[col.field] = info.sheet.getValue(info.row, info.col); }, initTenderSelect: function () { if (this.tenderSpread) return; this.tenderSpread = SpreadJsObj.createNewSpread($('#ar-source-spread')[0]); this.tenderSheet = this.tenderSpread.getActiveSheet(); SpreadJsObj.initSheet(this.tenderSheet, { cols: [ {title: '选择', field: 'selected', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'}, {title: '名称', field: 'name', hAlign: 0, width: 180, formatter: '@', cellType: 'tree'}, {title: '期数', field: 'phase', hAlign: 1, width: 60, formatter: '@'}, {title: '审批状态', field: 'status', hAlign: 1, width: 60, formatter: '@'} ], emptyRows: 0, headRows: 1, headRowHeight: [32], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', headColWidth: [0], selectedBackColor: '#fffacd', readOnly: true, }); this.resultSpread = SpreadJsObj.createNewSpread($('#ar-result-spread')[0]); this.resultSheet = this.resultSpread.getActiveSheet(); const resultSpreadSetting = { cols: [ {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 180, formatter: '@', readOnly: true}, {title: '可选期', colSpan: '1', rowSpan: '1', field: 'stage', hAlign: 0, width: 60}, ], emptyRows: 0, headRows: 1, headRowHeight: [32], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', headColWidth: [], getColor: function (sheet, data, row, col, defaultColor) { if (data) { return data.invalid ? '#ddd' : defaultColor; } else { return defaultColor; } } }; SpreadJsObj.initSheet(this.resultSheet, resultSpreadSetting); this.tenderSpread.bind(spreadNS.Events.ButtonClicked, tsObj.asButtonClicked); this.resultSpread.bind(spreadNS.Events.EditEnded, tsObj.arEditEnded); postData('/list/load2', { type: 'stage' }, function (data) { tsObj.tenderSourceTree = Tender2Tree.convert(data.category, data.tenders, data.ledgerAuditConst, data.stageAuditConst); SpreadJsObj.loadSheetData(tsObj.tenderSheet, SpreadJsObj.DataType.Tree, tsObj.tenderSourceTree); SpreadJsObj.loadSheetData(tsObj.resultSheet, SpreadJsObj.DataType.Data, tsObj.trArray); }); $('#add-rela-form').submit(function (e) { if (tsObj.trArray.length === 0 || !tsObj.trArray[0].stage) { e.preventDefault(); } else { $('[name=ar_tid]').val(tsObj.trArray[0].tid); $('[name=ar_sorder]').val(tsObj.trArray[0].stage); } }); // $('#add-rela-ok').click(function () { // if (tsObj.trArray.length > 0) { // postData(window.location.pathname + '/add', tsObj.trArray[0], result => { // tsObj.setting.afterLoad(result); // $('#add-rela').modal('hide'); // }); // } else { // $('#add-rela').modal('hide'); // } // }); } }; $('#add-rela').on('shown.bs.modal', () => { tsObj.initTenderSelect(); tsObj.trArray.length = 0; }); const showSelect = function () { $('#add-rela-hint').hide(); tsObj.trArray = []; $('#add-rela').modal('show'); }; return { showSelect } }; $(document).ready(() => { autoFlashHeight(); const addRela = AddRela(); $.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(); } }); $.divResizer({ select: '#revise-right-spr', }); // 展开收起标准清单 $('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')); } else {// 收起工具栏 tab.removeClass('active'); tabPanel.removeClass('active'); showSideTools(tab.hasClass('active')); } }); $('#sr-add').click(addRela.showSelect); $('[name=sr-del]').click(function() { $('[name=srid]', '#del-rela').val(this.getAttribute('srid')); $('#del-rela').modal('show'); }) });