element+vue table表格全部数据和已选数据联动

这篇具有很好参考价值的文章主要介绍了element+vue table表格全部数据和已选数据联动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

element+vue table表格全部数据和已选数据联动,element,vue.js,javascript,前端文章来源地址https://www.toymoban.com/news/detail-690632.html

1.组件TableChoose
<template>
  <div class="tableChooseBox">
    <div class="tableRow">
      <div class="tableCard">
        <div class="tableHeadTip">全部{{ labelTitle }}</div>
        <slot name="body" />
      </div>
      <div class="tableCardBlank"></div>
      <div class="tableCard">
        <div class="tableHeadTip">已选择{{ labelTitle }}</div>
        <el-table
          ref="Table"
          :data="goodsList"
          border
          max-height="300px"
          :cell-style="$style.cellStyle"
          :header-cell-style="$style.rowClass"
          :row-key="getRowKeys"
          @select="select"
          @select-all="selectAll"
          @header-dragend="headerDragend"
        >
          <el-table-column
            label="选择"
            type="selection"
            align="center"
            reserve-selection
          ></el-table-column>
          <el-table-column
            v-for="item in goodsLabelList"
            :key="item.prop"
            :label="item.label"
            :prop="item.prop"
            :width="item.width"
            align="center"
          >
            <template slot-scope="scope">
              <span v-if="item.state">
                <el-tag v-if="scope.row.state == 0" type="danger">禁用</el-tag>
                <el-tag v-else-if="scope.row.state == 1" type="success"
                  >启用</el-tag
                >
              </span>
              <span v-else-if="item.type">
                <el-tag v-if="scope.row.type == 1">
                  {{ ROOM_TYPE[scope.row.type] }}</el-tag
                >
                <el-tag v-if="scope.row.type == 0" type="success">{{
                  ROOM_TYPE[scope.row.type]
                }}</el-tag>
              </span>
              <span v-else>{{ scope.row[item.prop] }}</span>
            </template></el-table-column
          >
        </el-table>
      </div>
    </div>
  </div>
</template>

<script>
import tableMixin from "@/mixin/tableMixin";
import { getDictionaries, dictionaryConstants } from "@/utils/dictionaries";
export default {
  name: "TableChoose",
  props: ["goodsLabelList", "goodsList", "labelTitle", "id"],
  mixins: [tableMixin],
  components: {},
  data() {
    return {
       ROOM_TYPE:getDictionaries(dictionaryConstants.ROOM_TYPE.parentCode)
    };
  },
  computed: {},
  watch: {
    goodsList(n) {
      n.forEach((row) => {
        this.$refs.Table.toggleRowSelection(row, true);
      });
    },
  },
  methods: {
    // 确定唯一的key值
    getRowKeys(row) {
      return row[this.id];
    },
    select(selection, row) {
      this.$emit("changeChooseList", row, false);
    },
    selectAll(selection) {
      this.$emit("changeChooseList", {}, true);
    },
  },
};
</script>

<style lang="scss" scoped>
.tableChooseBox {
  width: 100%;
}
.tableRow {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}
.tableCardBlank {
  width: 20px;
  height: 10px;
}
.tableCard {
  padding: 20px;
  box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.1);
  opacity: 1;
  border-radius: 10px;
  flex: 1;
  overflow: hidden;
  .tableHeadTip {
    font-size: 14px;
    font-weight: bold;
    line-height: 22px;
    color: rgba(0, 0, 0, 0.65);
    opacity: 1;
    margin-bottom: 10px;
    text-align: left;
  }
}
</style>

