实现效果

在这里插入图片描述

一、JSX安装

由于vite搭建的项目默认不支持jsx,需要先安装@vitejs/plugin-vue-jsx插件并在vite.config.js中配置:

//yarn
yarn add @vitejs/plugin-vue-jsx -D
//npm
npm install @vitejs/plugin-vue-jsx -D

vite.config.js配置

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from '@vitejs/plugin-vue-jsx';

export default defineConfig({
  plugins: [vue(),vueJsx()]
 }

二、VUE文件里使用

<template>
          <el-auto-resizer>
            <template #default="{ height, width }">
              <el-table-v2
                :columns="columns"
                :data="datas"
                :width="width"
                :height="tableHeight"
                fixed
              />
            </template>
          </el-auto-resizer>
</template>

<script lang="jsx" setup>
import { ref } from "vue";


let id = 0

const dataGenerator = () => ({
  id: `random-id-${++id}`,
  name: 'Tom',
  date: '2020-10-1',
})


const SelectionCell = ({
  value,
  intermediate = false,
  onChange,
}) => {
  return (
    <ElCheckbox
      onChange={onChange}
      modelValue={value}
      indeterminate={intermediate}
    />
  )
}


const columns = [
  {
    key: 'date',
    title: 'Date',
    dataKey: 'date',
    width: 150,
    cellRenderer: ({ cellData: date }) => (
      <ElTooltip content={date}>
        {
          <span class="flex items-center">
            <ElIcon class="mr-3">
              <Timer />
            </ElIcon>
            {date}
          </span>
        }
      </ElTooltip>
    ),
  },
  {
    key: 'name',
    title: 'Name',
    dataKey: 'name',
    width: 300,
    align: 'center',
    cellRenderer: ({ cellData: name }) => <ElTag>{name}</ElTag>,
  },
  {
    key: 'operations',
    title: 'Operations',
    width: 250,
    cellRenderer: (cellData) => (
      <>
        <ElButton size="small" link onClick={downLoadThis.bind(this, cellData)}>导出Excel</ElButton>
        <ElButton size="small" type="danger">
          计算汇总结果
        </ElButton>
      </>
    ),
    align: 'center',
  },
]

const datas = ref(Array.from({ length: 1600 }).map(dataGenerator))


columns.unshift({
  key: 'selection',
  width: 50,
  cellRenderer: ({ rowData }) => {
    const onChange = (value) => (
      rowData.checked = value
      )
      
    return <SelectionCell value={rowData.checked} onChange={onChange} />
  },
  headerCellRenderer: () => {
    const _data = unref(datas)
    const onChange = (value) =>
      (datas.value = _data.map((row) => {
        row.checked = value
        return row
      }))
    const allSelected = _data.every((row) => row.checked)
    const containsChecked = _data.some((row) => row.checked)

    return (
      <SelectionCell
        value={allSelected}
        intermediate={containsChecked && !allSelected}
        onChange={onChange}
      />
    )
  },
})

/** 点击事件  */
const downLoadThis = (row) => {
  console.log(row.rowData);
};



</script>


GitHub 加速计划 / eleme / element
15
2
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:2 个月前 )
c345bb45 1 年前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 1 年前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