elementui:el-table支持搜索、切换分页多选功能,以及数据回显

news2025/2/11 9:28:17

1、el-table相关代码,需注意:row-key="(row) => { return row.id }" 以及 :reserve-selection="true"

   <div class="boxList">
              <div class="search-form">
                <!-- 搜索表单 -->
                <el-form :inline="true" :model="form" ref="form">
                  <el-form-item label="名称" prop="name">
                    <el-input
                      v-model="form.name"
                      placeholder="请输入名称"
                    ></el-input>
                  </el-form-item>

                  <el-form-item label="专业" prop="major">
                    <el-input
                      v-model="form.major"
                      placeholder="请输入专业"
                    ></el-input>
                  </el-form-item>

                  <!-- 操作按钮 -->
                  <el-form-item>
                    <el-button type="primary" @click="handleQuery"
                      >查询</el-button
                    >
                    <el-button type="warning" @click="resetForm"
                      >重置</el-button
                    >
                  </el-form-item>
                </el-form>
              </div>
              <el-table
                ref="table"
                :data="newtableData"
                border
                @selection-change="selectionChangeHandle"
                row-class-name="disable-selection"
                height="300"
                style="width: 100%"
              >
                <el-table-column
                  type="selection"
                  width="50"
                  fixed
                  :reserve-selection="true"
                  align="center"
                />
                <el-table-column prop="name" label="姓名"></el-table-column>
                <el-table-column prop="major" label="专业"></el-table-column>
                <el-table-column prop="deptName" label="部门"></el-table-column>
              </el-table>

              <!-- 分页 -->
              <div class="pagination">
                <el-pagination
                  background
                  layout="total, sizes, prev, pager, next"
                  :total="page.total"
                  :current-page="page.current"
                  :page-size="page.size"
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                >
                </el-pagination>
              </div>
              <div
                style="
                  display: flex;
                  align-items: center;
                  margin-top: 14px;
                  font-size: 14px;
                  margin-left: 3px;
                "
              >
                完成时间:
                <!-- <el-date-picker
                  clearable
                  v-model="form.date"
                  type="datetime"
                  value-format="YYYY-MM-DD HH:mm:ss"
                  :placeholder="请选择日期"
                  style="width: 36%"
                ></el-date-picker> -->
                <el-input
                  type="Number"
                  v-model="form.workTime"
                  :placeholder="'请输入'"
                  clearable
                  style="width: 36%"
                >
                  <template #append>分钟</template>
                </el-input>
              </div>
              <div style="display: flex; justify-content: flex-end">
                <el-button type="primary" @click="onYunxing">运行 </el-button>
              </div>
            </div>

2、获取原数据列表和已选数据,注意// 回显已选中的行,$nextTick那段代码

    //获取列表
    async getUserDataAllListApi() {
      let params = {
        size: this.page.size,
        current: this.page.current,
        name: this.form.name,
        major: this.form.major,
      };
      let { data } = await repairTools.getUserDataAllList(params);
      this.page.size = data.size;
      this.page.total = data.total;
      this.newtableData = data.records;
    },
    //回填人员
    async getGroupUserDataListApi() {
      let params = {
        taskIds: this.schemeAllData.idList,
        taskLruName: this.schemeAllData.taskLruName,
      };
      let { data } = await repairTools.getGroupUserDataList(params);
      this.checkAll = data.data;
      // 回显已选中的行
      this.$nextTick(() => {
        this.newtableData.forEach((row) => {
          const isChecked = this.checkAll.some(
            (checkRow) => checkRow.id === row.id
          );
          if (isChecked) {
            this.$refs.table.toggleRowSelection(row, true);
          }
        });
      });
    },

3、table点击selection-change可以动态获取数据是否有变动

    //选中
    selectionChangeHandle(selected) {
      console.log('99999999999选中',selected)
      this.newSelected = selected;
      this.newtableData.forEach((row) => {
        row.ruleselected = selected.includes(row);
      });
    },

