复制粘贴即可:
一、定义table组件
<template>
	<div class='main'>
		<div>
			<el-table ref="multipleTableRef" :height="height" :default-expand-all="isExpend" :data="treeTableData"
				style="width: 100%; margin-bottom: 20px" row-key="id" border>
				<el-table-column :width="item.width" :fixed="item.fixed" show-overflow-tooltip align="center"
					v-for="(item, i) in treeTableProps" :key="i" :label="item.label">
					<template #default="scope">
						<!-- 自定义插槽展示 -->
						<slot v-if="item.slot" :name="item.prop" :scope="scope"></slot>
						<!-- 非自定义处理(判空) -->
						<span v-else-if="scope.row[item.prop] === '' || scope.row[item.prop] === null">--</span>
						<!-- 非自定义处理(正常展示) -->
						<span v-else>{{ scope.row[item.prop] }}</span>
					</template>
				</el-table-column>
			</el-table>
		</div>
	</div>
</template>
<script lang="ts" setup>
import { ref, reactive, getCurrentInstance, onMounted } from 'vue'
interface Props {
	// 属性名
	prop: string,
	// 属性标签
	label: string,
	// 是否固定(非必填)
	fixed?: boolean,
	// 行宽(非必填)
	width?: number,
	// 是否显示插槽(非必填)
	slot?: boolean,
}
const props = defineProps({
	/** 表格数据 */
	treeTableData: {
		type: Array,
		default: null,
		required: true
	},
	/** 表格属性 */
	treeTableProps: {
		type: Array<Props>,
		default: null,
		required: true
	},
	/** 是否默认全部展开 */
	isExpend: {
		type: Boolean,
		default: false,
		required: false
	},
	/** 表格高度 */
	height: {
		type: String,
		default: '60vh',
		required: false
	}
})
onMounted(() => {
})
</script>
<style scoped lang='less'>
//添加你想设置的样式
</style> 
二、在父组件中使用
<template>
  <div class='main'>
    <TableTree :treeTableData="tableData" :treeTableProps="treeTableProps">
      <!-- 插槽展示 -->
      <template #address>
        <el-input size="small" placeholder="Type to input" />
      </template>
    </TableTree>
  </div>
</template>
<script lang='ts' setup>
import TableTree from '@/components/BaseTableTree/index.vue'
import { ref, reactive, getCurrentInstance, onMounted } from 'vue'
// 定义表格数据接口
interface User {
  id: number
  date: string
  name: string
  address: string
  hasChildren?: boolean
  children?: User[]
}
// 定义表格头部属性名
const treeTableProps = [
  { prop: 'date', label: '日期', width: 300, fixed: true, },
  { prop: 'name', label: '名称', },
  { prop: 'address', label: '地址', slot: true, },
]
// 定义表格假数据
const tableData: User[] = [
  {
    id: 1,
    date: '2016-05-04',
    name: '',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 2,
    date: '2016-05-04',
    name: '小明',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 3,
    date: '2016-05-01',
    name: '小明',
    address: 'No. 189, Grove St, Los Angeles',
    children: [
      {
        id: 31,
        date: '2016-05-01',
        name: '小明',
        address: 'No. 189, Grove St, Los Angeles',
        children: [
          {
            id: 311,
            date: '2016-05-01',
            name: '小明',
            address: 'No. 189, Grove St, Los Angeles',
          },
          {
            id: 312,
            date: '2016-05-01',
            name: '小明',
            address: 'No. 189, Grove St, Los Angeles',
          }
        ]
      },
      {
        id: 32,
        date: '2016-05-01',
        name: '小明',
        address: 'No. 189, Grove St, Los Angeles',
      },
    ],
  },
  {
    id: 4,
    date: '2016-05-03',
    name: '小明',
    address: 'No. 189, Grove St, Los Angeles',
  },
]
onMounted(() => {
})
</script> 




















