From 16d6f8f440b6a69c5da3c3757c3c0666a337465f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A4=E5=BF=83?= <3277200+sentsim@users.noreply.github.com> Date: Wed, 28 Jun 2023 15:25:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20treeTable=20=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=92=8C=E5=8F=96=E6=B6=88=E9=80=89=E4=B8=AD=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E7=88=B6=E8=8A=82=E7=82=B9=E5=92=8C=E5=AD=90=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E7=9A=84=E9=80=89=E4=B8=AD=E8=83=8C=E6=99=AF=E8=89=B2?= =?UTF-8?q?=E6=9C=AA=E8=83=BD=E6=AD=A3=E7=A1=AE=E5=90=8C=E6=AD=A5=E7=9A=84?= =?UTF-8?q?=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 | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/modules/treeTable.js b/src/modules/treeTable.js index 6ae5737f..22b529cb 100644 --- a/src/modules/treeTable.js +++ b/src/modules/treeTable.js @@ -68,6 +68,7 @@ layui.define(['table'], function (exports) { var ELEM_FIXED = '.layui-table-fixed'; var ELEM_FIXL = '.layui-table-fixed-l'; var ELEM_FIXR = '.layui-table-fixed-r'; + var ELEM_CHECKED = 'layui-table-checked'; var TABLE_TREE = 'layui-table-tree'; var LAY_DATA_INDEX = 'LAY_DATA_INDEX'; @@ -1511,8 +1512,15 @@ layui.define(['table'], function (exports) { if (dataP) { var trsP = that.updateParentCheckStatus(dataP, layui.type(checked) === 'boolean' ? checked : null); layui.each(trsP, function (indexP, itemP) { - form.render(tableView.find('tr[lay-data-index="' + itemP[LAY_DATA_INDEX] + '"] input[name="layTableCheckbox"]:not(:disabled)').prop({ - checked: itemP[checkName], + 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); + + // 设置原始复选框 checked 属性值并渲染 + form.render(checkboxElem.prop({ + checked: checked, indeterminate: itemP[LAY_CHECKBOX_HALF] })) }) @@ -1639,11 +1647,15 @@ layui.define(['table'], function (exports) { // that.updateStatus(null, statusChecked); // 取消其他的选中状态 that.updateStatus(null, function (d) { if (d[checkName]) { + var radioElem = tableView.find('tr[lay-data-index="' + d[LAY_DATA_INDEX] + '"] input[type="radio"][lay-type="layTableRadio"]'); d[checkName] = false; - form.render(tableView.find('tr[lay-data-index="' + d[LAY_DATA_INDEX] + '"] input[type="radio"][lay-type="layTableRadio"]').prop('checked', false)); + radioElem.closest('tr').removeClass(ELEM_CHECKED); // 取消当前选中行背景色 + form.render(radioElem.prop('checked', false)); } }); // 取消其他的选中状态 trData[checkName] = checked; + trElem[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 标记当前选中行背景色 + trElem.siblings().removeClass(ELEM_CHECKED); // 取消其他行背景色 form.render(trElem.find('input[type="radio"][lay-type="layTableRadio"]').prop('checked', checked)); } else { var isParentKey = options.tree.customName.isParent; @@ -1660,9 +1672,11 @@ layui.define(['table'], function (exports) { } var trs = that.updateStatus(trData ? [trData] : table.cache[tableId], checkedStatusFn); - form.render(tableView.find(trs.map(function (value) { + var checkboxElem = tableView.find(trs.map(function (value) { return 'tr[lay-data-index="' + value[LAY_DATA_INDEX] + '"] input[name="layTableCheckbox"]:not(:disabled)'; - }).join(',')).prop({checked: checked, indeterminate: false})); + }).join(',')); + checkboxElem.closest('tr')[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 标记当前选中行背景色 + form.render(checkboxElem.prop({checked: checked, indeterminate: false})); // } var trDataP; // 更新父节点以及更上层节点的状态