国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

elementui el-table表格實(shí)現(xiàn)翻頁和搜索均保持勾選狀態(tài)(后端分頁)

這篇具有很好參考價(jià)值的文章主要介紹了elementui el-table表格實(shí)現(xiàn)翻頁和搜索均保持勾選狀態(tài)(后端分頁)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

需求:不管是頁面切換還是通過搜索獲取數(shù)據(jù),都要保持已選中的行保持勾選狀態(tài),同時(shí)將選中行的內(nèi)容以標(biāo)簽的形式顯示出來,當(dāng)點(diǎn)擊關(guān)閉標(biāo)簽時(shí)可以對(duì)應(yīng)取消選中狀態(tài),點(diǎn)擊行中的任意位置也可以切換選中狀態(tài),單獨(dú)勾選復(fù)選框一樣可以達(dá)到要求。

由于需求相對(duì)還是蠻復(fù)雜的,直接使用row-key和reserve-selection,難以實(shí)現(xiàn)。所以直接通過書寫代碼來控制表格的勾選狀態(tài)。

注意:我使用的是vue3 + ts!!!!

1. 第一步:書寫html代碼

給el-table添加對(duì)應(yīng)勾選的監(jiān)聽事件,row-click用于監(jiān)聽鼠標(biāo)選中某行時(shí)的勾選事件(不需要可去掉,我的需求是鼠標(biāo)選中某行也要勾選);selection-change用于監(jiān)聽鼠標(biāo)點(diǎn)擊某行前面的勾選框、選中某行實(shí)現(xiàn)的勾選、表格左上角的全選,三種狀態(tài)的事件;select用于監(jiān)聽框勾選數(shù)據(jù)行的 Checkbox 時(shí)觸發(fā)的事件;select-all用于監(jiān)聽鼠標(biāo)點(diǎn)擊表格左上角的全選框。

<!-- 已選擇點(diǎn)檢項(xiàng) -->
<el-row
  align="middle"
  class="selected"
  justify="space-between"
  type="flex"
>
  <el-col :span="24">
    <span>已選擇:</span>
    <template v-if="selectedCheckOptions">
      <el-tag
        v-for="(item, i) in selectedCheckOptions"
        :key="i"
        closable
        :disable-transitions="false"
        @close="handleCloseTag(item, i)"
      >
        {{ item }}
      </el-tag>
    </template>
  </el-col>
</el-row>
<!-- 表格部分 -->
<el-table
  ref="multipleTableRef"
  :data="gridData"
  :header-cell-style="{
    'background-color': '#fafafa',
    color: '#000',
  }"
  size="small"
  style="width: 100%"
  @row-click="handleClickTableRow"
  @select="onTableSelect"
  @select-all="selectSingleTableAll"
  @selection-change="handleChange"
>
  <el-table-column type="selection" width="50" />
  <el-table-column fixed label="序號(hào)" type="index" width="60" />
  <el-table-column label="點(diǎn)檢項(xiàng)" prop="itemName" />
  <el-table-column label="分類" prop="itemTypeName" />
</el-table>
<!-- 分頁 -->
<div class="page">
  <el-pagination
    v-model:currentPage="currentPage"
    layout="total, prev, pager, next"
    small
    :total="total"
    @current-change="handleCurrentChange"
  />
</div>

2.?所需數(shù)據(jù)

// 只將表格中設(shè)計(jì)到需求的重要數(shù)據(jù)進(jìn)行展示
const modelInfo = reactive({
  // 當(dāng)前所在頁面的表格數(shù)據(jù)
  gridData: [],
  // 添加點(diǎn)檢項(xiàng)表格全部數(shù)據(jù)
  tableData: [],
  tableAllSelectedId: [] as any, // 保存表格勾選的全部id
  tableAllSelectedRow: [] as any, // 保存表格勾選的行數(shù)據(jù)
  selectedCheckOptions: [] as any, // 已選擇的點(diǎn)檢項(xiàng)
})

// 獲取已選擇的點(diǎn)檢項(xiàng)
modelInfo.selectedCheckOptions = computed(() => {
  return modelInfo.tableAllSelectedRow.map((r: any) => r.itemName)
})

3.所需方法

?(1)從后臺(tái)獲取表格的分頁數(shù)據(jù)的方法

