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

vue自定义穿梭框(内容体+多选框)

最近需要做一个资源分配的一个功能,然后用到了穿梭框,但是需要更多的功能控制。具体业务场景如下:需要同时可以分配查看和下载的权限。实现效果如下:

组件用的是: Ant Design Vue 的穿梭框

操作方式:在左侧列表展示未选择的数据,右侧展示已选的数据,同时可操作该条数据的查看和下载权限。只有当数据先选择到右侧时,才可以操作是否可以查看和下载的功能。

相关代码如下:

<a-transferv-model:target-keys="targetKeys":row-key="(record) => record.id":data-source="currentData":one-way="true":titles="['未选', '已选']":show-search="true"pagination@change="handleChange"class="transfer-box"><template class="content" #render="item"><div class="custom-item">{{ item.title }}</div><div class="opt-box" v-if="item.isOpt" @click.stop><a-checkbox:checked="item.isView"@change="handleCheckboxChange(item, 'isView')">查看</a-checkbox><a-checkbox:checked="item.isDown"@change="handleCheckboxChange(item, 'isDown')">下载</a-checkbox></div></template></a-transfer>

但是主要记录的是另外一个问题,在当前内存插槽中添加多选框的时候,在你点击多选框的时候会联动到当前这条数据的选中状态,你选择的其实是多选框的状态,而不是这条数据的选择状态。最主要的操作就是在当前多选框外层的父盒子上添加 @click.stop  阻止冒泡。就可以防止上面那种情况发生。注:当stop事件添加到这两个多选框上时,也是会发生冒泡的情况,最好直接添加到父盒子上,这样就完美解决这个问题。

--------------------------------------------------------------------------

但是还想说另外一个点,这是发现Ant Design Vue的一个好用的点,:one-way="true"。给穿梭框添加这个属性就会更好操作,直接在右侧的框中点击一个删除按钮就可以,不需要再进行向左的操作。

这里记录一下穿梭框优化的一个点,因为按照逻辑,左侧数据在未选择的情况下,是不可以进行查看和下载的权限操作的,这就需要对数据进行一次处理,可以看到我加了一个条件判断。 v-if="item.isOpt"。  需要进行的是,只有右侧选中的数据才有相关的操作。

// 显示操作框
const handleOption = (checkArr, direction) => {currentData.value.forEach((item) => {if (checkArr.includes(item.id)) {direction == 'left' ? (item.isOpt = false) : (item.isOpt = true);}});
};

这个方法主要是实现:当向左移动时,直接将其可操作权限取消。当然向右选中数据同理,也同样需要给其添加可操作的权限。

我看了一下elementplus的穿梭框没有one-way 这个属性,但是操作应该是同样的,只需要在列表数据中筛选已选中的数据,进行下一步的操作。比如右侧已经选中并且添加了可查看和可下载的数据,在其向左侧移动时,在将这条数据取消可操作的同时,也可以将其的两个状态同时设为未选中。这个可以根据自己的业务需求进行具体操作。

这里记录的是一个操作demo,碰到相关的操作时可以按照这个方法操作。

http://www.xdnf.cn/news/721873.html

相关文章:

  • SMT贴片工艺核心要点解析
  • 连接远程桌面计算机提示:“这可能是由于CredSSP加密数据库修正” 问题解决方案
  • OpenLayers 地图打印
  • C++创建对象过程
  • 攻防世界-BadProgrammer
  • siglip2(2) Naflex模型的动态分辨率原理
  • 微信小店推客系统带来的便利性
  • IPTV电视直播 1.6.0 | 手机电视直播 秒播无卡顿
  • 短视频一键搬运 v1.7.1|短视频无水印下载 一键去重
  • 计算几何 视频截图
  • int和Integer的区别
  • vue3+element plus 关于el-dialog__body无法选中的问题
  • 掌握STP技术:网络环路终结者实战
  • cf2067A
  • 定位例子(vue3)
  • 告别RAG上下文丢失:Late Chunking 与 Contextual Retrieval 深度对比解析
  • 【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)
  • OTA中版本灰度发布、用户反馈闭环浅谈
  • 深度解构:Profinet转Profibus网关如何重塑产品分离装置的控制逻辑
  • 【测试】设计测试⽤例方法
  • 键盘录入的两套体系区别(Random)
  • 【速通RAG实战:进阶】16、AI生成思维导图全技术解析
  • SpringBoot(五)--- 异常处理、JWT令牌、拦截技术
  • python的高级2——函数作为对象
  • ⚽【足球数据全维度解析】从基础统计到高阶分析,数据如何重塑现代足球?
  • 中国国运新引擎:下一代液晶技术突破如何重塑全球显示格局
  • 通过粘性布局实现表格且带有固定列
  • 文件夹的命名与分类
  • Geoserver修行记--点击geoserver服务的WMTS能力(GetCapabilities)文档显示400 null
  • 第五十九节:性能优化-GPU加速 (CUDA 模块)