weiweiyeyu
<template>
    <section class="ces-table-page">
        <!-- 表格操作按钮 -->
        <section class="ces-handle" v-if=\'isHandle\'>
            <el-button
                v-for=\'item in tableHandles\'
                :key=\'item.label\'
                :size="size || item.size"
                :type="item.type"
                :icon=\'item.icon\'
                @click="item.handle(that)">{{item.label}}
            </el-button>
        </section>
        <!-- 数据表格 -->
        <section class="ces-table">
            <el-table
                 :data=\'tableData\'
                 :size=\'size\'
                  height="100%"
                 style="width: 100%"
                 :border  =\'isBorder\'
                 @select=\'select\'
                @select-all=\'selectAll\'
                v-loading=\'loading\'
                :defaultSelections=\'defaultSelections\'
                ref="cesTable">
                // 复选框
                <!--<el-table-column v-if="isSelection" type="selection" align="center" ></el-table-column>-->
                // 序号
                <!--<el-table-column v-if="isIndex" type="index" :label="indexLabel" align="center" width="50"></el-table-column>-->
                <!-- 数据栏 -->
                <el-table-column
                     v-for="item in tableCols"
                     :key="item.id"
                     :prop="item.prop"
                     :label="item.label"
                     :width="item.width"
                     :align="item.align"
                     :render-header="item.require?renderHeader:null"
                >
                    <template slot-scope="scope" >
                        <!-- 按钮-->

                        <template v-if="item.type === \'Button\'">
                            <el-button v-for="btnItem in item.btnList" :key="btnItem.label"
                                    :disabled="btnItem.disabled && btnItem.disabled(scope.row)"
                                   :type="btnItem.type"
                                   :size="size || btnItem.size"
                                   :icon="btnItem.icon"
                                   @click="btnItem.handle(that,scope.row)">{{btnItem.label}}
                            </el-button>
                        </template>

                        <!-- html -->
                        <span v-if="item.type===\'html\'" v-html="item.html(scope.row)"></span>
                        <!-- 下拉框 -->
                        <el-select v-if="item.type===\'select\'" v-model="scope.row[item.prop]" :size="size || btn.size"  :props="item.props"
                                   :disabled="item.isDisabled && item.isDisabled(scope.row)"
                                   @change=\'item.change && item.change(that,scope.row)\'>
                        <el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
                        </el-select>
                        <!-- 单选 -->
                        <el-radio-group v-if="item.type===\'radio\'" v-model="scope.row[item.prop]"
                                        :disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
                                        @change=\'item.change && item.change(that,scope.row)\'>
                            <el-radio v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio>
                        </el-radio-group>
                        <!-- 复选框 -->
                        <el-checkbox-group v-if="item.type===\'checkbox\'" v-model="scope.row[item.prop]"
                                           :disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
                                           @change=\'item.change && item.change(that,scope.row)\'>
                            <el-checkbox v-for="ra in item.checkboxs" :label="ra.value" :key=\'ra.value\'>{{ra.label}}</el-checkbox>
                        </el-checkbox-group>
                        <!-- 评价 -->
                        <el-rate v-if="item.type===\'rate\'" v-model="scope.row[item.prop]"
                                 :disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
                                 @change=\'item.change && item.change(scope.row)\'></el-rate>
                        <!-- 开关 -->
                        <el-switch v-if="item.type===\'switch\'" v-model="scope.row[item.prop]" :size="size || btn.size"
                                   :active-value=\'item.values&&item.values[0]\'
                                   :inactive-value=\'item.values&&item.values[1]\'
                                   :disabled="item.isDisabled && item.isDisabled(scope.row)"
                                   @change=\'item.change && item.change(scope.row)\'></el-switch>
                        <!-- 图像 -->
                        <img v-if="item.type===\'image\'" :src="scope.row[item.prop]" @click="item.handle && item.handle(scope.row)"/>
                        <!-- 滑块 -->
                        <el-slider v-if="item.type===\'slider\'" v-model="scope.row[item.prop]"
                                   :disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
                                   @change=\'item.change && item.change(scope.row)\'></el-slider>
                        <!-- 默认 -->
                        <span v-if="!item.type"
                              :style="item.itemStyle && item.itemStyle(scope.row)" :size="size || btn.size"
                              :class="item.itemClass && item.item.itemClass(scope.row)">{{(item.formatter && item.formatter(scope.row)) || scope.row[item.prop]}}</span>
                    </template>
                </el-table-column>
            </el-table>
        </section>
        <!-- 分页 -->
        <section class="ces-pagination"  v-if=\'isPagination\'>
            <el-pagination style=\'display: flex;justify-content: center;height: 100%;align-items: center;margin-top: 20px;\'
                   @current-change="handleCurrentChange"
                   @size-change="handleSizeChange"
                   background
                   layout="total,sizes ,prev, pager, next, jumper"
                   :page-size="tablePage.pageSize"
                   :current-page="tablePage.pageNum"
                   :total="tablePage.total"
            ></el-pagination>
        </section>
    </section>
</template>

