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>

相关推荐
AAA阿giao1 分钟前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
亦妤12 分钟前
JS执行机制、作用域及作用域链
javascript
兆子龙1 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构
兆子龙2 小时前
用 Auto.js 实现挂机脚本:从找图点击到循环自动化
前端·架构
SuperEugene2 小时前
表单最佳实践:从 v-model 到自定义表单组件(含校验)
前端·javascript·vue.js
昨晚我输给了一辆AE862 小时前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript
不会敲代码12 小时前
深入浅出 React 闭包陷阱:从现象到原理
前端·react.js
不会敲代码12 小时前
React性能优化:深入理解useMemo和useCallback
前端·javascript·react.js
Dilettante2582 小时前
我的 Monorepo 实践经验:从基础概念到最佳实践
前端·前端工程化
只会cv的前端攻城狮2 小时前
Elpis-Core — 融合 Koa 洋葱圈模型实现服务端引擎
前端·后端