当前位置: 首页 > article >正文

Vue中Select选择器el-option实现动态多选

效果如图:

前端列表块显示部分:

<el-table :data="tableData" border stripe :header-cell-class-name="'headerBg'"  @selection-change="handleSelectionChange">
  <el-table-column type="selection" width="55"></el-table-column>
  <el-table-column prop="companyName" label="企业名称" width="200"></el-table-column>
  <el-table-column prop="companyAddress" label="企业地址" width="200"></el-table-column>
  <el-table-column prop="teacherName" label="领队教师" width="200">
    <template slot-scope="scope">
      <el-tag v-for="item in JSON.parse(scope.row.teacherName|| '[]')" style="margin-right: 5px" >{{item}}</el-tag>
    </template>
  </el-table-column>
  <el-table-column prop="teamMembers" label="教师团队" >
    <template slot-scope="scope">
      <el-tag v-for="item in JSON.parse(scope.row.teamMembers || '[]')" style="margin-right: 5px" >{{item}}</el-tag>
    </template>
  </el-table-column>
  <el-table-column prop="startTime" label="开始时间" width="250"></el-table-column>
  <el-table-column prop="endTime" label="结束时间" width="250"></el-table-column>
  <el-table-column label="操作"  width="500" align="center">
    <template slot-scope="scope">
      <el-button type="success" @click="handleEdit(scope.row)">编辑 <i class="el-icon-edit"></i></el-button>
      <el-popconfirm
        class="ml-5"
        confirm-button-text='确定'
        cancel-button-text='我再想想'
        icon="el-icon-info"
        icon-color="red"
        title="您确定删除吗?"
        @confirm="del(scope.row.id)"
        >
        <el-button type="danger" slot="reference">删除 <i class="el-icon-remove-outline"></i></el-button>
      </el-popconfirm>
    </template>
  </el-table-column>
</el-table>

新增和编辑弹出的模块核心代码:

<el-form-item label="领队教师" prop="teacherName">
  <!--<el-input v-model="form.teacherName" autocomplete="off"></el-input>-->
  <el-select
    multiple
    allow-create
    style="width: 100%"
    v-model="tagsArr"
    filterable
    placeholder="请选择"
    >
    <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  </el-select>
</el-form-item>
<el-form-item label="教师团队" prop="teamMembers">
  <el-select
    multiple
    allow-create
    style="width: 100%"
    v-model="teamsArr"
    filterable
    placeholder="请选择">
    <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  </el-select>
  <!--<el-input v-model="form.teamMembers" autocomplete="off" placeholder="请输入"></el-input>-->
</el-form-item>




<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="save">确 定</el-button>
</div>

data 部分:

data(){
  return {
     tagsArr: [],
     teamsArr: [],
  }

methods 部分代码:(重点部分看注释)

methods: {
  load() {
    this.request.get("/enterprises/page", {
      params: {
        pageNum: this.pageNum,
        pageSize: this.pageSize,
        companyName: this.companyName,
        teacherName: this.teacherName,
      }
    }).then(res => {
      this.tableData = res.data.records
      this.total = res.data.total
    })
    this.request.get("/role").then(res => {
      this.roles = res.data
    })
    // 这个地方调用你的借口,然后获取到你要动态调用的值
    this.request.get("/user").then(res => {   
      this.options = res.data.map(item => {
        return {
          value: item.nickname,
          label: item.nickname
        }
      })
    })
  },
  save() {
    // 这两个部分主要是为了将数组转化成字符串
    this.form.teacherName = JSON.stringify(this.tagsArr)
    this.form.teamMembers = JSON.stringify(this.teamsArr)
    this.request.post("/enterprises", this.form).then(res => {
      if (res.code === '200') {
        this.$message.success("保存成功")
        this.dialogFormVisible = false
        this.load()
      } else {
        this.$message.error("保存失败")
      }
    })
  },
  handleAdd() {
    this.dialogFormVisible = true
    // 重点,新增前置空
    this.tagsArr = []
    this.teamsArr = []
    this.form = {}
  },
  handleEdit(row) {
    this.form = JSON.parse(JSON.stringify(row))
    // 这个地方一定要加上,不然刷新页面点击编辑的时候,选择器的值就被清空了
    this.tagsArr = JSON.parse(this.form.teacherName || '[]')
    this.teamsArr = JSON.parse(this.form.teamMembers || '[]')
    this.dialogFormVisible = true
  },

这两句一定要加上,否则会出现下图所示的情况。

  handleAdd() {
    this.dialogFormVisible = true
    // 重点,新增前置空
    this.tagsArr = []
    this.teamsArr = []
    this.form = {}
  },
  handleEdit(row) {
    this.form = JSON.parse(JSON.stringify(row))
    // 这个地方一定要加上,不然刷新页面点击编辑的时候,选择器的值就被清空了
    this.tagsArr = JSON.parse(this.form.teacherName || '[]')
    this.teamsArr = JSON.parse(this.form.teamMembers || '[]')
    this.dialogFormVisible = true
  },

该文仅供参考,希望对你有帮助。


http://www.kler.cn/a/399814.html

相关文章:

  • 如何合理设计一套springcloud+springboot项目中的各个微服务模块之间的继承关系的最优方案
  • 【开源免费】基于SpringBoot+Vue.JS购物推荐网站(JAVA毕业设计)
  • 创建vue3项目步骤
  • Java基础-I/O流
  • DB Type
  • 定时器简介
  • 为什么VScode不能连服务器,MobaXterm可以连
  • vulnhub靶场-tomato
  • 【MySQL】全面学习数据库查询技巧:查询指令深度学习指南
  • php代码审计-动态调试-未授权挖掘
  • 在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
  • 使用golang启动一个http代理
  • Vue之el-date-picker日期选择器标签—选择日期范围,数据格式:yyyy-MM-dd HH:mm:ss,设置默认时间:HH:mm:ss
  • PyTorch数据集方法
  • 分布式cap理论学习
  • leetcode hot100【LeetCode 62.不同路径】java实现
  • SAM_MED 2D 训练完成后boxes_prompt没有生成mask的问题
  • Django token 生成与验证
  • 速盾:CDN服务器和双线服务器哪个更好?
  • 如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示
  • ReactPress vs VuePress vs RectPress
  • 如何将 Anaconda 源切换到国内镜像以提高下载速度:详细教程 ubuntu20.04 Pytorch
  • Springboot基于GIS的旅游信息管理系统
  • wps PPT debug
  • 动手学深度学习10.2. 注意力汇聚:Nadaraya-Watson 核回归-笔记练习(PyTorch)
  • 【118页word下载】新型智慧城市顶层设计方案