4、有关分页事件

    handleSizeChange(val) {
      this.page.size = val;
      this.tabClick();
    },
    handleCurrentChange(val) {
      this.page.current = val;
      this.tabClick();
    },

5、通过异步来定义调用接口的前后顺序

    //点击tab
   async tabClick() {
      if (this.activeName == "type2") {
      await  this.getUserDataAllListApi();
      await  this.getGroupUserDataListApi();
      } 
    },

6、搜索和重置

   // 查询方法
    handleQuery() {
      this.tabClick();
    },

    // 重置表单
    resetForm() {
      this.$refs.form.resetFields();
      this.form.name = "";
      this.form.major = "";
      this.tabClick();
    },

7、完成代码

<!-- 方案优化 -->
<template>
  <!-- fullscreen -->
  <el-dialog
    :show-close="!run_disabled"
    :title="schemeOptimization_open.onlyShow ? '维修方案详情' : '待修清单'"
    v-model="schemeOptimization_open.open"
    append-to-body
    center
    class="schemeOptimization"
    width="55%"
    @closed="closed"
    @opened="opened"
  >
    <div>
      <div class="WarWoundInfo pad">
        <el-tabs
          v-model="activeName"
          @tab-click="tabClick"
          :before-leave="beforeLeave"
          stretch
        >
          <el-tab-pane
            :label="
              schemeOptimization_open.onlyShow ? '维修方案详情' : '待修清单'
            "
            name="type1"
          >
        11
          </el-tab-pane>

          <el-tab-pane label="人员参数" name="type2">
            <div class="boxList">
              <div class="search-form">
                <!-- 搜索表单 -->
                <el-form :inline="true" :model="form" ref="form">
                  <el-form-item label="名称" prop="name">
                    <el-input
                      v-model="form.name"
                      placeholder="请输入名称"
                    ></el-input>
                  </el-form-item>

                  <el-form-item label="专业" prop="major">
                    <el-input
                      v-model="form.major"
                      placeholder="请输入专业"
                    ></el-input>
                  </el-form-item>

                  <!-- 操作按钮 -->
                  <el-form-item>
                    <el-button type="primary" @click="handleQuery"
                      >查询</el-button
                    >
                    <el-button type="warning" @click="resetForm"
                      >重置</el-button
                    >
                  </el-form-item>
                </el-form>
              </div>
              <el-table
                ref="table"
                :data="newtableData"
                border
                @selection-change="selectionChangeHandle"
                row-class-name="disable-selection"
                height="300"
                style="width: 100%"
              >
                <el-table-column
                  type="selection"
                  width="50"
                  fixed
                  :reserve-selection="true"
                  align="center"
                />
                <el-table-column prop="name" label="姓名"></el-table-column>
                <el-table-column prop="major" label="专业"></el-table-column>
                <el-table-column prop="deptName" label="部门"></el-table-column>
              </el-table>

              <!-- 分页 -->
              <div class="pagination">
                <el-pagination
                  background
                  layout="total, sizes, prev, pager, next"
                  :total="page.total"
                  :current-page="page.current"
                  :page-size="page.size"
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                >
                </el-pagination>
              </div>
              <div
                style="
                  display: flex;
                  align-items: center;
                  margin-top: 14px;
                  font-size: 14px;
                  margin-left: 3px;
                "
              >
                完成时间:
                <!-- <el-date-picker
                  clearable
                  v-model="form.date"
                  type="datetime"
                  value-format="YYYY-MM-DD HH:mm:ss"
                  :placeholder="请选择日期"
                  style="width: 36%"
                ></el-date-picker> -->
                <el-input
                  type="Number"
                  v-model="form.workTime"
                  :placeholder="'请输入'"
                  clearable
                  style="width: 36%"
                >
                  <template #append>分钟</template>
                </el-input>
              </div>
              <div style="display: flex; justify-content: flex-end">
                <el-button type="primary" @click="onYunxing">运行 </el-button>
              </div>
            </div>
          </el-tab-pane>
        </el-tabs>
      </div>

      <div
        v-show="
          schemeOptimization_open.onlyShow &&
          this.schemeData.type.sub_type == '人员限制下时间最短'
        "
        style="display: flex; justify-content: center; height: 50px"
      >
        <el-button
          size="small"
          type="primary"
          style="height: 30px"
          @click="goTo_schemeOptimization"
          >方案优化
        </el-button>
      </div>
      <div
        v-show="!schemeOptimization_open.onlyShow"
        style="width: max-content; margin: 0 auto; height: 50px"
      >
        <el-button
          v-show="activeName === 'type2'"
          :disabled="run_disabled"
          size="small"
          style="margin: 0 20px; padding: 9px 25px; height: 30px"
          @click="resave"
          >重置
        </el-button>
        <el-button
          :disabled="run_disabled"
          size="small"
          style="padding: 9px 25px; height: 30px"
          type="success"
          @click="run"
          >运行
        </el-button>
        <!-- <el-button type="primary" size="small" style="margin-left: 0;padding: 9px 25px">保存
                </el-button> -->
      </div>
    </div>

  
