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>

相关推荐
橙露21 分钟前
React Hooks 深度解析:从基础使用到自定义 Hooks 的封装技巧
javascript·react.js·ecmascript
Exquisite.23 分钟前
Nginx
服务器·前端·nginx
2501_9209317034 分钟前
React Native鸿蒙跨平台使用useState管理健康记录和过滤状态,支持多种健康数据类型(血压、体重等)并实现按类型过滤功能
javascript·react native·react.js·ecmascript·harmonyos
打小就很皮...38 分钟前
dnd-kit 实现表格拖拽排序
前端·react.js·表格拖拽·dnd-kit
Ulyanov43 分钟前
从静态到沉浸:打造惊艳的Web技术发展历程3D时间轴
前端·javascript·html5·gui开发
打小就很皮...1 小时前
React 19 + Vite 6 + SWC 构建优化实践
前端·react.js·vite·swc
Highcharts.js1 小时前
使用Highcharts与React集成 官网文档使用说明
前端·react.js·前端框架·react·highcharts·官方文档
这是个栗子1 小时前
AI辅助编程(二) - 通译千问
前端·ai·通译千问
VT.馒头1 小时前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
数研小生2 小时前
Full Analysis of Taobao Item Detail API taobao.item.get
java·服务器·前端