zhanghua
2025-07-16 7c20fd15b7fbc2bd5756b39d5ab655cc849ffcc3
src/components/Table/index.vue
@@ -1,33 +1,34 @@
<template>
    <div class="Table">
        <div class="datatable">
            <el-table ref="multipleTable" :data="tableData" style="width: 100%"
                :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
            <el-table
                border
                stripe
                ref="multipleTable" :data="tableData" style="width: 100%"
                :header-cell-style="{'background':'#F5F5F5','font-size':'14px','font-weight':'650','line-height':'45px'}"
                :row-class-name="tableRowClassName">
                <el-table-column type="selection" :min-width="5">
                </el-table-column>
                <el-table-column v-for="(item,idx) in option.group" :key="item.prop" :label="item.label"
                <el-table-column type="selection" min-width="5"> </el-table-column>
                <el-table-column v-for="item in option.group" :key="item.prop" :label="item.label"
                    :prop="item.prop" :min-width="item['min-width'] ? item['item.min-width']:'10'">
                    <template slot-scope="scope">
                        <div v-if="item.type === 'text'">
                            {{scope.row[item.prop]}}
                        </div>
                        <slot v-else name="operation" :info="scope">
                            <div class="operationBox">
                                <div class="divider" v-for="(child,index) in item.children" :key="child.operationName">
                                    <!-- @click="backMykey(scope.$index,child.mykey)" -->
                                    <span>{{child.operationName}}</span>
                                    <el-divider direction="vertical" v-if="index !== item.children.length-1">
                                    </el-divider>
                                </div>
                            </div>
                        <slot v-else-if="item.type === 'operation'" name="operation" :info="scope">
                        </slot>
                        <slot name="status" v-else-if="item.type === 'status'" :info="scope">
                        </slot>
                        <slot name='time' v-else-if="item.type === 'time'" :timeobj="scope">
                        </slot>
                    </template>
                </el-table-column>
            </el-table>
        </div>
        <!-- tools -->
        <div class="tools">
        <div class="tools" v-if="pageShow">
            <div class="funs">
                <div class="funsItem sp-item">
                    <el-checkbox v-model="all" @change="selectAll()">全选</el-checkbox>
@@ -80,6 +81,10 @@
        }
    },
    props: {
      getTableList: {
        type: Function,
        default: () => {}
      },
        // 表格数据
        tableData: {
            type: Array,
@@ -93,20 +98,25 @@
        // 弹窗
        openDialog: {
            type: Function,
            default: () => {}
            default: () => { }
        },
        // 获取当前页
        getCurrentPage:{
        getCurrentPage: {
            type: Function,
            default: () => {}
            default: () => { }
        },
        // 分页总数
        totalNum:{
            type:Number,
            default:1
        totalNum: {
            type: Number,
            default: 1
        },
        // 是否展示分页
        pageShow:{
            type: Boolean,
            default: false,
        }
    },
    created(){
    created() {
        this.myTotalNum = JSON.parse(JSON.stringify(this.totalNum));
    },
    computed: {
@@ -117,17 +127,16 @@
    methods: {
        // 设置表格斑马纹
        tableRowClassName({ row, rowIndex }) {
            if ((rowIndex + 1) % 2 == 0) {
            if ((rowIndex + 1) % 2 === 0) {
                return 'warning-row';
            } else {
                return 'success-row';
            }
            return '';
        },
        // 当前页改变触发事件
        changeCurrentPage(page) {
            this.currentPage = page;
            this.$emit('getCurrentPage',page);
            this.$emit('getCurrentPage', page);
        },
        // 全选
        selectAll() {
@@ -167,77 +176,59 @@
    width: 100%;
    .el-table {
        color: #4b9bb7;
        // color: #4b9bb7;
    }
    .tools {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 0 20px;
        .funs {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 0 20px;
            .funs {
                display: flex;
                .sp-item{
                    border: 1px solid #17324c;
                }
                .funsItem {
                    line-height: 28px;
                    display: flex;
                    align-items: center;
                    border-radius: 4px;
                    font-size: 12px;
                    margin-left: 10px;
                    .el-checkbox {
                        width: 80px;
                        padding: 0 10px;
                    }
                    .el-select {
                        width: 120px;
                    }
                    &::v-deep .el-input__inner {
                        border: none;
                        background-color: #09152f;
                    }
                    &:hover .el-checkbox {
                        color: #4b9bb7;
                    }
                }
            .sp-item {
                // border: 1px solid #17324c;
            }
            .pagination {
                margin-top: 50px;
            .funsItem {
                line-height: 28px;
                display: flex;
                line-height: 50px;
                justify-content: center;
                align-items: center;
                border-radius: 4px;
                font-size: 12px;
                margin-left: 10px;
                .el-pagination {
                .el-checkbox {
                    width: 80px;
                    padding: 0 10px;
                }
                    &::v-deep li,
                    &::v-deep .btn-prev,
                    &::v-deep .btn-next {
                        background-color: #071f39;
                        color: #4b9bb7;
                    }
                .el-select {
                    width: 120px;
                }
                    &::v-deep .active {
                        background-color: #409eff;
                        color: #fff;
                    }
                &::v-deep .el-input__inner {
                    border: none;
                    // background-color: #09152f;
                }
                &:hover .el-checkbox {
                    color: #4b9bb7;
                }
            }
        }
    &::v-deep .warning-row {
        background-color: #06122c;
        .pagination {
            margin-top: 50px;
            display: flex;
            line-height: 50px;
            justify-content: center;
        }
    }
    &::v-deep .success-row {
        background-color: #071f39;
    }
    .operationBox {
        display: flex;
@@ -247,4 +238,4 @@
        background-color: #4b9bb7;
    }
}
</style>
</style>