schema-table.md 4.35 KB

Schema Table 方案表格

通过配置JSON Schema的方式快速生成一个表格

6a3e9fa03a9e62888fd3096196dcc68e3e3bb90a/examples/views/docs/component/schema-table.md#">基础用法

schema设置配置项,其中props参数与eagle-table组件参数相同,items则对应eagle-table组件的columns

::: snippet 本质上是通过schema的方式实现生成一个eagle-table

<template>
  <eagle-schema-table v-model="model" :schema="schema"></eagle-schema-table>
</template>

<script>
export default {
  data() {
    return {
      model: [
        { name: '张三', age: 16 },
        { name: '李四', age: 24 }
      ],
      schema: {
        items: [
          { label: '姓名', prop: 'name' },
          { label: '年龄', prop: 'age' },
        ]
      }
    }
  } 
}
</script>

:::

6a3e9fa03a9e62888fd3096196dcc68e3e3bb90a/examples/views/docs/component/schema-table.md#">自定义列

支持自定义列的内容

::: snippet 插槽header-列字段名可自定义表头的内容,插槽cell-列字段名可自定义列单元格的内容,用法与eagle-table相同。

<template>
  <eagle-schema-table v-model="tableData" :schema="schema">
    <template #header-age>年龄 <i class="el-icon-question"></i></template>
    <template #cell-gender="{ value }">
      <el-tag size="mini">{{ value }}</el-tag>
    </template>
  </eagle-schema-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: '31', gender: '男' },
        { name: '李四', age: '27', gender: '女' },
        { name: '王五', age: '16', gender: '男' },
      ],
      schema: {
        props: { border: true },
        items: [
          { prop: 'name', label: '姓名' },
          { prop: 'age', label: '年龄' },
          { prop: 'gender', label: '性别' },
        ]
      }
    };
  },
}
</script>

:::

6a3e9fa03a9e62888fd3096196dcc68e3e3bb90a/examples/views/docs/component/schema-table.md#">列渲染

除了使用插槽自定义列的内容之外,也支持直接在配置项中写渲染函数

::: snippet 配置项中的render可以设置对应列单元格的渲染

<template>
  <eagle-schema-table v-model="tableData" :schema="schema"></eagle-schema-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: '31', gender: '男', ticket: true },
        { name: '李四', age: '27', gender: '女', ticket: false },
        { name: '王五', age: '16', gender: '男', ticket: false },
      ],
      schema: {
        props: { border: true, size: 'mini' },
        items: [
          { prop: 'name', label: '姓名' },
          { prop: 'age', label: '年龄', render: (value, row, h) => h(Number(value) > 20 ? 'b' : 'span', { style: { color: Number(value) > 20 ? 'red' : 'green' } }, value) },
          { prop: 'gender', label: '性别', render: (value, row, h) => h('el-tag', { props: { size: 'mini', type: 'info' } }, value) },
          { prop: 'ticket', label: '开票', render: value => value ? '是' : '否' },
        ]
      }
    };
  },
}
</script>

:::

6a3e9fa03a9e62888fd3096196dcc68e3e3bb90a/examples/views/docs/component/schema-table.md#">追加列

使用配置项时,新增的列则默认追加在配置项列之后,使用left插槽可在表格的最左侧插入列,顺序在配置项列之前

::: snippet 用法与eagle-table相同

<template>
  <eagle-schema-table v-model="tableData" :schema="schema">
    <template #left>
      <el-table-column type="selection" width="40"></el-table-column>
      <el-table-column label="左侧的列">
        <template #default="{ $index }">
          内容 {{ $index }}
        </template>
      </el-table-column>
    </template>
    <el-table-column label="右侧的列" width="120">
      <template #default="{ $index }">
        第{{ $index + 1 }}行
      </template>
    </el-table-column>
  </eagle-schema-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: '31', gender: '男' },
        { name: '李四', age: '27', gender: '女' },
        { name: '王五', age: '16', gender: '男' },
      ],
      schema: {
        props: { size: 'mini', border: true } ,
        items: [
          { prop: 'name', label: '姓名' },
          { prop: 'age', label: '年龄' },
          { prop: 'gender', label: '性别' },
        ]
      }
    };
  },
}
</script>

:::

API

Attribute 属性

参数|说明|类型|可选值|默认值 -|-|-|-|- value | 表格数据 | Array | - | - schema | JSON Schema配置项列表 | Array | - | []

Events 事件

事件名称|说明|回调参数 -|-|- selection | 表格选中 | 选中项