From 065222befbaca52c861f7476b10631cee41d0404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A4=E5=BF=83?= <3277200+sentsim@users.noreply.github.com> Date: Mon, 31 Jul 2023 15:48:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20treeTable=20=E5=8F=B3?= =?UTF-8?q?=E4=BE=A7=E5=9B=BA=E5=AE=9A=E5=88=97=E9=80=89=E4=B8=AD=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E8=89=B2=E6=B2=A1=E6=9C=89=E5=92=8C=E4=B8=BB=E4=BD=93?= =?UTF-8?q?=E9=80=89=E4=B8=AD=E7=8A=B6=E6=80=81=E4=BF=9D=E6=8C=81=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/treeTable.js | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/modules/treeTable.js b/src/modules/treeTable.js index 8f644431..01def596 100644 --- a/src/modules/treeTable.js +++ b/src/modules/treeTable.js @@ -1504,6 +1504,24 @@ layui.define(['table'], function (exports) { } }) + // 设置或取消行选中样式 + Class.prototype.setRowCheckedClass = function(tr, checked){ + var that = this; + var options = that.getOptions(); + + var index = tr.data('index'); + var tableViewElem = options.elem.next(); + + tr[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 主体行 + + // 右侧固定行 + tr.each(function(){ + var index = $(this).data('index'); + var trFixedR = tableViewElem.find('.layui-table-fixed-r tbody tr[data-index="'+ index +'"]'); + trFixedR[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); + }); + }; + // 更新表格的复选框状态 Class.prototype.updateCheckStatus = function (dataP, checked) { var that = this; @@ -1524,8 +1542,8 @@ layui.define(['table'], function (exports) { var checkboxElem = tableView.find('tr[lay-data-index="' + itemP[LAY_DATA_INDEX] + '"] input[name="layTableCheckbox"]:not(:disabled)'); var checked = itemP[checkName]; - // 标记父节点行背景色 - checkboxElem.closest('tr')[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); + // 标记父节点行背景色 + that.setRowCheckedClass(checkboxElem.closest('tr'), checked); // 设置原始复选框 checked 属性值并渲染 form.render(checkboxElem.prop({ @@ -1662,13 +1680,17 @@ layui.define(['table'], function (exports) { if (d[checkName]) { var radioElem = tableView.find('tr[lay-data-index="' + d[LAY_DATA_INDEX] + '"] input[type="radio"][lay-type="layTableRadio"]'); d[checkName] = false; - radioElem.closest('tr').removeClass(ELEM_CHECKED); // 取消当前选中行背景色 + + // 取消当前选中行背景色 + that.setRowCheckedClass(radioElem.closest('tr'), false); form.render(radioElem.prop('checked', false)); } }); // 取消其他的选中状态 trData[checkName] = checked; - trElem[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 标记当前选中行背景色 - trElem.siblings().removeClass(ELEM_CHECKED); // 取消其他行背景色 + + that.setRowCheckedClass(trElem, checked); // 标记当前选中行背景色 + that.setRowCheckedClass(trElem.siblings(), false); // 取消其他行背景色 + form.render(trElem.find('input[type="radio"][lay-type="layTableRadio"]').prop('checked', checked)); } else { // 切换只能用到单条,全选到这一步的时候应该是一个确定的状态 @@ -1686,9 +1708,12 @@ layui.define(['table'], function (exports) { var checkboxElem = tableView.find(trs.map(function (value) { return 'tr[lay-data-index="' + value[LAY_DATA_INDEX] + '"] input[name="layTableCheckbox"]:not(:disabled)'; }).join(',')); - checkboxElem.closest('tr')[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 标记当前选中行背景色 + + that.setRowCheckedClass(checkboxElem.closest('tr'), checked); // 标记当前选中行背景色 form.render(checkboxElem.prop({checked: checked, indeterminate: false})); + var trDataP; + // 更新父节点以及更上层节点的状态 if (trData && trData[LAY_PARENT_INDEX]) { // 找到父节点,然后判断父节点的子节点是否全部选中