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 分钟前
Vue移动端开发的适配方案与性能优化技巧
前端·javascript·vue.js
王琦031810 分钟前
Python 0909
前端·javascript·python
ss27315 分钟前
基于Springboot + vue实现的高校大学生竞赛项目管理系统
vue.js·spring boot·后端
洗刷先生29 分钟前
uniapp 文件查找失败:main.js
前端
前端小巷子30 分钟前
JS 打造仿腾讯影视轮播导航
前端·javascript·面试
2501_9159214334 分钟前
前端开发工具有哪些?常用前端开发工具、前端调试工具、前端构建工具与效率提升工具对比与最佳实践
android·前端·ios·小程序·uni-app·iphone·webview
知否技术1 小时前
别再踩坑了!这份 Vue3+TypeScript 项目教程,赶紧收藏!
前端·typescript
IT_陈寒1 小时前
JavaScript 2024:10个颠覆你认知的ES新特性实战解析
前端·人工智能·后端
ホロHoro1 小时前
学习笔记:Javascript(5)——事件监听(用户交互)
javascript·笔记·学习
meng半颗糖1 小时前
JavaScript 性能优化实战指南
前端·javascript·servlet·性能优化