// 獲取表格數(shù)據(jù)的方法 (這里根據(jù)后端給的接口進(jìn)行獲取即可)
const getCheckItemData = () => {
  checkItemList({
    itemName: formInline.checkOption,
    itemTypeId: formInline.itemTypeId[formInline.itemTypeId.length - 1],
    filter: [],
    paging: {
      dir: 'DESC',
      limit: modelInfo.pageSize,
      page: modelInfo.currentPage,
      sort: 'createTime',
      start: 0,
    },
  }).then((res: any) => {
    modelInfo.gridData = res.data.records
    // 條數(shù)必須是數(shù)字才可以顯示在分頁控件中
    modelInfo.total = parseInt(res.data.total)
    // 關(guān)鍵代碼(實(shí)現(xiàn)已勾選行數(shù)據(jù)保持選中狀態(tài))
    nextTick(() => {
      modelInfo.gridData.forEach((item: any) => {
        if (modelInfo.tableAllSelectedId.indexOf(item.itemId) > -1) {
          multipleTableRef.value?.toggleRowSelection(item, true)
        } else {
          multipleTableRef.value?.toggleRowSelection(item, false)
        }
      })
    })
  })
}

(2)當(dāng)選擇項(xiàng)發(fā)生變化時(shí)觸發(fā)的方法

// 當(dāng)選擇項(xiàng)發(fā)生變化時(shí)會(huì)觸發(fā)該事件
const handleChange = (val: any) => {
  // 將獲取到的id存入tableAllSelectedId數(shù)組中
  val.forEach((item: any) => {
    if (modelInfo.tableAllSelectedId.indexOf(item.itemId) === -1) {
      modelInfo.tableAllSelectedId.push(item.itemId)
      modelInfo.tableAllSelectedRow.push(item)
    }
  })
}

(3)點(diǎn)擊表格某一行的方法

// 點(diǎn)擊表格某一行的方法
const handleClickTableRow = (row: any) => {
// 判斷當(dāng)前行是否已選中
  if (
    findIndexInObejctArr(
      JSON.parse(JSON.stringify(modelInfo.tableAllSelectedRow)),
      row,
      'itemId'
    ) > -1
  ) {
    const index = modelInfo.tableAllSelectedId.indexOf(row.itemId)
    modelInfo.tableAllSelectedId.splice(index, 1)
    modelInfo.tableAllSelectedRow.splice(index, 1)
    nextTick(() => {
      modelInfo.gridData.forEach((item: any) => {
        if (modelInfo.tableAllSelectedId.indexOf(item.itemId) > -1) {
          multipleTableRef.value?.toggleRowSelection(item, true)
        } else {
          multipleTableRef.value?.toggleRowSelection(item, false)
        }
      })
    })
  } else {
    multipleTableRef.value?.setCurrentRow(row)
    multipleTableRef.value!.toggleRowSelection(row, true)
  }
}

(4)勾選數(shù)據(jù)行的 Checkbox 時(shí)觸發(fā)的方法

// 勾選數(shù)據(jù)行的 Checkbox 時(shí)觸發(fā)的方法
const onTableSelect = (rows: any, row: any) => {
  //  判斷是點(diǎn)擊了表格勾選還是取消勾選,true為選中,0或false是取消選中
  const selected = rows.length && rows.indexOf(row) !== -1
  if (!selected) {
    // 如果點(diǎn)擊取消勾選
    const index = modelInfo.tableAllSelectedId.indexOf(row.itemId)
    modelInfo.tableAllSelectedId.splice(index, 1) // 取消勾選,則刪除id
    modelInfo.tableAllSelectedRow.splice(index, 1) // 取消勾選,則刪除數(shù)據(jù)
  }
}

(5)表格全選觸發(fā)的方法

// 表格全選觸發(fā)的方法
const selectSingleTableAll = (selection: any) => {
  // 獲取當(dāng)前頁碼所顯示的數(shù)據(jù)
  const a: any = modelInfo.gridData
  // 獲取當(dāng)前頁勾選的數(shù)據(jù)
  const b = selection
  let flag_inCurrentPage
  selection.forEach((item: any) => {
    if (item.itemId === a[0].itemId) {
      flag_inCurrentPage = true
      return
    }
  })
  const flag = a.length === b.length && flag_inCurrentPage
  if (flag) {
    // 切換成了全選狀態(tài)
    modelInfo.gridData.forEach((r: any) => {
      if (modelInfo.tableAllSelectedId.indexOf(r.itemId) === -1) {
        modelInfo.tableAllSelectedId.push(r.itemId) // 如果點(diǎn)擊全選就保存全部id
        modelInfo.tableAllSelectedRow.push(r) //如果點(diǎn)擊全選就保存全部數(shù)據(jù)
      }
    })
  } else {
    // 切換成了非全選狀態(tài)
    modelInfo.tableAllSelectedId = []
    modelInfo.tableAllSelectedRow = []
  }
}

(6)查找對(duì)象在對(duì)象數(shù)組中位置的方法

