layui tableSelect 数据表格下拉框(多选或单选)

2023-10-28

记录:使用tableSelect插件实现下拉框表格,并多选或单选数据
HTML代码:

<!-- 部分代码 -->
<tr>
    <td><label class="layui-form-label required">巡防点</label></td>
    <td>
        <input type="text" name="point" class="layui-input" lay-verify="required" lay-reqtext="请选择巡防点" autocomplete="off" value="{$row.point|default=''}" id="point" ts-selected="{$row.point_id|default=''}">
        <input type="hidden" name="point_id" value="{$row.point_id|default=''}">
    </td>
    <td><label class="layui-form-label required">巡防人员</label></td>
    <td>
        <input type="text" name="patrol" class="layui-input" lay-verify="required" lay-reqtext="请选择巡防人员" autocomplete="off" value="{$row.patrol|default=''}" id="patrol" ts-selected="{$row.patrol_id|default=''}">
        <input type="hidden" name="patrol_id" value="{$row.patrol_id|default=''}">
    </td>
</tr>


JS代码:

<script src="__STATIC__/jquery.min.js?v={$version}" charset="utf-8"></script>
<script>
layui.config({
    base: '/static/plugs/layui-v2.5.6/ext/',// 第三方模块所在目录
    version: '' // 插件版本号
}).extend({
    tableSelect:'tableSelect',  // 插件
});

// 使用插件
layui.use(['form','table','laypage','layer','tableSelect'], function() {
    point();
    patrol();

    //巡防点
    function point() {
        var tableSelect = layui.tableSelect;
        tableSelect.render({
            elem: '#point',
            size: 'sm',//定义输入框input对象 必填
            checkedKey: 'id', //表格的唯一建值,非常重要,影响到选中状态 必填
            searchKey: 'keyword',	//搜索输入框的name值 默认keyword
            searchPlaceholder: '关键词搜索',	//搜索输入框的提示文字 默认关键词搜索
            page:false,
            table: {	//定义表格参数,与LAYUI的TABLE模块一致,只是无需再定义表格elem
                page:false,
                url:'/admin/yuanqu.patrolPoint/getPoint?sjkey=0',
                cols: [[
                    {type: 'checkbox' },
                    {field:'id',title:'编号',width:60,sortable:true},
                    {field:'point',title:'巡防点名称',minWidth:150,sortable:true},
                    {field:'adress',title:'巡防点地址',minWidth:150,sortable:true},
                ]],
                done: function (res, curr, count) {
                }
            },
            done: function (elem, data) {
                var NEWJSON = [];   // 下拉框的输入的值
                var idjson=[];
                layui.each(data.data, function (index, item) {
                    NEWJSON.push(item.point);
                    idjson.push(item.id);
                })
                elem.val(NEWJSON.join(","));  // 下拉框里面显示选中的值
                $('input[name="point_id"]').val(idjson.join(","));
            }
        })
    }

    //巡防人员
    function patrol() {
        var tableSelect = layui.tableSelect;
        tableSelect.render({
            elem: '#patrol',
            size: 'sm',//定义输入框input对象 必填
            checkedKey: 'id', //表格的唯一建值,非常重要,影响到选中状态 必填
            searchKey: 'keyword',	//搜索输入框的name值 默认keyword
            searchPlaceholder: '关键词搜索',	//搜索输入框的提示文字 默认关键词搜索
            page:false,
            table: {	//定义表格参数,与LAYUI的TABLE模块一致,只是无需再定义表格elem
                page:false,
                url:'/admin/yuanqu.patrol/getPatrol?sjkey=0',
                cols: [[
                    {type: 'radio' },
                    {field:'id',title:'编号',width:60,sortable:true},
                    {field:'realname',title:'名称',minWidth:100,sortable:true},
                    {field:'gender',title:'性别',minWidth:80, sortable:true},
                    {field:'phone',title:'手机号',minWidth:120, sortable:true},
                ]]
            },
            done: function (elem, data) {
                var NEWJSON = [];
                var idjson=[]
                layui.each(data.data, function (index, item) {
                    NEWJSON.push(item.realname);
                    idjson.push(item.id);
                })
                elem.val(NEWJSON.join(",")); // 下拉框里面显示选中的值
                $('input[name="patrol_id"]').val(idjson.join(","));
            }
        })
    }
})