2.页面使用
const goodsLabelList = [
  {
    label: "货主编号",
    prop: "id",
  },
  {
    label: "货主名称",
    prop: "storeName",
  },
  {
    label: "货主地址",
    prop: "addressAll",
  },
  {
    label: "货主电话",
    prop: "storePhone",
  },
];
import TableChoose from "@/components/TableExtend/TableChoose";
 <table-choose
              :goodsLabelList="goodsLabelList"
              :goodsList="GoodsChexkboxs"
              :labelTitle="labelTitle"
              id="id"
              @changeChooseList="changeChooseList"
            >
              <template slot="body">
                <el-table
                  :data="StoreList"
                  ref="GoodsTable"
                  border
                  max-height="350px"
                  :header-cell-style="$style.rowClass"
                  :row-key="getRowKeys"
                  @selection-change="GoodsHandleChange"
                  @header-dragend="headerDragend"
                  :cell-style="changeRowBgColorByIsPay"
                >
                  <el-table-column
                    label="选择"
                    type="selection"
                    align="center"
                    reserve-selection
                    :selectable="selectEnable"
                  ></el-table-column>
                  <el-table-column
                    v-for="item in goodsLabelList"
                    :key="item.prop"
                    :label="item.label"
                    :prop="item.prop"
                    align="center"
                    show-overflow-tooltip
                  ></el-table-column>
                </el-table>
              </template>
            </table-choose>

  // 根据状态 来 改变 行背景颜色
    changeRowBgColorByIsPay({ row, rowIndex }) {
      if (this.forbidden.some((item) => item === row.id)) {
        return "background-color:  rgba(230, 162, 60, 0.1) !important";
      }
    },
    //配置过的数据禁用
    selectEnable(row, rowIndex) {
      if (this.forbidden.some((item) => item === row.id)) {
        return false;
      } else {
        return true; // 不禁用
      }
    },
     changeChooseList(row, clearAll) {
      const GoodsTable = this.$refs.GoodsTable;
      if (clearAll) {
        GoodsTable.clearSelection();
      } else {
        GoodsTable.toggleRowSelection(row, false);
      }
    },
     submitForm() {
      var dataArr = [];
      if (this.GoodsChexkboxs.length === 0) {
        this.$notification("操作失败", "error", "请勾选货主数据");
        return;
      }
      for (let index = 0; index < this.GoodsChexkboxs.length; index++) {
        const element = this.GoodsChexkboxs[index];
        dataArr.push({
          qcExamineModeEnum: this.detail.qcExamineModeEnum,
          ownerCode: element.id,
          ownerId: element.id,
          ownerName: element.storeName,
        });
      }
      qcStoreInsert(dataArr).then((res) => {
        const { code, msg } = res.data;
        const title = code === 200 ? "操作成功" : "操作失败";
        const type = code === 200 ? "success" : "error";
        this.$notification(title, type, msg);
        if (code === 200) {
          this.popVisible = false;
          this.getQueryList();
        }
      });
    },
        GoodsHandleChange(selection) {
      this.GoodsChexkboxs = selection;
    },

到了这里,关于element+vue table表格全部数据和已选数据联动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • element-ui 表格el-table的列内容溢出省略显示,鼠标移上显示全部和定制样式

       1、在对应列加上省略显示show-overflow-tooltip属性,如果加上这属性,鼠标移上还是没效果,要考滤是不是层级的原因,被其他挡住了。    效果如下图: 2、定制样式: 默认提示框主题色是黑色,如果想改成浅色和改变提示框的宽度,则需要加复盖样式: 最后效果:

    2024年02月13日
    浏览(40)
  • vue-element-table表格实现每一条数据绑定定时器实现倒计时或者持续时间

    前言 最近在开发中遇到一个需求,每一条数据前端计算处理时间,或者是倒计时时间。 第一表格不可能展示所有数据,所以我们需要当前时间和数据库开始时间获取一个初始值。 第二我们需要把定时器持续时间绑给每一条数据中,方便展示,和操作时候传递给后端存储。

    2024年01月20日
    浏览(57)
  • Vue 3,element table表格动态添加

            el-table实现表格动态新增/插入/删除表格行,可编辑单元格 效果图 代码实现 

    2024年01月19日
    浏览(44)
  • Vue Element-ui Table表格排序

    一.表格中有时候会有排序的需求,如果只针对当前页进行排序,那么前端就可以实现排序,在对应需要排序的字段中,使用sortable字段即可。 二.存在分页的情况时,前端仅仅使用sortable当前页排序已经不能满足我们的需求,无法对所有数据进行排序。这时候我们就要使用后端

    2024年02月11日
    浏览(49)
  • vue中element-ui表格组件el-table封装,在table表格中插入图片

            这次写的项目是写后台管理系统这部分,对于后台管理使用vue写,用组件的话,table组件用得次数比较多,可以封装一个table组件。         1.如封装的table组件:  :prop=\\\"item.prop\\\"  :label=\\\"item.label\\\"是必须要有的,其他的可以根据自己需要写 。 2.封装之后是就是使

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

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

    2024年02月11日
    浏览(42)
  • vue监听element-ui的table表格滚动事件

    这篇文章主要是讲述“如何监听element-ui table滚动事件”,按我自己尝试的方法去实现。 需求分析: 前两天做项目遇到一个问题,数据量大,然后表格渲染的很慢,而且很卡怎么办?有什么优化的方式? 那无非就是两种方法。 先加载一屏表格的数据,之后触底加载新的数据

    2024年02月12日
    浏览(57)
  • vue+Element UI Table表格动态渲染表头内容及操作按钮

    循环表格头信息数组 封装操作组件并引入表格文件内 配置表头信息数组及添加操作事件

    2024年02月13日
    浏览(66)
  • 基于vue+Element Table Popover 弹出框内置表格的封装

    在选择数据的时候需要在已选择的数据中对比选择,具体就是点击一个按钮,弹出一个小的弹出框,但不像对话框那样还需要增加一个遮罩层,更加的轻量化,但是需要查看的数据很多需要一个列表来展示,列表的话还需要一个筛选功能。 我的思路是增加复选框列,将选择的

    2024年02月07日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包