vue3+Element多选的弹框+如何获取选中数据以及设置默认勾选

目录

 一:多选弹窗获取数据的实现

二:多选弹窗设置默认勾选的实现

element提供了一个组件:

我用它实现了一个简单的弹窗——下面贴一个效果图,以及vue3里面的template部分,和script里面的部分代码:

 ps:后端数据库没放多少数据,看起来就像是全选一样…但实际上不是哈…

    <!-- 用户角色列表弹窗 -->
    <el-dialog title="请选择该角色下的用户" v-model="userListShow" width="500px" :before-close="handleClose">
      <div>
        <el-table ref="userListRef" :data="userList">
          <el-table-column type="selection" width="55" />
          <el-table-column prop="user_id" label="ID" />
          <el-table-column prop="user_name" label="用户名" />
        </el-table>
      </div>
      <template v-slot:footer>
        <div class="dialog-footer" style="text-align:center;padding-top: 20px;">
          <el-button @click="userListShow = false">取 消</el-button>
          <el-button type="primary" @click="handleConfirmUser">确 定</el-button>
        </div>
      </template>
    </el-dialog>
// 用户角色列表的控制变量
const userListShow = ref(false)
// 角色Id
const roleId = ref()
// 所有的用户
const userList = ref([])

const userListRef = ref()

// 获取该role_id下的所有的用户
const UserByRoleId = ref([])
// 选中的所有的user
const selectUser = ref([])
// 最新拿到的所有的选中的user_id
const selectUserId = ref([])

// 展示弹窗,获取所有用户的id和用户名 
const showDialogList = async (role_id) => {
  //获取所有用户列表
  const res = await userApi.getUserList();
  // console.log("获取所有用户列表", res)
  if (res.data.code == 200) {
    userList.value = res.data.data.data;
  } else {
    ElMessage.error("获取所有用户列表失败")
  }
  userListShow.value = true;
  roleId.value = role_id;
  userListRef.value = userList.value


  // 获取该角色下的所有的用户
  const ress = await userApi.getUserByRoleId({ role_id: role_id })
  console.log("getUserByRoleId", ress)
  UserByRoleId.value = ress.data.data
  // userListRef.value=resUser.data.data
  nextTick(() => {

    for (const user in ress.data.data) {

      for (const users in res.data.data.data) {

        if (res.data.data.data[users].user_id == ress.data.data[user].user_id) {
          userListRef.value.toggleRowSelection(userList.value[users], true); // 设置为选中状态
        }
      }
    }
  });
};

// 批量角色管理操作
const handleConfirmUser = async () => {

  selectUser.value = userListRef.value.getSelectionRows();
  // console.log("userListRef.value.getSelectionRows()", userListRef.value.getSelectionRows())
  // 处理数据,只要user_id
  for (let i = 0; i < selectUser.value.length; i++) {
    selectUserId.value[i] = selectUser.value[i].user_id
  }
  console.log("selectUserId", selectUserId.value)

  const res = await userApi.amendRole({ role_id: roleId.value, list: selectUserId.value })

  console.log("amendRole", res)
  if (res.data.message == 'success') {
    ElMessage.info("批量角色管理操作成功")
    userListShow.value = false;
  } else {
    ElMessage.info("批量角色管理操作失败")
  }
  // 置空数据
  selectUserId.value = []
  selectUser.value = []
  userListRef.value = []
  UserByRoleId.value = []
}

接下来我说一下上面代码的一个逻辑:

 一:多选弹窗获取数据的实现

我的弹窗用ref绑定了这个table组件:

那么获取它所勾选数据的指令如下:重点就是这个getSelectionRows()方法

 selectUser.value = userListRef.value.getSelectionRows();

二:多选弹窗设置默认勾选的实现

承接一下上文,我们先捋一下默认勾选的逻辑:

首先已勾选数据最开始是为空的,也就是说如果想要呈现默认勾选的状态,这个“已勾选数据”里,一开始就得给它塞想要勾选的数据进去。

需要注意的一点是,塞进去的数据内容,必须和勾选后取出来的数据内容一致

以下是重点代码:

 userListRef.value.toggleRowSelection(userList.value[users], true); // 设置为选中状态

这个userList.value[users],就是我想要默认勾选的数据内容。

但是到这一步,页面上也不一定能够成功呈现出默认勾选的状态。

