起因:因为elementui的表格没有做动静渲染表头的操作,本人封装了一个

步骤一:建设vue组件

<template>    <div class="operate-btn">        <el-button class="o-ml-12" icon="el-icon-s-operation" v-preventReClick type="success" size="mini" @click="headFilterShow"            >显示项调整</el-button        >        <!-- 筛选穿梭框 -->        <el-dialog :close-on-click-modal="false" v-dialogDrag :visible.sync="headFilter.visible" title="显示项调整" width="536px">            <el-form label-position="right" label-width="100px" :model="coefficientAdjustShowForm">                <el-form-item label="测试字段:">                    <el-checkbox                        :indeterminate="coefficientAdjustShowForm.options1IsInde"                        v-model="coefficientAdjustShowForm.option1CheckAll"                        @change="option1CheckAllChg"                        >全选</el-checkbox                    >                    <el-checkbox-group @change="options1CheckChg" v-model="coefficientAdjustShowForm.options1">                        <el-checkbox v-for="item in headerShowList.option1" :label="item" :key="item">{{ item }}</el-checkbox>                    </el-checkbox-group>                </el-form-item>                <el-form-item label="试验字段:">                    <el-checkbox                        :indeterminate="coefficientAdjustShowForm.options2IsInde"                        v-model="coefficientAdjustShowForm.option2CheckAll"                        @change="option2CheckAllChg"                        >全选</el-checkbox                    >                    <el-checkbox-group @change="options2CheckChg" v-model="coefficientAdjustShowForm.options2">                        <el-checkbox v-for="item in headerShowList.option2" :label="item" :key="item">{{ item }}</el-checkbox>                    </el-checkbox-group>                </el-form-item>            </el-form>            <div slot="footer" class="dialog-footer">                <el-button v-preventReClick @click="headFilter.visible = false">取 消</el-button>                <el-button v-preventReClick type="primary" @click="handleClickUpdateThead">确 定</el-button>            </div>        </el-dialog>    </div></template><script>export default {    name: 'tableHeadAdjust',    props: ['tableData', 'headerShowList', 'headFilter', 'curThis'],    data() {        return {            coefficientAdjustShowForm: {                options1: [],                options2: [],                option1CheckAll: false,                option2CheckAll: false,                options1IsInde: true,                options2IsInde: true            }        };    },    methods: {        // 单选        options1CheckChg(value) {            let checkedCount = value.length;            this.coefficientAdjustShowForm.option1CheckAll = checkedCount === this.headerShowList.option1.length;            this.coefficientAdjustShowForm.options1IsInde = checkedCount > 0 && checkedCount < this.headerShowList.option1.length;        },        options2CheckChg(value) {            let checkedCount = value.length;            this.coefficientAdjustShowForm.option2CheckAll = checkedCount === this.headerShowList.option2.length;            this.coefficientAdjustShowForm.options2IsInde = checkedCount > 0 && checkedCount < this.headerShowList.option2.length;        },        // 全选        option1CheckAllChg(val) {            this.coefficientAdjustShowForm.options1 = val ? this.headerShowList.option1 : [];            this.coefficientAdjustShowForm.options1IsInde = false;        },        option2CheckAllChg(val) {            this.coefficientAdjustShowForm.options2 = val ? this.headerShowList.option2 : [];            this.coefficientAdjustShowForm.options2IsInde = false;        },        headFilterShow() {            this.curThis.headFilter.visible = true;            // 解决点击CheckBox时候,动静扭转了表头的数值            this.$nextTick(() => {                this.coefficientAdjustShowForm.options1 = this.curThis.headFilter.value.option1;                this.coefficientAdjustShowForm.options2 = this.curThis.headFilter.value.option2;                this.options1CheckChg(this.coefficientAdjustShowForm.options1);                this.options2CheckChg(this.coefficientAdjustShowForm.options2);            });        },        handleClickUpdateThead() {            // 当表头数据特地多的时候清空table数据,解决卡顿问题            // this.curThis.tableData = [];            // 排序            let list1 = [];            let option1 = this.curThis.headerShowList.option1;            if (option1.length > 0) {                option1.forEach((item) => {                    if (this.coefficientAdjustShowForm.options1.length > 0) {                        this.coefficientAdjustShowForm.options1.forEach((item1) => {                            if (item == item1) {                                list1.push(item);                            }                        });                    }                });            }            let list2 = [];            let option2 = this.curThis.headerShowList.option2;            if (option2.length > 0) {                option2.forEach((item) => {                    if (this.coefficientAdjustShowForm.options2.length > 0) {                        this.coefficientAdjustShowForm.options2.forEach((item1) => {                            if (item == item1) {                                list2.push(item);                            }                        });                    }                });            }            this.curThis.headFilter.value.option1 = list1;            this.curThis.headFilter.value.option2 = list2;            // 贮存到storage外面            this.curThis.king_setConceal(this.curThis.$route.path, this.curThis.headFilter.value);            this.headFilter.visible = false;            // // 触发扭转            // this.$emit('headFilterShowChg');        }    }};</script><style></style>

步骤二:建设vue单页面

<template>    <div>        <tableHeadAdjust :tableData="tableData" :headerShowList="headerShowList" :headFilter="headFilter" :curThis="this"></tableHeadAdjust>        <el-table :data="tableData" 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 v-for="(item, index) in headFilter.value.option1" :key="index + 'option1'" :label="item" :prop="tableHeadeTryList[item]">            </el-table-column>            <el-table-column v-for="(item, index) in headFilter.value.option2" :key="index + 'option2'" :label="item" :prop="tableHeadTestList[item]">            </el-table-column> -->            <!-- 形式二:父子表头 -->            <el-table-column v-for="(item, index) in headFilter.value.option1" :key="index + 'option1'" :label="item">                <el-table-column                    v-for="(item, index) in headFilter.value.option2"                    :key="index + 'option2'"                    :label="item"                    :prop="tableHeadTestList[item]"                >                </el-table-column>            </el-table-column>        </el-table>    </div></template><script>import tableHeadAdjust from '@/components/tableHeadAdjust.vue';export default {    name: 'sysIndex',    components: { tableHeadAdjust },    data() {        return {            tableData: [],            headFilter: {                visible: false,                value: {                    option1: [],                    option2: []                }            },            headerShowList: {                option1: ['测试1', '测试2', '测试3', '测试4', '测试5', '测试6', '测试7'],                option2: ['试验1', '试验2', '试验3', '试验4', '试验5', '试验6', '试验7']            }        };    },    computed: {        tableHeadeTryList() {            return {                测试1: 'try1',                测试2: 'try2',                测试3: 'try3',                测试4: 'try4',                测试5: 'try5',                测试6: 'try6',                测试7: 'try7'            };        },        tableHeadTestList() {            return {                试验1: 'test1',                试验2: 'test2',                试验3: 'test3',                试验4: 'test4',                试验5: 'test5',                试验6: 'test6',                试验7: 'test7'            };        }    },    mounted() {        // userMark为了辨别是哪个用户的表头,您能够依据手机号或者id用户的惟一标识来做        localStorage.setItem('userMark', 'userMark1');        // 初始化表格表头        this.king_tableConceal(this);        this.tableData = [            {                date: '2016-05-02',                name: '王小虎',                try1: '好的1',                try2: '好的2',                try3: '好的3',                try4: '好的4',                try5: '好的5',                try6: '好的6',                try7: '好的7',                test1: '没方法1',                test2: '没方法2',                test3: '没方法3',                test4: '没方法4',                test5: '没方法5',                test6: '没方法6',                test7: '没方法7'            },            {                date: '2016-05-04',                name: '王小虎',                try1: '好的1',                try2: '好的2',                try3: '好的3',                try4: '好的4',                try5: '好的5',                try6: '好的6',                try7: '好的7',                test1: '没方法1',                test2: '没方法2',                test3: '没方法3',                test4: '没方法4',                test5: '没方法5',                test6: '没方法6',                test7: '没方法7'            }        ];    },    methods: {        /*        reson:上面这些办法能够放到全局办法外面方便使用        author:king之浪迹天涯        */        /*         * 初始化表格显示暗藏项         */        king_tableConceal(curThis) {            let headerShowList = curThis.king_getConceal(curThis.$route.path);            curThis.headFilter.value = headerShowList ? headerShowList : { option1: curThis.headerShowList.option1, option2: curThis.headerShowList.option2 };        },        /**         * 获取用户表格显示暗藏项         * @param path         */        king_getConceal(path) {            let USER_ID = localStorage.getItem('userMark');            let USER_TABLEHEADADUST = localStorage.getItem('USER_TABLEHEADADUST');            USER_TABLEHEADADUST = USER_TABLEHEADADUST ? JSON.parse(USER_TABLEHEADADUST) : {};            if (USER_TABLEHEADADUST.hasOwnProperty(USER_ID) && USER_TABLEHEADADUST[USER_ID].hasOwnProperty(path))                return USER_TABLEHEADADUST[USER_ID][path];            return '';        },        /**         * 存储用户表格显示暗藏项         * @param path、theader         */        king_setConceal(path, conceal) {            // userMark为了辨别是哪个用户的表头,您能够依据手机号或者id用户的惟一标识来做            let USER_ID = localStorage.getItem('userMark');            let USER_TABLEHEADADUST = localStorage.getItem('USER_TABLEHEADADUST');            USER_TABLEHEADADUST = USER_TABLEHEADADUST ? JSON.parse(USER_TABLEHEADADUST) : {};            if (!USER_TABLEHEADADUST.hasOwnProperty(USER_ID)) {                USER_TABLEHEADADUST[USER_ID] = {                    [path]: conceal                };            } else {                USER_TABLEHEADADUST[USER_ID][path] = conceal;            }            localStorage.setItem('USER_TABLEHEADADUST', JSON.stringify(USER_TABLEHEADADUST));        }    }};</script><style></style>