首页 > 其他分享 >element多选下拉框与文本框联动

element多选下拉框与文本框联动

时间:2023-08-10 15:59:10浏览次数:55  
标签:comment param element tag 文本框 ele 下拉框 workContent

1. 需求

  1. 多选下拉框与文本框联动
  2. 从不同页面跳转,多选框的显示与隐藏

2. 效果图

3. 原始人真的来写代码了

Element UI 可多选下拉框

<template>
	<el-col :span="6">
  <label>工作内容</label>
</el-col>

<el-col :span="18">
  <el-form-item prop="comment">
	<div class="task-sm-main">
	  <el-select
		v-if="isWorkContentSelectorVisible"
		v-model="workContent"
		placeholder="请选择工作内容"
		size="medium"
		style="width: 100%;height: 36px;"
		clearable
		multiple
		collapse-tags
		@change="handlerWorkChange"
		@remove-tag="removeTags"
>
		<el-option
		  v-for="item in workContentList"
		  :key="item.id"
		  :label="item.name"
		  :value="item.name"
		/>
	  </el-select>
	  <el-input
		@blur="handlerCommentClear"
		type="textarea"
		rows="1"
		class="textareaHeight"
		:class="{
		  borderTop: isWorkContentSelectorVisible
		}"
		v-model="param.comment"
></el-input>
	</div>
  </el-form-item>
</el-col>
</template>
export default {
	data() {
		param: {
			comment:""
			// ...
		},
	    workContentList: [], // 后台返回的工作内容下拉框数据
	    workContent: [], // 开启多选后,下拉框选中的tags v-model绑定
	    tagCount: 0, // tags数量
	    isWorkContentSelectorVisible: false //下拉框是否可见
	    // 表单验证
	    rules:{
		   	comment: [
	           { required: true, message: "请输入工作内容", trigger: "blur" }
         ],
         // ...
	   },
	},
	mounted() {
		if() {
		// 下拉框可见,borderTop class 为 true
			this.isWorkContentSelectorVisible = true;
		} else {
		}
	},
	methods: {
		// 选中值发生变化时触发,参数为目前选中的值
	    handlerWorkChange(tag) {
	      // 新增选项
	      if (this.tagCount < tag.length) {
	        this.param.comment += tag[tag.length - 1];
	      } else {
	      // 取消某项
	        let str = this.param.comment;
	        // 未选项数组(不知道怎么获取到取消选中的值,所以多走十年弯路)
	        const unSelectedTag = [];
	        this.workContentList.forEach(ele => {
	          if (!tag.includes(ele.name)) {
	            unSelectedTag.push(ele.name);
	          }
	        });
	        // 其实当前取消选中的项只有一个,但这里只能遍历所有未选项,什么马拉松
	        unSelectedTag.forEach(item => {
	          str = str.split(`${item}`).join("");
	        });
	        this.param.comment = str;
	      }
	      this.tagCount = tag.length;
	    },
		// 多选模式下移除tag时触发,参数为移除的tag值
	    removeTags(tag) {
	      this.param.comment = this.param.comment.split(`${tag}`).join("");
	    },
		// 文本域失焦
	    handlerCommentClear() {
	      const that = this;
	      // 清空文本域 ? 这个if好像不需要单独写,好叭,能跑就是成功
	      if (this.param.comment === "" || this.param.comment == undefined) {
	        this.workContent = [];
	        this.tagCount = 0;
	      } else {
	      // 遍历下拉框所有数据,是否存在不在comment中的项
	        this.workContentList.forEach(ele => {
	          if (!this.param.comment.includes(ele.name)) {
	          // 过滤掉清除的项后的新数组
	            const tempArr = that.workContent.filter(item => {
	              return item != ele.name;
	            });
	            this.workContent = tempArr;
	            this.tagCount = this.workContent.length;
	          }
	        });
	      }
	    }
    }
}
  .el-textarea__inner {
	border: none !important;
	width: 100%;
	height: 100%;
  }
  
   .task-sm-main {
	display: flex;
	flex-direction: column;
	height: 96px !important;
  }
  
  /* 文本框的上边框 */ 
  .borderTop {
    border-top: 1px solid #9d9898;
  }

  .textareaHeight {
	width: 100%;
	/* selector height 固定 36px,文本域在下拉框存在与否时都自动占满剩余高度 */ 
	flex: 1;
	overflow: hidden;
  }

