(function ($, window, document) {
    $.fn.tableFixedRow = function (options) {
        var defaults = {
            getData: [],//列表数据
            opera:[],//操作列
            //rightWidthReduce: '110px',
            rightMargin: '110px',//右侧表格左边距
            trAttr: [],//表格tr所带所属
        };
        var setting = $.extend({}, defaults, options);
        var tableWrapDom = $(this);
        var tableContent = {
            checkDataArr:[],
            init: function () {
                var _this = this;
                _this.getTableStructure();//更改表结构
                _this.getTableContent();//获取表数据
                _this.trHoverFunc();//设置hover
            },
            getTableStructure: function () {
                var tableFixedHead = '';
                var tableMainHead = '';
                tableWrapDom.find('table th').each(function (index, item) {
                    if ($(this).attr('fixed')) {
                        tableFixedHead += $(this).prop('outerHTML');
                    } else {
                        tableMainHead += $(this).prop('outerHTML');
                    }
                });                
                var mainTableHtml = '<div class="clearfix"><div class="left-table">\
                             <table class="main-table" id="leftTable">\
                             <thead><tr>' + tableFixedHead + '</tr></thead>\
                             <tbody class="js-fixed-body"></tbody>\
                             </table>\
                             </div>\
                             <div class="right-table" style="width:calc(100% - ' + setting.rightMargin + ');margin-left:' + setting.rightMargin + '">\
                            <table class="main-table" id="rightTable">\
                             <thead><tr>' + tableMainHead + '</tr></thead>\
                             <tbody class="js-main-body"></tbody>\
                             </table>\
                             </div></div>'
                tableWrapDom.html(mainTableHtml);
            },
            getTableContent: function () {
                var _this = this;
                var fixedHtml = '';
                var mainHtml = '';
                var nullHtml = '';//无数据
                if (setting.getData.code != 0) {
                    nullHtml = setting.getData.message;
                } else {
                    var data = setting.getData.data;
                    if (data.rows.length > 0) {
                        data.rows.forEach(function (item, index) {
                            if (data.pageSize) var num = parseInt(data.pageSize * data.pageIndex + index + 1);
                            var trAttrObj = {};
                            if (setting.trAttr && setting.trAttr.length > 0) {
                                setting.trAttr.forEach(function (element) {
                                    for (var key in item) {
                                        if (key == element) {
                                            trAttrObj[element] = item[key];
                                        }
                                    }
                                });
                            }
                            fixedHtml += '<tr ' + (setting.trAttr?'attr='+escape(JSON.stringify(trAttrObj)):'') + '>';
                            $('#leftTable th').each(function () {
                                fixedHtml += _this.tableHtml($(this), item, num);
                            });
                            fixedHtml += '</tr>';
                            mainHtml += '<tr>';
                            $('#rightTable th').each(function () {
                                mainHtml += _this.tableHtml($(this), item, num);
                            });
                            mainHtml += '</tr>';
                        });
                    } else {
                        nullHtml = '暂无符合条件的数据!'
                    }
                }
                if (nullHtml) {
                    //tableWrapDom.append('<div class="text-c" style="color:#666;line-height:40px;border-bottom:1px solid #ddd;">' + nullHtml + '</div>');
                    $('.js-fixed-body').html('<tr><td colspan="8" style="color:#fff;">1</td></tr>');
                    $('.js-main-body').html('<tr><td colspan="50"><span style="margin-left:-' + setting.rightMargin + '">' + nullHtml + '</span></td></tr>');
                } else {
                    $('.js-fixed-body').html(fixedHtml);
                    $('.js-main-body').html(mainHtml);
                }
            },
            tableHtml: function (dom, data, num) {
                var filedType = dom.attr('fieldtype');
                var fieldText = data[dom.attr('field')];
                var tdHtml = '';
                switch (filedType) {
                    case 'checkbox':
                        tdHtml = '<td><input type="checkbox" /></td>';
                        break;
                    case 'index':
                        tdHtml = '<td>' + num + '</td>';
                        break;
                    case 'data':
                        tdHtml = '<td ' + (dom.attr('attr') ? dom.attr('attr') + '=' + data[dom.attr('attr')] : '') + '>' + (fieldText ? fieldText : '--') + '</td>';
                        break;
                    case 'obj':
                        tdHtml = '<td>' + (fieldText ? fieldText[dom.attr('objkey')] : '--') + '</td>';
                        break;
                    case 'time':
                        tdHtml = '<td>' + (fieldText ? fieldText.split('T')[0] : '--') + '</td>';
                        break;
                    case 'times':
                        tdHtml = '<td>' + (data[dom.attr('field1')] ? data[dom.attr('field1')].split('T')[0] : '') + ((data[dom.attr('field1')] || data[dom.attr('field2')]) ? '至' : '--') + (data[dom.attr('field1')] ? data[dom.attr('field2')].split('T')[0] : '') + '</td>';
                        break;
                    case 'files':
                        var fileList = fieldText;
                        var Temphtl = '';
                        fileList.forEach(function (item) {
                            var FileShowName = item.FileName;
                            if (item.FileName.length > 20) {
                                FileShowName = item.FileName.slice(0, 10) + '...' + item.FileName.slice(-10);
                            } else {
                                FileShowName = item.FileName;
                            }
                            Temphtl += '<div class="filesBox" title="' + item.FileName + '" FilePath="' + item.FilePath + '" FileId="' + item.FileId + '" FileName="' + item.FileName + '" FileSize="' + item.FileSize + '" FileType="' + item.FileType + '"\
                            >' + FileShowName + '</div>';
                        });
                        tdHtml = Temphtl ? '<td>' + Temphtl + '</td>' : '<td>--</td>';
                        break;
                    case 'opera':
                        var html = '';
                        if (Array.isArray(setting.opera)) {
                            setting.opera.forEach(function (item) {
                                if (item.status == fieldText || item.status == 'other') {
                                    item.btn.forEach(function (items) {
                                        html += '<a href="javascript:void(0);" class=" + items.className + " ' + (items.EventName ? 'onClick="' + items.EventName + '(this)"' : '') + '>' + items.text + '</a>'
                                    });
                                }
                            });
                        }
                        tdHtml = '<td>' + html + '</td>';
                        break;
                    default:
                        tdHtml = '<td>' + (fieldText ? fieldText : '--') + '</td>';
                        break;
                }
                return tdHtml;
            },
            trHoverFunc: function () {
                tableWrapDom.find('tbody tr').hover(function () {
                    var _index = $(this).index();
                    tableWrapDom.find('.left-table tbody tr').eq(_index).css('background-color', '#fff6f7');
                    tableWrapDom.find('.right-table tbody tr').eq(_index).css('background-color', '#fff6f7');
                }, function () {
                    var _index = $(this).index();
                    tableWrapDom.find('.left-table tbody tr').eq(_index).css('background-color', '#fff');
                    tableWrapDom.find('.right-table tbody tr').eq(_index).css('background-color', '#fff');
                });
            }
        }
        tableContent.init();
    }
})(jQuery, window, document);

 

 

 