</script>

tableSelect.js插件

layui.define(['table', 'jquery', 'form'], function (exports) {
    // "use strict";

    var MOD_NAME = 'tableSelect',
        $ = layui.jquery,
        table = layui.table,
        form = layui.form;
    var tableSelect = function () {
        this.v = '1.1.0';
        this.cacheObj ={};
    };

    /**
    * 初始化表格选择器
    */
    tableSelect.prototype.render = function (opt) {
        var elem = $(opt.elem);
        var tableDone = opt.table.done || function(){};
		
        //默认设置
        opt.searchKey = opt.searchKey || 'keyword';
        opt.searchPlaceholder = opt.searchPlaceholder || '关键词搜索';
        opt.checkedKey = opt.checkedKey;
        opt.table.page = opt.table.page==undefined?true:opt.table.page;
        opt.table.size = "sm";
        opt.table.height = opt.table.height || 315;

        var functionVar=function(e) {
            e.stopPropagation();
            if(document.getElementById("tableSelectSearchInput")){
                $("#tableSelectSearchInput").val(elem.val())
                var e = document.createEvent("Event");
                e.initEvent("oninput", true, true);
                document.getElementById("tableSelectSearchInput").dispatchEvent(e);
                $("#tableSelectSearchInput").trigger("oninput");
            }

            if($('div.tableSelect').length >= 1){
                return false;
            }
            var t = elem.offset().top + elem.outerHeight()+"px";
            var l = elem.offset().left +"px";
            var tableName = "tableSelect_table_" + new Date().getTime();
            var tableBox = '<div class="tableSelect layui-anim layui-anim-upbit" style="left:'+l+';top:'+t+';border: 1px solid #d2d2d2;background-color: #fff;box-shadow: 0 2px 4px rgba(0,0,0,.12);padding:10px 10px 0 10px;position: absolute;z-index:66666666;margin: 5px 0;border-radius: 2px;min-width:530px;">';
            tableBox += '<div class="tableSelectBar">';
            tableBox += '<form lay-filter="tableSelectForm" id="tableSelectForm" class="layui-form" action="" style="display:inline-block;">';
            tableBox += '<input id="tableSelectSearchInput" οninput="layui.tableSelect.searchInput(\''+tableName+'\');" style="display:inline-block;width:190px;height:26px;vertical-align:middle;margin-right:-1px;border: 1px solid #C9C9C9;" type="text" name="'+opt.searchKey+'" placeholder="'+opt.searchPlaceholder+'" autocomplete="off" class="layui-input"><button class="layui-btn layui-btn-sm layui-btn-primary tableSelect_btn_search" lay-submit lay-filter="tableSelect_btn_search"><i class="layui-icon layui-icon-search"></i></button>';
            tableBox += '</form>';
            tableBox += '<button style="float:right;" class="layui-btn layui-btn-sm tableSelect_btn_select">选择<span></span></button>';
            tableBox += '</div>';
            tableBox += '<table id="'+tableName+'" lay-filter="'+tableName+'"></table>';
            tableBox += '</div>';
            tableBox = $(tableBox);
            $('body').append(tableBox);

            //数据缓存
            var checkedData = [];

            //渲染TABLE
            opt.table.elem = "#"+tableName;
            opt.table.id = tableName;
            opt.table.done = function(res, curr, count){
                defaultChecked(res, curr, count);
                setChecked(res, curr, count);
                tableDone(res, curr, count);
            };
            var tableSelect_table = table.render(opt.table);
            tableSelect.cacheObj[tableName]=tableSelect_table;

            //分页选中保存数组
            table.on('radio('+tableName+')', function(obj){
                if(opt.checkedKey){
                    checkedData = table.checkStatus(tableName).data
                }
                updataButton(table.checkStatus(tableName).data.length)
            })
            table.on('checkbox('+tableName+')', function(obj){
                if(opt.checkedKey){
                    if(obj.checked){
                        for (var i=0;i<table.checkStatus(tableName).data.length;i++){
                            checkedData.push(table.checkStatus(tableName).data[i])
                        }
                    }else{
                        if(obj.type=='all'){
                            for (var j=0;j<table.cache[tableName].length;j++) {
                                for (var i=0;i<checkedData.length;i++){
                                    if(checkedData[i][opt.checkedKey] == table.cache[tableName][j][opt.checkedKey]){
                                        checkedData.splice(i,1)
                                    }
                                }
                            }
                        }else{
                            //因为LAYUI问题,操作到变化全选状态时获取到的obj为空,这里用函数获取未选中的项。
                            function nu (){
                                var noCheckedKey = '';
                                for (var i=0;i<table.cache[tableName].length;i++){
                                    if(!table.cache[tableName][i].LAY_CHECKED){
                                        noCheckedKey = table.cache[tableName][i][opt.checkedKey];
                                    }
                                }
                                return noCheckedKey
                            }
                            var noCheckedKey = obj.data[opt.checkedKey] || nu();
                            for (var i=0;i<checkedData.length;i++){
                                if(checkedData[i][opt.checkedKey] == noCheckedKey){
                                    checkedData.splice(i,1);
                                }
                            }
                        }
                    }
                    checkedData = uniqueObjArray(checkedData, opt.checkedKey);
                    updataButton(checkedData.length)
                }else{
                    updataButton(table.checkStatus(tableName).data.length)
                }
            });

            //渲染表格后选中
            function setChecked (res, curr, count) {
                for(var i=0;i<res.data.length;i++){
                    for (var j=0;j<checkedData.length;j++) {
                        if(res.data[i][opt.checkedKey] == checkedData[j][opt.checkedKey]){
                            res.data[i].LAY_CHECKED = true;
                            var index= res.data[i]['LAY_TABLE_INDEX'];
                            var checkbox = $('#'+tableName+'').next().find('tr[data-index=' + index + '] input[type="checkbox"]');
                            checkbox.prop('checked', true).next().addClass('layui-form-checked');
                            var radio  = $('#'+tableName+'').next().find('tr[data-index=' + index + '] input[type="radio"]');
                            radio.prop('checked', true).next().addClass('layui-form-radioed').find("i").html('&#xe643;');
                        }
                    }
                }
                var checkStatus = table.checkStatus(tableName);
                if(checkStatus.isAll){
                    $('#'+tableName+'').next().find('.layui-table-header th[data-field="0"] input[type="checkbox"]').prop('checked', true);
                    $('#'+tableName+'').next().find('.layui-table-header th[data-field="0"] input[type="checkbox"]').next().addClass('layui-form-checked');
                }
                updataButton(checkedData.length)
            }

            //写入默认选中值(puash checkedData)
            function defaultChecked (res, curr, count){
                if(opt.checkedKey && elem.attr('ts-selected')){
                    var selected = elem.attr('ts-selected').split(",");
                    for(var i=0;i<res.data.length;i++){
                        for(var j=0;j<selected.length;j++){
                            if(res.data[i][opt.checkedKey] == selected[j]){
                                checkedData.push(res.data[i])
                            }
                        }
                    }
                    checkedData = uniqueObjArray(checkedData, opt.checkedKey);
                }
            }

            //更新选中数量
            function updataButton (n) {
                tableBox.find('.tableSelect_btn_select span').html(n==0?'':'('+n+')')
            }

            //数组去重
            function uniqueObjArray(arr, type){
                var newArr = [];
                var tArr = [];
                if(arr.length == 0){
                    return arr;
                }else{
                    if(type){
                        for(var i=0;i<arr.length;i++){
                            if(!tArr[arr[i][type]]){
                                newArr.push(arr[i]);
                                tArr[arr[i][type]] = true;
                            }
                        }
                        return newArr;
                    }else{
                        for(var i=0;i<arr.length;i++){
                            if(!tArr[arr[i]]){
                                newArr.push(arr[i]);
                                tArr[arr[i]] = true;
                            }
                        }
                        return newArr;
                    }
                }
            }

            //FIX位置
            var overHeight = (elem.offset().top + elem.outerHeight() + tableBox.outerHeight() - $(window).scrollTop()) > $(window).height();
            var overWidth = (elem.offset().left + tableBox.outerWidth()) > $(window).width();
            overHeight && tableBox.css({'top':'auto','bottom':'0px'});
            overWidth && tableBox.css({'left':'auto','right':'5px'})

            //关键词搜索
            form.on('submit(tableSelect_btn_search)', function(data){
                tableSelect_table.reload({
                    where: data.field
                    // page: {
                    //   curr: 1
                    // }
                });
                return false;
            });

            //双击行选中
            table.on('rowDouble('+tableName+')', function(obj){
                var checkStatus = {data:[obj.data]};
                selectDone(checkStatus);
            })

            //按钮选中
            tableBox.find('.tableSelect_btn_select').on('click', function() {
                var checkStatus = table.checkStatus(tableName);
                if(checkedData.length > 1){
                    checkStatus.data = checkedData;
                }
                selectDone(checkStatus);
            })

            //写值回调和关闭
            function selectDone (checkStatus){
                if(opt.checkedKey){
                    var selected = [];
                    for(var i=0;i<checkStatus.data.length;i++){
                        selected.push(checkStatus.data[i][opt.checkedKey])
                    }
                    elem.attr("ts-selected",selected.join(","));
                }
                opt.done(elem, checkStatus);
                tableBox.remove();
                delete table.cache[tableName];
                checkedData = [];
            }

            //点击其他区域关闭
            $(document).mouseup(function(e){
                var userSet_con = $(''+opt.elem+',.tableSelect');
                if(!userSet_con.is(e.target) && userSet_con.has(e.target).length === 0){
                    tableBox.remove();
                    delete table.cache[tableName];
                    delete tableSelect.cacheObj[tableName];
                    checkedData = [];
                }
            });
        }
        elem.off('click').on('click',functionVar);
        elem.off('input').on('input',functionVar);
    }

    /**
    * 隐藏选择器
    */
    tableSelect.prototype.hide = function (opt) {
        $('.tableSelect').remove();
    }

    tableSelect.prototype.searchInput = debounce(function (seltablename) {
        tableSelect.cacheObj[seltablename].reload({
            where: form.val("tableSelectForm")
            // page: {
            //     curr: 1
            // }
        });
    },100)

    // 第四版(立即执行,停止触发 n 秒后,才可以重新触发执行。反过来)
    function debounce(func, wait, immediate) {
        // immediate默认为false
        var timeout, args, context, timestamp, result;

        var later = function() {
            // 当wait指定的时间间隔期间多次调用_.debounce返回的函数,则会不断更新timestamp的值,导致last < wait && last >= 0一直为true,从而不断启动新的计时器延时执行func
            var last = Date.now() - timestamp;

            if(last < wait && last >= 0) {
                timeout = setTimeout(later, wait - last);
            } else {
                timeout = null;
                if(!immediate) {
                    result = func.apply(context, args);
                    if(!timeout) context = args = null;
                }
            }
        };
        return function() {
            context = this;
            args = arguments;
            timestamp = Date.now();
            // 第一次调用该方法时,且immediate为true,则调用func函数
            var callNow = immediate && !timeout;
            // 在wait指定的时间间隔内首次调用该方法,则启动计时器定时调用func函数
            if(!timeout) timeout = setTimeout(later, wait);
            if(callNow) {
                result = func.apply(context, args);
                context = args = null;
            }

            return result;
        };
    };

    //自动完成渲染
    var tableSelect = new tableSelect();

    //FIX 滚动时错位
    if(window.top == window.self){
        $(window).scroll(function () {
            tableSelect.hide();
        });
    }

    exports(MOD_NAME, tableSelect);
})

