You编程__封装ElementPlus通用组件(会持续更新...)

YOU编程__封装ElementPlus通用组件(会持续更新...)

1、通用表格组件

  • CommonTable.vue

    <template>
    <el-form :model="query" inline class="query-form"> <el-form-item> <el-input v-model="query.keyword" placeholder="请输入关键词"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="handleQuery">查询</el-button> </el-form-item> <el-form-item> <el-button type="primary" @click="handleAdd">添加</el-button> </el-form-item> </el-form> <el-table :data="tableData" class="data-table"> <el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label"></el-table-column> <el-table-column label="操作"> <template v-slot="scope"> <el-button type="text" @click="handleEdit(scope.row)">修改</el-button> <el-button type="text" @click="handleDelete(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-pagination background layout="prev, pager, next" :total="total" @current-change="handlePageChange" />
    </template> <script setup> import { ref, defineProps, defineEmits, watch } from 'vue' import { ElMessage } from 'element-plus'

    const props = defineProps({
    columns: {
    type: Array,
    required: true
    },
    data: {
    type: Array,
    required: true
    },
    total: {
    type: Number,
    required: true
    }
    })

    const emits = defineEmits(['query', 'add', 'pageChange', 'edit', 'delete'])

    const query = ref({
    keyword: ''
    })

    const tableData = ref(props.data)
    const totalRecords = ref(props.total)

    watch(() => props.data, (newData) => {
    tableData.value = newData
    })

    const handleQuery = () => {
    ElMessage.success('查询功能触发')
    emits('query', query.value)
    }

    const handleAdd = () => {
    ElMessage.success('添加功能触发')
    emits('add')
    }

    const handleEdit = (row) => {
    ElMessage.success('修改功能触发')
    emits('edit', row)
    }

    const handleDelete = (row) => {
    ElMessage.success('删除功能触发')
    emits('delete', row)
    }

    const handlePageChange = (page) => {
    ElMessage.success(当前页: ${page})
    emits('pageChange', page)
    }
    </script>

    <style> .query-form{ margin-top: 20px; } .data-table{ width: 100%; margin: 0px 0px 20px 0px; } </style>
  • 使用示例

    <template>
    <CommonTable :columns="columns" :data="tableData" :total="total" @query="handleQuery" @add="handleAdd" @edit="handleEdit" @delete="handleDelete" @pageChange="handlePageChange" />
    </template> <script setup> import { ref } from 'vue' import CommonTable from '@/components/CommonTable.vue'

    const columns = ref([
    { prop: 'name', label: '名称' },
    { prop: 'age', label: '年龄' },
    { prop: 'address', label: '地址' }
    ])

    const tableData = ref([
    { name: 'John Doe', age: 30, address: 'New York' },
    { name: 'Jane Doe', age: 25, address: 'Los Angeles' }
    ])

    const total = ref(50) // 假设总记录数为50

    const handleQuery = (query) => {
    console.log('查询条件:', query)
    // 在这里添加查询逻辑
    }

    const handleAdd = () => {
    console.log('触发添加功能')
    // 在这里添加添加逻辑
    }

    const handleEdit = (row) => {
    console.log('修改行:', row)
    // 在这里添加修改逻辑
    }

    const handleDelete = (row) => {
    console.log('删除行:', row)
    // 在这里添加删除逻辑
    }

    const handlePageChange = (page) => {
    console.log('当前页:', page)
    // 在这里添加分页逻辑
    }
    </script>

相关推荐
几何心凉1 分钟前
4 年融资 1 亿美金,ProtonBase 背后的技术雄心 |专访小质科技 CEO 王绍翾
前端
得物技术3 分钟前
得物研发自测 & 前端自动化测试体系建设
前端·测试
是忽然之间19 分钟前
vue对接帆软bi
前端
海底火旺21 分钟前
从零实现语音合成:基于火山引擎TTS的前端实践
前端·人工智能·react.js
jackeyfive21 分钟前
最快速搭建博客并部署到 GitHub Pages
前端·github
前端付豪23 分钟前
汇丰实时风控数据流揭秘:Kafka + Flink + CEP 规则引擎全链路实战
前端·后端·架构
Sibyllala27 分钟前
UE5.4——使用UltraDynamicSky实现天气切换和时间变化
前端
溪饱鱼38 分钟前
第七章: SEO与渲染方式 三
前端·seo
爱上妖精的尾巴1 小时前
3-16单元格区域尺寸调整(发货单记录保存-方法2)学习笔记
javascript·笔记·学习·wps·js宏·jsa
TE-茶叶蛋1 小时前
React & Vue 编译/运行流程
前端·vue.js·react.js