FineReport常用功能

news2025/1/8 16:52:36

不分页显示数据

参见:https://help.fanruan.com/finereport/doc-view-328.html?source=4

列数多时,所有列不能在一页显示,可在URL后增加如下参数,添加模版时,可以作为模版参数进行设置:

  • 分页预览模式:&__bypagesize__=false
  • 数据分析模式:&op=write

修改单元格背景接口

addEffect(type, opts):鼠标点击或者悬浮时,单元格或所在行列背景颜色变化;

决策报表 report0 ,鼠标悬浮单元格时设置所在行背景,离开时恢复


_g().getWidgetByName("report0").addEffect('highlightRow', {
    color: 'rgb(132,187,255)',
    trigger: 'mouseover',
});

隐藏参数面板的小箭头:

查看小箭头的class,css设置如下属性:

隐藏按钮:


//  旧版
$('.parameter-container-collapseimg-up').hide();
// 新版
$('.report-main-parameter-container-collapseimg-up').hide();
$('.report-main-parameter-container-resizable').hide();

删除按钮:


// 旧版
$('.parameter-container-collapseimg-up').remove();
// 新版
$('.report-main-parameter-container-collapseimg-up').remove();
$('.report-main-parameter-container-resizable').remove();

隐藏sheet栏


$(".fr-tabpane-controlbuttons.ui-state-enabled").hide()
$(".fr-tabpane-tabscontent-bg").hide(); 

切换sheet:


_g().loadSheetByName("sheet名称");

隐藏滚动条:

为控件添加初始化事件

隐藏横向滚动条:


_g().getWidgetByName('组件名称').setHScrollBarVisible(false);

隐藏纵项滚动条:


_g().getWidgetByName('组件名称').setVScrollBarVisible(false);

隐藏滚动条:


setTimeout(function() {
    var a = '组件名称';        // 获取对应报表块名称
    var b = a.toUpperCase();        // 防止大小写出现误差,此处自动将名称转成大写
    var wid = ($("div[widgetname='" + b + "']").width() - 25) + 'px';        // 获取报表块宽度
    $("div[widgetname='" + b + "']").css('width', wid);        // 重置报表块宽度
    var height = ($("div[widgetname='" + b + "']").height()) + 'px';        // 获取报表块高度
    $("div[widgetname='" + b + "']").css('height', height);        // 重置报表块高度
}, 3000);  

自定义滚动条:

参见:自定义滚动条插件- FineReport帮助文档 - 全面的报表使用教程和学习资料 


FR.Report.Plugin.ScrollProcessor.config = {
    alwaysVisible : true, //滚动条不会自动隐藏
    color : "red", //滚动条设置成红色
    size : "15px" //滚动条宽15px
};

 JS循环遍历单元格:


// _obj是表格tr对象
var _obj = $(".x-table tr");
// _length是tr行数
var _length = _obj.length;
for(var i = 0; i < _length; i++) {
    // 遍历tr中的对象td
    var _td = _obj.eq(i).find("td");
    for(var j = 0; j < _td.length; j++) {
        // _val是每个单元格值
        var _val = _td.eq(j).text();
        // 去除空格
        var _tval = $.trim(_val);
        // 判断是否是空,如果不为空弹出单元格值(可根据需要更改)
        if(_tval!=""){
                alert(_val);
        }
    }
}

数据列表隔行换色

添加条件属性:

背景_隔行换色:设置背景颜色,公示条件为:ROW() % 2 = 0。

JS延迟加载


// 延时0.5s执行
setTimeout(function() {
        
},  500)

JQuery根据控件名称获取控件


// 修改report0样式
$('div[widgetname=REPORT0]');

决策报表导出,导出单个报表块

参见:决策报表导出单个报表块- FineReport帮助文档 - 全面的报表使用教程和学习资料 

导出时可添加要导出的报表块,Tab组件导出选中tab报表:


// 方法一
window.open("${servletURL}?op=ec_export&sessionID=" + sessionID + "&widgetName=报表块名称&format=excel&extype=simple")
// 方法二
var REPORT_URL = "${servletURL}?op=ec_export&sessionID=" + sessionID + "&widgetName=报表块名称&format=excel&extype=simple";
window.location = encodeURI(REPORT_URL);

长时间未操作关闭窗口


 /* if 10 seconds no operation then logout  */