</template>

<script>
import EchartTreeDialog from "./EchartTreeDialog.vue";
import EchartGanttDialog from "./EchartGanttDialog.vue";
import MaintenanceResourceTable from "./MaintenanceResourceTable.vue";
// { getRepairResources }
import repairTools from "@/api/basicData/repairTools";

export default {
  name: "SchemeOptimization",
  props: {
  },
  components: { EchartTreeDialog, EchartGanttDialog, MaintenanceResourceTable },
  data() {
    return {
      newSelected: [],
      form: {
        name: null,
        major: null,
      },
      page: {
        size: 10,
        current: 1,
        total: null,
      },
      newtableData: [],
     
    };
  },
  mounted() {
    // this.getUserDataAllListApi();
  },
  watch: {
    schemeAllData: {
      deep: true,
      immediate: true,
      handler(a) {
        if (a) {
        }
      },
    },
  },
  methods: {
    //运行
    async onYunxing() {
      let arr = [];
      this.newSelected.forEach((i) => {
        arr.push(i.id);
      });
      let params = {
        workTime: this.form.workTime,
        userIdList: arr,
        taskIds: this.schemeAllData.idList,
        taskLruName: this.schemeAllData.taskLruName,
      };
      let { data } =
        await this.$API.repairTask.warWoundReport.getGeneticWorkData(params);
    
      if (data.code != 200) {
        this.$message.error(data.msg);
      } else {
        this.$message.success(data.msg);
        // eslint-disable-next-line vue/no-mutating-props
        this.schemeOptimization_open.open = false;
      }
    },
    //点击tab
   async tabClick() {
      if (this.activeName == "type2") {
      await  this.getUserDataAllListApi();
      await  this.getGroupUserDataListApi();
      } 
    },

    //回填人员
    async getGroupUserDataListApi() {
      let params = {
        taskIds: this.schemeAllData.idList,
        taskLruName: this.schemeAllData.taskLruName,
      };
      let { data } = await repairTools.getGroupUserDataList(params);
      this.checkAll = data.data;
      // 回显已选中的行
      this.$nextTick(() => {
        this.newtableData.forEach((row) => {
          const isChecked = this.checkAll.some(
            (checkRow) => checkRow.id === row.id
          );
          if (isChecked) {
            this.$refs.table.toggleRowSelection(row, true);
          }
        });
      });
    },
    //获取列表
    async getUserDataAllListApi() {
      let params = {
        size: this.page.size,
        current: this.page.current,
        name: this.form.name,
        major: this.form.major,
      };
      let { data } = await repairTools.getUserDataAllList(params);
      this.page.size = data.size;
      this.page.total = data.total;
      this.newtableData = data.records;
    },
    // 查询方法
    handleQuery() {
      this.tabClick();
    },

    // 重置表单
    resetForm() {
      this.$refs.form.resetFields();
      this.form.name = "";
      this.form.major = "";
      this.tabClick();
    },
    //选中
    selectionChangeHandle(selected) {
      console.log('99999999999选中',selected)
      this.newSelected = selected;
      this.newtableData.forEach((row) => {
        row.ruleselected = selected.includes(row);
      });
    },
    handleSizeChange(val) {
      this.page.size = val;
      this.tabClick();
    },
    handleCurrentChange(val) {
      this.page.current = val;
      this.tabClick();
    },

  },
};
</script>

