使用vxe-table合并單元格后增加選中效果
vxe-table合并單元格后增加選中效果
<vxe-table
:data="retrievalList"
:row-class-name="setRowClass"
@cell-click="selectRow">
<vxe-column field="name" title="姓名"></vxe-column>
</vxe-table>
后端返回的JSON格式 (合并單元格需要對(duì)數(shù)據(jù)處理后,通過(guò)setMergeCells合并)

注:
相關(guān)單元格全部選中
效果圖:

data() {
return {
sourceList: [], // 后端返回的JSON數(shù)據(jù)
retrievalList: [], // 格式化后的數(shù)據(jù) [{},{},{}]
}
},
methods: {
// 設(shè)置已選中的單元格類名
setRowClass({row}) {
// patId為JSON外層唯一主鍵,選中后根據(jù)主鍵動(dòng)態(tài)設(shè)置類
if (row.patId === this.currentRow.patId) {
return 'current-pat';
}
},
// 單擊選中
selectRow({row}) {
// 獲取當(dāng)前合并的單元格整體信息,此處為多條數(shù)據(jù)的集合
this.currentRow = this.sourceList.find(item => item.patId === row.patId);
}
}
// scss
.vxe-table {
.current-pat, .current-pat > td {
background-color: #CBECFC !important;
}
}
所選單元格整體增加背景色,但僅選中單元格特殊標(biāo)識(shí)

注 :
(1)第一列被合并單元格選中樣式默認(rèn)跟隨合并后的第一行。
(2)可自行變形,使首列單元格底色與單項(xiàng)選中的單元格一致。
(3)此處存在個(gè)BUG,首次點(diǎn)擊單元格時(shí)未出現(xiàn)選中效果;由于已選擇第一種方案,此處未深究,僅做記錄。
data() {
return {
sourceList: [], // 后端返回的JSON數(shù)據(jù)
retrievalList: [], // 格式化后的數(shù)據(jù) [{},{},{}]
}
},
methods: {
// 設(shè)置行類名
setRowClass({row}) {
if (row.itemId === this.firstItemId) {
// itemId為JSON內(nèi)層nurseOptPatVoList內(nèi)唯一主鍵,用于設(shè)置被合并列單元格底色
return 'current-first'
} else if (row.patId === this.currentRow.patId) {
// patId為JSON外層唯一主鍵,選中后根據(jù)主鍵動(dòng)態(tài)設(shè)置類
return 'current-pat'
}
},
// 單擊選中
selectRow({row}) {
// 獲取當(dāng)前合并的單元格整體信息,此處為多條數(shù)據(jù)的集合
this.currentRow = this.sourceList.find(item => item.patId === row.patId);
// 獲取當(dāng)前合并的單元格首條信息
let firstItem = this.retrievalList.find(item => item.patId === row.patId);
this.firstItemId = firstItem.itemId;
}
.vxe-table {
.current-pat {
background-color: #f00;
}
.current-first {
// 此處不使用important是為了避免背景與選中效果沖突
background-color: #f00;
& > .vxe-body--column:first-child {
background-color: #f00 !important;
}
}
}
vxe-table自動(dòng)合并單元格
<vxe-table
@cell-click="handleClickCell"
:span-method="spanMethods" //自動(dòng)合并單元格
:data="tableData2">
</vxe-table>
spanMethods({row, $rowIndex, column, data}){
let fields = ["pcsname", "fjname"]
let cellValue = row[column.property]
if (cellValue && fields.includes(column.property)) {
let prevRow = data[$rowIndex - 1]
let nextRow = data[$rowIndex + 1]
if (prevRow && prevRow[column.property] === cellValue) {
return {rowspan: 0, colspan: 0}
} else {
let countRowspan = 1
while (nextRow && nextRow[column.property] === cellValue) {
nextRow = data[++countRowspan + $rowIndex]
}
if (countRowspan > 1) {
return {rowspan: countRowspan, colspan: 1}
}
}
}
},
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue學(xué)習(xí)筆記之計(jì)算屬性與偵聽(tīng)器用法
這篇文章主要介紹了Vue學(xué)習(xí)筆記之計(jì)算屬性與偵聽(tīng)器用法,結(jié)合實(shí)例形式詳細(xì)分析了vue.js計(jì)算屬性與偵聽(tīng)器基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
Vuejs第十一篇組件之slot內(nèi)容分發(fā)實(shí)例詳解
這篇文章主要介紹了Vuejs第十一篇之slot內(nèi)容分發(fā)組件詳解的相關(guān)資料2016-09-09
vue.js移動(dòng)端tab組件的封裝實(shí)踐實(shí)例
本篇文章主要介紹了vue.js移動(dòng)端tab的封裝實(shí)踐實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
uni-app無(wú)限級(jí)樹(shù)形組件簡(jiǎn)單實(shí)現(xiàn)代碼
文章介紹了如何在uni-app中簡(jiǎn)單封裝一個(gè)無(wú)限級(jí)樹(shù)形組件,該組件可以無(wú)線嵌套,展開(kāi)和收縮,并獲取子節(jié)點(diǎn)數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01
vue3中reactive的對(duì)象清空所引發(fā)的問(wèn)題解決方案(清空不了和清空之后再去賦值就賦值不了)
在使用reactive定義的變量時(shí),直接賦值會(huì)失去響應(yīng)式,為了清空?filters并確保響應(yīng)式,可以使用Object.assign({},?filters)或者遍歷對(duì)象逐個(gè)清除屬性,本文介紹vue3中reactive的對(duì)象清空所引發(fā)的問(wèn)題解決方案(清空不了和清空之后再去賦值就賦值不了),感興趣的朋友一起看看吧2025-02-02
vue+elementui實(shí)現(xiàn)拖住滑塊拼圖驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了vue+elementui實(shí)現(xiàn)拖住滑塊拼圖驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route
this.$router?相當(dāng)于一個(gè)全局的路由器對(duì)象,包含了很多屬性和對(duì)象(比如?history?對(duì)象),任何頁(yè)面都可以調(diào)用其?push(),?replace(),?go()?等方法,本文給大家介紹Vue中this.$router與this.$route的區(qū)別?及push()方法,感興趣的朋友跟隨小編一起看看吧2023-10-10

