实现el-selet中分组显示option

35 篇文章 0 订阅
15 篇文章 0 订阅

1、官网是这样处理得,但是前提是一次性从后台接口获取数据后展示得

<template>
  <el-select v-model="value" placeholder="Select" style="width: 240px">
    <el-option-group
      v-for="group in options"
      :key="group.label"
      :label="group.label"
    >
      <el-option
        v-for="item in group.options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-option-group>
  </el-select>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

const value = ref('')
const options = [
  {
    label: 'Popular cities',
    options: [
      {
        value: 'Shanghai',
        label: 'Shanghai',
      },
      {
        value: 'Beijing',
        label: 'Beijing',
      },
    ],
  },
  {
    label: 'City name',
    options: [
      {
        value: 'Chengdu',
        label: 'Chengdu',
      },
      {
        value: 'Shenzhen',
        label: 'Shenzhen',
      },
      {
        value: 'Guangzhou',
        label: 'Guangzhou',
      },
      {
        value: 'Dalian',
        label: 'Dalian',
      },
    ],
  },
]
</script>

2、如果想使用远程搜索得el-select且又想每次查询时分组展示,可以这样

<el-col :span="10">
	<el-form-item label="所属作者" prop="talentsNameArr">
		<el-select v-model="serviceForm.talentsNameArr" filterable remote
				   placeholder="请选择" remote-show-suffix @change="changeTalentTag" @focus="talentData('')"
				   :remote-method="addKeywordsStandard" :loading="false" :disabled="disabled1" style="width: 20rem;" value-key="id">
			<el-option v-for="talents in talentOptions" :key="talents.id" :label="talents.name" :value="talents" :class="{'highlight':talents.enterPriseName==='手动输入'}">
				<div>
					<span style="float: left">{{ talents.name }}</span>
					<span style="float: right;color: var(--el-text-color-secondary);font-size: 13px;">{{talents.enterPriseName }}</span>
				</div>
			</el-option>
		</el-select>
	</el-form-item>
</el-col>

@focus事件中处理逻辑

const talentData = async (query) => {
    talentOptions.value = await getTalentList(query);
    if(query){
        talentOptions.value.unshift({id: '', name: query, entityId: '', enterPriseName: '手动输入'});
    }
};

//添加人才

const addKeywordsStandard = (query) => {

  if (query) {

    talentData(query);

    // setTimeout(() => {

    //   talentOptions.value = talentOptions.value.filter((item) => {

    //     return item.name.toLowerCase().includes(query.toLowerCase())

    //   })

    // }, 200);

  }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吱吱喔喔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值