8、效果如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2295416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(ICLR=2025)生成的表征对齐:训练扩散Transformer比你想象的更简单

生成的表征对齐&#xff1a;训练扩散Transformer比你想象的更简单 paper是KAIST发表在ICLR 2025的工作 paper title:REPRESENTATION ALIGNMENT FOR GENERATION: TRAINING DIFFUSION TRANSFORMERS IS EASIER THAN YOU THINK Code&#xff1a;链接 ABSTRACT 最近的研究表明&…

白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?

大家都知道&#xff0c;在设计的初期&#xff0c;我们通常会先绘制草图&#xff0c;然后再进行上色处理&#xff0c;最终才开始进行最终的设计工作。在这个上色的过程中&#xff0c;配色是至关重要的一环。这不仅方便了内部同事的评审&#xff0c;也让产品方和客户可以直观地了…

Bash (Bourne-Again Shell)、Zsh (Z Shell)

文章目录 1. 历史背景2. 主要区别3. 功能对比自动补全插件和主题路径扩展提示符定制 4. 性能5. 使用场景6. 如何切换 Shell7. 总结 以下是 Bash 和 Zsh 之间的主要区别&#xff0c;列成表格方便对比&#xff1a; 特性BashZsh默认Shell大多数Linux发行版默认ShellmacOS默认She…

pikachu[皮卡丘] 靶场全级别通关教程答案 以及 学习方法 如何通过渗透测试靶场挑战「pikachu」来精通Web渗透技巧? 一篇文章搞完这些问题

目录 Pikachu靶场 部署 暴力破解漏洞 学习地址: 靶场练习: 基于表单的暴力破解 验证码绕过(on server) 验证码绕过(on Client) token防爆破? XSS跨站脚本攻击 学习地址: 靶场练习&#xff1a; 反射型xss(get) 反射性xss(post) 存储型xss DOM型xss xss盲打 x…

汽车零部件工厂如何借助安灯呼叫按钮盒提升生产响应速度

在现代汽车零部件工厂的生产环境中&#xff0c;高效的信息传递和快速的响应速度是确保生产顺畅运行的关键。然而&#xff0c;传统的口头呼喊或现场沟通方式往往存在信息传递慢、现场嘈杂、责任人难以及时找到等问题&#xff0c;尤其在设备故障或缺料时&#xff0c;这些问题会导…

Idea 2024.3 使用CodeGPT插件整合Deepseek

哈喽&#xff0c;大家好&#xff0c;我是浮云&#xff0c;最近国产大模型Deepseek异常火爆&#xff0c;作为程序员我也试着玩了一下&#xff0c;首先作为简单的使用&#xff0c;大家进入官网&#xff0c;点击开始对话即可进行简单的聊天使用&#xff0c;点击获取手机app即可安装…

「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

docker /var/lib/docker/overlay2目录把磁盘空间占满问题

1、查看服务器磁盘空间 df -h果然100%了,docker系统文件把磁盘空间占满了。 2、进入overlay2目录&#xff0c;查找那个容器工作目录占用最高 cd /var/lib/docker/overlay2du -h --max-depth1详见下图 好家伙占用110G&#xff01;复制目录名称2c3c48ccac533c5d4a366d45a19bb9…

Redis深入学习

目录 Redis是什么&#xff1f; Redis使用场景 Redis线程模型 Redis执行命令是单线程的为什么还这么快&#xff1f; Redis持久化 Redis 事务 Key 过期策略 Redis 和 mysql 如何保证数据一致&#xff1f; 缓存穿透 缓存击穿 缓存雪崩 Redis是什么&#xff1f; redis是一…

