记录一个vue,ele-ui实现列表指定行数批量选中解决方法

这个问题卡了一天,试了好多方法总算试出来了:

javascript 复制代码
<template>
  <div>
    <!-- 功能区卡片 -->
    <el-card class="mb-4">
      <el-row class="mb-1">
        <el-col :span="12">
          请输入想勾选的专利起止条数:
        </el-col>
      </el-row>
      <!-- 输入框及确认按钮 -->
      <el-row>
        <el-col :span="4" class="ml-2">
          <el-input v-model="start" placeholder="请输入想勾选专利的起始行"></el-input>
        </el-col>
        <el-col :span="4" class="ml-2">
          <el-input v-model="end" placeholder="请输入想勾选专利的结束行"></el-input>
        </el-col>
        <el-col :span="4" class="ml-2">
          <el-button type="primary" plain @click="selectSpecifiedPatents">确认</el-button>
        </el-col>
      </el-row>
      <el-row class="mb-2">
        <el-col :span="12">
          <el-button type="primary" plain @click="distributePatents">提交分发</el-button>
          <el-button type="warning" plain @click="clearSelection">取消勾选</el-button>
        </el-col>
      </el-row>
    </el-card>

    <!-- 左右两个卡片 -->
    <el-row :gutter="12">
      <!-- 左侧专利列表 -->
      <el-col :span="12">
        <el-card class="mb-4">
          <!-- 添加全选按钮 -->
          <el-table :data="patents" stripe height="400" ref="patentTable">
            <el-table-column type="index" label="全选"></el-table-column>
            <el-table-column type="selection" width="50" ></el-table-column>
            <el-table-column prop="patent_name" label="专利名称" class="title"></el-table-column>
          </el-table>
        </el-card>
      </el-col>

      <!-- 右侧专家列表 -->
      <el-col :span="12">
        <el-card class="mb-4">
          <!-- 添加全选按钮 -->
          <el-table :data="experts" stripe height="400">
            <el-table-column type="index" label="全选"></el-table-column>
            <el-table-column type="selection" width="50" v-model="selectedExperts"></el-table-column>
            <el-table-column prop="username" label="专家名称" class="title"></el-table-column>
          </el-table>
        </el-card>  
      </el-col>
    </el-row>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      start: '',
      end: '',
      patents: [],
      experts: [],
      selectedPatents: [], // 存储选中的专利ID
      selectedExperts: [], // 存储选中的专家ID
    };
  },
  created() {
    this.fetchData();
  },
  methods: {

    fetchData() {
      axios.get('http://localhost:8888/app/get_patent_and_expert_list/')
        .then(response => {
          this.patents = response.data.patents.map(patent => ({ ...patent, checked: false }));
          this.experts = response.data.experts;
        })
        .catch(error => {
          console.error('Error fetching data:', error);
        });
    },
    selectSpecifiedPatents() {
      const startIdx = parseInt(this.start) - 1;
      const endIdx = parseInt(this.end);
      if (!isNaN(startIdx) && !isNaN(endIdx) && startIdx >= 0 && endIdx > startIdx && endIdx <= this.patents.length) {
        this.$refs.patentTable.clearSelection(); // 清除之前的选中状态
        const selectedRows = this.patents.slice(startIdx, endIdx); // 获取起始和结束位置之间的专利行
        selectedRows.forEach(row => {
          this.$refs.patentTable.toggleRowSelection(row, true); // 将专利行设为选中状态
        });
      } else {
        alert('请输入有效的起始和结束序号!');
      }
    },


    clearSelection() {
      this.selectedPatents = [];
      this.selectedExperts = [];
      // 取消所有专利的选中状态
      this.patents = this.patents.map(patent => ({
        ...patent,
        checked: false
      }));
    },
    distributePatents() {
      axios.post('http://localhost:8888/app/distribute_patents/', {
        selected_patents: this.selectedPatents,
        selected_experts: this.selectedExperts,
      })
      .then(response => {
        alert('分发成功!');
      })
      .catch(error => {
        console.error('Error distributing patents:', error);
      });
    },
  }
}
</script>

<style scoped>
.mb-4 {
  margin-bottom: 20px;
}
.mb-1 {
  margin-bottom: 20px;
}
.mb-2 {
  margin-top: 20px;
}
.ml-2 {
  margin-right: 10px;
}

.title {
  font-size: 16px;
}
</style>
相关推荐
涵涵(互关)8 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
测试员周周11 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest
莽夫搞战术11 小时前
【Google Stitch】AI原生画布重新定义设计,让想法变成可交互界面
前端·人工智能·ui
还有多久拿退休金13 小时前
我用 Three.js 造了个 3D 漫步世界,角色走路像喝醉了——以及我是怎么修好的
前端·vue.js
LJA6484413 小时前
为什么 AI 时代更需要配置化组件库
vue.js
ZC跨境爬虫15 小时前
跟着 MDN 学CSS day_3:(为一个传记页面添加样式)
前端·javascript·css·ui·音视频·html5
UI设计兰亭妙微16 小时前
兰亭妙微|打破色彩对比度迷思:UI设计公司中的无障碍设计灵活之道
ui·b端界面设计·高端网站设计
弹简特17 小时前
【Vue3速成】01-npm+vue初体验+vite构建vue工程化
vue.js·arcgis·npm
摸鱼小李上线了17 小时前
vue项目页面添加水印实现方法
前端·javascript·vue.js
轻口味17 小时前
HarmonyOS 6.1 全栈实战录 - 14 渲染树透镜:FrameNode 渲染状态感知与高性能 UI 调优实战
ui·华为·harmonyos