/** * 通过缓存配置成功后, 重置宽度调整事件源dom 用于禁用最后一列调整宽度事件 * @param gridManagerName * @returns {boolean} */ resetAdjust(gridManagerName) { let _thList = jTool(`thead[${FAKE_TABLE_HEAD_KEY}="${gridManagerName}"] [th-visible="visible"]`); let _adjustAction = jTool('.adjust-action', _thList); if (!_adjustAction || _adjustAction.length === 0) { return false; } _adjustAction.show(); _adjustAction.eq(_adjustAction.length - 1).hide(); }
/** * init * 绑定宽度调整事件 * @param: gridManagerName */ init(gridManagerName) { const _this = this; // 监听鼠标调整列宽度 this.$body = jTool('body'); this.eventMap[gridManagerName] = getAdjustEvent(gridManagerName, base.getQuerySelector(gridManagerName)); const { events, selector } = this.eventMap[gridManagerName].adjustStart; this.$body.on(events, selector, function (event) { const _dragAction = jTool(this); // 事件源所在的th let $th = _dragAction.closest('th'); // 事件源所在的table let $table = base.getTable(gridManagerName); // 当前存储属性 const { adjustBefore, adjustAfter, isIconFollowText } = cache.getSettings(gridManagerName); // 事件源同层级下的所有th let $allTh = base.getFakeVisibleTh(gridManagerName); // 事件源下一个可视th let $nextTh = $allTh.eq($th.index($allTh) + 1); // 存储与事件源同列的所有td let $td = base.getColTd($th); // 宽度调整触发回调事件 adjustBefore(event); // 增加宽度调整中样式 $th.addClass(_this.selectedClassName); $td.addClass(_this.selectedClassName); // 禁用文本选中 $table.addClass(NO_SELECT_CLASS_NAME); // 执行移动事件 _this.__runMoveEvent(gridManagerName, $th, $nextTh, isIconFollowText); // 绑定停止事件 _this.__runStopEvent(gridManagerName, $table, $th, $td, adjustAfter); return false; }); this.resetAdjust(gridManagerName); }
/** * [对外公开方法] * @param table * @param arg: 参数 * @param callback: 回调 * @returns {*} */ async init(table, arg, callback) { const $table = jTool(table); arg = jTool.extend({}, GridManager.defaultOption, arg); // 校验: 初始参 if (!arg || jTool.isEmptyObject(arg)) { base.outError('init method params error'); return; } // 校验: columnData if (!arg.columnData || arg.columnData.length === 0) { base.outError('columnData invalid'); return; } // 参数变更提醒 if (arg.ajax_url) { base.outWarn('ajax_url will be deprecated later, please use ajax_data instead'); arg.ajax_data = arg.ajax_url; } // 相互冲突的参数项处理 TODO 这个功能为试点功能,现在与被禁用项冲突,后期还是想把这些冲突点解决掉 if (arg.topFullColumn && arg.topFullColumn.template) { // 不使用配置功能 arg.supportConfig = false; // 不使用自动序号 arg.supportAutoOrder = false; // 不使用全选功能 arg.supportCheckbox = false; // 不使用拖拽功能 arg.supportDrag = false; // 不使用宽度调整功能 arg.supportAdjust = false; } // 通过版本较验 清理缓存 cache.verifyVersion(); // 初始化设置相关: 合并, 存储 let settings = cache.initSettings(arg, checkbox.getColumn.bind(checkbox), order.getColumn.bind(order)); const gridManagerName = settings.gridManagerName; // 校验: gridManagerName if (gridManagerName.trim() === '') { base.outError('gridManagerName undefined'); return; } // 根据参数增加禁用单元格分割线标识 if (settings.disableLine) { $table.addClass('disable-line'); } // 初始化表格 await this.initTable($table, settings); // 如果初始获取缓存失败,在渲染完成后首先存储一次数据 if (typeof $table.attr(CACHE_ERROR_KEY) !== 'undefined') { window.setTimeout(() => { cache.saveUserMemory(settings); $table.removeAttr(CACHE_ERROR_KEY); }, 1000); } settings = cache.getSettings(gridManagerName); // 设置渲染完成标识 settings.rendered = true; cache.setSettings(settings); // 渲染tbodyDOM settings.firstLoading ? core.refresh(gridManagerName, () => { // 启用回调 typeof (callback) === 'function' ? callback(settings.query) : ''; }) : core.insertEmptyTemplate(settings, true); }
filter.enable && jTool.each(settings.columnMap, (index, column) => { if (typeof query[column.key] === 'string' && column.filter) { column.filter.selected = query[column.key]; filter.update(jTool(`${base.getQuerySelector(gridManagerName)} th[th-name=${column.key}]`), column.filter); } });