var maxTime = 10; // 此处设置倒计时时间,单位为秒
var time = maxTime;
$('body').on('keydown mousemove mousedown', function(e) {
        time = maxTime; // reset
});
var intervalId = setInterval(function() {
        time--;
        if (time <= 0) {
                ShowInvalidLoginMessage();
                clearInterval(intervalId);
       }
}, 1000)
function ShowInvalidLoginMessage() {
        FR.Msg.alert("系统提示","您已经长时间没操作了,即将退出系统!");
        //TODO 做需要做的操作
        //exp:关闭页面
        setTimeout(function () {
                window.close();
        },2000);//弹出提示2秒后关闭页面,此处单位为毫秒
} 

下拉框-数据集

实际值:value("dic_Inv",1,4,"xf")

取dic_Inv 数据集中第1列元素,且该列元素对应的第4列元素的值是 xf 的所有数据。

dic_Inv.select(cInvCode, cInvCode != "0236" && cInvCode != "010101" && sysType == "xf")

取dic_Inv 数据集中cInvCode列数据,且cInvCode值不为0236和010101且sysType为xf的数据。

显示值:value("dic_Inv", 3, 1, $$$)

取dic_Inv 数据集中第3列元素,且该列元素对应的第1列元素的值是实际值的数据。

自定义统计图提示内容

图表数据来源自单元格数据,图表分类为B3,单元格数据起始行为13,提示内容为:

●最高价: this.points[i].value L13+
●最低价: this.points[i].value O13+

function(){
    // 由于存在一个客户同产品区域同一天下多次单情况,直接使用下标获取相关信息会出现问题,要重新获取下标
    var report = _g().getWidgetByName('report0');
    var num = parseInt(report.getCellValue('A11'));    // 数据集总数
    // console.log('num: ' + num);
    var start_index = 13;
    var data = [];
    for(var n = 0; n < num; n++) {
        var d = report.getCellValue('B' + (start_index + n));
        data.push(d);
    }
    // console.log('data: ' + data);

    // 提示
    var points = this.points; //表示同一个分类的不同系列点
    var a = this.category;    // 分类
    var index = data.indexOf(a);
    // console.log('index: ' + index);
    var b;    // 提示内容
    for(var i = 0, len = points.length; i < len; i++) {
        if(points[i].series.visible){
            var _name = this.points[i].seriesName;
            b = FR.contentFormat(this.points[i].value, '#0.00'); 
            if (_name == "最高价") {
                var max_cus = report.getCellValue('L' + (start_index + index));
                // console.log('max_cus: ' + max_cus);
                b += ' ' + max_cus;
            } else if (_name == "最低价") {
                var min_cus = report.getCellValue('O' + (start_index + index));
                // console.log('min_cus: ' + min_cus);
                b += ' ' + min_cus;
            }
            a += '<br/>'+"<font color='"+points[i].color+"'>●</font>"+points[i].seriesName+': '+b;
        }
    } 
    return a;
}

注:未启用FR.remoteEvaluate函数权限

自定义轴线刻度

统计图趋势不明显,调整坐标轴最小值和最大值(图表数据来源自单元格数据,图表系列值为K13, N13, Q13, I13):

Y轴-值定义-自定义最小值:ROUND(MIN(K13, N13, Q13, I13), 0) - 5

Y轴-值定义-自定义最大值:ROUND(MAX(K13, N13, Q13, I13), 0) + 5

根据数据集获取(单系列):

ROUND(MIN(ds1.select(avgPrice)), 0) - 10

ROUND(MAX(ds1.select(avgPrice)), 0) + 10

柱状图颜色交替显示

图表-特效-条件显示-添加条件-设置配色:

配色_奇数行柱状图颜色:GREPARRAY(RANGE(1,1000), item % 2 = 1)

配色_偶数行柱状图颜色:GREPARRAY(RANGE(1, 1000), item % 2 = 0)

决策报表设置单元格圆角

单元格相邻左侧单元格内容为公示:"<div id='l_1_left'></div>",右侧为"<div id='l_1_right'></div>",用HTML显示单元格内容

报表组件添加初始化后事件:


