vue表格静态

vue+element的静态表格,可直接复用更改为自己想要的样式。

1)界面如下:

2)代码如下:

<template>
    <div class="scene-container">
        <el-card class="card1">
            <el-form :inline="true" :model="formInline" class="demo-form-inline" size="small">
                <el-form-item label="场景名称">
                    <el-input v-model="formInline.scenename" placeholder="场景名称"></el-input>
                </el-form-item>
                <el-form-item label="描述">
                    <el-select v-model="formInline.des" placeholder="关键词">
                    <el-option label="杭州电子科技大学" value="1"></el-option>
                    <el-option label="云技术实验室" value="2"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" icon="el-icon-search" style="background:rgb(14,122,162)" @click="onSearch()">搜索</el-button>
                    <el-button icon="el-icon-refresh-left" @click="clearAll()">清空</el-button>
                </el-form-item>
            </el-form>
            <el-form :inline="true" :model="formInline2" class="demo-form-inline2" size="small">
                <el-form-item>
                    <el-button type="primary" style="background:rgb(14,122,162)"><i class="el-icon-plus"></i>新增</el-button>
                    <el-button type="primary" style="background:rgb(14,122,162)">编辑</el-button>
                    <el-button type="primary" style="background:rgb(14,122,162)">删除</el-button>
                    <el-button type="info">刷新数据</el-button>
                    <el-button type="warning">导出excel</el-button>
                    <el-button @click="toggleSelection()">取消选择</el-button>
                    <el-button type="danger">隐藏搜索栏</el-button>
                </el-form-item>
            </el-form>
            <div class="table-section">
                <span>当前表格已选择 0 项  </span>
                <el-button type="text" style="color:rgb(14,122,162)" @click="toggleSelection()">清空</el-button>
                <el-table :data="tableData" 
                    :header-cell-style="tableHeaderColor"
                    ref="multipleTable"
                    style="width: 100%" 
                    :row-class-name="tableRowClassName"
                    border
                    size="small"
                    @selection-change="handleSelectionChange">
                    <el-table-column type="selection" width="55" align="center"></el-table-column>
                    <el-table-column type="index" width="50" align="center"></el-table-column>
                    <el-table-column prop="date" label="日期" width="180" align="center"></el-table-column>
                    <el-table-column prop="name" label="姓名" width="180" sortable align="center"></el-table-column>
                    <el-table-column prop="address" label="地址" align="center"></el-table-column>
                    <el-table-column
                        prop="tag"
                        label="标签"
                        width="100"
                        :filters="[{ text: '学校', value: '学校' }, { text: '公司', value: '公司' }]"
                        :filter-method="filterTag"
                        filter-placement="bottom-end"
                        align="center">
                        <template slot-scope="scope">
                            <el-tag
                                :type="scope.row.tag === '学校' ? 'primary' : 'success'"
                                disable-transitions>{{scope.row.tag}}
                            </el-tag>
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" fixed="right" align="center">
                        <template slot-scope="scope">
                        <el-button
                            size="mini"
                            icon="el-icon-view"
                            @click="handleEdit(scope.$index, scope.row)">查看</el-button>
                        <el-button
                            size="mini"
                            type="danger"
                            icon="el-icon-delete"
                            @click="handleDelete(scope.$index, scope.row)">删除</el-button>
                        </template>
                    </el-table-column>
                </el-table>
            </div>
        </el-card>
    </div>
</template>

