微信公众号:次世代数据技术 关注可了解更多的教程。问题或建议,请公众号留言或联系本人; 如果您有报表开发需求或者定制化功能开发,也可以联系本人; 微信号:weibw162
本教程视频讲解可以关注本人B站进行观看:次世代数据技术 同时,您也可以在抖音及微信视频号平台搜索次世代数据技术进行观看。
一、需求描述
很多场景下,我们在使用图表开发时,原生自带的提示不能完全满足我们的需要,这时候就需要我们自己来实现一些提示效果。本文将带领大家一起实现一些效果。
注1:不支持移动端使用。注2:本文涉及到的技术及流程均仅在FineReport 11.0 版本进行实际验证,如果您在使用过程中出现问题可以联系本作者。
二、实现步骤
我们需要确定的一点是,我们的需求,无论是帆软原生通用
和富文本
都无法实现时,才会采用该方案。
这也就意味着,我们需要写一些JS代码,所以默认大家有一定的JS基础。
首先,我们其中一个图的提示改用自定义,并填入如下JS代码:
function() {
console.log(this);
}
function() {
console.log(this);
}
2
3
然后,我们预览一下报表,F12查看工作台。 这里我们需要重点关注几个属性
- category:分类名
- points:系列节点 visible:系列是否显示 color:系列颜色 seriesName:系列名 value:系列值
接下来,我们就利用以上属性来实现一些功能。
示例1:
function() {
var points = this.points; //表示同一个分类的不同系列点
var result = this.category + "<br>";
for (var i = 0, len = points.length; i < len; i++) {
if (points[i].series.visible) {
var val = points[i].value;
if (points[i].seriesName == "增幅") {
if (points[i].value > 0) {
result += '' + "<font color='" + points[i].color + "'>↑</font>升:" + val + "<br>";
}
else if (points[i].value < 0) {
result += '' + "<font color='" + points[i].color + "'>↓</font>降:" + val + "<br>";
}
else {
result += '' + "<font color='" + points[i].color + "'></font>不变:" + val + "<br>";
}
}
else {
result += '' + "<font color='" + points[i].color + "'>●</font>" + points[i].seriesName + ':' + val + "<br>";
}
}
}
return result;
}
function() {
var points = this.points; //表示同一个分类的不同系列点
var result = this.category + "<br>";
for (var i = 0, len = points.length; i < len; i++) {
if (points[i].series.visible) {
var val = points[i].value;
if (points[i].seriesName == "增幅") {
if (points[i].value > 0) {
result += '' + "<font color='" + points[i].color + "'>↑</font>升:" + val + "<br>";
}
else if (points[i].value < 0) {
result += '' + "<font color='" + points[i].color + "'>↓</font>降:" + val + "<br>";
}
else {
result += '' + "<font color='" + points[i].color + "'></font>不变:" + val + "<br>";
}
}
else {
result += '' + "<font color='" + points[i].color + "'>●</font>" + points[i].seriesName + ':' + val + "<br>";
}
}
}
return result;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
此处的效果为: 1、当增幅属性的值大于0时,显示一个向上的箭头,且颜色为系列的颜色。再将系列名改为
升
字。 2、当增幅属性的值小于0时,显示一个向下的箭头,且颜色为系列的颜色。再将系列名改为降
字。 3、当增幅属性的值等于0时,将系列名改为不变
。 4、数量系列样式不变。
示例2:
function() {
var points = this.points; //获取到该分类下的所有系列点
var result =''; // 定义最终结果,并直接赋值分类名
for (var i = 0, len = points.length; i < len; i++) {
if (points[i].series.visible) {
var val = FR.contentFormat(points[i].value, ' #0.0');
if(points[i].seriesName=="增幅"){
if(points[i].value>0){
result += '' + "<font color='red'>↑升</font>" +':' + val+"<br>";
}
else if(points[i].value<0){
result += '' + "<font color='green'>↓降</font>" + ':' + val+"<br>";
}
else{
result += '' + "<font color='" + points[i].color + "'></font>" + "不变"+ ':' + val+"<br>";
}
}
else{
result += '' + "<font color='" + points[i].color + "'>●</font>" + points[i].seriesName + ':' + val+"<br>";
}
}
}
result+=this.category+"<br>";
return result;
}
function() {
var points = this.points; //获取到该分类下的所有系列点
var result =''; // 定义最终结果,并直接赋值分类名
for (var i = 0, len = points.length; i < len; i++) {
if (points[i].series.visible) {
var val = FR.contentFormat(points[i].value, ' #0.0');
if(points[i].seriesName=="增幅"){
if(points[i].value>0){
result += '' + "<font color='red'>↑升</font>" +':' + val+"<br>";
}
else if(points[i].value<0){
result += '' + "<font color='green'>↓降</font>" + ':' + val+"<br>";
}
else{
result += '' + "<font color='" + points[i].color + "'></font>" + "不变"+ ':' + val+"<br>";
}
}
else{
result += '' + "<font color='" + points[i].color + "'>●</font>" + points[i].seriesName + ':' + val+"<br>";
}
}
}
result+=this.category+"<br>";
return result;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
此处的效果为: 1、当增幅属性的值大于0时,显示一个向上的箭头,再将系列名改为
升
字,且颜色为红色。。 2、当增幅属性的值小于0时,显示一个向下的箭头,再将系列名改为降
字,且颜色为绿色。 3、当增幅属性的值等于0时,将系列名改为不变
。 4、数量系列样式不变。 5、分类名放在最下方。 6、将所有系列的值保留一位小数。
示例3:
function() {
var points = this.points; //表示同一个分类的不同系列点
var result = this.category + "<br>";
for (var i = 0, len = points.length; i < len; i++) {
if (points[i].series.visible) {
var val = points[i].value;
if (points[i].seriesName == "增幅") {
if (points[i].value > 0) {
result += '' + "<font color='" + points[i].color + "'>↑</font>升:" + val + "<br>";
}
else if (points[i].value < 0) {
result += '' + "<font color='" + points[i].color + "'>↓</font>降:" + val + "<br>";
}
else {
result += '' + "<font color='" + points[i].color + "'></font>不变:" + val + "<br>";
}
}
else {
result += '' + "<font color='" + points[i].color + "'>●</font>" + points[i].seriesName + ':' + val + "<br>";
}
}
}
var je = FR.remoteEvaluate("=value('ds1','金额','月度','" + this.category + "')");
result += '' + "<font color='yellow'>●</font>金额:" + je + "<br>";
return result;
}
function() {
var points = this.points; //表示同一个分类的不同系列点
var result = this.category + "<br>";
for (var i = 0, len = points.length; i < len; i++) {
if (points[i].series.visible) {
var val = points[i].value;
if (points[i].seriesName == "增幅") {
if (points[i].value > 0) {
result += '' + "<font color='" + points[i].color + "'>↑</font>升:" + val + "<br>";
}
else if (points[i].value < 0) {
result += '' + "<font color='" + points[i].color + "'>↓</font>降:" + val + "<br>";
}
else {
result += '' + "<font color='" + points[i].color + "'></font>不变:" + val + "<br>";
}
}
else {
result += '' + "<font color='" + points[i].color + "'>●</font>" + points[i].seriesName + ':' + val + "<br>";
}
}
}
var je = FR.remoteEvaluate("=value('ds1','金额','月度','" + this.category + "')");
result += '' + "<font color='yellow'>●</font>金额:" + je + "<br>";
return result;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
此处的效果为: 在示例1的基础上,增加了第三个属性
数量
的对应的值的显示。
通过以上三个例子,我们基本可以熟练掌握自定义的方法了,大家可以根据更多的属性进行千变万化的提示方案。
四、模板文件下载
如果您在阅读或实际操作过程中有问题,可以随时添加作者好友进行咨询。