1
duhe
2025-03-31 5d82e2220ff8d69d51feee29e4c8351dca773135
WebTM/layuiadmin/modules/tableSelect.js
@@ -10,7 +10,7 @@
        table = layui.table,
        form = layui.form;
    var tableSelect = function () {
        this.v = '1.3.0';
        this.v = '1.4.0';
    };
    /**
@@ -20,12 +20,12 @@
        var elem = $(opt.elem);
      
        //默认设置
        opt.searchKey = opt.searchKey || 'keyword';
        opt.searchKey = opt.searchKey || 'keyword';//可多个用,分割
        opt.table.page = opt.table.page || false;
        opt.table.height = opt.table.height || 290;
        elem.off('click').on('click', function(e) {
        elem.off('keyup').on('keyup', function(e) {
            e.stopPropagation();
            if($('div.tableSelect').length >= 1){
            if ($('div.tableSelect').length >= 1 || elem.val().length<=2) {
                return false;
            }
@@ -43,7 +43,7 @@
            //渲染TABLE
            opt.table.elem = "#"+tableName;
            opt.table.id = tableName;
            //若没有where表示为前端分页
            //若没有url表示为前端分页
            if (opt.table.url != undefined) {
                opt.table.where['sWhere'] = opt.sWhere
            } else {
@@ -67,7 +67,12 @@
            //}
            var tableSelect_table = table.render(opt.table);
            //让一次加载显示数据
            let executed = false;
            if (elem.val().length == 3 && !executed) {
                executed = true;
                search();
            }
            //jump分页触发函数
            //function jump(obj, first) {
            //    table.reload(tableName);
@@ -148,16 +153,16 @@
                            if (tr.length == 0) {
                                tableElem.find('tr:first').children('td').eq(0).click();
                            } else {
                                tr.children('td').click();
                                tr['prev']().children('td').click();
                                tr.children('td').eq(0).click();
                                tr['prev']().children('td').eq(0).click();
                            }
                            break;
                        case "ArrowDown"://下键
                            if (tr.length == 0) {
                                tr = tableElem.find('tr:first').children('td').eq(0).click();
                                tableElem.find('tr:first').children('td').eq(0).click();
                            } else {
                                tr.children('td').click();
                                tr['next']().children('td').click();
                                tr.children('td').eq(0).click();
                                tr['next']().children('td').eq(0).click();
                            }
                            break;
                        case "Enter"://回车
@@ -167,13 +172,31 @@
                }
                
            })
            //输入框输入执行
            elem.off('input').on('input', function (e) {
                // 阻止表单提交(如果输入框在表单内)
                e.preventDefault();
            // 防抖函数
            function debounce(func, wait) {
                let timeout;
                return function () {
                    const context = this, args = arguments;
                    clearTimeout(timeout);
                    timeout = setTimeout(() => func.apply(context, args), wait);
                };
            }
            //搜索函数
            function search() {
                var searchKeyList = opt.searchKey.split(',');//获取查找的关键字搜索框
                //拼接sql字符串
                var sWhereStr = " and ("
                searchKeyList.forEach(function (value, index) {
                    if (index == 0) {
                        sWhereStr += (value + " like '%" + elem.val() + "%' ")
                    } else {
                        sWhereStr += ("or " + value + " like '%" + elem.val() + "%' ")
                    }
                })
                sWhereStr += ")"
                //后端分页搜索
                if (opt.table.where != undefined) {
                    opt.table.where['sWhere'] = opt.sWhere + " and " + opt.searchKey + " like '%" + elem.val() + "%' ";
                    opt.table.where['sWhere'] = opt.sWhere + sWhereStr;
                    tableSelect_table.reload({
                        where: opt.table.where,
                        page: {
@@ -181,13 +204,46 @@
                        }
                    });
                } else {
                    var sWhere = opt.sWhere + " and " + opt.searchKey + " like '%" + elem.val() + "%' ";
                    var sWhere = opt.sWhere + sWhereStr;
                    tableSelect_table.reload({
                        data: opt.ajaxSelect(sWhere)
                    });
                }
            }
            //输入框输入执行
            elem.off('input').on('input', debounce(
                function (e) {
                // 阻止表单提交(如果输入框在表单内)
                e.preventDefault();
                var searchKeyList = opt.searchKey.split(',');//获取查找的关键字搜索框
                //拼接sql字符串
                var sWhereStr = " and ("
                searchKeyList.forEach(function (value, index) {
                    if (index == 0) {
                        sWhereStr += (value + " like '%" + elem.val() + "%' ")
                    } else {
                        sWhereStr += ("or " + value + " like '%" + elem.val() + "%' ")
                    }
                })
                sWhereStr +=")"
                //后端分页搜索
                if (opt.table.where != undefined) {
                    opt.table.where['sWhere'] = opt.sWhere + sWhereStr;
                    tableSelect_table.reload({
                        where: opt.table.where,
                        page: {
                            curr: 1
                        }
                    });
                } else {
                    var sWhere = opt.sWhere + sWhereStr;
                    tableSelect_table.reload({
                        data: opt.ajaxSelect(sWhere)
                    });
                }
                
            })
            },200))
            //双击行选中
            table.on('rowDouble('+tableName+')', function(obj){
@@ -224,7 +280,13 @@
            //按钮选中
            tableBox.find('.tableSelect_btn_select').on('click', function() {
                var checkStatus = table.checkStatus(tableName);
                selectDone(checkStatus);
                if (checkStatus.data.length > 0) {
                    selectDone(checkStatus);
                } else {
                    tableBox.remove();
                    delete table.cache[tableName];
                }
            })
            //写值回调和关闭
@@ -232,6 +294,7 @@
                opt.done(elem, checkStatus);
                tableBox.remove();
                delete table.cache[tableName];
                $(opt.elem).blur();
            }
            
            //点击其他区域关闭