Skip to content

tableSelect 表格下拉

基础用法

vue
<script setup lang="ts">
const data = ref('')

const request = function ({ pageNo }: any) {
  return new Promise((resolve) => {
    setTimeout(() => {
      const data = {
        list: [
          { name: '张三' + pageNo, sex: '男', id: '' + pageNo + 1 },
          { name: '李四' + pageNo, sex: '女', id: '' + pageNo + 2 },
          { name: '王五' + pageNo, sex: '男', id: '' + pageNo + 3 },
          { name: '赵六' + pageNo, sex: '女', id: '' + pageNo + 4 },
          { name: '张三' + pageNo, sex: '男', id: '' + pageNo + 5 },
        ],
        total: 10,
      }
      resolve(data)
    }, 1500)
  })
}

const tableConfig: TableConfig = {
  column: [
    {
      title: '#',
      type: 'seq',
      width: 45,
      align: 'center',
    },
    {
      title: '姓名',
      field: 'name',
      align: 'center',
    },
    {
      title: '性别',
      align: 'center',
      slot: 'sex',
    },
  ],
  /* 实际开发应传入接口方法 */
  request: request,
  pageSize: 5,
}
</script>
<template>
  <el-table-select v-model="data" :tableConfig="tableConfig">
    <template #sex="{ row }">
      <el-tag size="small">{{ row.sex }}</el-tag>
    </template>
  </el-table-select>
</template>

自定义搜索

vue
<script setup lang="ts">
const tableSelectRef = ref()

const data = ref('')

const form = ref({
  name: '',
  sex: '',
})

const request = function ({ pageNo }: any) {
  return new Promise((resolve) => {
    setTimeout(() => {
      const data = {
        list: [
          { name: '张三' + pageNo, sex: '男', id: '' + pageNo + 1 },
          { name: '李四' + pageNo, sex: '女', id: '' + pageNo + 2 },
          { name: '王五' + pageNo, sex: '男', id: '' + pageNo + 3 },
          { name: '赵六' + pageNo, sex: '女', id: '' + pageNo + 4 },
          { name: '张三' + pageNo, sex: '男', id: '' + pageNo + 5 },
        ],
        total: 10,
      }
      resolve(data)
    }, 1500)
  })
}

const tableConfig: TableConfig = {
  column: [
    {
      title: '#',
      type: 'seq',
      width: 45,
      align: 'center',
    },
    {
      title: '姓名',
      field: 'name',
      align: 'center',
    },
    {
      title: '性别',
      align: 'center',
      slot: 'sex',
    },
  ],
  /* 实际开发应传入接口方法 */
  request: request,
  pageSize: 5,
}

/* 重新加载表格数据 */
const search = () => {
  tableSelectRef.value.reload({ pageNo: 1, ...form.value })
}
</script>
<template>
  <el-table-select v-model="data" :tableConfig="tableConfig">
    <template #top-extra>
      <el-form :model="form" label-width="40px">
        <el-row :gutter="15">
          <el-col :span="8">
            <el-form-item label="姓名">
              <el-input
                placeholder="请填写姓名"
                :maxLength="20"
                v-model="form.name"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别" prop="sex">
              <el-select
                placeholder="请选择性别"
                v-model="form.sex"
              ></el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-button type="primary" @click="search">查询</el-button>
          </el-col>
        </el-row>
      </el-form>
    </template>
    <template #sex="{ row }">
      <el-tag size="small">{{ row.sex }}</el-tag>
    </template>
  </el-table-select>
</template>

设置回显数据

vue
<script setup lang="ts">
const initValue = ref()
const initValue2 = ref()

const setInitValue = () => {
  /* 模拟接口响应 */
  setTimeout(() => {
    // 单选
    initValue.value = { name: '张三2', sex: '男', id: '21' }
    // 多选
    initValue2.value = [
      { name: '李四2', sex: '女', id: '22' },
      { name: '王五3', sex: '男', id: '33' },
      { name: '王五4', sex: '男', id: '43' },
      { name: '赵六4', sex: '女', id: '44' }
    ]
  }, 300)
}
</script>

<template>
  <!-- 将获取到的数据传入组件 -->
  <el-table-select :init-value="initValue">
</template>

属性

参数说明类型默认值可选值
modelValuev-modelString
placeholder提示文字String请选择
multiple是否多选Booleanfalsefalse
disabled是否禁用Booleanfalsetrue
size尺寸大小Stringdefaultlarge,default,small
clearable是否支持清除Booleantruefalse
valueKeyvalue 的属性名Stringid
labelKeylabel 的属性名Stringname
initValue回显数据Object
placementpopper 位置String详见 el-popover 位置
popperWidthpopper 宽度String560px
popperClasspopper 类名String
popperOptionspopper 选项Objectbottom详见 el-popover 位置
tableConfig表格配置TableConfig[]
tagType多选显示 tag 类型Stringinfo详见 el-tag 类型
maxTagCount显示 tag 数量Number5
transformData自定义数据转换方法Function

TableConfig

参数说明类型默认值可选值
column表格列配置TableColumn[]
request表格数据Function
pageSize每页显示条数Number

TableColumn

参数说明类型默认值可选值
type类型String
field列名String
title标题String
width表格宽度String
align对齐方式String
slot插槽String

事件

名称说明返回值
clear清除按钮点击事件
item-clear多选单个清除事件改变后的值
focus获取焦点事件e
blur失去焦点事件e
change值改变事件改变后的值

插槽

名称说明参数
top-extra表格头部插槽
bottom-extra表格底部插槽