From f56e474c81bb25845b46cf99c85bd313dbfcd3b5 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期六, 31 一月 2026 19:26:25 +0800
Subject: [PATCH] 项目初始化+首页+公告详情页面
---
src/views/main/components/DataTable.vue | 132 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 132 insertions(+), 0 deletions(-)
diff --git a/src/views/main/components/DataTable.vue b/src/views/main/components/DataTable.vue
new file mode 100644
index 0000000..593747f
--- /dev/null
+++ b/src/views/main/components/DataTable.vue
@@ -0,0 +1,132 @@
+<template>
+ <div class="mt-4 mb-2">
+ <el-table
+ :data="showList"
+ table-layout="auto"
+ stripe
+ :empty-text="emptyText"
+ style="width: 100%"
+ >
+ <el-table-column v-if="selectionFlag" type="selection" width="55" />
+ <el-table-column
+ v-for="(item,index) in headers" :key="index"
+ :prop="item.value"
+ :label="item.label"
+ :width="item.width"
+ :align="item.align || 'center'"
+ :sortable="item.sortable"
+ >
+ <template v-if="$slots[item.value]" #default="scope">
+ <slot :name="item.value" v-bind="scope"></slot>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-row class="mt-4" align="middle" justify="end" v-if="paginator">
+ <el-pagination
+ v-model:current-page="page"
+ v-model:page-size="size"
+ :page-sizes="pageSize"
+ background
+ :layout="layout"
+ :total="totalCount || list.length"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </el-row>
+ </div>
+</template>
+
+<script>
+
+export default {
+ data() {
+ return {
+ pageSize: [12, 24, 36, 48],
+ page: 1,
+ size: 12,
+ showList: [],
+ }
+ },
+ props: {
+ filter: {
+ type: Object,
+ default: () => { return { pageNo: 1, pageSize: 12 } }
+ },
+ headers: {
+ type: Array,
+ default: () => []
+ },
+ list: {
+ type: Array,
+ default: () => []
+ },
+ totalCount: {
+ type: Number,
+ default: 0
+ },
+ layout: {
+ type: String,
+ default: 'total, sizes, prev, pager, next, jumper'
+ },
+ selectionFlag: {
+ type: Boolean,
+ default: false
+ },
+ emptyText: {
+ type: String,
+ default: '鏆傛棤鏁版嵁'
+ },
+ paginator: {
+ type: Boolean,
+ default: true
+ }
+ },
+ watch: {
+ list: {
+ handler() {
+ this.updateShowList()
+ },
+ immediate: true
+ },
+ 'filter.page': function(val) {
+ this.page = val
+ },
+ 'filter.size': function(val) {
+ this.size = val
+ }
+ },
+ methods: {
+ handleSizeChange() {
+ this.$emit('update:filter', {
+ ...this.filter,
+ size: this.size
+ })
+ this.updateShowList()
+ },
+ handleCurrentChange() {
+ this.$emit('update:filter', {
+ ...this.filter,
+ page: this.page,
+ })
+ this.updateShowList()
+ },
+ updateShowList() {
+ if (this.paginator) {
+ this.showList = this.list.slice((this.page - 1) * this.size, this.page * this.size)
+ } else {
+ this.showList = this.list
+ }
+
+ }
+ }
+}
+
+</script>
+
+<style>
+.el-table th.el-table__cell {
+ padding: 12px 0;
+ background-color: #fafafa;
+}
+</style>
+
--
Gitblit v1.8.0