// 查找對(duì)象在對(duì)象數(shù)組中的位置
findIndexInObejctArr: function(arr, obj) {
  for (let i = 0, iLen = arr.length; i < iLen; i++) {
    if (arr[i].deliverId === obj.deliverId) {
       return i
    }
  }
  return -1
}

(7)刪除標(biāo)簽的方法

// 刪除標(biāo)簽的方法
const handleCloseTag = (tag: string, index: number) => {
  // 先刪除保存表格勾選的全部行數(shù)據(jù)中對(duì)應(yīng)的數(shù)據(jù),以及保存表格勾選的全部行id中對(duì)應(yīng)的數(shù)據(jù)
  modelInfo.tableAllSelectedId.splice(index, 1)
  modelInfo.tableAllSelectedRow.splice(index, 1)
  // 再根據(jù)已勾選的全部id來將對(duì)應(yīng)行選中
  nextTick(() => {
    modelInfo.gridData.forEach((item: any) => {
      if (modelInfo.tableAllSelectedId.indexOf(item.itemId) > -1) {
        multipleTableRef.value?.toggleRowSelection(item, true)
      } else {
        multipleTableRef.value?.toggleRowSelection(item, false)
      }
    })
  })
}

(8)切換頁碼的方法

const handleCurrentChange = (val: number) => { 
   modelInfo.currentPage = val
   getCheckItemData()
}

(9)查詢方法

// 搜索方法
const onSearch = () => {
  modelInfo.currentPage = 1
  getCheckItemData()
}

(10)確認(rèn)添加的方法(由于我的表格是出現(xiàn)在彈出層中的,故增加了此方法,該方法和本文章的需求無關(guān),可以直接忽視)

// 確認(rèn)添加點(diǎn)檢項(xiàng)的方法
const confirmAdd = () => {
  modelInfo.checkOptions = modelInfo.tableAllSelectedRow
  dialogAddVisible.value = false
  // 清除搜索內(nèi)容
  formInline.checkOption = ''
  formInline.itemTypeId = []
  modelInfo.currentPage = 1
  getCheckItemData()
}

4.效果圖

?(1)選中的會(huì)在上面同步顯示el-table 搜索,前端實(shí)戰(zhàn),elementui,vue.js,前端

?

(2)跨行也能保留選中狀態(tài)和標(biāo)簽

el-table 搜索,前端實(shí)戰(zhàn),elementui,vue.js,前端

?

(3)搜索也一樣能保留選中狀態(tài)

el-table 搜索,前端實(shí)戰(zhàn),elementui,vue.js,前端

借鑒:elementui el-table表格實(shí)現(xiàn)跨頁(翻頁)保存勾選狀態(tài)(后端分頁)_公孫元二的博客-CSDN博客_el-table跨頁勾選?文章來源地址http://www.zghlxwxcb.cn/news/detail-692496.html

