Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能,如下图所示:

在项目中,我们自己实现了全选清空功能,如下所示:

代码如下所示:

<!--
=========================================================
* 参数配置 - 风力发电 - 曲线图
* 猴王软件学院 - 大强
* 2025-3-23
=========================================================
-->
<template><div><div class="flex-container"><div class="flex-item"><a-selectid="a-select-scene":options="options_scene"mode="combobox"style="width: 200px; height:50px;"@change="proChange_scene"showArrow="true"placeholder="请选择场景"v-model="selected_scene"></a-select></div><div class="flex-item"><a-selectid="a-select-node":options="options_node"mode="multiple"style="width: 200px; height:50px;"@change="proChange_node"showArrow="true"v-model:value="selected_node"><template #dropdownRender="{ menuNode: menu }"><div><a-button @click="allSelectedFun" type="primary" style="margin-right: 10px;">全选</a-button><a-button @click="clearFun">清空</a-button><a-divider style="margin: 5px 0;" /><v-nodes :vnodes="menu" /></div></template></a-select><div class="my-ant-select-selection-placeholder">请选择节点</div></div><div class="flex-item"><a-selectid="a-select-power":options="options_power"mode="combobox"style="width: 200px; height:50px;"@change="proChange_power"showArrow="true"placeholder="请选择功率"v-model="selected_power"></a-select></div><div class="flex-item"><a-button type="primary" preIcon="ant-design:search-outlined" @click="searchChart">查看</a-button></div></div><div ref="chartRef" :style="{ height, width }"></div></div>
</template>
<script lang="ts">
import {defineComponent, PropType, ref, Ref, reactive, watchEffect, unref, onMounted} from 'vue';
import {useECharts} from '/@/hooks/web/useECharts';
import {cloneDeep} from 'lodash-es';
import {Select} from "ant-design-vue";
import {initDictOptions} from "@/utils/dict";export default defineComponent({name: 'LineMulti',components: {Select,VNodes: (_, { attrs }) => {return attrs.vnodes;},},props: {chartData: {type: Array,default: () => [],required: true,},option: {type: Object,default: () => ({}),},type: {type: String as PropType<string>,default: 'line',},width: {type: String as PropType<string>,default: '100%',},height: {type: String as PropType<string>,default: 'calc(100vh - 78px)',},},emits: ['click'],setup(props, {emit}) {const chartRef = ref<HTMLDivElement | null>(null);const {setOptions, getInstance} = useECharts(chartRef as Ref<HTMLDivElement>);const option = reactive({tooltip: {trigger: 'axis',axisPointer: {type: 'shadow',label: {show: true,backgroundColor: '#333',},},},legend: {top: 30,},grid: {top: 60,},xAxis: {name: '时间(小时)',type: 'category',data: [],},yAxis: {name: '功率(万千瓦)',type: 'value',},series: [],});// 功率let options_power = ref<any>([]);let selected_power = ref('');// 场景let options_scene = ref<any>([]);let selected_scene = ref('');// 节点let options_node = ref<any>([]);// let selected_node = ref('');let selected_node = ref([]);/*** 功率改变函数* @param val*/function proChange_power(val) {selected_power.value = val;}/*** 场景改变函数* @param val*/function proChange_scene(val) {selected_scene.value = val;}/*** 节点改变函数* @param val*/function proChange_node(val) {selected_node.value = val;}// 全选函数function allSelectedFun() {options_node.value.forEach((item) => {let index = selected_node.value.indexOf(item.value);if (index == -1) {selected_node.value.push(item.value);}});};// 清空函数function clearFun() {selected_node.value.splice(0, selected_node.value.length);};/*** 查看图表*/function searchChart() {if (selected_scene.value == '') {alert("请选择场景!")return}if (selected_node.value == '') {alert("请选择节点!")return}if (selected_power.value == '') {alert("请选择功率!")return}if (props.option) {Object.assign(option, cloneDeep(props.option));}//节点let nodeArr = Array.from(new Set(props.chartData.map((item) => item.nodeName)));//轴数据let xAxisData = Array.from(new Set(props.chartData.map((item) => item.index)));let seriesData = [];nodeArr.forEach((node) => {selected_node.value.forEach((value) => {if (node === value) {let obj: any = {name: node, type: props.type};// update-begin-author:liusq date:2023-7-12 for: [issues/613] LineMulti 在数据不对齐时,横坐标计算错误let data = [];xAxisData.forEach((x) => {let dataArr = props.chartData.filter((item) =>x == item.index &&  // 索引selected_power.value == item.power &&  // 功率selected_scene.value == item.scene &&  // 场景node == item.nodeName // 节点);if (dataArr && dataArr.length > 0) {data.push(dataArr[0].value);} else {data.push(null);}});// update-end-author:liusq date:2023-7-12 for: [issues/613] LineMulti 在数据不对齐时,横坐标计算错误//data数据obj['data'] = data;seriesData.push(obj);}});});option.series = seriesData;option.xAxis.data = xAxisData;// option.legend.show = false;option.legend.selector = [{// 全选type: 'all',// 可以是任意你喜欢的标题title: '全选'},{// 反选type: 'inverse',// 可以是任意你喜欢的标题title: '反选'}];option.legend.selectedMode = false;option.legend.orient = 'vertical';option.legend.right = '0px';// option.legend.top = '-50px';console.log('option', option);setOptions(option);getInstance()?.off('click', onClick);getInstance()?.on('click', onClick);}function onClick(params) {emit('click', params);}/*** 初始化字典选项*/async function initDictConfig() {options_power.value = await initDictOptions('power');options_scene.value = await initDictOptions('scene');options_node.value = await initDictOptions('node');}onMounted(() => {//初始化字典选项initDictConfig();});return {options_power, options_scene, options_node,selected_power, selected_scene, selected_node,proChange_power, proChange_scene, proChange_node, chartRef, searchChart,allSelectedFun, clearFun};},
});
</script><style>
.flex-container {display: -webkit-flex;display: flex;
}.flex-item {width: 210px;
}.ant-select-multiple .ant-select-selection-overflow-item {flex: none;align-self: center;max-width: 100%;display: none;
}.my-ant-select-selection-placeholder {overflow: hidden;white-space: nowrap;text-overflow: ellipsis;flex: 1;color: rgba(0, 0, 0, 0.65);pointer-events: none;margin-top: -45px;margin-left: 20px;position: relative;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CaiT (Class-Attention in Image Transformers):深度图像Transformer的创新之路

CaiT (Class-Attention in Image Transformers)&#xff1a;深度图像Transformer的创新之路 近年来&#xff0c;Transformers 模型在自然语言处理领域的成功逐渐扩展到了计算机视觉领域&#xff0c;尤其是图像分类任务中&#xff0c;Vision Transformer (ViT) 的提出打破了卷积…

Qt之MVC架构MVD

什么是MVC架构&#xff1a; MVC模式&#xff08;Model–view–controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controll…

数组,指针 易混题解析(二)

目录 一.基础 1. 2. 二.中等 1. 坑 2. 3.指针1到底加什么 三.偏难 1.&#xff08;小端 x86&#xff09; 2.通过数组指针进行偏移的时候怎么偏移 3. 大BOSS &#xff08;1&#xff09;**cpp &#xff08;2&#xff09;*-- * cpp 3 &#xff08;3&#xff09;*c…

数据建模流程: 概念模型>>逻辑模型>>物理模型

数据建模流程 概念模型 概念模型是一种高层次的数据模型&#xff0c;用于描述系统中的关键业务概念及其之间的关系。它主要关注业务需求和数据需求&#xff0c;而不涉及具体的技术实现细节。概念模型通常用于在项目初期帮助业务人员和技术人员达成共识&#xff0c;确保对业务需…

spring-security原理与应用系列:建造者

目录 1.构建过程 AbstractSecurityBuilder AbstractConfiguredSecurityBuilder WebSecurity 2.建造者类图 SecurityBuilder ​​​​​​​AbstractSecurityBuilder ​​​​​​​AbstractConfiguredSecurityBuilder ​​​​​​​WebSecurity 3.小结 紧接上一篇文…

结合代码理解Spring AOP的概念(切面、切入点、连接点等)

前情回顾 对AOP的理解 我这篇文章介绍了为什么要有AOP&#xff08;AOP解决了什么问题&#xff09;以及如何实现AOP。但在实现AOP的时候&#xff0c;并未探讨AOP相关概念&#xff0c;例如&#xff1a;切面、切入点、连接点等。因此&#xff0c;本篇文章希望结合代码去理解Spring…

【AI大模型】搭建本地大模型GPT-NeoX:详细步骤及常见问题处理

搭建本地大模型GPT-NeoX:详细步骤及常见问题处理 GPT-NeoX是一个开源的大型语言模型框架,由EleutherAI开发,可用于训练和部署类似GPT-3的大型语言模型。本指南将详细介绍如何在本地环境中搭建GPT-NeoX,并解决过程中可能遇到的常见问题。 1. 系统要求 1.1 硬件要求 1.2 软…

Copilot提示词库用法:调整自己想要的,记住常用的,分享该共用的

不论你是 Microsoft 365 Copilot 的新用户还是熟练运用的老鸟&#xff0c;不论你是使用copilot chat&#xff0c;还是在office365中使用copilot&#xff0c;copilot提示词库都将帮助你充分使用copilot这一划时代的产品。它不仅可以帮助你记住日常工作中常用的prompt提示词&…

Spring:AOP

一、AOP概念的引入 为了更好地介绍AOP&#xff0c;我们以登录作为示例。 首先&#xff0c;我们先来看一下登录的原理&#xff1a; 如图所示&#xff0c;这是一个基本的登录原理图&#xff0c;但是如果我们想要在这个登录过程上再添加一些新的功能&#xff0c;比如权限校验&am…

Ubuntu实时读取音乐软件的音频流

文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的&#xff0c;我需要在Ubuntu中&#xff0c;实时读取正在播放音乐的音频流&#xff0c;然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现&#xff0c;好处是可以直接利用Helvum…

CUDA 学习(4)——CUDA 编程模型

CPU 和 GPU 由于结构的不同&#xff0c;具有不同的特点&#xff1a; CPU&#xff1a;擅长流程控制和逻辑处理&#xff0c;不规则数据结构&#xff0c;不可预测存储结构&#xff0c;单线程程序&#xff0c;分支密集型算法GPU&#xff1a;擅长数据并行计算&#xff0c;规则数据结…

前端会话控制技术:cookie/session/token

目录 前端中的 Cookie、Session 和 Token&#xff1a;详解与应用1. Cookie1.1 什么是 Cookie&#xff1f;1.2 Cookie 的工作原理1.3 Cookie 的特点1.4 Cookie 的用途1.5 Cookie 的安全性 2. Session2.1 什么是 Session&#xff1f;2.2 Session 的工作原理2.3 Session 的特点2.4…

MATLAB实现基于“蚁群算法”的AMR路径规划

目录 1 问题描述 2 算法理论 3 求解步骤 4 运行结果 5 代码部分 1 问题描述 移动机器人路径规划是机器人学的一个重要研究领域。它要求机器人依据某个或某些优化原则 (如最小能量消耗&#xff0c;最短行走路线&#xff0c;最短行走时间等)&#xff0c;在其工作空间中找到一…

Shopify Checkout UI Extensions

结账界面的UI扩展允许应用开发者构建自定义功能&#xff0c;商家可以在结账流程的定义点安装&#xff0c;包括产品信息、运输、支付、订单摘要和Shop Pay。 Shopify官方在去年2024年使用结账扩展取代了checkout.liquid&#xff0c;并将于2025年8月28日彻底停用checkout.liquid…

电阻的阻值识别

电阻买回来是有偏差的&#xff0c;不同的电阻种类&#xff0c;它的偏差大小会不一样&#xff0c;偏差越小的肯定越贵 主要看要求的精度要求是否越高 色环电阻或者说插件电阻 用来读数的几个色环它是比较靠近的&#xff0c;精度的色环跟用来读数的几个色环的间距会大一点点。 间…

quartz.net条件执行

quartz.net条件执行 在使用Quartz.NET时&#xff0c;你可能需要基于某些条件来决定是否执行一个任务。Quartz.NET本身并不直接支持基于条件执行任务的功能&#xff0c;但你可以通过一些策略来实现这一需求。下面是一些方法来实现基于条件的任务执行&#xff1a; 1. 使用触发器…

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统&#xff08;四&#xff09; 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结&#xff08;核心概念速记&#xff09;&#xf…

NSSCTF(MISC)——[SUCTF 2018 招新赛]single-dog

相应的做题地址&#xff1a;https://www.nssctf.cn/problem/2324 分离图片 在1.txt中得到一段颜文字 http://www.hiencode.com/aaencode.html 解密得到flag

低功耗蓝牙(BLE)方案设计实战指南

一、BLE方案设计工具链 1. 硬件选型与开发平台 TI平台&#xff1a;CC2540/CC2541芯片&#xff0c;使用SmartRF Flash Programmer烧录Nordic平台&#xff1a;nRF51822芯片&#xff0c;使用nRFgo Studio管理协议栈常用调试工具&#xff1a;TI CC Debugger、J-Link&#xff08;SW…

网络基础(一)

独立模式与网络互联 独立模式: 计算机之间相互独立。 网络互联&#xff1a;多台计算机连接在一起&#xff0c;完成数据共享。 注意&#xff1a;无论是主机内还是主机外&#xff0c;都是通过线来进行连接的&#xff0c;主机内线&#xff08;线比较短&#xff09;的连接主要考虑…