效果图示:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

layui tableSelect 数据表格下拉框(多选或单选) 的相关文章

  • 简单制作后台系统页面(含菜单)

    第一步 制作数据库表 我个人喜欢在PowerDesigner先建好数据库模型 然后导入到mysql里 导入方式 在PowerDesigner导航栏点开Datebase选择Datebase Generation再选择最后的preview 然后
  • Layui之选项卡案例 详细易懂

    本期精彩 利用Layui框架实现动态选项卡 继上一篇已经实现了左边的树形菜单栏 这一关卡我们已通过 接下来就是实现右边的动态选项卡的关卡 上个关卡的效果及链接 链接 http t csdn cn tYccL 目录 本期精彩 利用Layui框
  • layui使用初步入门

    目录 布局元素 字体图标 按钮 表单 数据表格 弹出层 layui官方地址 layui是模块化框架 这表示你想实现它的某个功能 可以选择不全部引入 只要引入一个一个相关的模块文件即可 引入的方式有两种 一种是将之当成独立组件引入 如 另一种
  • layui表格隐藏列的简单实现方法

    需求 渲染表格的时候 比如id在内的一些列是不需要展示给用户看的 但是在操作表格的时候还需要用得到 这就需要隐藏列 的功能 实现效果 页面上不显示 但是能获取到id的值 实现方法 table render id id 可以在这里设置需要隐藏
  • Java项目:设计管理系统(java+SSM+JSP+MYSQL+layui+Maven)

    源码获取 博客首页 资源 里下载 一 项目简述 功能包括 课题管理 学生管理 内容管理 文件管理 提问管理 教师管理 进度管理等等 二 项目运行 环境配置 Jdk1 8 Tomcat8 5 mysql Eclispe IntelliJ ID
  • layui 前端下载文件方法

    文件下载 function downLoadFile ids name 获取token var tableName layui data setter tableName 创建下载请求 var oReq new XMLHttpRequest
  • layui文件上传后台(带自定参数)

    记录layui文件上传方法 前端页面直接看layui文件上传相关文档就行 主要是记录后端Java接收上传流并保存的方法 layui文档 https www layui com doc modules upload html 因为该方法使用M
  • xShell操作Linux的常用命令

    我们需要在本地连接Linux服务器 可以用winscp来进行连接 优点是图形化界面 文件的层级关系类似于Windows 更容易操作 也可以使用xShell来进行连接 查看和操作文件就需要使用Linux命令 文件的层级关系没有前者直观 但作为
  • 一款经典的ThinkPhp6开发的CMS内容管理系统

    项目介绍 一款 PHP 语言基于 ThinkPhp6 x Layui MySQL等框架精心打造的一款模块化 插件化 高性能的前后端分离架构敏捷开发框架 可用于快速搭建前后端分离后台管理系统 本着简化开发 提升开发效率的初衷 框架自研了一套个
  • 2021-12-23 工作记录--LayUI-单击行内容展示子表(手风琴效果),堪称yyds

    LayUI 单击行内容展示子表 手风琴效果 百度了好多办法 都不能达到这种效果 所以记录一下 最开始使用layui soul table 但是它不能实现单击行内容展示子表 而是单击行最左列展示子表 所以与项目不符 则放弃了 但是感兴趣的小萝
  • layui添加菜单和动态操作tab

    layui添加菜单和动态操作tab 代码一 使用模板引擎渲染菜单 代码二修改版 代码一 使用模板引擎渲染菜单
  • ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版

    QQ 23426945 PHP技术群 159789818 个人技术博客 https www itqaq com TP6 0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用 经过测试 最后得出域名绑定应用是最合适的部署方式 如果有更
  • LayUI系列(一)之layui介绍以及登录功能的实现

    文章目录 一 layui简介 1 1 layui介绍 1 2 主要构成 1 3 迭代历程 1 4 layui easyui和bootstrap对比 1 4 1 layui与bootstrap对比 这两个都属于ui渲染框架 1 4 2 lay
  • layer.msg 的time 时间停留问题

    layer msg 同上 icon 1 time 2000 2秒关闭 如果不配置 默认是3秒 function do something time 属性为弹框停留时间 单位为毫秒 tipsMore 属性为是否同时显示多个弹框 true为显示
  • LayUI图片上传接口

    前端样式 div class layui upload drag i class layui icon xe67c i p 点击上传 或将文件拖拽到此处 p div js var uploadInst upload render elem
  • OA项目之项目整体业务分析【附项目原型图演示】

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于OA项目的相关操作吧 目录 Welcome Huihui s Code World 一 项目简介 1 目的 2 人员名词解释 3 主界面展示 二 会议管理 1
  • layui table按条件设置背景颜色

    var that this elem next res data forEach function item index if item deleted 1 var tr that find layui table box tbody tr
  • Layui框架的拖动上传 以及 时间选择器的基本使用

    上传用的layui的点击or拖动上传 其他上传也同理 不喜勿喷 欢迎补充 上代码 html div class layui form item style width 1 div
  • 文件ajax上传方式

    直接看代码 1 html table class layui table thead tr td width 20 产品信息 td td 产品信息 td tr thead tbody tr td 产品名称 td td td tr tbody
  • Java版企业电子招标采购系统源码—鸿鹄电子招投标系统-企业战略布局下的采购寻源

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化

