layui遇到的一些问题

news2024/12/23 6:50:48

目录

  • 一、layui nav 菜单栏默认收缩
  • 二、layui 数据表格 单元格 颜色设置
  • 三、layui表格没有数据的时候,表头没有横向滚动条
  • 四、layui layer.open 弹窗全屏显示
  • 五、layui表格通过点击tr改变这一行的颜色
  • 六、 layer.open弹框弹出后父页面滚动问题
  • 七、LayUI下拉框中取值和获取属性方法
  • 八、LayUI 获取下拉框的选中的值
  • 九、layer alert时 点击其他地方会关闭
  • 十、Layui表格点击行选中复选框,点击行选择复选框
  • 十一、layui表格 获取选中数据 多选框勾选数量
  • 十二、layui的从一个选项卡跳到另一个选项卡
  • 十三、layui表格的合并行处理
  • ​十四、[layUI:table表格的单击事件,双击事件,获取所在行的数据](https://www.cnblogs.com/DDDKC/p/15716193.html)
  • 十五、layui数据表格中根据条件展示/隐藏toolbar中的按钮
  • 十六、layui按钮button的js设置disabled
  • 十七、table.cache[‘‘]获取表格当前页的所有行数据
  • 十八、layui中根据条件判断使table单元格变色
  • 十九、Layui table中筛选列增加 [全选,反选] 功能
  • 二十、[layui穿梭框右侧增加上移下移功能](https://www.freesion.com/article/9804310203/)
  • 二十一、[Layui中如何在table中筛选列增加 [全选,反选] 功](https://blog.csdn.net/qq_33966519/article/details/103617778)

一、layui nav 菜单栏默认收缩

默认收缩的是li上的class 去掉 layui-nav-itemed。就可以了。我一直再找的是ul标签上的。

<div class="layui-side layui-bg-black">
            <div class="layui-side-scroll">
                <ul class="layui-nav layui-nav-tree" lay-filter="test">
                    <!-- 下面的li元素的class加上 layui-nav-itemed 就可以展开二级菜单 -->
                    <li class="layui-nav-item">
                        <a href="javascript:;">主动安全管理</a>
						<dl class="layui-nav-child">
							<dd>
								<a href="javascript:;" class="leftdaohang" data-url="ADAS" mytitle="高级辅助驾驶(ADAS)">高级辅助驾驶(ADAS)</a>
							</dd>
							<dd>
								<a href="javascript:;" class="leftdaohang" data-url="BSD" mytitle="驾驶远监测(BSD)">驾驶远监测(BSD)</a>
							</dd>
							<dd>
								<a href="javascript:;" class="leftdaohang" data-url="DSM" mytitle="盲区检测(DSM)">盲区检测(DSM)</a>
							</dd>
                            <dd>
								<a href="javascript:;" class="leftdaohang" data-url="SDA" mytitle="激烈驾驶行为(SDA)">激烈驾驶行为(SDA)</a>
							</dd>
                            <dd>
								<a href="javascript:;" class="leftdaohang" data-url="UploadConfig" mytitle="附件上传策略配置">附件上传策略配置</a>
							</dd>
						</dl>
                    </li>
                    
                    <li class="layui-nav-item leftdaohang" data-url="online" mytitle="上下线统计"><a>上下线统计</a></li>
                    <li class="layui-nav-item leftdaohang" data-url="alarm" mytitle="警报统计"><a>警报统计</a></li>
                </ul>
            </div>
        </div>

二、layui 数据表格 单元格 颜色设置

{ field: 'attachmentInfo', title: languageTL.count.alarmData[0],align: 'center', event: 'setOnline',
        templet:function(d){
            if (!d.attachmentInfo.uploadedNumber) {
                return '<ul class="dataRow" style="color: rgba(50,130,216,1); text-decoration: underline; cursor: pointer;">0/' + d.attachmentInfo.number + '</ul>';
            } else {
                return '<ul class="dataRow" style="color: rgba(50,130,216,1); text-decoration: underline; cursor: pointer;">' + d.attachmentInfo.uploadedNumber+ '/' +d.attachmentInfo.number + '</ul>';
            }
        }
    }

附件信息那一栏有变化了,可以根据class="dataRow"改变颜色
Alt

三、layui表格没有数据的时候,表头没有横向滚动条

table的配置文件增加回调函数
done: function (res, curr, count) {
fixedLayuiTable(this,count);
}

layui.use(['table'], function () {
    tableView = layui.table;
    tableView.render({
        elem: '#tabView',
        data: listData,
        height: '520',
        cellMinWidth: 80,
        cols: [colsList],
        page: true, //是否显示分页
        limits: [10, 100, 1000, 2000],
        page: {
            count: listData.length,
            prev: '上一页',
            next: '下一页',
            layout: ['prev', 'page', 'next', 'count']
        },
        done: function (res, curr, count) {
            fixedLayuiTable(this, count);
        }
    });

});       

/**
* 解决table在没有数据的时候,因表格列宽度超出了浏览器的宽度,导致没有横向滚动条
* 使用:在table的参数中添加回调函数done: function (res, curr, count) {fixedLayuiTable(this,count);}
* @param {object} tableobj
* @param {number} count
* @param {boolean} 是否分页
*/
function fixedLayuiTable(tableobj,count,ifpage) {
    if (count == 0) {
        tableobj.elem.next('.layui-table-view').find('.layui-table-header').css('display', 'inline-block');
        var tableBox =tableobj.elem.next('.layui-table-view').find('.layui-table-box');
        tableBox.css('overflow-x', 'auto');
        //改变高度:table没有分页高度减15,否则增加25
        if (!ifpage) {
            tableBox.height(tableBox.height() - 15);
        } else {
            tableBox.height(tableBox.height() + 25);
        }
    }
}

四、layui layer.open 弹窗全屏显示

let index =layer.open({
   type: 2,
   area: ['100%', '100%'], // 100%全屏
   shadeClose: true,
   shade: 0.4,
   title: '', // 标题留空让弹窗页头隐藏掉
   closeBtn: 0, // 不显示右上角那个X关闭按钮
   content: url // 内容
});
layer.full(index);

五、layui表格通过点击tr改变这一行的颜色

$("body").on('click','.layui-table-body tr ',function () {
          console.log(this);
          var data_index=$(this).attr('data-index');//得到当前的tr的index
          console.log($(this).attr('data-index'));
          $(".layui-table-body tr").attr({"style":"background:#FFFFFF"});//其他tr恢复颜色
          $(".layui-table-body tr[data-index="+data_index+"]").attr({"style":"background:#99ff99"});//改变当前tr颜色
});

六、 layer.open弹框弹出后父页面滚动问题

链接: layer.open弹框弹出后父页面滚动问题.

layer.open({
    type: 1,
    area: ['680px', 'auto'],
    scrollbar: false,
    zIndex: 50,
    shade: 0.2,
    shadeClose: true,
    title: '标题',
    content: '内容'
});

设置scrollbar为false,弹框弹出时,父页面不能滚动但会回到页面顶部;scrollbar默认为true,父页面能滚动但不会回到页面顶部。

暂时没有找到能够解决的办法,不知道为什么layui官网上的在线调试没有受到scrollbar的影响都不会回到顶部,望高人指点

七、LayUI下拉框中取值和获取属性方法

获取下拉框选中的值

var configId = $("#labelSelect").find(“option:selected”).val();
var optionId = $("#optionSelect").find(“option:selected”).val();

清空下拉框

$("#labelSelect").find(“option:selected”).val("");
$("#optionSelect").find(“option:selected”).val("");
form.render(‘select’);

给下拉框添加值

$("#optionSelect").append(‘全部’);

获取下拉框选中的option的属性

var labeltype = $("#ID").find(“option:selected”).attr(“属性名”);

八、LayUI 获取下拉框的选中的值

form.on('select(category)', function (data) {
     console.log(data.value);
});

九、layer alert时 点击其他地方会关闭

function editSuccess(){
    layer.confirm('修改成功', {  btn : [ '确定'],title: '操作提示',icon: 0
    }, function(index) {
        layer.close(index);
    });
}

十、Layui表格点击行选中复选框,点击行选择复选框

// 表格点击行自动选中 ==========================================================================
	$(document).on("click",".layui-table-body table.layui-table tbody tr", function (e) {
		var index = $(this).attr('data-index');
		var tableBox = $(this).parents('.layui-table-box');
		//存在固定列
		if (tableBox.find(".layui-table-fixed.layui-table-fixed-l").length > 0) {
			tableDiv = tableBox.find(".layui-table-fixed.layui-table-fixed-l");
		} else {
			tableDiv = tableBox.find(".layui-table-body.layui-table-main");
		}
		var checkCell = tableDiv.find("tr[data-index=" + index + "]").find("td div.laytable-cell-checkbox div.layui-form-checkbox I");
		if (checkCell.length > 0) {
			checkCell.click();
		}
	});

	// 表格点击行出发复选框后,阻止向上冒泡===============================================================
	$(document).on("click", "td div.laytable-cell-checkbox div.layui-form-checkbox", function (e) {
		e.stopPropagation();
	});

Layui表格点击行选中复选框,点击行选择复选框

第二种方法

table.on('row(tabView)', function (obj) {
        //用obj.tr.eq(0)不行,有2行
        var cbox = obj.tr.find('.layui-form-checkbox'), rowindex = obj.tr.eq(0).data("index");
        console.log(cbox)
        console.log(obj)
        if (cbox.hasClass('layui-form-checked')) {
            cbox.removeClass("layui-form-checked");
        }
        else {
            cbox.addClass("layui-form-checked");
        }
        window._selectRole = { RoleID: obj.data.RoleID, RoleName: obj.data.RoleName };
    });

layui table 单击行选中复选框

十一、layui表格 获取选中数据 多选框勾选数量

var list= layui.table.checkStatus('gridid').data;

十二、layui的从一个选项卡跳到另一个选项卡

<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
    <ul class="layui-tab-title">
        <li lay-id=1 class="layui-this">帧率信息</li>
        <li lay-id=2>GOP信息</li>
    </ul>
    <div class="layui-tab-content">

        <div class="layui-tab-item layui-show">
            <h1>第一个选项卡</h1>
        </div>
        <div class="layui-tab-item">
            <h1>第二个选项卡</h1>
        </div>
    </div>
</div>

最主要的就是
1.lay-filter=“docDemoTabBrief”
2.lay-id=1 (跳转的序号)

layui.use('element', function () {
    let element = layui.element;
    element.tabChange('docDemoTabBrief', 2); 
});

十三、layui表格的合并行处理

layui.use('table', function () {
     table = layui.table;

     table.render({
         elem: '#videoTable',
         data: videoData,
         height: '410',
         width: '100%',
         defaultToolbar: [],
         cellMinWidth: 100,
         cols: [colsListFalse],
         page: true, //是否显示分页
         limits: [10, 100, 1000, 2000],
         page: {
             count: videoData.length,
             prev: '上一页',
             next: '下一页',
             layout: ['prev', 'page', 'next', 'count']
         },
         done: function (res, curr, count) {
             mergeRows(res)
         }
     });
});

// 这里是从别人那里拷贝来的代码
        function mergeRows(res) {
            var data = res.data;
            var mergeIndex = 0;//定位需要添加合并属性的行数
            var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
            // var columsName = ['deviceId', 'ypRL', 'ypLoading', 's1RL', 's1Loading', 's2RL', 's2Loading'];//需要合并的列名称
            var columsName = ['deviceId'];//需要合并的列名称
            // var columsIndex = [0, 2, 3, 7, 8, 12, 13];//需要合并的列索引值
            var columsIndex = [0];//需要合并的列索引值

            for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
                var trArr = $('div[lay-id="videoTable"] .layui-table-body>.layui-table').find("tr");//所有行,如果页面多个表格,这里一定要定位到你所要合并的表格
                for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
                    var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
                    var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列

                    if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
                        mark += 1;
                        tdPreArr.each(function () {//相同列的第一列增加rowspan属性
                            $(this).attr("rowspan", mark);
                        });
                        tdCurArr.each(function () {//当前行隐藏
                            $(this).css("display", "none");
                        });
                    } else {
                        mergeIndex = i;
                        mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
                    }
                }
                mergeIndex = 0;
                mark = 1;
            }
        }

