Files
eapim-admin/WebContent/jsp/common/include/jqplotScript.jsp
T
Rinjae c54ef1903f init
2025-09-05 17:16:26 +09:00

499 lines
11 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!-- Chart Include -->
<script language="javascript" src="<c:url value="/js/jquery.jqplot.min.js"/>"></script>
<!--[if IE]><script type="text/javascript" src="<c:url value="/js/excanvas.min.js"/>"></script><![endif]-->
<script language="javascript" src="<c:url value="/js/jqplot.cursor.min.js"/>"></script>
<script language="javascript" src="<c:url value="/js/jqplot.categoryAxisRenderer.min.js"/>"></script>
<script language="javascript" src="<c:url value="/js/jqplot.barRenderer.min.js"/>"></script>
<script language="javascript" src="<c:url value="/js/jqplot.pointLabels.min.js"/>"></script>
<script language="javascript" src="<c:url value="/js/jqplot.enhancedLegendRenderer.min.js"/>"></script>
<script type="text/javascript">
var maxVal = 0; // Line 차트의 Y축 Max값 저장.
var setMaxVal = 0; // Line 차트의 Y축 Max값 결과 저장.
function getIeVersion()
{
var userAgent = navigator.userAgent;
var msieIdx = userAgent.indexOf("MSIE");
var ie_v = "";
// msieIdx check.
// msieIdx : userAgent문자열에서 MSIE가 없으면 -1이 저장됩니다.
// navigator.userAgent문자열에서 IE 11버전부터 MSIE는 없습니다.
if(msieIdx != -1)
{
ie_v = userAgent.substr(msieIdx+5, 3);
return parseInt(ie_v, 10);
}
}
// Internet Explorer version check.
function ieV8Chk()
{
var ie_v = getIeVersion();
return ie_v <= 8 ? true : false;
}
// from ~ to Date check
function isFromToDate(frDt, toDt, dtType)
{
var returnFlag = true;
var strFrDt = "";
var strToDt = "";
var numChck;
if(dtType == "" || dtType == null || dtType == undefined)
{
numChck = /^(19|20)\d{2}/;
}
else
{
numChck = /^(19|20)\d{2}(0[0-9]|1[0-2])(0[1-9]|[12][0-9]|3[0-1])*$/;
}
if(frDt == "" || frDt == undefined || frDt == null)
{
returnFlag = false;
}
else if(toDt == "" || toDt == undefined || toDt == null)
{
returnFlag = false;
}
else{
strFrDt = frDt.replace(/\-/g, "");
strToDt = toDt.replace(/\-/g, "");
if(!numChck.test(strFrDt))
{
returnFlag = false;
}
else if(!numChck.test(strToDt))
{
returnFlag = false;
}
else if(parseInt(strFrDt, 10) > parseInt(strToDt, 10))
{
returnFlag = false;
}
}
return returnFlag;
}
// Set Date Format
function setDateFormat(strDate)
{
var dateLen = 0;
var resultDate = "";
if(strDate != null)
{
dateLen = strDate.length;
if(dateLen == 6)
{
resultDate += strDate.substr(0, 4) + "-" + strDate.substr(4, 2);
}
else if(dateLen == 8)
{
resultDate += strDate.substr(0, 4) + "-" + strDate.substr(4, 2) + "-" + strDate.substr(6, 2);
}
else
{
resultDate += strDate;
}
}
return resultDate;
}
// jqplot Line 차트 그리는 함수.
function jqLineChart(chartId, rows, axisInt, prefix, topTitle)
{
var returnPlot; // plot Object 저장.
// 차트 그리기.
returnPlot = $.jqplot(chartId, getLines(rows, axisInt, prefix), setChartOptinos(rows, axisInt, topTitle));
return returnPlot;
}
// jqplot Bar 차트 그리는 함수.
function jqBarchart(chartId, rows, prefix1, prefix2, topTitle)
{
var returnPlot; // plot Object 저장.
// 차트 그리기.
returnPlot = $.jqplot(chartId, getBars(rows, prefix1, prefix2), setBarChartOptinos(rows, topTitle));
return returnPlot;
}
// Bar Chart의 Legend Label 셋팅.
function getLegendLabels(rows)
{
var labels = [];
var idx = 0;
for(var i = 0; i < rows.length; i++)
{
if(labels[idx-1] == undefined || labels[idx-1] != rows[i]["STATCY"])
{
labels[idx++] = rows[i]["STATCY"];
}
}
return labels;
}
/* Cahrt y축 tick value 설정.*/
function getTickInterval()
{
var tickInt = 1;
var tickVal = 0;
// Browser 체크.
// if(ieV8Chk())
// {
// // IE 8이하
// tickVal = setMaxVal;
// }
// else
// {
// // IE 9이상
// tickVal = maxVal;
// }
tickVal = setMaxVal;
if(tickVal > 10)
{
tickInt = tickVal * 0.1;
}
return parseInt(tickInt, 10);
}
// 차트(jqplot)의 Line 생성.
// DB에서 조회된 값으로 차트에서 사용 할 Line 생성.
function getLines(rows, colCnt, prefix)
{
var rowCnt = rows.length; // row Count.
var fields = []; // x축, y축 값을 저장.
var values = []; // x축, y축 Array 저장.
var lines = []; // values Array 저장.
maxVal = 0; // y축 MaxVal 초기화.
// Grid의 데이터가 없으면 차트 이미지만 Rendering
if(rowCnt == 0)
{
return lines[0] = [[0,0]];
}
// IE 8버전 이하일 때 차트 이미지만 Rendering => rowData 1건 이상인경우 기본값 셋팅
// if(ieV8Chk() == true && rowCnt > 1)
if(rowCnt > 1)
{
return lines[0] = [[0,0]];
}
// 차트 데이터 생성.
// 1차 Loop (row Count)
for(var i = 0; i < rowCnt; i++)
{
values= [];
// 2차 Loop (row Column Count)
for(var j = 1; j <= colCnt; j ++)
{
fields = [];
fields[0] = j;
fields[1] = rows[i][prefix + fields[0]];
values[j-1] = fields;
if(parseInt(maxVal, 10) < parseInt(fields[1], 10))
{
maxVal = fields[1];
}
}
lines[i] = values;
}
return lines;
}
// 차트(jqplot) 설정값 셋팅 함수.
function setChartOptinos(rows, xAxisInt, topTitle)
{
var rowCnt = rows.length; // row Count.
var arrTicks = []; // x축 일자 저장.
var returnOptions; // plot Option 저장.
var yAxis;
// 차트 X 축 일자 표시 data.
for(var i = 1; i <= xAxisInt; i++)
{
arrTicks[i-1] = i;
}
// start y축 옵션 설정.
if(rowCnt == 1)
{
var maxLen = maxVal.length;
var divisionVal = 1;
var addVal = 0;
setMaxVal = 0;
for(var i = 0; i < (maxLen-1); i++)
{
divisionVal *= 10;
}
addVal = divisionVal * parseInt(maxVal / divisionVal , 10);
setMaxVal = (parseInt(maxVal / divisionVal , 10) * divisionVal) + (addVal);
yAxis = {
min: 0,
max: setMaxVal,
numberticks: 11,
tickInterval: getTickInterval(),
tickOptions: {
formatString:"%'d",
// fontString:"%'d",
fontSize: "8pt"
},
};
}
else
{
yAxis = {
min: 0,
numberticks: 11,
tickInterval: getTickInterval(),
tickOptions: {
formatString:"%'d",
// fontString:"%`d",
fontSize: "8pt"
},
};
}
// end y축 옵션 설정.
returnOptions = {
title: topTitle,
grid: {background: 'white', drawBorder: true, shadow: false},
seriesDefaults: {rendererOptions: {smooth: true}},
series:[{lineWidth:2, color:'#ff6384', shadow:false}],
axes:{
xaxis:{
min:0,
max:xAxisInt,
numberTicks:1,
renderer:$.jqplot.CategoryAxisRenderer,
ticks:arrTicks,
tickOptions:{
formatString:"%d",
fontSize: "10pt"
}
},
yaxis: yAxis,
},
// cursor:{
// show:true,
// zoom:true
// },
};
/* SAMPLES 170210
animate: true,
title:{text:'전송건수',fontFamily:'Malgun Gothic, dotum, sans-serif', fontSize: '16px', textColor: '#000000'},
grid: {background: 'white', drawBorder: true, shadow: false},
seriesDefaults: {rendererOptions: {smooth: true}},
series:[
{lineWidth:3, color:'#009ce5', shadow:false},
{lineWidth:3, color:'#1cc799', shadow:false},
{lineWidth:3, color:'#7fc80b', shadow:false},
{lineWidth:3, color:'#ffc600', shadow:false},
{lineWidth:3, color:'#ff8839', shadow:false},
{lineWidth:3, color:'#ff4239', shadow:false},
{lineWidth:3, color:'#ff8aa8', shadow:false},
{lineWidth:3, color:'#b569f5', shadow:false},
{lineWidth:3, color:'#737373', shadow:false},
],
axes: {xaxis: {pad: 2.0, tickOptions: {showGridline: false}}, yaxis: {pad: 1.05}} */
return returnOptions;
}
/* Bar Cahrt */
// 차트(jqplot)의 Bar 생성.
// DB에서 조회된 값으로 차트에서 사용 할 Bar 생성.
function getBars(rows, prefix1, prefix2)
{
var rowCnt = rows.length; // row Count.
var fields = []; // x축, y축 값을 저장.
var values = []; // values Array 저장.
var bars = []; // values Array 저장.
var groupStatcy = 0;
var groupIdx = 0;
var j = 0;
maxVal = 0; // y축 MaxVal 초기화.
// Grid의 데이터가 없으면 차트 이미지만 Rendering
if(rowCnt == 0)
{
return bars[0] = [[0,0]];
}
// 차트 데이터 생성.
// Loop (row Count)
groupStatcy = rows[0]["STATCY"];
values = [];
for(var i = 0; i < rowCnt; i++)
{
if(groupStatcy != rows[i]["STATCY"])
{
groupStatcy = rows[i]["STATCY"];
bars[groupIdx++] = values;
j = 0;
values = [];
}
fields = [];
fields[0] = rows[i][prefix1];
fields[1] = rows[i][prefix2];
values[j] = fields;
if(parseInt(maxVal, 10) < parseInt(fields[1], 10))
{
maxVal = fields[1];
}
if(i == (rowCnt-1))
{
bars[groupIdx] = values;
}
j++;
}
return bars;
}
// 차트(jqplot) 설정값 셋팅 함수.
function setBarChartOptinos(rows, topTitle)
{
var rowCnt = rows.length; // row Count.
var returnOptions; // plot chart Option 저장.
var yAxis;
var legendLabels = getLegendLabels(rows);
// start y축 옵션 설정.
if(rowCnt == 1)
{
var maxLen = maxVal.length;
var divisionVal = 1;
var addVal = 0;
setMaxVal = 0;
for(var i = 0; i < (maxLen-1); i++)
{
divisionVal *= 10;
}
addVal = divisionVal * parseInt(maxVal / divisionVal , 10);
setMaxVal = (parseInt(maxVal / divisionVal , 10) * divisionVal) + (addVal);
yAxis = {
min: 0,
max: setMaxVal,
numberticks: 11,
tickInterval: getTickInterval(),
tickOptions: {
// formatString:"%d"
fontString:"%d",
fontSize: "12px"
}
};
}
else
{
yAxis = {
min: 0,
numberticks: 11,
tickOptions: {
// formatString:"%d"
fontString:"%d",
fontSize: "12px"
}
};
}
// end y축 옵션 설정.
returnOptions = {
title: topTitle,
seriesDefaults:{
renderer: $.jqplot.BarRenderer,
rendererOptions:{
barWidth: 20
, barPadding: 10
, barMargin: 0
},
pointLabels: { show: true}
},
legend:{
renderer: $.jqplot.EnhancedLegendRenderer,
show: true,
location: "n",
labels: legendLabels,
rendererOptions:{numberRows: 1, placement: "outsideGrid", disableIEFading:true, paddingLeft:"8"},
marginTop: '10px',
fontSize: "1.2em"
},
axesDefaults: {
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
tickOptions:{
fontSize: "9pt"
}
},
axes:{
xaxis:{
renderer:$.jqplot.CategoryAxisRenderer
},
yaxis: yAxis
},
cursor:{
show:false,
zoom:false
}
};
return returnOptions;
}
</script>