随机推荐

  • 微信小程序——开篇

    开篇 前言 锻造兵器 开发者账号 微信开发者工具 写在最后 前言 如今微信小程序已经成为我们日常生活中不可或缺的 介质 如我们的出行 购物 餐饮 社交 娱乐等活动的小程序已经因有尽有 相比于去安装一个app人们自然更加倾向于在微信中去直接访
  • 【qt】信号,使用自定义的结构作为参数传递

    错误 解决办法 方法1 注册改向量 1 注册位置 在第一次使用此类链接跨线程的signal slot之前 一般在当前类的构造函数中进行注册 2 注册方法 在当前类的顶部包含 include
  • ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数

    ES6 一 一 let和const声明变量 1 变量不能重复声明 2 块儿级作用域 3 不存在变量提升 4 const声明变量 5 优点 1 for循环中用let比较奶思 2 for循环分为父作用域和子作用域 3 不会污染全局变量 二 模板
  • 基于 uni-app 和 uni-cloud 小程序项目开发实战

    基于 uni app 和 uni cloud 小程序项目开发实战 前言 一 技术栈 二 环境搭建 三 项目功能介绍 1 地图地点搜索及路线规划 2 uniCloud服务空间 3 AI识图 4 上拉框组件 5 登陆权限 四 遇到问题 五 发行
  • IDEA去除Mapper.xml中黄色警报和绿色背景

    黄色警报去除 IDEA中用以编写SQL的Mapper xml常出现的警报通常来自于两种检查 一种是SQL方言检测 一种是未配置数据源的检测 需要在检查中将这两种检查关闭 解决方案 英文原版 settings Editor Inspectio
  • android权限的问题,android关于权限的问题

    希望能帮到大家 希望大家继续补充 MyLocation API调用获取的Cellid等定位信息必需添加android permission ACCESS COARSE LOCATION这个声明 ACCESS FINE LOCATION AC
  • 直播弹幕系统(五)- 整合Stomp替换原生WebSocket方案探究

    直播弹幕系统 五 整合Stomp替换原生WebSocket方案探究 前言 一 STOMP 协议简单介绍 1 1 客户端编码基础 1 2 服务端编码基础 1 2 1 SimpMessagingTemplate 1 2 2 SendTo 和 M
  • Codeforces Round 744 (Div. 3)

    A Casimir s String Solitaire 一个A需要一个B一个C需要一个B 所以只要A和C的个数之和等于B即可 AC代码 include
  • 保姆级手把手图文并茂教你配置MAC系统Flutter环境

    Flutter 是什么 Flutter是Google开源的构建用户界面 UI 工具包 帮助开发者通过一套代码库高效构建多平台精美应用 支持移动 Web 桌面和嵌入式平台 Flutter 开源 免费 拥有宽松的开源协议 适合商业项目 下载Fl
  • PyTorch 06—基础总结

    梯度下降算法 多层感知器 多层感知器的优化算法是梯度下降算法 梯度下降法是一种致力于找到函数极值点的算法 前面介绍过 所谓 学习 便是改进模型参数 以便通过大量训练步骤将损失最小化 有了这个概念 将梯度下降法应用于寻找损失函数的极值点便构成
  • 02-SpringBoot集成MinIo

    添加依赖
  • 字节对齐

    2018 1 16 对于自己定义的结构体 如果拿该结构体去匹配内存中的一个块内容 有可能不能准确的匹配正确 就比如今天去匹配SSL ClientHello结构体 但是总是往后退了一个字节 而且非常准 这其实是编译器的问题 gcc默认是4字节
  • 高亮地图点及属性信息展示优化方案

    作者 小阳 1 序言 本文主要是利用了UTFGrid图层快速交互获取地物信息的特点 以SuperMap iClient for JavaScript的开发作为示范 注 要实现本文所讲述的功能 同时需要SuperMap iServer和Sup
  • 2023中国数据安全防护与治理市场研究报告

    随着数字经济的快速发展 数据成为重要的生产要素 数据安全面临较为严峻的态势 数据安全市场迎来较大机遇 赛迪顾问重点发布了中国数据安全防护与治理产品及服务全景图 并对各类产品及服务做了成熟度评价 形成了中国数据安全防护与治理产品及服务成熟度曲
  • 视频网站需要流媒体服务器吗,视频监控必须用流媒体服务器吗

    视频监控必须用流媒体服务器吗 内容精选 换一换 task input参数说明参数是否必选类型说明type是String视频数据的输入类型 obs 表示从华为云OBS中读取视频数据 url 表示从指定的URL地址中读取视频数据 edgecam
  • Halcon HTuple由按行排序转成按列排序

    目录 前言 方法 结果 前言 今天有一个需求 把一个HTuple的列表重新排序 列表保存的是由二维展开成一维的数据 先按行保存 存完一行再存下一行 如今需要变一下 改成先保存一列 存完一列后在保存下一列 如有一个二维表格如下 1 2 3 4
  • MySQL主备、主从、读写分离详解

    一 MySQL主备的基本原理 在状态1中 客户端的读写都直接访问节点A 而节点B是A的备库 只是将A的更新都同步过来 到本地执行 这样可以保持节点B和A的数据是相同的 当需要切换的时候 就切成状态2 这时候客户端读写访问的都是节点B 而节点
  • 激光雷达-相机外参联合标定通过手动选取3D-2D点利用PnP求解

    0 写在前面 差不多快半年没有更新博客了 这里先感慨一下找工作的不容易 这个激光雷达 相机联合标定的需求是因为我前段时间所做的项目中有一个需求 需要给点云添加对应的温度 没错 给点云加温度 从红外相机中获取到温度 1 激光雷达 gt 相机的
  • Node.js 源码安装

    Node js 源码安装 以下部分我们将介绍在Ubuntu Linux下安装 Node js 其他的Linux系统下安装步骤 在 Github 上获取 Node js 源码 sudo git clone https github com n
  • layui tableSelect 数据表格下拉框(多选或单选)

    记录 使用tableSelect插件实现下拉框表格 并多选或单选数据 HTML代码 tr td td tr