el-select多选以tag展示时,超过显示长度以...省略号显示

45 篇文章 1 订阅
17 篇文章 0 订阅

这里记录一个样式问题,我们知道element-ui给我们提供了多选时的tag形式展示,但是当tag标签过长时,会出现“溢出”的情况;

注意:① 一个tag文字过长需要溢出隐藏,超出部分… 显示
② 多个tag卡片溢出隐藏,超出部分…显示

比如我在设置第一个之后,第二个框要把上面那个禁止掉,多选的时候,需要对样式设置一下;

下面直接上代码:

模板文件代码如下:

<el-form-item label="应用Id" prop="client_id">
            <el-autocomplete
              v-model="temp.client_id"
              :fetch-suggestions="querySearchAsync"
              placeholder="请输入内容"
              clearable
              @select="handleSelect"
              @blur="selectBlur($event)"
            ></el-autocomplete>
          </el-form-item>
          <el-form-item label="授权应用" prop="client_ids">
            <el-select v-model="temp.client_ids" multiple collapse-tags style="width:223px;" placeholder="请选择">
              <el-option
                v-for="item in clientOptions"
                :key="item.value"
                :label="item.label"
                :disabled="item.disabled"
                :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>

 js代码如下:

export default {
  name:'UserRoleList',
    data() {
        return {
         
          rules: {
                client_id: [{ required: true, message: '客户端Id不能为空', trigger: 'change' }],
                client_ids: [{ required: true, message: '授权客户端不能为空', trigger: 'change' }],
          },
          temp: {
                id: undefined,
                client_id: '',
                client_ids: '',
              
          },
          timeout:  null,
          restaurants: [],
          clientOptions: [],
        }
    },
    created() {
    },
    mounted() {
         this.loadAll()
    },
    methods: {
     
       loadAll() {
           getClientId({}).then(response => {
               let options = response.data.items
               //设置多选下拉框
               this.setClientOptions(options)

               //处理单选下拉框的格式
               let formatOption = []
               options.forEach((item) => {
                   formatOption.push({
                       'value': item.name,
                   })
               })
               this.restaurants =  formatOption
           })
        },
        setClientOptions(options){
           if(options){
               options.forEach((item, index) => {
                   this.clientOptions.push({
                       'value': item.clientId,
                       'label': item.name,
                       'disabled': false,
                   })
               })
           }

         },
        querySearchAsync(queryString, cb) {
            var restaurants = this.restaurants;
            var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;

            clearTimeout(this.timeout);
            this.timeout = setTimeout(() => {
                cb(results);
            }, 50 * Math.random());
        },
        createStateFilter(queryString) {
            return (state) => {
                return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
            };
        },
        handleSelect(val) {
            if(!this.clientOptions) return
            //重置
            this.resetClientOptions()
            //在下拉多选框中过滤已经前一个下拉框选中的值
            this.clientOptions.forEach((item) => {
                if(val.value == item.label) {
                    item.disabled = true
                }

                //搜索值对应的名称
                let name = this.searchNameByclientOptions(val)
                //如果当前单选的在下拉多选中那么移除
                this.temp.client_ids.forEach((item2, index) => {
                     if(item2 == name){
                         this.temp.client_ids.splice(index, 1)
                     }
                })
            })
        },
        searchNameByclientOptions(val){
            let name = ''
            this.clientOptions.forEach((item) => {
                console.log(val.value, item.value, 8888)
                if(val.value == item.label) {
                    name = item.value
                }
            })
            return name
        },
        selectBlur(val){ //失去焦点如果下拉框的值为空,重置多选框
             if(!this.temp.client_id || this.temp.client_id == undefined) {
                 //重置
                 this.resetClientOptions()
             }
         },
        resetClientOptions(){
            this.clientOptions.forEach((item) => {
                item.disabled = false
            })
        }
    }
}

css样式设置如下:

<style lang="less" scoped>
  .el-select__tags-text {
    display: inline-block;
    max-width: 190px;
    @media (max-width: 1400px) {
      max-width: 42px;
    }
    overflow: hidden;
    text-overflow:ellipsis;
    white-space: nowrap;
  }
  .el-select .el-tag__close.el-icon-close {
    top: -7px;
    right: -4px;
  }
</style>

记得一定要设置:collapse-tags属性,这样就可以调整多选下拉框样式不会外溢了。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值