调用:

$('#mianTable').tableFixedRow({
                        getData: result,
                        rightMargin: '110px',
                        trAttr: ['SapId', 'RecordId'],
                        opera: [{ 'status': 'other', 'btn': [{ 'text': '详情', 'className': 'mgr-5', 'EventName': 'resumeDtl' }, { 'text': '导出', 'className': '', 'EventName': 'html2word' }] }]
  });

 html:

<div class="table-content main-table-wrap" id="mianTable">
                        <table class="main-table">
                            <thead>
                                <tr>
                                    <th fixed="true" fieldtype="checkbox" width="50"><input type="checkbox"></th>
                                    <th fixed="true" fieldtype="data" field="UserName" attr="MatterId" width="70">应聘者</th>
                                    <th fieldtype="time" field="Birthday" width="100">出生年月</th>
                                    <th fieldtype="data" field="OrgNameAll" attr="SapId" width="200">所属机构</th>
                                    <th fieldtype="data" field="CurrentPost" width="250">职务</th>
                                    <th fieldtype="time" field="HoldCurPostDate" width="100">任现职时间</th>
                                    <th fieldtype="data" field="EvaluationResult" width="200">近两年考核</th>
                                    <th fieldtype="data" field="Dispose" width="100">近两年处分</th>
                                    <th fieldtype="data" field="Politic" width="160">政治面貌</th>
                                    <th fieldtype="data" field="PassStatus" attr="Reason" width="80">状态</th>
                                    <th fieldtype="opera" field="Status" style="width: 90px;">简历详情</th>
                                </tr>
                            </thead>
                        </table>
                    </div>       

 注:fieldtype为插件里赋值的类型(自定义),field为所取数据的某字段名称(可以是组装后传递的,调用时的result为组装后的数据)