// REPORT_L_1
setTimeout(function() {
    var h = $('#l_1_left').parents('.scrollable-grid').height();
    // alert(h);
    var t = parseFloat($('#l_1_left').parents('.waffle-borderless-sticker').css('top'));
    // alert(t)

    // left
    $('#l_1_left').parents('.un-cssreset').css({
        'padding': '0px'
    });
    var w = $('#l_1_left').parents('.waffle-borderless-sticker').width();
    $('#l_1_left').parents('.waffle-borderless-sticker').css({
        'height': '' + (h - t + 1) + 'px',
        'width': '' + (w + 1) + 'px'
    });
    $('#l_1_left').css({
        'height': '' + (h - t + 1) + 'px',
        'background': '#F4F7FE',
        'border-radius': '5px 0px 0px 5px'
    });
    // right
    $('#l_1_right').parents('.un-cssreset').css({
        'padding': '0px'
    });
    var w = $('#l_1_right').parents('.waffle-borderless-sticker').width();
    $('#l_1_right').parents('.waffle-borderless-sticker').css({
        'height': '' + (h - t + 1) + 'px',
        'width': '' + (w + 1) + 'px'
    });
    $('#l_1_right').css({
        'height': '' + (h - t + 1) + 'px',
        'background': '#F4F7FE',
        'border-radius': '0px 5px 5px 0px'
    });
}, 100);

移动端不支持功能点

参见:移动端不支持的功能点列表- FineReport帮助文档 - 全面的报表使用教程和学习资料 

判断多项字符串中至少包含一项

参见:判断多项字符串至少一项被包含- FineReport帮助文档 - 全面的报表使用教程和学习资料 

权限设置,根据用户权限设置工具栏是否显示:

有以下某一权限的用户显示工具栏,【开发人员,处长,测试人员】

定义参数:pFillingRole=开发人员,处长,测试人员

登录用户是否包含某一权限,包含true,不包含false:

参数pFillingFlag=公示:IF(LEN(GREPARRAY(SPLIT($fine_role, ","), INARRAY(item, IF(FIND(",", $pFillingRole) > 0, SPLIT($pFillingRole,","), ARRAY($pFillingRole))) > 0)) > 0, true, false)

模版web属性-加载起始事件:


if (pFillingFlag) {
    // 显示工具栏
    $('.x-toolbar').css('display', 'block');
    $('.reportPane ').css('top', '28px');

    // 工具栏右对齐
    _g().getToolbar().toolBarFloat('right');
} else {
    //隐藏工具栏
    $('.x-toolbar').css('display', 'none');
    $('.reportPane ').css('top', '0');
}

导出说明

导出请求分为两种:

  • 一种是携带 sessionID 参数导出

  • 一种是携带模板名(如?viewlet=a.cpt&op=export&format=pdf)导出

前者导出不需要再进行取数计算的过程(因为预览的时候计算过了),而后者需要,所以后者导出慢的话需要先看 info 日志,检查 sql 执行时间等,排查是否是取数计算慢,可参考:模板性能问题排查方法

 用户信息

  • para_userInfo


select 
     u.id as userId, 
     u.mobile as mobile,  
     u.userName as userName,
     u.realName as realName
 from fine_user u
 where u.userName='${fine_username}'

获取登录用户手机号:para_userInfo.group(mobile)

  • para_userRoleInfo


select 
     u.id as userId, 
     u.mobile as mobile,  
     u.userName as userName,
     u.realName as realName, 
     urm.roleId as roleId, 
     urm.roleType as roleType,
     case urm.roleType 
         when 1 then '部门职位'
         when 2 then '自定义角色'
         else ''
     end as roleTypeName,
     cr.name as roleName,
     dr.departmentId as depId,
     d.name as depName, 
     dr.fullPath as depFullPath, 
     dr.postId as postId, 
     p.name as postName
 from fine_user u
 left join fine_user_role_middle urm on urm.userId = u.id
 left join fine_dep_role dr on dr.id = urm.roleId
 left join fine_department d on dr.departmentId = d.id
 left join fine_post p on dr.postId = p.id
 left join fine_custom_role cr on cr.id = urm.roleId
 where u.userName='${fine_username}'
 order by urm.roleType;

获取登录用户所属部门ID:para_userRoleInfo.group(depId, !ISNULL(depId), false)

部门用户列表

  • dic_depUserList


select 
    u.id as userId, 
    u.mobile as mobile,  
    u.userName as userName,
    u.realName as realName,
    dr.departmentId as depId
from fine_user u
left join fine_user_role_middle urm on urm.userId = u.id and urm.roleType = 1
left join fine_dep_role dr on dr.id = urm.roleId