EasyExcel 导出合并层级单元格

EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要 一、Django 5Django 5 的主要特性包括&#xff1a; 二、MVT模式三、官方网站四、内置功能数据库 ORM&#xff08;对象关系映射&#xff09;用户认证和授权表单处理模板引擎URL 路由缓存框架国际化和本地化安全性功能管…

2.7学习

crypto buu-还原大师 仔细阅读题目&#xff0c;这里有一段字符串&#xff0c;但是其中有四个大写字母被替换成了‘&#xff1f;’&#xff0c;那么我们写脚本&#xff1a;首先将四个问号均换成26个大写字母并且组成不同的组合&#xff0c; 所以有四个循环让四个问号都遍历26个…

oracle ORA-27054报错处理

现象 在oracle执行expdp&#xff0c;rman备份&#xff0c;xtts的时候,由于没有足够的本地空间&#xff0c;只能使用到NFS的文件系统但有时候会出现如下报错 ORA-27054: NFS file system where the file is created or resides is not mounted with correct options根据提示信…

使用LLaMA Factory踩坑记录

前置条件&#xff1a;电脑显卡RTX 4080 问题&#xff1a;LLaMA-Factory在运行的时候&#xff0c;弹出未检测到CUDA的报错信息 结论&#xff1a;出现了以上的报错&#xff0c;主要可以归结于以下两个方面&#xff1a; 1、没有安装GPU版本的pytorch&#xff0c;下载的是CPU版本…

电路研究9.3——合宙Air780EP中的AT开发指南(含TCP 示例)

根据合宙的AT研发推荐&#xff0c; AT指令基本上也简单看完了&#xff0c;这里开始转到AT的开发了。 AT 命令采用标准串口进行数据收发&#xff0c;将以前复杂的设备通讯方式转换成简单的串口编程&#xff0c; 大大简化了产品的硬件设计和软件开发成本&#xff0c;这使得几乎所…

Reqable使用实践

一、背景 日常开发中&#xff0c;难免要抓取请求数据&#xff0c;查看接口数据&#xff0c;从而更好定位问题&#xff0c;基于这个原因&#xff0c;查找了一些抓包工具&#xff0c;例如&#xff1a; HttpCanary、 Steam 、Fiddler等&#xff0c;不是要钱&#xff0c;就是只对苹…

【蓝桥杯嵌入式】2_LED

全部代码网盘自取 链接&#xff1a;https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码&#xff1a;3ii2 1、电路图 74HC573是八位锁存器&#xff0c;当控制端LE脚为高电平时&#xff0c;芯片“导通”&#xff0c;LE为低电平时芯片“截止”即将输出状态“锁存”…

B树详解及其C语言实现

目录 一、B树的基本原理 二、B树操作过程图形化演示 三、B树的应用场景 四、C语言实现B树及示例 五、代码执行结果说明 六、应用实例&#xff1a;文件系统目录索引 七、总结 一、B树的基本原理 B树&#xff08;B-Tree&#xff09; 是一种自平衡的树数据结构&#xff0c;…

ARM64 Linux 内核学习指南:从基础到实践

前言 ARM64 作为当今主流的处理器架构&#xff0c;被广泛应用于移动设备、嵌入式系统和服务器领域。学习 ARM64 在 Linux 内核中的实现&#xff0c;不仅有助于深入理解操作系统底层机制&#xff0c;还能提升在内核开发、驱动编写、虚拟化等领域的专业能力。 本指南面向对 Lin…

零基础都可以本地部署Deepseek R1

文章目录 一、硬件配置需求二、详细部署步骤1. 安装 Ollama 工具2. 部署 DeepSeek-R1 模型3. API使用4. 配置图形化交互界面&#xff08;可选&#xff09;5. 使用与注意事项 一、硬件配置需求 不同版本的 DeepSeek-R1 模型参数量不同&#xff0c;对硬件资源的要求也不尽相同。…