element-ui表格复选超出数量后剩下的全部禁止选择

这篇具有很好参考价值的文章主要介绍了element-ui表格复选超出数量后剩下的全部禁止选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先上效果图

elementui表格全选框禁用,ui,vue.js,elementui

 

主要是两个方面,

1.单选

2.页面内的全选

单选逻辑简单

elementui表格全选框禁用,ui,vue.js,elementui

 全选是无法置灰,只能在事件触发后给出提示信息,跟上篇文章提到的方案一致文章来源地址https://www.toymoban.com/news/detail-524316.html

<template>
  <div class="main-content">
    <p>选择5个后就会禁用其他选项</p>
    <el-table
      ref="multipleTable"
      :data="tableData"
      :row-key="handleRowKeyEvent"
      @select="handleOneSelect"
      @select-all="handleSelectAll"
      @selection-change="handleSelectionChange"
      tooltip-effect="dark"
      style="width: 100%"
    >
      <el-table-column
        type="selection"
        width="55"
        :reserve-selection="true"
        :selectable="rowSelectable"
      >
      </el-table-column>
      <el-table-column label="日期" width="120">
        <template slot-scope="scope">{{ scope.row.shopId }}</template>
      </el-table-column>
      <el-table-column prop="shopName" label="姓名" width="120">
      </el-table-column>
    </el-table>
    <div class="pagebox pall15">
      <div class="eboss-row mt20 justify-center">
        <div class="page-scroll">
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="pageIndex"
            :page-sizes="pageSizes"
            :page-size="pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="totalCount"
          >
          </el-pagination>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
// 超出数量后其他选项置为不可选择
import mock from "mockjs";
export default {
  name: "tableList",
  data() {
    return {
      maxAllowedNumber: 5,
      totalCount: 0,
      pageIndex: 1,
      pageSize: 10,
      pageSizes: [10, 20, 30, 40],
      tableData: [],
      multipleSelection: [],
    };
  },
  mounted() {
    this.queryList();
  },
  methods: {
    // 跨页选择
    handleRowKeyEvent(row) {
      return row.shopId;
    },
    handleOneSelect(selection, row) {
      console.log("单选一个", selection, row);
    },
    handleSelectAll(selection) {
      const tabRef = this.$refs.multipleTable;
      let allSelectResult = tabRef.store.states.isAllSelected;
      console.log("全选按钮勾选后状态为:", allSelectResult);
      console.log("全选:", selection);
      // allSelectResult=true表示未全选状态点击后变为全选
      // 全选且总数大于允许值
      // 全选清空,保留原来的勾选状态,原来勾选数据重新勾选为选中
      if (selection.length > this.maxAllowedNumber && allSelectResult) {
        this.$message({
          message: "超出最大数量限制,不可再次选择",
          type: "error",
        });
        let selectedIds = this.multipleSelection.map(e=>e.shopId)
        console.log("选中全选前,选中id为:", selectedIds);
        tabRef.clearSelection();
        this.$nextTick(() => {
          this.tableData.forEach((row) => {
            if(selectedIds.includes(row.shopId)){
              tabRef.toggleRowSelection(row,true);
            }
          });
        });
      }
    },
    rowSelectable(row, index) {
      const allowedIds = this.multipleSelection.map((e) => e.shopId);
      if (this.multipleSelection.length == this.maxAllowedNumber) {
        return allowedIds.includes(row.shopId);
      }
      return true;
    },
    handleSelectionChange(val) {
      console.log("选中的是", val);
      if (val.length > this.maxAllowedNumber) {
        return;
      }
      this.multipleSelection = val;
    },

    queryList() {
      const res = mock.mock({
        success: true,
        model: {
          "shopList|10": [
            {
              shopId: "@id",
              shopName: "@cname",
            },
          ],
        },
        pageIndex: 1,
        totalCount: 500,
        pageSize: 10,
      });
      if (res.success) {
        this.totalCount = res.totalCount;
        this.tableData = res.model.shopList;
      } else {
        this.$alert(res.errorMessage, "提示");
      }
    },
    handleSizeChange(pageSize) {
      this.pageSize = pageSize;
      this.pageIndex = 1;
      this.queryList();
    },
    handleCurrentChange(pageIndex) {
      this.pageIndex = pageIndex;
      this.queryList();
    },
  },
};
</script>