不选部门时为所有用户列表,选择部门后为该部门下的用户列表:

实际值:dic_depUserList.select(userName, IF(ISNULL($depCode1), 1=1, depId = $depCode1))

显示值:value("dic_depUserList", 4, 3, $$$)

部门用户列表(加角色)

  • dic_userInfoList


select 
     u.id as userId, 
     u.mobile as mobile,  
     u.userName as userName,
     u.realName as realName, 
     urm.roleId as roleId, 
     urm.roleType as roleType,
     case urm.roleType 
         when 1 then '部门职位'
         when 2 then '自定义角色'
         else ''
     end as roleTypeName,
     cr.name as roleName,
     dr.departmentId as depId,
     d.name as depName, 
     dr.fullPath as depFullPath, 
     dr.postId as postId, 
     p.name as postName
 from fine_user u
 left join fine_user_role_middle urm on urm.userId = u.id
 left join fine_dep_role dr on dr.id = urm.roleId
 left join fine_department d on dr.departmentId = d.id
 left join fine_post p on dr.postId = p.id
 left join fine_custom_role cr on cr.id = urm.roleId

实际值:

所有用户:dic_userInfoList.group(userName)

选择部门下的用户:dic_userInfoList.group(userName, IF(ISNULL($depCode1), 1=1, depId = $depCode1), true)

选择部门下的$pRoleName角色用户:

dic_userInfoList.group(userName, roleName == $pRoleName && IF(ISNULL($depCode1), 1=1, FIND(userName, dic_userInfoList.group(userName, depId = $depCode1)) > 0), true)

显示值:value("dic_depUserList", 4, 3, $$$)

获取部门下的所有子部门

sql函数:


CREATE DEFINER=`liuerpei`@`%` FUNCTION `getFRChildDepts`(rootId VARCHAR(255)) RETURNS text CHARSET utf8mb3
BEGIN
  DECLARE ptemp VARCHAR(16383); # 返回叶子节点结果集
  DECLARE ctemp VARCHAR(16383); # 临时存放子节点
  SET ptemp = '#';
  SET ctemp = rootId;
  WHILE ctemp IS NOT NULL DO
    SET ptemp = CONCAT(ptemp,',',ctemp);
    SELECT GROUP_CONCAT(id) INTO ctemp FROM fine_report.fine_department WHERE FIND_IN_SET(parentId, ctemp)>0;   
  END WHILE;
 RETURN ptemp; 
END

 创建帆软用户角色部门视图

-- 创建视图,通过create or replace ,当视图存在时就是更新操作,当视图不存在时就创建
create or replace view view_user_dep as 
select 
 	u.id as userId, 
 	u.mobile as mobile,  
 	u.userName as userName,
 	u.realName as realName, 
 	urm.roleId as roleId, 
--  	urm.roleType as roleType,
--  	case urm.roleType 
--  		when 1 then '部门职位'
--  		when 2 then '自定义角色'
--  		else ''
--  	end as roleTypeName,
--  	cr.name as roleName,
 	dr.departmentId as depId,
 	d.name as depName, 
	d.parentId as parentId,
 	dr.fullPath as depFullPath, 
 	dr.postId as postId, 
 	p.name as postName
 from fine_user u
 left join fine_user_role_middle urm on urm.userId = u.id
 left join fine_dep_role dr on dr.id = urm.roleId
 left join fine_department d on dr.departmentId = d.id
 left join fine_post p on dr.postId = p.id
 left join fine_custom_role cr on cr.id = urm.roleId
 WHERE urm.roleType = 1
 order by urm.roleType;

 数据层权限划分

AND CASE 
	-- 全部
	WHEN ${pRoleFlag} THEN 1=1
	-- 处长
	WHEN (${FIND(gDirectorRole, fine_role)}) > 0 THEN FIND_IN_SET(depId, getFRChildDepts('${sUserDepId}'))
	-- 业务经理
	WHEN (${FIND(gBusinessManagerRole, fine_role)}) > 0 THEN (userName in (SELECT DISTINCT userName from fine_report.view_user_dep WHERE FIND_IN_SET(depId, '${sUserDepId}')))
	-- 其它
	ELSE creator = '${fine_username}'
END	

参数说明:

1、gAllRole、gDirectorRole、gBusinessManagerRole为模版参数,可直接设置相关权限名称,如:

// 全部权限

gAllRole = 开发人员,测试人员,数据管理员

// 处长权限

gDirectorRole = 营销处长

// 业务经理权限

gBusinessManagerRole = 营销业务经理

2、pRoleFlag为模版参数,为公示:

IF(LEN(GREPARRAY(SPLIT($fine_role, ","), INARRAY(item, IF(FIND(",", $gAllRole) > 0, SPLIT($gAllRole,","), ARRAY($gAllRole))) > 0)) > 0, true, false)

若登录用户角色包含gAllRole其中一种角色,返回true,都不包含,返回false

3、sUserDepId为登陆用户所属部门,可用公示获取

para_userRoleInfo.group(depId, !ISNULL(depId), false)

        此值由于查询的为服务器数据集可能存在时间差问题,直接在模版参数或数据集中使用公示获取有时将获取不到,建议其作为参数放置在参数面板中(不可见); 

        若出现【数据集查询有数据,报表显示没有数据】建议将此值的获取直接为SQL查询:

SELECT GROUP_CONCAT(DISTINCT depId) from view_user_dep WHERE userName = '${fine_username}' GROUP BY userName 

4、 view_user_dep为帆软用户角色部门等视图表,参见本文目录【创建帆软用户角色部门视图】

        getFRChildDepts为sql函数,获取部门下的子部门,参见本文目录【获取部门下的所有子部门】

        para_userRoleInfo为设置的服务器数据集,参见本文目录【用户信息】

 

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

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

相关文章

orangepi 4lts ubuntu安装RabbitMQ

4lts的emmc 系统安装选文件系统格式 ext4 需先安装erlang&#xff1a; sudo apt install erlang 安装RabbitMQ: sudo apt install rabbitmq-server - 添加用户以便远程访问&#xff1a; - 账号密码都是admin: sudo rabbitmqctl add_user admin admin -sudo rabbitmqct…

C 语言高级2-多维数组,结构体,递归操作

1. 多维数组 1.1 一维数组 元素类型角度&#xff1a;数组是相同类型的变量的有序集合内存角度&#xff1a;连续的一大片内存空间 在讨论多维数组之前&#xff0c;我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。 1.1.1 数组名 考虑下面这些声明&#xff1…

钉钉微应用

钉钉微应用 在做钉钉微应用开发的时候&#xff0c;遇到了一些相关性的问题&#xff0c;特此记录下&#xff0c;有遇到其他问题的&#xff0c;欢迎一起讨论 调试工具 当我们基于钉钉开发微应用时&#xff0c;难免会遇到调用钉钉api后的调试&#xff0c;这个时候可以安装eruda…

笔记本WIFI连接无网络【实测有效解决方案,不用重启电脑】

笔记本Wifi连接无网络实测有效解决方案 问题描述&#xff1a; 笔记本买来一段时间后&#xff0c;WIFI网络连接开机一段时间还正常连接&#xff0c;但是过一段时间显示网络连接不上解决方案&#xff1a; 1.编写网络重启bat脚本&#xff0c;将以下内容写到文本文件&#xff0c;把…

使用 FastGPT 构建高质量 AI 知识库

作者&#xff1a;余金隆。FastGPT 项目作者&#xff0c;Sealos 项目前端负责人&#xff0c;前 Shopee 前端开发工程师 FastGPT 项目地址&#xff1a;https://github.com/labring/FastGPT/ 引言 自从去年 12 月 ChatGPT 发布以来&#xff0c;带动了一轮新的交互应用革命。尤其在…

【分布式系统】聊聊系统监控

对于分布式系统来说&#xff0c;出现故障的是常有的事情&#xff0c;如何在短时间内找到故障的原因&#xff0c;排除故障是非常重要的&#xff0c;而监控系统是就像系统的眼睛可以通过分析相关数据&#xff0c;进一步管理和运维整个分布式系统。 监控系统的的基本功能包含 全…

Java02-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类

目录 什么是遍历&#xff1f; 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach&#xff08;增强for循环&#xff09;遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈&#xff08;Stack&#xff09; 队列&a…

移远通信携手产业合作伙伴率先完成RedCap端网兼容性现网测试