​十四、layUI:table表格的单击事件,双击事件,获取所在行的数据

table.render({
	 done: function(res, curr, count){
         $('#tableId').next().find('.layui-table-body').find("table" ).find("tbody").children("tr").on('dblclick',function(){
         var id = JSON.stringify($('#tableId').next().find('.layui-table-body').find("table").find("tbody").find(".layui-table-hover").data('index'));
                var obj = res.data[id];
                console.log("行双击事件");

          });
          $('#tableId').next().find('.layui-table-body').find("table" ).find("tbody").children("tr").on('click',function(){
          var id = JSON.stringify($('#tableId').next().find('.layui-table-body').find("table").find("tbody").find(".layui-table-hover").data('index'));
                 var obj = res.data[id];
                 console.log("行单击事件");
          });
	}
});

十五、layui数据表格中根据条件展示/隐藏toolbar中的按钮

<script>
layui.use('laytpl', function(){
  var laytpl = layui.laytpl;
)}
</script>

<script type="text/html" id="current_table_bar">

<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
@{{# if(d.pid == 0){ }}
<a class="layui-btn layui-btn-normal layui-btn-xs dispatch-clerk" lay-event="dispatch">添加</a>
@{{# } }}
</script>

十六、layui按钮button的js设置disabled


设置disabled

$('#butid').addClass("layui-btn-disabled").attr("disabled",true);

恢复可点击

$('#butid').removeClass("layui-btn-disabled").attr("disabled",false);

十七、table.cache[‘‘]获取表格当前页的所有行数据

layui.table.cache['tablename'] 获取所有数据。

十八、layui中根据条件判断使table单元格变色

done:function (res,curr,count) {
	var that = this.elem.next();
	var preliminaryDayList = res.data;  // 拿到后台给的数据
    preliminaryDayList.forEach(function (item,index) { // 循环取后台给的条件的值
        if (item.isPreliminaryDay == true) {
            that.find(".layui-table-box tbody tr[data-index='" + index + "']").css("background-color", "#FA8072"); // 行变色
        }
    });
}

十九、Layui table中筛选列增加 [全选,反选] 功能

table.on('toolbar()', function (obj) {
var config = obj.config;
var btnElem = $(this);
var tableId = config.id;
var tableView = config.elem.next();
switch (obj.event) {
    case 'LAYTABLE_COLS':
    // 给筛选列添加全选还有反选的功能
    var panelElem = btnElem.find('.layui-table-tool-panel');
    var checkboxElem = panelElem.find('[lay-filter="LAY_TABLE_TOOL_COLS"]');
    var checkboxCheckedElem = panelElem.find('[lay-filter="LAY_TABLE_TOOL_COLS"]:checked');
    $('<li class="layui-form" lay-filter="LAY_TABLE_TOOL_COLS_FORM">' +
        '<input type="checkbox" lay-skin="primary" lay-filter="LAY_TABLE_TOOL_COLS_ALL" '
        + ((checkboxElem.length === checkboxCheckedElem.length) ? 'checked' : '') + ' title="全选">' +
        '<span class="LAY_TABLE_TOOL_COLS_Invert_Selection">反选</span></li>')
        .insertBefore(panelElem.find('li').first())
        .on('click', '.LAY_TABLE_TOOL_COLS_Invert_Selection', function (event) {
        layui.stope(event);
        // 反选逻辑
        panelElem.find('[lay-filter="LAY_TABLE_TOOL_COLS"]+').click();
        });
    form.render('checkbox', 'LAY_TABLE_TOOL_COLS_FORM');
    break;
}
});

// 监听筛选列panel中的全选
form.on('checkbox(LAY_TABLE_TOOL_COLS_ALL)', function (obj) {
$(obj.elem).closest('ul')
    .find('[lay-filter="LAY_TABLE_TOOL_COLS"]' + (obj.elem.checked ? ':not(:checked)' : ':checked') + '+').click();
});

// 监听筛选列panel中的单个记录的change
$(document).on('change', 'input[lay-filter="LAY_TABLE_TOOL_COLS"]', function (event) {
var elemCurr = $(this);
// 筛选列单个点击的时候同步全选的状态
$('input[lay-filter="LAY_TABLE_TOOL_COLS_ALL"]')
    .prop('checked',
    elemCurr.prop('checked') ? (!$('input[lay-filter="LAY_TABLE_TOOL_COLS"]').not(':checked').length) : false);
form.render('checkbox', 'LAY_TABLE_TOOL_COLS_FORM');
});

二十、layui穿梭框右侧增加上移下移功能

Alt

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="js/layui-v2.5.6/layui/css/layui.css">
    <style>
        .layuiTransformBtns{
            /*border:1px solid red;*/
            display: inline-block;
            position: absolute;
            z-index: 19999;
            top:26%;
            left:16%
        }
    </style>
    <script src="js/jquery.min.1-11-3.js"></script>
    <script src="js/layui-v2.5.6/layui/layui.js"></script>
</head>
<body>
<div id="usingGrid" style="position:relative;">
    <div class="layuiTransformBtns" style="">
        <button type="button" data-direction="up" class="layui-btn layui-btn-sm videoMoveBtn" style="margin-bottom: 95px;"><i class="layui-icon layui-icon-up"></i></button><br>
        <button type="button" data-direction="down" id="moveDown" class="layui-btn layui-btn-sm videoMoveBtn"><i class="layui-icon layui-icon-down"></i></button>
    </div>
    <div id="test3" class="demo-transfer"></div>
    <button type="button" id="getRightData" class="layui-btn layui-btn-sm">取数据</button>
    <div class="layui-form-mid layui-word-aux">数据显示在控制台</div>
</div>
 
<script>
    $(function(){
        layui.use(['transfer', 'layer', 'util'], function(){
            var $ = layui.$
                ,transfer = layui.transfer
                ,layer = layui.layer
            data2 = [
                {"value": "1", "title": "瓦罐汤"}
                ,{"value": "2", "title": "油酥饼"}
                ,{"value": "3", "title": "炸酱面"}
                ,{"value": "4", "title": "串串香"}
                ,{"value": "5", "title": "豆腐脑"}
                ,{"value": "6", "title": "驴打滚"}
                ,{"value": "7", "title": "北京烤鸭"}
                ,{"value": "8", "title": "烤冷面"}
                ,{"value": "9", "title": "毛血旺"}
                ,{"value": "10", "title": "肉夹馍"}
                ,{"value": "11", "title": "臊子面"}
                ,{"value": "12", "title": "凉皮"}
                ,{"value": "13", "title": "羊肉泡馍"}
                ,{"value": "14", "title": "冰糖葫芦"}
                ,{"value": "15", "title": "狼牙土豆"}
            ]
            //初始右侧数据
            transfer.render({
                elem: '#test3'
                ,data: data2
                ,value: ["1", "3", "5", "7", "9", "11"]
                ,id: 'demo1' //定义索引
            })
 
 
            // 当前元素在父元素的位置
            $('#getRightData').click(function () {
                //获得右侧数据
                var getData = transfer.getData('demo1');
                console.log(getData);
            })
 
            $('.videoMoveBtn').click(function () {
                transfornMove({
                    elem:'#usingGrid',
                    direction:$(this).data('direction')
                })
            })
 
            //layui穿梭框上移、下移功能
            function transfornMove(option) {
                // debugger
                //右侧穿梭框
                var rightTransforn=$($(option.elem+ " ul")[1])
                // 穿梭框选中的元素
                var checkItem=rightTransforn.find('.layui-form-checked').parent()
                // 穿梭框右侧下面部分
                var rightTransBottom=rightTransforn.children()
                // 第一个元素的下标
                var checkOneIndex=rightTransBottom.index(option.direction=='down'?checkItem[checkItem.length-1]:checkItem[0])
                // 右侧有几条数据
                var rightDataLength=rightTransBottom.length
                console.log('右侧共有' , rightDataLength , '条数据');
                console.log('当前选择的元素',checkItem);
                console.log('第一个元素的下标',checkOneIndex);
                console.log('当前元素在父元素的位置',rightTransBottom.index(checkItem));
                if(!checkItem.length){
                    layer.msg("请选择数据后再操作");
                    return;
                }
                // 上移时,取第一个元素在父元素的位置,如果在第一位就不再移动
                if(checkOneIndex==(option.direction=='down'?rightDataLength-1:0)){
                    layer.msg("移不动啦");
                    return;
                }
                if(option.direction=='down'){
                    for(var i=checkItem.length;i>=0;i--){
                        checkItem.eq(i).next().after(checkItem.eq(i));
                    }
                }else{
                    for(var i=0;i<checkItem.length;i++){
                        checkItem.eq(i).prev().before(checkItem.eq(i));
                    }
                }
            }
 
        })
 
    })
</script>
</body>
</html>

二十一、Layui中如何在table中筛选列增加 [全选,反选] 功

table.on('toolbar()', function (obj) {
var config = obj.config;
var btnElem = $(this);
var tableId = config.id;
var tableView = config.elem.next();
switch (obj.event) {
    case 'LAYTABLE_COLS':
    // 给筛选列添加全选还有反选的功能
    var panelElem = btnElem.find('.layui-table-tool-panel');
    var checkboxElem = panelElem.find('[lay-filter="LAY_TABLE_TOOL_COLS"]');
    var checkboxCheckedElem = panelElem.find('[lay-filter="LAY_TABLE_TOOL_COLS"]:checked');
    $('<li class="layui-form" lay-filter="LAY_TABLE_TOOL_COLS_FORM">' +
        '<input type="checkbox" lay-skin="primary" lay-filter="LAY_TABLE_TOOL_COLS_ALL" '
        + ((checkboxElem.length === checkboxCheckedElem.length) ? 'checked' : '') + ' title="全选">' +
        '<span class="LAY_TABLE_TOOL_COLS_Invert_Selection">反选</span></li>')
        .insertBefore(panelElem.find('li').first())
        .on('click', '.LAY_TABLE_TOOL_COLS_Invert_Selection', function (event) {
        layui.stope(event);
        // 反选逻辑
        panelElem.find('[lay-filter="LAY_TABLE_TOOL_COLS"]+').click();
        });
    form.render('checkbox', 'LAY_TABLE_TOOL_COLS_FORM');
    break;
}
});

// 监听筛选列panel中的全选
form.on('checkbox(LAY_TABLE_TOOL_COLS_ALL)', function (obj) {
$(obj.elem).closest('ul')
    .find('[lay-filter="LAY_TABLE_TOOL_COLS"]' + (obj.elem.checked ? ':not(:checked)' : ':checked') + '+').click();
});

// 监听筛选列panel中的单个记录的change
$(document).on('change', 'input[lay-filter="LAY_TABLE_TOOL_COLS"]', function (event) {
var elemCurr = $(this);
// 筛选列单个点击的时候同步全选的状态
$('input[lay-filter="LAY_TABLE_TOOL_COLS_ALL"]')
    .prop('checked',
    elemCurr.prop('checked') ? (!$('input[lay-filter="LAY_TABLE_TOOL_COLS"]').not(':checked').length) : false);
form.render('checkbox', 'LAY_TABLE_TOOL_COLS_FORM');
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cuba勒索软件深度分析及防护建议

0 1. Cuba勒索软件的部署方式 Cuba勒索软件家族于2019年12月首次浮出水面。此后&#xff0c;该勒索软件家族背后的攻击者改变了策略和工具&#xff0c;成为2022年成为更普遍的威胁。该勒索软件历来通过Hancitor分发&#xff0c;通常通过恶意附件传递。 Hancitor也被称为Chani…

C++001-对比编程语言C++和python

文章目录C001-对比编程语言C和python编程语言发展史计算机 ENIAC机器语言&#xff1a;汇编语言&#xff1a;高级语言&#xff1a;机器汇编高级语言对比C语言与汇编不同高级语言的应用场景C和python语法对比Print Hello WorldPrint Hello 10 timesCreate a procedureCheck if li…

Kotlin的5种单例模式

前言最近在学习Kotlin这门语言&#xff0c;在项目开发中&#xff0c;运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。主要单例模式实现如下&#xff1a;饿汉式懒汉式线程安全的懒汉式双重校验锁式静态内部类式PS:该篇文章不讨论单例…

Windows并发测试工具

Apache安装目录cmd用ab并发测试工具&#xff0c;请求10次&#xff0c;并发为5ab -n 10 -c 5 http://www.ysbm.com/api.php/task/testBingfa

安装kali linuxnmap使用(一)

安装环境 vmware17 kali linux 怎么安装可以查看这个博主的文章 这么说你需要重置root密码 sudo passwd root 或者你打出node -v但是kali linux没有nodejs,则会询问你是否需要安装。开玩笑,你可以使用sudo 指令来获取权限(第一次输入需要你的密码) nmap 这是kali linux自带…

沁恒CH32V307单片机入门(02):官方库与工程模板介绍

文章目录目的官方库工程模板使用例程总结目的 现在开发单片机大多数时候都是面向库开发的&#xff0c;这里将简单介绍下CH32V307的官方库。 在开发过程中新建项目时通常会从某些模板开始&#xff0c;模板包含了库和初始化代码等内容&#xff0c;有一定的组织好的目录结构&…

【C++】模板

模板一、非类型模板参数二、模板的特化2.1 函数模板的特化2.2 类模板的特化2.2.1 全特化2.2.2 偏特化三、模板的分离编译一、非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称…

为什么 Go 不支持 []T 转换为 []interface

在 Go 中&#xff0c;如果 interface{} 作为函数参数的话&#xff0c;是可以传任意参数的&#xff0c;然后通过类型断言来转换。 举个例子&#xff1a; package mainimport "fmt"func foo(v interface{}) {if v1, ok1 : v.(string); ok1 {fmt.Println(v1)} else if…

【测试设计】使用jenkins 插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告&#xff0c;后来也尝试过用Python的PyH模块自己构建测试报告&#xff0c;在后来看到了RobotFramework的测试报告&#xff0c;感觉之前用的测试报告都太简陋&#xff0c;它才是测试报告应该有的样子。也就是在…

【01Studio MaixPy AI K210】25.云训练模型文件

采集数据 根据它云训练平台的要求&#xff0c;它要求的图片格式必须是224*224的&#xff08;重点之重点&#xff09;&#xff0c;所以可以利用K210跑脚本直接采集数据。 数据采集脚本 main.py实验名称&#xff1a;照相机 说明&#xff1a;通过按键拍照并在LCD上显示&#xff08…

windows自建免费无限的开源图片识别公式转换为Latex

一、准备 python3.9.6下载 在最开始勾选添加环境变量 https://www.python.org/ftp/python/3.9.6/python-3.9.6-amd64.exe 验证&#xff0c;右键终端&#xff08;管理员&#xff09;&#xff0c;输入&#xff1a;python --version安装Anaconda https://mirrors.bfsu.edu.cn/ana…

算法拾遗二十五之暴力递归到动态规划三

算法拾遗二十五之暴力递归到动态规划三最长回文子串返回象棋从一个位置到另一个位置的方法有多少种返回咖啡机从开始到干净的最短时间最长回文子串 测试链接&#xff1a;https://leetcode.cn/problems/longest-palindromic-subsequence/ 子序列&#xff1a;是可以不连续的 子…

kafka基本概念、springboot整合kafka、kafka常见问题

kafka基本概念 Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。 基本概念&#xff1a; broker&#xff1a;就是一个kafka服务&#xff0c;可以有多个broker形成集群 toptic&#xff1a;每个broker里面可以有若干个toptic&#xff08;类似于标签&#xff0c;将消息分…

从Bug中学习--Bug根因分析法

从Bug中学习--Bug根因分析法 目录&#xff1a;导读 1、认识Bug 2、Bug的发现 3、Bug的产生 4、Bug的改进 5、总结 一提起测试&#xff0c;大多数人很容易就会联想到Bug。的确&#xff0c;测试的日常工作离不开Bug&#xff0c;测试工作很重要的一部分就是发现Bug。但是&#xf…

Coraza:一款功能强大的企业级OWASP Web应用程序防火墙

关于Coraza Coraza是一款功能强大的企业级OWASP Web应用程序防火墙框架&#xff0c;该工具基于Golang开发&#xff0c;不仅支持Modsecurity的Seclang语言&#xff0c;而且能够100%兼容OWASP核心规则集。 该工具完全开源&#xff0c;任何开发人员都可以根据自己的需求轻松完成…

GPDB中AOCO列存页的checksum

GPDB中AOCO列存页的checksum为了保证数据的正确性&#xff0c;AOCO列存页采用CRC32即循环冗余校验算法来进行校验。首先看下页结构。页类型有四种&#xff1a;AOSmallContentHeader、AOLargeContentHeader、AONonBulkDenseContentHeader和AOBulkDenseContentHeader。页头的大小…

【初阶数据结构】——详解几个常见的经典排序算法

文章目录1. 排序的概念及其运用1.1 排序的概念1.2 排序的应用1.3 常见的排序算法2. 插入排序2.1 直接插入排序算法思想举例&#xff08;升序&#xff09;代码实现直接插入排序特性总结2.2 希尔排序( 缩小增量排序 )算法思想代码实现希尔排序特性总结3. 选择排序3.1 直接选择排序…

Hadoop基础之《(7)—Hadoop三种运行模式》

一、hadoop有三种运行模式 1、本地模式 数据存储在linux本地&#xff0c;不用 2、伪分布式集群 数据存储在HDFS&#xff0c;测试用 3、完全分布式集群 数据存储在HDFS&#xff0c;同时多台服务器工作。企业大量使用 二、单机运行 单机运行就是直接执行hadoop命令 1、例子-…

AntV结合Vue实现导出图片功能

一、业务场景&#xff1a; AntV 组织图操作完毕以后&#xff0c;需要点击按钮将画布以图片的形式导出 二、问题描述&#xff1a; 官网上有4个方法&#xff0c;我用的是 graph.toFullDataURL(callback, type, imageConfig) 三、具体实现步骤&#xff1a; &#xff08;1&#x…

Three.js纹理投影简明教程

纹理投影是一种将纹理映射到 3D 对象并使其看起来像是从单个点投影的方法。 把它想象成投射到云上的蝙蝠侠符号&#xff0c;云是我们的对象&#xff0c;蝙蝠侠符号是我们的纹理。 它用于游戏和视觉效果&#xff0c;以及创意世界的更多部分。 工具&#xff1a;使用 NSDT场景编辑…