ibms-dome/Frontend/js/yourteam/yourteam.chartjs.class.js

320 lines
11 KiB
JavaScript
Raw Normal View History

2022-11-15 12:59:27 +08:00
var YourTeam = YourTeam || {};
YourTeam.Chartjs = YourTeam.Chartjs || {};
class Bar {
constructor() {
}
/*
* @deprecated since version 0.1
* @description 初始化Bar基本圖表
* @param {String} cvsId the canvas`s id
* @param {Array} aryLabelsX X軸標籤值(String Array)
* @param {Array} aryVluesY Y軸量值(Integer Array)
* @param {String} strTitle the title of the chart;def value = null
* @returns {Object} chart element
*/
initBasesss(cvsId, aryLabels, aryVlues, strTitle = null) {
//function newDate(days) {
// return new YourTeam.Utility.DateHelper().getChangeDateTime(false, '/', 0, 0, days);
//}
let myDatasets = [];
let objJson = {};
for (let i = 0; i < aryVlues.length; i++) {
objJson = {};
objJson.label = aryLabels[i];
objJson.data = [aryVlues[i]];
objJson.borderColor = "rgba(220,20,20,1)";
objJson.backgroundColor = "rgba(220,20,20,0.5)";
myDatasets.push(objJson);
}
let config = {
type: "bar",
data: {
//labels: [newDate(-5), newDate(-4), newDate(-3), newDate(-2), newDate(-1), newDate(0)],
labels: aryLabels,
datasets: myDatasets
//datasets: [{
// //data: [2, 5, 3, 4, 7, 3],
// data: aryVlues,
// borderColor: "rgba(220,20,20,1)",
// backgroundColor: "rgba(220,20,20,0.5)"
//}]
},
options: {
legend: {
display: true,
labels: {
fontColor: 'rgb(255, 99, 132)'
}
},
scales: {
xAxes: [{
type: "category",
labels: aryLabels
}],
yAxes: [{
ticks: {
beginAtZero: true
}
}]
},
title: {
display: (strTitle) ? true : false,
text: (strTitle) ? strTitle : ""
}
}
}
let ctx = document.getElementById(cvsId).getContext("2d");
//window.myLine = new Chart(ctx, config);
return new Chart(ctx, config);
}
/*
* @deprecated since version 0.1
* @description 初始化Bar基本圖表
* @param {String} cvsId the canvas`s id
* @param {Array} aryLabelsX X軸標籤值(String Array)
* @param {Array} aryVluesY Y軸量值(Integer Array)
* @param {String} strTitle the title of the chart;def value = null
* @param {String} type the chart is vertical or horizontal ;def value = "bar" (vertical), "horizontalBar" (horizontal)
* @returns {Object} chart element
*/
initBase(cvsId, aryLabels, aryVlues, strLabel = null, strTitle = null, chart = null,type="bar",animation = null) {
//function newDate(days) {
// return new YourTeam.Utility.DateHelper().getChangeDateTime(false, '/', 0, 0, days);
//}
if (chart !== null) {
chart.destroy();
}
let myDatasets = [];
let objJson = {};
let valLabelObj = {};
objJson.backgroundColor = [];
objJson.label = strLabel ?? "";
for (let i = 0; i < aryVlues.length; i++) {
objJson.borderColor = "rgba(220,20,20,1)";
objJson.backgroundColor.push("rgba(" + random(0, 255) + "," + random(0, 255) + "," + random(0, 255) + ",0.5)");
}
objJson.data = aryVlues;
myDatasets.push(objJson);
let config = {
type: type,
data: {
//labels: [newDate(-5), newDate(-4), newDate(-3), newDate(-2), newDate(-1), newDate(0)],
labels: aryLabels,
datasets: myDatasets
//datasets: [{
// //data: [2, 5, 3, 4, 7, 3],
// data: aryVlues,
// borderColor: "rgba(220,20,20,1)",
// backgroundColor: "rgba(220,20,20,0.5)"
//}]
},
options: {
indexAxis: 'y',
legend: {
labels: {
generateLabels: function (chart) {
let labels = chart.data.labels;
let dataset = chart.data.datasets[0];
let legend = labels.map(function (label, index) {
return {
datasetIndex: 0,
fillStyle: dataset.backgroundColor && dataset.backgroundColor[index],
strokeStyle: dataset.borderColor && dataset.borderColor[index],
lineWidth: 0,
text: label
}
});
return legend;
}
},
onClick: null
},
scales: {
xAxes: [{
ticks: {
beginAtZero: true,
callback: function (value, index, values) {
if (value.length > 10) {
value = value.substring(0, 10) + "...";
}
return value;
},
},
}],
yAxes: [{
ticks: {
beginAtZero: true
}
}],
},
animation: animation,
title: {
display: (strTitle) ? true : false,
text: (strTitle) ? strTitle : ""
},
tooltips: {
callbacks: {
//label: function (tooltipItem) {
// console.log(tooltipItem)
// return tooltipItem.yLabel;
//},
//title: function (tooltipItem) {
// console.log(tooltipItem)
// return tooltipItem.xLabel
//}
}
},
},
}
let ctx = document.getElementById(cvsId).getContext("2d");
//window.myLine = new Chart(ctx, config);
return new Chart(ctx, config);
}
/*
* @deprecated since version 0.1
* @description 初始化Bar日期基本圖表
* @param {String} cvsId the canvas`s id
* @param {Array} aryLabelsX X軸標籤值(Date Array)
* @param {Array} aryVluesY Y軸量值(Integer Array)
* @param {String} strTitle the title of the chart;def value = null
* @returns {Object} chart element
*/
initBaseDate(cvsId, aryLabels, aryVlues, strTitle = null, chart = null) {
//function newDate(days) {
// return new YourTeam.Utility.DateHelper().getChangeDateTime(false, '/', 0, 0, days);
//}
if (chart !== null) {
chart.destroy();
}
let config = {
type: "bar",
data: {
//labels: [newDate(-5), newDate(-4), newDate(-3), newDate(-2), newDate(-1), newDate(0)],
labels: aryLabels,
datasets: [{
//data: [2, 5, 3, 4, 7, 3],
data: aryVlues,
borderColor: "rgba(220,20,20,1)",
backgroundColor: "rgba(220,20,20,0.5)"
}]
},
options: {
scales: {
xAxes: [{
type: "time",
time: {
unit: "day",
round: "day",
displayFormats: {
day: "YYYY/MM/DD"
}
}
}],
yAxes: [{
ticks: {
beginAtZero: true
}
}]
},
title: {
display: (strTitle) ? true : false,
text: (strTitle) ? strTitle : ""
},
}
}
let ctx = document.getElementById(cvsId).getContext("2d");
//window.myLine = new Chart(ctx, config);
return new Chart(ctx, config);
}
}
YourTeam.Chartjs.Bar = YourTeam.Chartjs.BarHelper || Bar;
class Pie {
constructor() {
}
/*
* @deprecated since version 0.1
* @description 初始化Pie基本圖表
* @param {String} cvsId the canvas`s id
* @param {Array} aryLabels 標籤值(String Array)
* @param {Array} aryVlues 量值(Integer Array)
* @param {String} strTitle the title of the chart;def value = null
* @param {Integer} borderWidth the width of the border;def value = 1
* @param {Array} aryStrBgColor the rgba or color code with the backaround;def value = null
* @param {Array} aryStrBorderColor the rgba or color code with the border;def value = null
* @returns {Object} chart element
*/
initBase(cvsId, aryLabels, aryVlues, strTitle = null, chart = null, borderWidth = 1, aryStrBgColor = null, aryStrBorderColor = null)
{
if (chart !== null) {
chart.destroy();
}
if (!aryStrBgColor) {
aryStrBgColor = [];
for (let i = 0; i < aryVlues.length; i++) {
aryStrBgColor.push('rgb(' + random(0, 255) + ', ' + random(0, 255) + ', ' + random(0, 255) + ')');
}
}
if (!aryStrBorderColor) {
aryStrBorderColor = [];
for (let i = 0; i < aryVlues.length; i++) {
aryStrBorderColor.push('rgb(255,255,255)');
}
}
let config = {
type: (aryVlues.length % 2) ? "doughnut" :"doughnut",
data: {
labels: aryLabels,
datasets: [{
data: aryVlues,
backgroundColor: aryStrBgColor,
borderColor: aryStrBorderColor,
borderWidth: borderWidth
}]
},
options: {
//cutoutPercentage: 40,
cutoutPercentage: 60,
maintainAspectRatio: false,
responsive: false,
legend: {
display: false,
},
title: {
display: (strTitle) ? true : false,
text: (strTitle) ? strTitle : ""
},
tooltips: {
position: 'nearest',
xAlign: "left",
yAlign: 'center'
}
}
}
let ctx = document.getElementById(cvsId).getContext("2d");
//window.myLine = new Chart(ctx, config);
return new Chart(ctx, config);
}
}
YourTeam.Chartjs.Pie = YourTeam.Chartjs.PieHelper || Pie;
function random(min, max) {
return Math.floor(Math.random() * max) + min;
}