近日&#xff0c;移远通信与中国联通携手&#xff0c;基于搭载高通骁龙X35平台的移远RedCap模组RG255C-CN&#xff0c;在上海嘉定率先完成3.5GHz、2.1GHz、900MHz 中国联通5G全频段 RedCap端网兼容性现网测试&#xff0c;为5G RedCap商用部署奠定了坚实基础。 本次5G RedCap外场…

【Python:参数解析器argparse】对命令行参数进行解析

常用的流程如下&#xff1a; 1、先创建一个解析器&#xff1a; parser argparse.ArgumentParser(description"...")2、为解析器增加参数&#xff0c;包括name、默认值、帮助信息等 parser.add_argument(name "", default ..., help ...)name前面可以…

CS5366+VL171母座正反插HDMI(CS5466也可搭配)国产芯片TYPEC方案设计 ASL电路原理图 集睿致远+威锋设计

VL171是威锋芯片,可搭配ASL集睿致远CS5366设计TypeC母座正反插转HDMI高清投屏方案&#xff0c;CS5366是2lane 芯片&#xff0c;支持4K60HZ,是CS5266的升级版&#xff0c;CS5366设计拓展坞方案可以替代CS5266携带快充100W的PD和US,多口HUB也不在话下&#xff0c;而画面的刷新率和…

在IDEA同一个窗口中同时打开多个独立项目

文章说明 本文主要说明如何在Intellij Idea中同时打开多个独立的Maven项目。 我在使用idea的时候&#xff0c;由于自己负责了很多项目&#xff0c;经常要在不通的代码之间切换来切换去。然后搜索代码的时候也只能搜到当前打开的这个项目。因为这个原因&#xff0c;一些小项目…

利用prophet实现时间序列数据结果预测及对预测数据进行年度趋势和月度值分解

第一部分&#xff1a;prophet的介绍 选取一段chatgpt对该插件的解释&#xff0c;如下&#xff1a; Prophet&#xff08;预言家&#xff09;是由Facebook开发的开源时间序列分析工具&#xff0c;旨在提供一个简单而强大的框架&#xff0c;用于预测时间序列数据。Prophet的设计目…

使用中间人攻击的arp欺骗教程

文章目录 前言一、查看网络接口配置第 1 步&#xff1a;从受害者处获取 IP 配置第 2 步&#xff1a;在 Linux 中打开数据包转发第 3 步&#xff1a;使用 arpspoof 将包重定向到您的计算机步骤4&#xff1a;拦截来自路由器的包裹步骤5&#xff1a;从目标的浏览器历史记录中嗅探图…

LeetCode 热题 100 JavaScript--102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a; 输入&#xff1a;root [1…

Java 线程基础

volatile happens-before原则 1、单一线程原则 在一个线程内&#xff0c;在程序前面的操作线性发生于后面的操作 2、管程锁定原则 一个unlock操作先行发生于后面对同一个锁的lock操作 3、volatile变量原则 对一个volatile变量的写操作先行发生于后面对变量的读操作 4、线…

资深测试经验总结,APP测试-关键点整理,少走3年的弯路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 APP测试它的关键点…

LeetCode--HOT100题(16)

目录 题目描述&#xff1a;238. 除自身以外数组的乘积&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;238. 除自身以外数组的乘积&#xff08;中等&#xff09; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等…

el-table那些事

el-table那些事 获取el-table所有勾选的行数据 用于记录工作和日常学习遇到的坑&#xff0c;需求。 vue3element-plusts 获取el-table所有勾选的行数据 1、需要先声明一个ref变量&#xff0c;并赋值给el-table 2、通过el-table提供的getSelectionRows()函数获取选中的"行…

嵌入式系统:连接数字世界的未来

嵌入式设备是专用微型计算机&#xff0c;由硬件、系统级软件和应用软件三个层次组成。硬件包括处理器、存储和各种I/O接口。系统级软件涵盖操作系统和各种I/O子系统。应用软件包括基于不同操作系统的开发。 几乎所有带数字接口的设备都使用嵌入式系统&#xff0c;从大型飞机到…

媒介易讲解体育冠军助力品牌解锁市场营销新玩法

在当今竞争激烈的市场中&#xff0c;品牌推广成为企业取得商业成功的重要一环。然而&#xff0c;随着传统市场推广方式的日益饱和&#xff0c;企业急需创新的市场营销策略来吸引消费者的关注和认可。在这样的背景下&#xff0c;体育冠军助力品牌成为了一种备受瞩目的市场营销新…