<script>

  export default {
    props:{
      that: { type: Object, default: this },
      // 表格型号:mini,medium,small
      size:{type:String,default:\'medium\'},
      isBorder:{type:Boolean,default:true},
      loading:{type:Boolean,default:false},
      // 表格操作
      isHandle:{type:Boolean,default:false},
      tableHandles:{type:Array,default:()=>[]},
      // 表格数据
      tableData:{ type:Array,default:()=>[]},
      // 表格列配置
      tableCols:{ type:Array,default:()=>[]},
      // 是否显示表格复选框
      isSelection:{type:Boolean,default:false},
      defaultSelections:{ type:[Array,Object], default:()=>null},
      // 是否显示表格索引
      isIndex:{type:Boolean,default:false},
      indexLabel: {type:String,default:\'序号\'},
      // 是否显示分页
      isPagination:{type:Boolean,default:true},
      // 分页数据
      tablePage:{ type:Object,default:()=>({pageSize:10,pageNum:1,total:0})},


    },
    data(){
      return {
      }
    },
    watch:{
      \'defaultSelections\'(val) {
        this.$nextTick(function(){
          if(Array.isArray(val)){
            val.forEach(row=>{
              this.$refs.cesTable.toggleRowSelection(row)
            })
          }else{
            this.$refs.cesTable.toggleRowSelection(val)
          }
        })
      }
    },
    methods:{
      // 表格勾选
      select(rows,row){
        this.$emit(\'select\',rows,row);
      },
      // 全选
      selectAll(rows){
        this.$emit(\'select\',rows)
      },
      //
      handleCurrentChange(val){
        this.tablePage.pageNum = val;
        this.$emit(\'CurrentChange\',val);
      },
      handleSizeChange(val) {
        this.tablePage.pageSize = val;
        this.$emit(\'SizeChange\',val);
      },

      // tableRowClassName({rowIndex}) {
      //     if (rowIndex % 2 === 0) {
      //         return "stripe-row";
      //     }
      //     return "";
      // }
      renderHeader(h,obj) {
        return h(\'span\',{class:\'ces-table-require\'},obj.column.label)
      },
    },
  }
</script>
<style>
    .ces-table-require::before{
        content:\'*\';
        color:red;
    }
    .el-table__row td {
        text-align: center;
    }
    .has-gutter tr th {
        text-align: center;
    }
    . el-table__body-wrapper {
        height: 500px !important;
    }
</style>

以上是封装好的表格组件  table.vue

使用该组件


<template>
<div class="ces-main">
<table-com
:that=\'that\'
size=\'small \'
:isSelection=\'true\'
:isIndex=\'true\'
:isHandle=\'true\'
:tableData=\'tableData\'
:tableCols=\'tableCols\'
:newBtnList="newBtnList"
:isPagination=\'true\'
:tablePage=\'pagination\'
:longDatas="longDatas"
>
</table-com>

</div>
</template>

<script>
import tableCom from \'../../components/tableCompnment/tableForm\'
export default {
components : {
tableCom
},
data () {
return {
that : this,
// 查询表单
searchData:{
carNumber:null,
},
searchForm:[//搜索栏
{type:\'Input\',prop:\'carNumber\',width:\'180px\',placeholder:\'请输入车牌\'},
],
searchHandle:[//搜索按钮
{label:\'查询\',icon:"el-icon-search",type:\'primary\',handle:()=>this.searchNews()},
],
tableData : [
{id:1,carNumber:\'粤B555\'},
{id:2,carNumber:\'粤B555\'},
{id:3,carNumber:\'粤B555\'},],// 表格数据
tableCols:[// 表头
{label:\'车牌\',prop:\'carNumber\'},
{label:\'车辆信息\',type:\'longData\'},
{label:\'下单时间\',prop:\'inputTime\'},
{label:\'业务类型\',prop:\'checkType\'},
{label:\'故障描述\',prop:\'note\'},
{label:\'发动机缸数量\',prop:\'carCylinder\'},
{label:\'当前操作人\',prop:\'operatorName\'},
{label:\'操作\',type:\'button\',},
{label:\'冻结\',type:\'Button\',btnList:[
{type:\'danger\',label:\'冻结工单\',handle:(row,that)=>this.showRecord(row,that)},
]},
],
newBtnList:[
{id : 1,btnList:[
{type:\'primary\',label:\'上传照片\',isShow:true, handle:(row,that)=>this.showEditTest(row,that)},
{type:\'success\',label:\'完成\',isShow:false, handle:row=>\'\'}
]
},
{id : 2,btnList:[
{type:\'primary\',label:\'上传照片\',isShow:true, handle:(row,that)=>this.showEditTest(row,that)},
{type:\'success\',label:\'完成\',isShow:true, handle:row=>\'\'}
]
},
{id : 3,btnList:[
{type:\'primary\',label:\'上传照片\',isShow:true, handle:(row,that)=>this.showEditTest(row,that)},
{type:\'success\',label:\'完成\',isShow:true, handle:row=>\'\'}
]
}
],


longDatas : [],
pagination:{//页数...
pageSize:10,
pageNum:1,
total:0
},
orderPageShowOrgName: false,
}
},
}
</script>

<style>
</style>
 

最后效果

分类:

技术点:

相关文章: