Skip to content

自定义二级下拉面板

通过 item.type = custom 开启自定义二级下拉面板功能,并在 item.slotName 自定义对应的二级面板插槽名,对应的编辑态自定义面板插槽名为 ${item.slotName}-edit

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

const tags = ref([
  {
    'label': '选择人员',
    'field': 'autocomplete',
    'type': 'custom',
    'replace': true,
    'slotName': 'autocomplete',
    'value': '5656'
  }
])
const items = reactive([
  {
    label: '选择人员',
    field: 'autocomplete',
    type: 'custom',
    replace: true, // 支持单选
    slotName: 'autocomplete' // 定义此属性类型对应的插槽名,并在以下的模板层使用
  },
  {
    label: '其他自定义',
    field: 'other',
    type: 'custom',
    slotName: 'other' // 定义此属性类型对应的插槽名
  }
])

const onChange = (newFilters, oldFilters) => {
  console.log('changeEvent:', newFilters, oldFilters)
}

</script>

<template>
  <ClientOnly>
    <tiny-search-box v-model="tags" :items="items" editable @change="onChange">
      <!-- autocomplete对应的自定义二级面板 -->
      <template #autocomplete="scope">
        <div class="tvp-search-box__date-wrap">
          <div class="tvp-search-box__dropdown-title">选择人员</div>
          我是人员自定义面板
        </div>
      </template>
      <!-- other对应的自定义二级面板 -->
      <template #other="scope">
        <span @click.stop="scope.onConfirm({ value: 'other' })">other</span>
      </template>
      <!-- 编辑状态下:autocomplete对应的自定义面板 -->
      <template #autocomplete-edit="scope">
        <div class="tvp-search-box__date-wrap">
          <div class="tvp-search-box__dropdown-title">选择人员</div>
          我是人员自定义面板
        </div>
      </template>
      <!-- 编辑状态下:other对应的自定义二级面板 -->
      <template #other-edit="scope">
        <span @click="scope.onConfirm({ value: 'other' })">我是other对应的编辑态自定义面板</span>
      </template>
    </tiny-search-box>
  </ClientOnly>
</template>