到了这里,关于element-ui表格复选超出数量后剩下的全部禁止选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element-ui框架复选框全选功能简单实现

    效果图:   html: data绑定的数据   checkAll: false,   isALL: false, // 全选框是否在勾选状态   tableData: [], //全部数据   bushForm: [], //选中的数据 methods方法里写: //全选的思路--判断选中的数组的长度和原数组对比,一样的话就判断全部选中 全部代码:

    2024年02月11日
    浏览(44)
  • Element ui table表格内容超出隐藏显示省略号

    element ui官方文档上面有个参数 给el-table-column设置:show-overflow-tooltip=\\\"true\\\"属性可以使单元格超出的内容被隐藏显示为...当鼠标移入时单元格的上方会弹出一个tooltip来显示单元格的所有内容。 效果图: 有时候因为table中的文字非常的多,而show-overflow-tooltip默认是把折叠的内容全

    2024年02月11日
    浏览(38)
  • vue+elementui项目打包后部署到测试环境icon全部丢失【element-ui】大版本升级element-ui后,icon全部丢失

    问题:vue+elementui项目打包后部署到测试环境icon全部丢失【element-ui】大版本升级element-ui后,icon全部丢失 解决办法及原因: elementui在2.12版本中icon数量较之2.4.9版本的扩展2倍不止。原来webpack中对于字体loader的限制是limit10000,就会将字体转换为base64,2.12版本中字节已经超过

    2024年02月16日
    浏览(70)
  • Vue + Element UI 实现文本超出长度显示省略号,鼠标移上悬浮展示全部内容的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在 Vue 项目中,经常需要处理文本内容过长的情况。本文将介绍如何使用 Vue 和 Element UI 实现文本超出长度时显示

    2024年02月09日
    浏览(62)
  • element-ui使用el-tooltip文本超出时,tooltip文字提示,否则不提示

    如果你遇到了vue项目element使用el-tooltip时,超出时显示tooltip提示,不超出内容则不显示,请看下面教程。 超出时会显示…,鼠标悬浮出现提示内容,没有超出时,鼠标悬浮不会显示,请看图 直接上代码 data中: methods中:

    2024年02月11日
    浏览(61)
  • element-ui el-tree 设置指定级别节点显示复选框el-checkbox

            /deep/ .el-tree {         padding-top: 15px;         padding-left: 10px;         // 不可全选样式         .el-tree-node {           .is-leaf + .el-checkbox .el-checkbox__inner {             display: inline-block;           }           .el-checkbox .el-checkbox__inner {             display: none;    

    2023年04月08日
    浏览(63)
  • [element-ui] el-tree全部展开与收回

    参考: el-tree全部展开与收回

    2024年02月10日
    浏览(53)
  • element-ui 表格添加校验

      html片段     js片段 css片段

    2024年02月15日
    浏览(50)
  • 如何实现element ui中的表格全部数据分页排序

    默认情况下, table表格设置了sortable是只能当前页, 数据进行排序的, 这显然是没有多大意义的 ,那么如何实现全部数据分页排序呢? 首先 ,把sortable 写成sortable=“custom” 然后,在 el-table标签中加入 @sort-change=\\\'sortChange\\\' 最后 ,sortChange方法代码如下: sortChange(val){      

    2024年02月11日
    浏览(44)
  • element-ui表格Table详解

    先给大家展示一下效果 Table 属性  属性名 说明 类型 可选值 默认值 data 显示的数据 array — — height Table 的高度, 默认为自动高度。 如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。 s

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包