<script>
export default {
    name: 'topbar',
    data() {
        return {
            formInline: {
                scenename: '',
                des: ''
            },
            formInline2: {},
            tableData: [{
                date: '2016-05-02',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄',
                tag: '公司'
            }, {
                date: '2016-05-04',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄',
                tag: '学校'
            }, {
                date: '2016-05-01',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄',
                tag: '学校'
            }, {
                date: '2016-05-03',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄',
                tag: '公司'
            }],
            multipleSelection: []
            
        };
    },
    methods: {
        onSearch() {

        },
        clearAll() {
            this.formInline.scenename = '',
            this.formInline.des = ''
        },
        //table的双色条纹
        tableRowClassName({row, rowIndex}) {
            if (rowIndex === 1) {
                return 'warning-row';
            } else if (rowIndex === 3) {
                return 'success-row';
            }
            return '';
        },
        //table的全选按钮
        handleSelectionChange(val) {
            this.multipleSelection = val;
        },
        //table的取消选择
        toggleSelection(rows) {
            if (rows) {
                rows.forEach(row => {
                    this.$refs.multipleTable.toggleRowSelection(row);
            });
            } else {
                this.$refs.multipleTable.clearSelection();
            }
        },
        //table的标签
        filterTag(value, row) {
            return row.tag === value;
        },
        //table的编辑和删除
        handleEdit(index, row) {
            console.log(index, row);
        },
        handleDelete(index, row) {
            console.log(index, row);
        },
        //修改table header的背景色
        tableHeaderColor({ row, column, rowIndex, columnIndex }) {
            if (rowIndex === 0) {
                return 'background-color:rgb(250,250,250);'
            }
        },
    }
}
</script>

<style lang="scss" scoped>
.scene-container {
    margin: 10px;
}
</style>
<style>
.scene-container .el-table .warning-row {
    background: oldlace;
}
.scene-container .el-table .success-row {
    background: #f0f9eb;
}
</style>

 

### Vue 实现静态表格分页功能的示例代码与分页计算 在 Vue 中实现静态表格的分页功能,可以通过 `el-pagination` 组件结合数据切片(`slice`)来完成。以下是详细的实现方式: #### 1. HTML 结构 使用 Element UI 的 `el-table` 和 `el-pagination` 组件来展示表格和分页控件。 ```html <template> <div> <el-table :data="pagedTableData" border style="width: 100%"> <el-table-column prop="date" label="日期" width="180"></el-table-column> <el-table-column prop="name" label="姓名" width="180"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[5, 10, 15, 30, 50, 100]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.length" ></el-pagination> </div> </template> ``` #### 2. 数据与方法定义 在 Vue 的 `data` 中定义分页相关的参数,并实现分页逻辑。 ```javascript <script> export default { data() { return { tableData: [ { date: "2023-01-01", name: "张三", address: "北京" }, { date: "2023-01-02", name: "李四", address: "上海" }, { date: "2023-01-03", name: "王五", address: "广州" }, { date: "2023-01-04", name: "赵六", address: "深圳" }, { date: "2023-01-05", name: "孙七", address: "成都" }, { date: "2023-01-06", name: "周八", address: "重庆" }, { date: "2023-01-07", name: "吴九", address: "杭州" }, { date: "2023-01-08", name: "郑十", address: "南京" }, ], currentPage: 1, // 当前页码 pageSize: 5, // 每页显示的数据条数 }; }, computed: { pagedTableData() { // 计算当前页显示的数据 return this.tableData.slice( (this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize ); }, }, methods: { handleSizeChange(val) { this.pageSize = val; // 更新每页显示条数 this.currentPage = 1; // 重置到第一页 }, handleCurrentChange(val) { this.currentPage = val; // 更新当前页码 }, }, }; </script> ``` #### 3. 样式调整 为了提升用户体验,可以添加一些样式。 ```css <style scoped> .el-table { margin-bottom: 20px; } </style> ``` --- #### 分页计算说明 分页的核心逻辑是通过数组的 `slice` 方法对原始数据进行切片操作,具体公式如下: - 起始索引:`(currentPage - 1) * pageSize` - 结束索引:`currentPage * pageSize` 通过以上公式,可以从 `tableData` 中提取当前页需要展示的数据[^2]。 --- ### 注意事项 1. **初始化参数**:确保 `pageSize` 的初始值与 `el-pagination` 的 `:page-sizes` 属性中的最小值一致[^2]。 2. **数据更新**:如果 `tableData` 动态变化,需重新计算分页数据。 3. **用户体验**:当切换每页显示条数时,建议将当前页重置为第一页,避免出现数据为空的情况。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值