标签:comment,param,element,tag,文本框,ele,下拉框,workContent
From: https://www.cnblogs.com/pupyy/p/17620491.html

相关文章

  • element 表单规则所有属性中文(el-from rules)
    RulesRulesmaybefunctionsthatperformvalidation.function(rule,value,callback,source,options)rule:Object{"field":"name",//检查的属性的名"fullField":"name",//"type":"strin......
  • elementui el-tree的使用方法
    el-tree一般用于节点下有很多子节点接口返回的数据格式,可以无线子节点deptOptions:[{"id":"1686631142746230785","label":"小王测试部门","children":[{"id&......
  • Wordpress:如何使用Elementor给页面Button做跳转页面锚点定位?
    网站页面有的关键部分不一定在页面首屏,但是如果其它页面有时候需要做跳转,比如联系框,需要直接跳转到联系框的实际位置,在使用Elementor插件的情况下,如何实现呢?前端技术告诉我们,要实现点击a标签或者按钮跳转到指定位置,可以使用id定位,并在跳转链接后加入#符号附带该ID即可如: ......
  • vue+el-tree 通过下拉框选中节点,定位到当前节点,并高亮
    此处为下拉选择器:<el-selectref="searchSelect"v-model="filter"filterableremotesize="mini"clearableplaceholder="请输入关键词":remo......
  • Element-Plus 学习笔记一
    这几天在学vue3,用Element-plus加vue3搭了个框架,在这里记录一下项目搭建中遇到的问题。 1、使用Element-plus的icon图标,显示不出来  首先,用命令行中安装 Element-plus的图标:npminstall@element-plus/icons-vue--save  然后,在main.js中进行全局......
  • vue3 + ElementPlus 封装函数式弹窗组件
    需求场景:弹窗组件需要支持自定义的插槽内容,删除的弹窗也要使用这个组件,只是样式不一样而已,希望在父组件使用删除弹窗的时候直接调用某个方法就可以显示弹窗组件模拟cuDialog假设我的弹窗组件有以下的props和事件dialogVisible:控制弹窗显示和隐藏title:弹窗的标题showClose......
  • Vue3+ElementPlus,Module parse failed: Unexpected token (3:27)
    一、环境vue3,ElementPlus,@vue/cli5.0.8,npm 9.6.7。我在复制elementplus官网的一些代码到vue3框架里测试时出现的问题。二、不报错方法图片位置删除lang=“ts”就不报错了 ......
  • vue-element-admin的安装以及安装报错处理
    一、vue-element-admin git地址https://github.com/PanJiaChen/vue-element-admin 二、分支master:主分支,(纯英文)il8n:中英文切换分支 三、npminstall安装报错原因: tui-editor 已更新,故造成错误,修改如下 四、 安装报错处理1、修改package.json文件......
  • Vue3+ElementPlus,Cannot read properties of null (reading 'isCE')
    一、环境vue3,ElementPlus,@vue/cli5.0.8,npm9.6.7。二、报错内容在vue3框架,views文件夹下的AboutView.vue文件里,执行<el-button>Default</el-button>语句就会报错如下:Uncaughtruntimeerrors:×ERRORCannotreadpropertiesofnull(reading'isCE')TypeError:Cannotread......
  • QComboBox在ubuntu下不显示滚动条问题,下拉框出现位置不固定问题,设置显示最大数量不生
    这里的Ubuntu指的是银河麒麟,问题也是在麒麟下出现的。没有在Ubuntu试过是否有同样的问题。但是估计也差不多,毕竟国产系统跟Ubuntu本来就纠缠不清。用QT写了一个QComboBox,自定义了一些样式,在Windows下显示正常,但是在Ubuntu下不显示滚动条,下拉框位置根据当前选项变化而不是固定显示......