那么接下来,就需要用到一个方法:nextTick()

  nextTick(() => {
    for (const user in ress.data.data) {
      for (const users in res.data.data.data) {
        if (res.data.data.data[users].user_id == ress.data.data[user].user_id) {
          userListRef.value.toggleRowSelection(userList.value[users], true); // 设置为选中状态
        }
      }
    }
  });
};

nextTick的作用就是创建一个异步任务,具体用法这里就不赘述了,可以直接到网上去搜,有相关的讲解,包括它在vue2和vue3里面的区别。

这里只需要知道,如果数据已经塞进去了,但是页面仍旧没有呈现默认勾选状态的话,用它把代码包起来,就可以了。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Vue Element UI是一个基于Vue.js前端组件库,而海康视频则是一种视频监控系统。结合两者,可以使用Vue Element UI的弹框组件来实现海康视频的功能。 在Vue Element UI中,有一个弹框组件`Dialog`可以用于展示内容、表单、图片等。我们可以利用这个弹框组件来实现海康视频的弹框功能。 首先,我们需要引入Vue Element UI和海康视频的相关依赖包。然后,在Vue的模板中,使用`<el-dialog>`标签来定义一个弹框组件。通过设置`visible`属性来控制弹框的显示与隐藏。 在弹框中,可以使用`<el-form>`标签来展示视频相关的表单,比如输入视频名称、选择视频文件等等。同时,可以使用`<el-upload>`标签来实现视频文件的上传功能。 除此之外,还可以使用`<el-image>`标签来展示视频的缩略图或者封面图。 最后,通过调用Vue的方法或者通过事件绑定来控制弹框的显示与隐藏。比如,在点击确认按钮时,可以调用一个方法来处理相关的逻辑。或者,在获取到视频文件后,可以通过事件绑定来触发视频上传的操作。 综上所述,通过Vue Element UI的弹框组件,我们可以方便地实现海康视频的弹框功能。通过结合VueElement UI的优势,可以快速开发出具有弹框功能的海康视频系统。 ### 回答2: VueElement UI是一种用于构建用户界面的开源框架和库。Vue是一种流行的JavaScript框架,用于构建交互式的Web界面。它具有简单易用的API和强大的能力,使开发人员可以快速构建复杂的前端应用程序。 Element UI是Vue的一个UI框架,它提供了各种用户界面组件和工具,包括弹框组件。弹框是一种常用的交互式组件,可用于显示消息、警告、确认对话框等。 海康视频是一个知名的视频监控解决方案提供商。它提供了一系列视频监控设备、软件和服务,可用于保护和监控各种场所。 结合VueElement UI的弹框功能,我们可以使用Element UI提供的弹框组件来显示海康视频相关的信息和操作。例如,当需要展示一个海康视频的预览时,我们可以使用Element UI的弹框组件来创建一个模态框,其中包含视频的预览界面和相关控制按钮,用户可以通过弹框中的按钮来操作视频的播放、暂停、停止等功能。 除了预览功能,我们还可以使用弹框来展示视频相关的警告信息。例如,当监控系统检测到异常情况时,可以通过弹框来显示警告信息,提醒用户及时处理。 总之,VueElement UI的弹框功能可以很好地与海康视频集成,为用户提供一个友好的界面来展示和操作海康视频的功能。 ### 回答3: Vue是一种流行的JavaScript框架,而Element UI是一个基于Vue的组件库。弹框Element UI提供的一个组件,可以在网页中显示弹出窗口,用于展示一些提示、警告或者用户交互的内容。 海康视频是一家专业的视频监控设备供应商,其产品包括监控摄像头、视频录像机等。在使用VueElement UI开发网页时,我们可以使用弹框组件来展示海康视频相关的内容。 例如,当用户需要查看一段海康视频时,可以点击一个按钮,触发弹框组件显示在界面中央,同时在弹框的内容区域中,嵌入海康视频的播放器。这样用户就可以方便地观看视频,而无需离开当前页面。 利用Vue的动态数据绑定特性,我们还可以根据用户的操作改变海康视频的播放状态。例如,在弹框中提供一个播放/暂停按钮,用户点击按钮时,我们可以修改Vue数据状态,从而控制视频的播放或暂停。 此外,Element UI的弹框组件还提供了其他丰富的功能选项,如设置弹框的大小、位置、背景等样式,以及自定义按钮、输入框等交互元素。可以利用这些特性来完善海康视频弹框的用户体验。 总结而言,借助VueElement UI的弹框组件,可以在网页中方便地展示海康视频,提供给用户良好的用户体验,同时还可以通过Vue数据绑定特性来控制视频的播放状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗生意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值