到了這里,關(guān)于elementui el-table表格實(shí)現(xiàn)翻頁和搜索均保持勾選狀態(tài)(后端分頁)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue+ElementUI el-table表格單元格編輯增加鍵盤事件功能(向上、向下、回車鍵盤事件)

    vue+ElementUI el-table表格單元格編輯增加鍵盤事件功能(向上、向下、回車鍵盤事件)

    1、如果單元格編輯使用了插槽功能,需要在插槽上添加一個(gè)class(這個(gè)類即:當(dāng)前列的porp值) 2、porp不能重復(fù)(正常也不會(huì)存在) GitHub源碼地址 Gitee源碼地址 基于ElementUi或Antd再次封裝基礎(chǔ)組件文檔 TTable組件封裝地址

    2024年02月11日
    瀏覽(31)
  • elementUi中的el-table表格的內(nèi)容根據(jù)后端返回的數(shù)據(jù)用不同的顏色展示

    elementUi中的el-table表格的內(nèi)容根據(jù)后端返回的數(shù)據(jù)用不同的顏色展示

    效果圖如下: 首先 首先:需要在表格行加入?template slot-scope=\\\"{ row }\\\"?/template標(biāo)簽 ?2.在methods里面加入這個(gè)方法: ?3.去設(shè)置自己喜歡的顏色: //還有另一種(這種后端返回的數(shù)據(jù)里面帶有背景色的字段) ? ?

    2024年02月10日
    瀏覽(28)
  • el-table實(shí)現(xiàn)純前端導(dǎo)出(適用于el-table任意表格)

    el-table實(shí)現(xiàn)純前端導(dǎo)出(適用于el-table任意表格)

    2023.9.1今天我學(xué)習(xí)了如何使用el-table實(shí)現(xiàn)前端的導(dǎo)出功能,該方法的好處有無論你的el-table長(zhǎng)什么樣子,導(dǎo)出之后就是什么樣子。 1.安裝三個(gè)插件 npm install file-save npm install xlsx npm install xlsx-style 2.創(chuàng)建Export2Excel.js 3.按需引入 4.vue.config.js引入 效果: 擴(kuò)展: 當(dāng)我們會(huì)出現(xiàn)這樣的表

    2024年02月10日
    瀏覽(35)
  • vue+elementUI el-table實(shí)現(xiàn)單選
  • el-table 實(shí)現(xiàn)表、表格行、表格列合并

    el-table 實(shí)現(xiàn)表、表格行、表格列合并

    最近寫vue開發(fā)項(xiàng)目的時(shí)候,很多地方用到了Element組件中的Table 表格。經(jīng)過一周的邊學(xué)邊做,我總結(jié)了以下三種有關(guān)表格的合并方法。 話不多說,先看效果圖 ?代碼如下: 表格結(jié)構(gòu)如上,其中:header-cell-style對(duì)表頭做了一些處理。? 效果圖如: 代碼如下: 要進(jìn)行表格合并,關(guān)

    2024年02月09日
    瀏覽(24)
  • el-table表格實(shí)現(xiàn)自動(dòng)滾動(dòng)效果

    el-table表格實(shí)現(xiàn)自動(dòng)滾動(dòng)效果

    table頁面的內(nèi)容如果超出設(shè)定的height會(huì)出現(xiàn)自動(dòng)無限滾動(dòng)的效果,如下所示: 先給el-table一個(gè)ref屬性 然后獲取到這個(gè)屬性 在mounted階段執(zhí)行scrollFun函數(shù),通過setTnterval定時(shí)器來實(shí)現(xiàn)動(dòng)態(tài)滾動(dòng)效果,代碼如下: 如果出現(xiàn)列表字段過長(zhǎng)時(shí),可使用tooltip-effect=“dark” 搭配 show-overf

    2024年02月13日
    瀏覽(26)
  • el-table實(shí)現(xiàn)嵌套表格的展示

    el-table實(shí)現(xiàn)嵌套表格的展示

    需求 一個(gè)表單中存在子表 列表返回格式 實(shí)現(xiàn) 實(shí)現(xiàn)思路 el-table中在嵌套一個(gè)el-table,這樣數(shù)據(jù)格式就沒問題了,主要就是樣式 將共同的列放到一列中,通過渲染自定義表頭 render-header ,將表頭按照合適的寬度渲染出來 根據(jù)數(shù)據(jù)渲染表頭 調(diào)樣式,慢慢調(diào)到合適就行 完整代碼

    2024年02月21日
    瀏覽(21)
  • elementUI el-table實(shí)現(xiàn)鼠標(biāo)懸浮某一行,在鼠標(biāo)右側(cè)展示提示信息

    elementUI el-table實(shí)現(xiàn)鼠標(biāo)懸浮某一行,在鼠標(biāo)右側(cè)展示提示信息

    背景 el-table組件中,可以通過勾選某條數(shù)據(jù)來創(chuàng)建單據(jù),但是有些數(shù)據(jù)沒有權(quán)限使用,就需要禁用掉勾選的功能,然后當(dāng)鼠標(biāo)懸浮在這一行的時(shí)候,展示類似于toolTip的提示框。 除了當(dāng)鼠標(biāo)懸浮在某一行,展示類似于toolTip的提示框這一條el-table是沒有提供配置項(xiàng)的,其他的都

    2024年02月08日
    瀏覽(27)
  • el-table多選框設(shè)置默認(rèn)選中,翻頁保留選中狀態(tài)

    最近碰到個(gè)需求,el-table列表渲染數(shù)據(jù),要求有多選框并且附帶默認(rèn)選中,翻頁后保留選中狀態(tài) 寫默認(rèn)選中時(shí)百度一下還很簡(jiǎn)單,但是碰到個(gè)bug,第一次翻頁可以保留,第二次翻頁回來之后選中的就沒了。 經(jīng)過研究解決,記錄一下,直接上代碼了 默認(rèn)選中只需要給table增加

    2024年02月14日
    瀏覽(28)
  • vue3中el-table實(shí)現(xiàn)表格合計(jì)行

    el-table標(biāo)簽上加屬性 show-summary :summary-method=“getSummary” js中添加函數(shù)(合計(jì)沒有額外的附件參數(shù)添加) js中添加函數(shù)(合計(jì)有額外的附件參數(shù)添加的情況)

    2024年02月02日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包