css

/*表格*/
.main-table-wrap .main-table>thead>tr{
    border-bottom: 2px solid #DF1934;
}
.main-table-wrap .main-table tr{
    border-bottom: 1px solid #e5e5e5;
}
.main-table-wrap .main-table>tbody tr:hover{
    background:#fff6f7;
}
.main-table-wrap .main-table th{
    font-size:15px;
    white-space:nowrap;
    color:#000;
}

.main-table-wrap .main-table th,
.main-table-wrap .main-table td{
    min-width:100px;
    line-height:40px;
    text-align:left;
    padding:0 15px;
}
.main-table-wrap .main-table th:first-child,
.main-table-wrap .main-table td:first-child{
    min-width:50px;
    text-align:center;
}
.main-table-wrap .main-table a, .color-a{
    color:#0164aa;
}

.main-table-wrap .main-table .no-data{
    border-bottom:none !important;
}
.main-table tr input:disabled{
    cursor:not-allowed;
}
.selected-bg{background:#fff6f7 !important}

/*分页*/
.main-pagination{
    width:100%;
    height: 66px;
    padding: 20px 50px;
    font-size: 13px;
    background: #fff;
}

.main-pagination .main-left{
    float:left;
    line-height:26px;
}
.main-pagination .main-right{
    float:right;
}

.main-pagination .main-left,
.main-pagination .main-right{
    height:100%;
    line-height:26px;
}
.main-pagination .main-right>select,
.main-pagination .main-right>span,
.main-pagination .main-right>input{
    float:left;
}
.main-pagination .main-right>span{
    margin-right:7px;
    margin-left:10px;
}
.main-pagination .main-right select,
.main-pagination .main-right input{
    border-radius:4px;
    outline:none;
    padding:0 12px;
    line-height:26px;
    height:100%;
    border:0;
    margin-right:3px;
    border:1px solid #d1d1d1;
    background:#f5f5f5;
    cursor:pointer;
}
.main-pagination .main-right select {
    padding: 0 0 0 10px;
}
.main-pagination .main-right select::-ms-expand:hover {
    background:#efefef;
}
.main-pagination .main-right select::-ms-expand { background:#fff;border:none;padding:0 3px;margin-left:10px;border-radius:0 4px 4px 0;}
.main-pagination .main-right .selPageSize{
    background:#fff;
    margin-right:15px;
}
.main-pagination .main-right .gotoPage{
    background:#fff;
    margin-right:7px;
    width:60px;
    cursor:default;
}
.main-pagination .main-right .go{
    padding:0;
    background:#ef1d39;
}
.main-pagination .main-right input:hover{
    background:#efefef;
}
.main-pagination .main-right .go:hover{
    padding:0;
    background:#c8152d;
}
/*表格固定列*/
/*.table-content table{table-layout:fixed}*/
.table-content table td{white-space:nowrap}
.table-content .left-table{float:left;width:110px}
.table-content .right-table{
    width: calc(100% - 110px);
    margin-left: 110px;
    overflow-x:auto;
    overflow-y:hidden;
}

 

 posted on 2019-07-09 09:58  一个大柚子~  阅读(485)  评论(0编辑  收藏  举报