ant design 里面的Select控件在多选模式下支持一键全选/空选

ant design 里面的Select控件在多选模式下支持一键全选/空选

在这里插入图片描述
html:
使用 dropdownRender 对下拉菜单进行自由扩展(可自定义下拉框里面的东西)。
是给下拉框的数据占位
是给按钮占位

<a-form-item label="接收单位" name="receiveOrgIdStr">
   <a-select
     v-model:value="formState.receiveOrgIdStr"
     style="width: 100%"
     mode="multiple"
     :maxTagCount="9"
     placeholder="请选择"
     @change="receiveOrgIdStrChange"
     :disabled="modelEditOrNewTitle === '详情'"
   >
     <template #dropdownRender="{ menuNode: menu }">
       <v-nodes :vnodes="menu" />
       <a-divider style="margin: 4px 0" />
       <div
         style="
           padding: 4px 8px;
           cursor: pointer;
           display: flex;
           justify-content: flex-end;
           align-items: center;
         "
       >
         <a-button @click="selectAll" size="small">全选</a-button>
         <a-button
           type="danger"
           style="margin: 8px"
           @click="clearAll"
           size="small"
           >清空</a-button
         >
       </div>
     </template>
     <a-select-option
       :value="item.name"
       v-for="(item, index) in receiveOrgIdStrStatus"
       :key="index"
       >{{ item.name }}</a-select-option
     >
   </a-select>
 </a-form-item>

组件库里面有
在这里插入图片描述

js:

import { Divider } from "ant-design-vue";
components: {
    ADivider: Divider,
    VNodes: (_, { attrs }) => {
      return attrs.vnodes;
    },
},

据情况而定获取下拉列表数据:

setup() {
	const queryNoticeDetailById = (id: Number) => {
	  confirmLoading.value = true;
	  post(API.appManage.queryNoticeDetailById, {
	    params: {
	      id: id,
	    },
	  })
	    .then((res: any) => {
	      formState.id = res.data.id;
	      formState.content = res.data.content ? res.data.content : "";
	      formState.title = res.data.title ? res.data.title : "";
	      res.data.firstImg ? formState.imgList.push(res.data.firstImg) : "";
	      res.data.secondImg ? formState.imgList.push(res.data.secondImg) : "";
	      res.data.thirdImg ? formState.imgList.push(res.data.thirdImg) : "";
	
	      formState.noticeType = res.data.noticeType ? res.data.noticeType : "";
	      //
	      formState.createTime = res.data.createTime
	        ? moment(res.data.createTime).format("YYYY-MM-DD HH:mm:ss")
	        : "";
	
	      // let list: Array<number> = [];
	      // receiveOrgIdStrStatus.value.forEach((item: any) => {
	      //   formState.receiveOrgIdStr?.forEach((itms: any) => {
	      //     if (item.name === itms) {
	      //       list.push(item.id);
	      //     }
	      //   });
	      // });
	      // let str = list.join(",");
	      let list: Array<string> = [];
	      if (res.data.receiveOrgIdList) {
	        let arr = res.data.receiveOrgIdList;
	        receiveOrgIdStrStatus.value.forEach((item: any) => {
	          arr.forEach((itms: any) => {
	            if (item.id === itms && res.data.sendOrganizationId !== itms) {
	              list.push(item.name);
	            }
	          });
	        });
	      }
	      formState.receiveOrgIdStr = list;
	      console.log(formState.imgList);
	      confirmLoading.value = false;
	    })
	    .catch((res) => {
	      confirmLoading.value = false;
	      message.error(res);
	    });
	};

事件:

	// 全选 -- 把数据源赋给select绑定的值
	const selectAll = () => {
	    let arr: any = [];
	    receiveOrgIdStrStatus.value.forEach((item: any) => {
	      arr.push(item.name);
	    });
	    formState.receiveOrgIdStr = arr;
	};
	// 清空 -- 清空select绑定的值
	const clearAll = () => {
	    formState.receiveOrgIdStr = [];
	};
	return {
	    selectAll,
	    clearAll,
	}
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值