Compare commits
4 Commits
976753fc8e
...
andy/bar-c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d601cc0801 | ||
|
|
3c9c63dd2a | ||
|
|
012f1db6e4 | ||
|
|
ae59d63940 |
@@ -4000,19 +4000,6 @@ a.text-white:focus {
|
||||
box-shadow: 0px 9px 16px 0px rgba(var(--dangerrgb), var(--opacity03)) !important;
|
||||
}
|
||||
|
||||
/* ### NAV*/
|
||||
.nav-tabs .nav-link.active,
|
||||
.nav-tabs .nav-item.show .nav-link {
|
||||
color: var(--primary) !important;
|
||||
background-color: #ffffff;
|
||||
border-color: #e4e6ef #e4e6ef #ffffff;
|
||||
}
|
||||
.nav-pills .nav-link.active,
|
||||
.nav-pills .show > .nav-link {
|
||||
color: #ffffff;
|
||||
background-color: var(--primary) !important;
|
||||
}
|
||||
/* ### BUTTON HOVER TEXT */
|
||||
/* ## PRIMARY */
|
||||
.btn.btn-hover-text-primary:not(:disabled):not(.disabled):active:not(.btn-text),
|
||||
.btn.btn-hover-text-primary:not(:disabled):not(.disabled).active,
|
||||
@@ -4057,7 +4044,63 @@ a.text-white:focus {
|
||||
.show .btn.btn-hover-text-danger.btn-dropdown {
|
||||
color: var(--danger) !important;
|
||||
}
|
||||
/* ### NAV & BREADCRUMB*/
|
||||
|
||||
.breadcrumb {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
padding: 0px 0px !important;
|
||||
padding-left: 0 !important;
|
||||
margin-bottom: 1rem;
|
||||
list-style: none;
|
||||
background-color: var(--white) !important;
|
||||
border-radius: 0.42rem;
|
||||
}
|
||||
|
||||
.breadcrumb-item a {
|
||||
color: var(--text-black) !important;
|
||||
font-family: Poppins !important;
|
||||
font-size: 13px !important;
|
||||
font-style: normal !important;
|
||||
font-weight: 500 !important;
|
||||
line-height: 21px !important;
|
||||
}
|
||||
|
||||
.breadcrumb-item.active {
|
||||
color: var(--text-disabled) !important;
|
||||
font-family: Poppins !important;
|
||||
font-size: 13px !important;
|
||||
font-style: normal !important;
|
||||
font-weight: 500 !important;
|
||||
line-height: 21px !important;
|
||||
}
|
||||
.nav-tabs {
|
||||
border-bottom: 0px solid #000000 !important;
|
||||
}
|
||||
.nav-link {
|
||||
color: var(--text-grey) !important;
|
||||
font-family: Public Sans !important;
|
||||
font-size: 14px !important;
|
||||
font-style: normal !important;
|
||||
font-weight: 600 !important;
|
||||
line-height: 22px !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.nav-link.active {
|
||||
color: var(--text-black) !important; /* Warna teks untuk tab yang aktif */
|
||||
border-bottom: 2px solid var(--primary) !important; /* Garis bawah untuk tab yang aktif */
|
||||
font-family: Public Sans !important;
|
||||
font-size: 14px !important;
|
||||
font-style: normal !important;
|
||||
font-weight: 600 !important;
|
||||
line-height: 22px !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
/* ### BUTTON HOVER TEXT */
|
||||
/* ### */
|
||||
/* ## PRIMARY */
|
||||
/* ## SECONDARY */
|
||||
|
||||
338
assets/mcu/kelainan-global.html
Normal file
338
assets/mcu/kelainan-global.html
Normal file
@@ -0,0 +1,338 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Template Name: Metronic - Bootstrap 4 HTML, React, Angular 9 & VueJS Admin Dashboard Theme
|
||||
Author: KeenThemes
|
||||
Website: http://www.keenthemes.com/
|
||||
Contact: support@keenthemes.com
|
||||
Follow: www.twitter.com/keenthemes
|
||||
Dribbble: www.dribbble.com/keenthemes
|
||||
Like: www.facebook.com/keenthemes
|
||||
Purchase: https://1.envato.market/EA4JP
|
||||
Renew Support: https://1.envato.market/EA4JP
|
||||
License: You must have a valid license purchased only from themeforest(the above link) in order to legally use the theme for your project.
|
||||
-->
|
||||
<html lang="en">
|
||||
<!--begin::Head-->
|
||||
|
||||
<head>
|
||||
<base href="../" />
|
||||
<meta charset="utf-8" />
|
||||
<title>KELAINAN GLOBAL | MCU004</title>
|
||||
<meta name="description" content="Login page example" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
||||
/>
|
||||
|
||||
<!--begin::Fonts-->
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700"
|
||||
/>
|
||||
<!--end::Fonts-->
|
||||
|
||||
<!--begin::Page Custom Styles(used by this page)-->
|
||||
<link
|
||||
href="assets/css/pages/login/login-1.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<!--end::Page Custom Styles-->
|
||||
|
||||
<!--begin::Global Theme Styles(used by all pages)-->
|
||||
<link
|
||||
href="assets/plugins/global/plugins.bundle.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<link
|
||||
href="assets/plugins/custom/prismjs/prismjs.bundle.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<link href="assets/css/style.bundle.css" rel="stylesheet" type="text/css" />
|
||||
<!--end::Global Theme Styles-->
|
||||
|
||||
<!--begin::Layout Themes(used by all pages)-->
|
||||
|
||||
<link
|
||||
href="assets/css/themes/layout/header/base/light.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<link
|
||||
href="assets/css/themes/layout/header/menu/light.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<link
|
||||
href="assets/css/themes/layout/brand/dark.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<link
|
||||
href="assets/css/themes/layout/aside/dark.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
<!--end::Layout Themes-->
|
||||
|
||||
<link rel="shortcut icon" href="assets/media/logos/favicon.ico" />
|
||||
<style>
|
||||
#mcu-004 {
|
||||
height: 50%;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#mcu-005 {
|
||||
height: 40%;
|
||||
width: "100%";
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<!--end::Head-->
|
||||
|
||||
<!--begin::Body-->
|
||||
|
||||
<body
|
||||
id="kt_body"
|
||||
class="header-fixed header-mobile-fixed subheader-enabled subheader-fixed subheader-mobile-fixed aside-enabled aside-fixed aside-minimize-hoverable page-loading"
|
||||
>
|
||||
<!--begin::Main-->
|
||||
<div class="d-flex flex-column flex-root bg-white">
|
||||
<!-- begin::Navbar -->
|
||||
<div class="d-flex justify-content-center">
|
||||
<h3 class="mb-3">Data Persentase Kelainan Global</h3>
|
||||
</div>
|
||||
|
||||
<div id="mcu-004" class="mt-5"></div>
|
||||
<div id="mcu-005"></div>
|
||||
<!-- end::Navbar -->
|
||||
</div>
|
||||
<!--end::Main-->
|
||||
<script>
|
||||
var HOST_URL =
|
||||
"https://preview.keenthemes.com/metronic/theme/html/tools/preview";
|
||||
</script>
|
||||
<!--begin::Global Config(global config for global JS scripts)-->
|
||||
<script>
|
||||
var KTAppSettings = {
|
||||
breakpoints: {
|
||||
sm: 576,
|
||||
md: 768,
|
||||
lg: 992,
|
||||
xl: 1200,
|
||||
xxl: 1400,
|
||||
},
|
||||
colors: {
|
||||
theme: {
|
||||
base: {
|
||||
white: "#ffffff",
|
||||
primary: "#3699FF",
|
||||
secondary: "#E5EAEE",
|
||||
success: "#1BC5BD",
|
||||
info: "#8950FC",
|
||||
warning: "#FFA800",
|
||||
danger: "#F64E60",
|
||||
light: "#E4E6EF",
|
||||
dark: "#181C32",
|
||||
},
|
||||
light: {
|
||||
white: "#ffffff",
|
||||
primary: "#E1F0FF",
|
||||
secondary: "#EBEDF3",
|
||||
success: "#C9F7F5",
|
||||
info: "#EEE5FF",
|
||||
warning: "#FFF4DE",
|
||||
danger: "#FFE2E5",
|
||||
light: "#F3F6F9",
|
||||
dark: "#D6D6E0",
|
||||
},
|
||||
inverse: {
|
||||
white: "#ffffff",
|
||||
primary: "#ffffff",
|
||||
secondary: "#3F4254",
|
||||
success: "#ffffff",
|
||||
info: "#ffffff",
|
||||
warning: "#ffffff",
|
||||
danger: "#ffffff",
|
||||
light: "#464E5F",
|
||||
dark: "#ffffff",
|
||||
},
|
||||
},
|
||||
gray: {
|
||||
"gray-100": "#F3F6F9",
|
||||
"gray-200": "#EBEDF3",
|
||||
"gray-300": "#E4E6EF",
|
||||
"gray-400": "#D1D3E0",
|
||||
"gray-500": "#B5B5C3",
|
||||
"gray-600": "#7E8299",
|
||||
"gray-700": "#5E6278",
|
||||
"gray-800": "#3F4254",
|
||||
"gray-900": "#181C32",
|
||||
},
|
||||
},
|
||||
"font-family": "Poppins",
|
||||
};
|
||||
</script>
|
||||
<!--end::Global Config-->
|
||||
<!--begin::Global Theme Bundle(used by all pages)-->
|
||||
<script src="assets/plugins/global/plugins.bundle.js"></script>
|
||||
<script src="assets/plugins/custom/prismjs/prismjs.bundle.js"></script>
|
||||
<script src="assets/js/scripts.bundle.js"></script>
|
||||
<!--end::Global Theme Bundle-->
|
||||
|
||||
<!--begin::Page Vendors(used by this page)-->
|
||||
<script src="assets/plugins/custom/fullcalendar/fullcalendar.bundle.js"></script>
|
||||
<!--end::Page Vendors-->
|
||||
|
||||
<!--begin::Page Scripts(used by this page)-->
|
||||
<script src="assets/js/pages/widgets.js"></script>
|
||||
<!--end::Page Scripts-->
|
||||
<!-- echartjs.min.js -->
|
||||
<script src="assets/js/echarts-js/echart.min.js"></script>
|
||||
<!-- SCRIPT -->
|
||||
<script type="text/javascript">
|
||||
// Initialize the echarts instance based on the prepared dom
|
||||
var chartMCU004 = echarts.init(document.getElementById("mcu-004"));
|
||||
var optMCU004 = {
|
||||
title: {
|
||||
text: "Kelainan MCU",
|
||||
// subtext: 'Living Expenses in Shenzhen'
|
||||
},
|
||||
dataset: {
|
||||
source: [
|
||||
["score", "amount", "product", "percentage"],
|
||||
[200, 447, "Body Mass Index"],
|
||||
[150, 314, "Pemeriksaan Mata"],
|
||||
[125, 314, "Fungsi Lemak"],
|
||||
[100, 254, "Autospirometri"],
|
||||
[90, 200, "Hematologi"],
|
||||
[80, 180, "ECG"],
|
||||
[75, 160, "Hiperuricemia"],
|
||||
[70, 125, "Tekanan Darah"],
|
||||
[60, 118, "Urine Lengkap"],
|
||||
[50, 87, "Fungsi Hati"],
|
||||
],
|
||||
},
|
||||
grid: {
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
name: "amount",
|
||||
},
|
||||
yAxis: {
|
||||
type: "category",
|
||||
},
|
||||
visualMap: {
|
||||
orient: "horizontal",
|
||||
left: "center",
|
||||
min: 10,
|
||||
max: 100,
|
||||
show: false,
|
||||
|
||||
// text: ['High Score', 'Low Score'],
|
||||
// Map the score column to color
|
||||
dimension: 0,
|
||||
inRange: {
|
||||
color: ["#42aaf5", "#00eaf2", "#035bff"],
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
label: {
|
||||
position: "right",
|
||||
show: true,
|
||||
formatter: "{@[3]} %",
|
||||
},
|
||||
type: "bar",
|
||||
encode: {
|
||||
// Map the "amount" column to X axis.
|
||||
x: "amount",
|
||||
// Map the "product" column to Y axis
|
||||
y: "product",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
window.addEventListener("resize", function () {
|
||||
chartMCU004.resize();
|
||||
});
|
||||
|
||||
// Display the chart using the configuration items and data just specified.
|
||||
chartMCU004.setOption(optMCU004);
|
||||
|
||||
//MCU005
|
||||
// Initialize the echarts instance based on the prepared dom
|
||||
var chartMCU005 = echarts.init(document.getElementById("mcu-005"));
|
||||
var optMCU005 = {
|
||||
title: {
|
||||
text: "Kelainan Fisik",
|
||||
// subtext: 'Living Expenses in Shenzhen'
|
||||
},
|
||||
dataset: {
|
||||
source: [
|
||||
["score", "amount", "product", "percentage"],
|
||||
[200, 400, "Obesitas Stage 1"],
|
||||
[150, 300, "Pre Hipertensi"],
|
||||
[133, 250, "Kelainan Refraksi"],
|
||||
[125, 180, "Overweight"],
|
||||
[100, 125, "Obesitas Stage 2"],
|
||||
[80, 100, "Hipertensi grade 1"],
|
||||
[70, 80, "Kel. Refrakti terkoreksi"],
|
||||
[60, 70, "Kel. Refrakti tidak terkoreksi"],
|
||||
[55, 55, "Hipertensi grade 2"],
|
||||
],
|
||||
},
|
||||
grid: {
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
name: "amount",
|
||||
},
|
||||
yAxis: {
|
||||
type: "category",
|
||||
},
|
||||
visualMap: {
|
||||
orient: "horizontal",
|
||||
left: "center",
|
||||
min: 10,
|
||||
max: 100,
|
||||
show: false,
|
||||
// text: ['High Score', 'Low Score'],
|
||||
// Map the score column to color
|
||||
dimension: 0,
|
||||
inRange: {
|
||||
color: ["#42aaf5", "#00eaf2", "#035bff"],
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
label: {
|
||||
position: "right",
|
||||
show: true,
|
||||
formatter: "{@[3]} %",
|
||||
},
|
||||
type: "bar",
|
||||
encode: {
|
||||
// Map the "amount" column to X axis.
|
||||
x: "amount",
|
||||
// Map the "product" column to Y axis
|
||||
y: "product",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
window.addEventListener("resize", function () {
|
||||
chartMCU005.resize();
|
||||
});
|
||||
|
||||
// Display the chart using the configuration items and data just specified.
|
||||
chartMCU005.setOption(optMCU005);
|
||||
</script>
|
||||
<!-- SCRIPT -->
|
||||
</body>
|
||||
<!--end::Body-->
|
||||
</html>
|
||||
@@ -1,301 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Template Name: Metronic - Bootstrap 4 HTML, React, Angular 9 & VueJS Admin Dashboard Theme
|
||||
Author: KeenThemes
|
||||
Website: http://www.keenthemes.com/
|
||||
Contact: support@keenthemes.com
|
||||
Follow: www.twitter.com/keenthemes
|
||||
Dribbble: www.dribbble.com/keenthemes
|
||||
Like: www.facebook.com/keenthemes
|
||||
Purchase: https://1.envato.market/EA4JP
|
||||
Renew Support: https://1.envato.market/EA4JP
|
||||
License: You must have a valid license purchased only from themeforest(the above link) in order to legally use the theme for your project.
|
||||
-->
|
||||
<html lang="en">
|
||||
<!--begin::Head-->
|
||||
|
||||
<head>
|
||||
<base href="../" />
|
||||
<meta charset="utf-8" />
|
||||
<title>KELAINAN GLOBAL | MCU004</title>
|
||||
<meta name="description" content="Login page example" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||
|
||||
<!--begin::Fonts-->
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700" />
|
||||
<!--end::Fonts-->
|
||||
|
||||
<!--begin::Page Custom Styles(used by this page)-->
|
||||
<link href="assets/css/pages/login/login-1.css" rel="stylesheet" type="text/css" />
|
||||
<!--end::Page Custom Styles-->
|
||||
|
||||
<!--begin::Global Theme Styles(used by all pages)-->
|
||||
<link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" type="text/css" />
|
||||
<link href="assets/plugins/custom/prismjs/prismjs.bundle.css" rel="stylesheet" type="text/css" />
|
||||
<link href="assets/css/style.bundle.css" rel="stylesheet" type="text/css" />
|
||||
<!--end::Global Theme Styles-->
|
||||
|
||||
<!--begin::Layout Themes(used by all pages)-->
|
||||
|
||||
<link href="assets/css/themes/layout/header/base/light.css" rel="stylesheet" type="text/css" />
|
||||
<link href="assets/css/themes/layout/header/menu/light.css" rel="stylesheet" type="text/css" />
|
||||
<link href="assets/css/themes/layout/brand/dark.css" rel="stylesheet" type="text/css" />
|
||||
<link href="assets/css/themes/layout/aside/dark.css" rel="stylesheet" type="text/css" />
|
||||
<!--end::Layout Themes-->
|
||||
|
||||
<link rel="shortcut icon" href="assets/media/logos/favicon.ico" />
|
||||
<style>
|
||||
#mcu-004 {
|
||||
height: 100vh;
|
||||
/* overflow-x: scroll; */
|
||||
width: "100%";
|
||||
}
|
||||
|
||||
#mcu-005 {
|
||||
height: 100vh;
|
||||
/* overflow-x: scroll; */
|
||||
width: "100%";
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<!--end::Head-->
|
||||
|
||||
<!--begin::Body-->
|
||||
|
||||
<body id="kt_body" class="header-fixed header-mobile-fixed subheader-enabled subheader-fixed subheader-mobile-fixed aside-enabled aside-fixed aside-minimize-hoverable page-loading">
|
||||
<!--begin::Main-->
|
||||
<div class="d-flex flex-column flex-root bg-white">
|
||||
<!-- begin::Navbar -->
|
||||
<div class="d-flex justify-content-center ">
|
||||
<h3 class="mb-3">Data Persentase Kelainan Global</h3>
|
||||
</div>
|
||||
|
||||
<div id="mcu-004" class="mt-5">
|
||||
</div>
|
||||
<div id="mcu-005">
|
||||
</div>
|
||||
<!-- end::Navbar -->
|
||||
</div>
|
||||
<!--end::Main-->
|
||||
<script>
|
||||
var HOST_URL = "https://preview.keenthemes.com/metronic/theme/html/tools/preview";
|
||||
</script>
|
||||
<!--begin::Global Config(global config for global JS scripts)-->
|
||||
<script>
|
||||
var KTAppSettings = {
|
||||
"breakpoints": {
|
||||
"sm": 576,
|
||||
"md": 768,
|
||||
"lg": 992,
|
||||
"xl": 1200,
|
||||
"xxl": 1400
|
||||
},
|
||||
"colors": {
|
||||
"theme": {
|
||||
"base": {
|
||||
"white": "#ffffff",
|
||||
"primary": "#3699FF",
|
||||
"secondary": "#E5EAEE",
|
||||
"success": "#1BC5BD",
|
||||
"info": "#8950FC",
|
||||
"warning": "#FFA800",
|
||||
"danger": "#F64E60",
|
||||
"light": "#E4E6EF",
|
||||
"dark": "#181C32"
|
||||
},
|
||||
"light": {
|
||||
"white": "#ffffff",
|
||||
"primary": "#E1F0FF",
|
||||
"secondary": "#EBEDF3",
|
||||
"success": "#C9F7F5",
|
||||
"info": "#EEE5FF",
|
||||
"warning": "#FFF4DE",
|
||||
"danger": "#FFE2E5",
|
||||
"light": "#F3F6F9",
|
||||
"dark": "#D6D6E0"
|
||||
},
|
||||
"inverse": {
|
||||
"white": "#ffffff",
|
||||
"primary": "#ffffff",
|
||||
"secondary": "#3F4254",
|
||||
"success": "#ffffff",
|
||||
"info": "#ffffff",
|
||||
"warning": "#ffffff",
|
||||
"danger": "#ffffff",
|
||||
"light": "#464E5F",
|
||||
"dark": "#ffffff"
|
||||
}
|
||||
},
|
||||
"gray": {
|
||||
"gray-100": "#F3F6F9",
|
||||
"gray-200": "#EBEDF3",
|
||||
"gray-300": "#E4E6EF",
|
||||
"gray-400": "#D1D3E0",
|
||||
"gray-500": "#B5B5C3",
|
||||
"gray-600": "#7E8299",
|
||||
"gray-700": "#5E6278",
|
||||
"gray-800": "#3F4254",
|
||||
"gray-900": "#181C32"
|
||||
}
|
||||
},
|
||||
"font-family": "Poppins"
|
||||
};
|
||||
</script>
|
||||
<!--end::Global Config-->
|
||||
<!--begin::Global Theme Bundle(used by all pages)-->
|
||||
<script src="assets/plugins/global/plugins.bundle.js"></script>
|
||||
<script src="assets/plugins/custom/prismjs/prismjs.bundle.js"></script>
|
||||
<script src="assets/js/scripts.bundle.js"></script>
|
||||
<!--end::Global Theme Bundle-->
|
||||
|
||||
<!--begin::Page Vendors(used by this page)-->
|
||||
<script src="assets/plugins/custom/fullcalendar/fullcalendar.bundle.js"></script>
|
||||
<!--end::Page Vendors-->
|
||||
|
||||
<!--begin::Page Scripts(used by this page)-->
|
||||
<script src="assets/js/pages/widgets.js"></script>
|
||||
<!--end::Page Scripts-->
|
||||
<!-- echartjs.min.js -->
|
||||
<script src="assets/js/echarts-js/echart.min.js"></script>
|
||||
<!-- SCRIPT -->
|
||||
<script type="text/javascript">
|
||||
// Initialize the echarts instance based on the prepared dom
|
||||
var chartMCU004 = echarts.init(document.getElementById('mcu-004'));
|
||||
var optMCU004 = {
|
||||
title: {
|
||||
text: 'Kelainan MCU',
|
||||
// subtext: 'Living Expenses in Shenzhen'
|
||||
},
|
||||
dataset: {
|
||||
source: [
|
||||
['score', 'amount', 'product', 'percentage'],
|
||||
[200, 447, 'Body Mass Index'],
|
||||
[150, 314, 'Pemeriksaan Mata'],
|
||||
[125, 314, 'Fungsi Lemak'],
|
||||
[100, 254, 'Autospirometri'],
|
||||
[90, 200, 'Hematologi'],
|
||||
[80, 180, 'ECG'],
|
||||
[75, 160, 'Hiperuricemia'],
|
||||
[70, 125, 'Tekanan Darah'],
|
||||
[60, 118, 'Urine Lengkap'],
|
||||
[50, 87, 'Fungsi Hati']
|
||||
]
|
||||
},
|
||||
grid: {
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
name: 'amount'
|
||||
},
|
||||
yAxis: {
|
||||
type: 'category'
|
||||
},
|
||||
visualMap: {
|
||||
orient: 'horizontal',
|
||||
left: 'center',
|
||||
min: 10,
|
||||
max: 100,
|
||||
show: false,
|
||||
|
||||
// text: ['High Score', 'Low Score'],
|
||||
// Map the score column to color
|
||||
dimension: 0,
|
||||
inRange: {
|
||||
color: ['#42aaf5', '#00eaf2', '#035bff']
|
||||
}
|
||||
},
|
||||
series: [{
|
||||
label: {
|
||||
position: 'right',
|
||||
show: true,
|
||||
formatter: "{@[3]} %"
|
||||
},
|
||||
type: 'bar',
|
||||
encode: {
|
||||
// Map the "amount" column to X axis.
|
||||
x: 'amount',
|
||||
// Map the "product" column to Y axis
|
||||
y: 'product'
|
||||
}
|
||||
}]
|
||||
};
|
||||
|
||||
window.addEventListener('resize', function() {
|
||||
chartMCU004.resize();
|
||||
});
|
||||
|
||||
// Display the chart using the configuration items and data just specified.
|
||||
chartMCU004.setOption(optMCU004);
|
||||
|
||||
//MCU005
|
||||
// Initialize the echarts instance based on the prepared dom
|
||||
var chartMCU005 = echarts.init(document.getElementById('mcu-005'));
|
||||
var optMCU005 = {
|
||||
title: {
|
||||
text: 'Kelainan Fisik',
|
||||
// subtext: 'Living Expenses in Shenzhen'
|
||||
},
|
||||
dataset: {
|
||||
source: [
|
||||
['score', 'amount', 'product', 'percentage'],
|
||||
[200, 400, 'Obesitas Stage 1'],
|
||||
[150, 300, 'Pre Hipertensi'],
|
||||
[133, 250, 'Kelainan Refraksi'],
|
||||
[125, 180, 'Overweight'],
|
||||
[100, 125, 'Obesitas Stage 2'],
|
||||
[80, 100, 'Hipertensi grade 1'],
|
||||
[70, 80, 'Kel. Refrakti terkoreksi'],
|
||||
[60, 70, 'Kel. Refrakti tidak terkoreksi'],
|
||||
[55, 55, 'Hipertensi grade 2']
|
||||
]
|
||||
},
|
||||
grid: {
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
name: 'amount'
|
||||
},
|
||||
yAxis: {
|
||||
type: 'category'
|
||||
},
|
||||
visualMap: {
|
||||
orient: 'horizontal',
|
||||
left: 'center',
|
||||
min: 10,
|
||||
max: 100,
|
||||
show: false,
|
||||
// text: ['High Score', 'Low Score'],
|
||||
// Map the score column to color
|
||||
dimension: 0,
|
||||
inRange: {
|
||||
color: ['#42aaf5', '#00eaf2', '#035bff']
|
||||
}
|
||||
},
|
||||
series: [{
|
||||
label: {
|
||||
position: 'right',
|
||||
show: true,
|
||||
formatter: "{@[3]} %"
|
||||
},
|
||||
type: 'bar',
|
||||
encode: {
|
||||
// Map the "amount" column to X axis.
|
||||
x: 'amount',
|
||||
// Map the "product" column to Y axis
|
||||
y: 'product'
|
||||
}
|
||||
}]
|
||||
};;
|
||||
|
||||
window.addEventListener('resize', function() {
|
||||
chartMCU005.resize();
|
||||
});
|
||||
|
||||
// Display the chart using the configuration items and data just specified.
|
||||
chartMCU005.setOption(optMCU005);
|
||||
</script>
|
||||
<!-- SCRIPT -->
|
||||
</body>
|
||||
<!--end::Body-->
|
||||
|
||||
</html>
|
||||
17
cmd/main.go
17
cmd/main.go
@@ -27,6 +27,10 @@ func main() {
|
||||
return c.Redirect(http.StatusMovedPermanently, "/landing_page/")
|
||||
})
|
||||
|
||||
app.GET("/pie_chart", func(c echo.Context) error {
|
||||
return c.Redirect(http.StatusMovedPermanently, "/pie_chart/")
|
||||
})
|
||||
|
||||
uStore, err := db.NewUserStore(dbName)
|
||||
if err != nil {
|
||||
app.Logger.Fatalf("failed to create store: %s", err)
|
||||
@@ -54,6 +58,19 @@ func main() {
|
||||
lphs := handlers.NewLandingPageHandler(lps)
|
||||
handlers.SetupRoutesLandingPage(app, lphs)
|
||||
|
||||
LpchartStore, err := db.NewPieChartStore(dbName)
|
||||
if err != nil {
|
||||
app.Logger.Fatalf("failed to create store: %s", err)
|
||||
}
|
||||
bchart, err := db.NewBarChartStore(dbName)
|
||||
if err != nil {
|
||||
app.Logger.Fatalf("failed to create store: %s", err)
|
||||
}
|
||||
|
||||
lpchart := services.NewServicesPiechart(services.Piechart{}, services.Barchart{}, LpchartStore, bchart)
|
||||
lphsx := handlers.NewPiechartHandler(lpchart)
|
||||
handlers.SetupRoutesPieChart(app, lphsx)
|
||||
|
||||
app.Logger.Fatal(app.Start(":5000"))
|
||||
}
|
||||
|
||||
|
||||
43
db/chart.store.go
Normal file
43
db/chart.store.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
_ "github.com/glebarez/go-sqlite"
|
||||
)
|
||||
|
||||
type PieChartStore struct {
|
||||
Db *sql.DB
|
||||
}
|
||||
type BarChartStore struct {
|
||||
Db *sql.DB
|
||||
}
|
||||
|
||||
func NewPieChartStore(dbName string) (PieChartStore, error) {
|
||||
Db, err := getConnection(dbName)
|
||||
if err != nil {
|
||||
return PieChartStore{}, err
|
||||
}
|
||||
|
||||
if err := createMigrations(dbName, Db); err != nil {
|
||||
return PieChartStore{}, err
|
||||
}
|
||||
|
||||
return PieChartStore{
|
||||
Db,
|
||||
}, nil
|
||||
}
|
||||
func NewBarChartStore(dbName string) (BarChartStore, error) {
|
||||
Db, err := getConnection(dbName)
|
||||
if err != nil {
|
||||
return BarChartStore{}, err
|
||||
}
|
||||
|
||||
if err := createMigrations(dbName, Db); err != nil {
|
||||
return BarChartStore{}, err
|
||||
}
|
||||
|
||||
return BarChartStore{
|
||||
Db,
|
||||
}, nil
|
||||
}
|
||||
111
handlers/chart.handlers.go
Normal file
111
handlers/chart.handlers.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/a-h/templ"
|
||||
"github.com/emarifer/go-templ-project-structure/services"
|
||||
kelainanglobal "github.com/emarifer/go-templ-project-structure/views/mcu/kelainan_global"
|
||||
"github.com/emarifer/go-templ-project-structure/views/piechart"
|
||||
"github.com/emarifer/go-templ-project-structure/views/xsample"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
type PiechartService interface {
|
||||
GetPieChart(string, int) (string, services.Piechart, error)
|
||||
GetBarChart(code string, id int) (string, services.Barchart, error)
|
||||
}
|
||||
|
||||
func NewPiechartHandler(us PiechartService) *PiechartHandler {
|
||||
return &PiechartHandler{
|
||||
PiechartService: us,
|
||||
}
|
||||
}
|
||||
|
||||
type PiechartHandler struct {
|
||||
PiechartService PiechartService
|
||||
}
|
||||
|
||||
func (uh *PiechartHandler) Hello(c echo.Context) error {
|
||||
helo := xsample.ShowHelo("Hello World", xsample.HelloWorld("Hello World"), xsample.CssHelo(), xsample.JsHelo())
|
||||
return uh.View(c, helo)
|
||||
}
|
||||
|
||||
func (uh *PiechartHandler) ShowPieChart(c echo.Context) error {
|
||||
// helo := piechart.MainPieChart("main_001")
|
||||
var code = "mcu006"
|
||||
title, udata, err := uh.PiechartService.GetPieChart(code, 1)
|
||||
if err != nil {
|
||||
// fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
|
||||
jsonData, err := json.MarshalIndent(udata, "", " ")
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// randomID := md5.Sum([]byte(title + time.Now().String()))
|
||||
seed := title + time.Now().String()
|
||||
hash := md5.Sum([]byte(seed))
|
||||
randomID := hex.EncodeToString(hash[:])
|
||||
randomID = strings.ReplaceAll(randomID, "-", "")
|
||||
|
||||
// randomID := hex.EncodeToString(md5.Sum([]byte(title + time.Now().String())))
|
||||
helo := piechart.ShowPieChart("Chart", piechart.MainPieChart(randomID, string(jsonData)), piechart.CssPieChart(), piechart.JsPieChart())
|
||||
return uh.View(c, helo)
|
||||
}
|
||||
func (uh *PiechartHandler) ShowBarChart(c echo.Context) error {
|
||||
// helo := piechart.MainPieChart("main_001")
|
||||
var code = "mcu004"
|
||||
title, udata, err := uh.PiechartService.GetBarChart(code, 1)
|
||||
if err != nil {
|
||||
// fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
var code2 = "mcu005"
|
||||
title2, udata2, err := uh.PiechartService.GetBarChart(code2, 1)
|
||||
if err != nil {
|
||||
// fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
|
||||
jsonData, err := json.MarshalIndent(udata, "", " ")
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
return err
|
||||
}
|
||||
jsonData2, err := json.MarshalIndent(udata2, "", " ")
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// randomID := md5.Sum([]byte(title + time.Now().String()))
|
||||
seed := title + time.Now().String()
|
||||
hash := md5.Sum([]byte(seed))
|
||||
randomID := hex.EncodeToString(hash[:])
|
||||
randomID = strings.ReplaceAll(randomID, "-", "")
|
||||
|
||||
seed2 := title2 + time.Now().String()
|
||||
hash2 := md5.Sum([]byte(seed2))
|
||||
randomID2 := hex.EncodeToString(hash2[:])
|
||||
randomID2 = strings.ReplaceAll(randomID2, "-", "")
|
||||
|
||||
// randomID := hex.EncodeToString(md5.Sum([]byte(title + time.Now().String())))
|
||||
helo := kelainanglobal.ShowKelainanGlobal("Kelainan global", kelainanglobal.MainKelainanGlobal(randomID, string(jsonData), randomID2, string(jsonData2)), kelainanglobal.CssKelainanGlobal(), kelainanglobal.JsKelainanGlobal())
|
||||
return uh.View(c, helo)
|
||||
}
|
||||
|
||||
func (uh *PiechartHandler) View(c echo.Context, cmp templ.Component) error {
|
||||
c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTML)
|
||||
|
||||
return cmp.Render(c.Request().Context(), c.Response().Writer)
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
|
||||
"github.com/a-h/templ"
|
||||
"github.com/emarifer/go-templ-project-structure/services"
|
||||
landingpage "github.com/emarifer/go-templ-project-structure/views/LandingPage"
|
||||
landingpage "github.com/emarifer/go-templ-project-structure/views/landingpage"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
@@ -19,6 +19,11 @@ func SetupRoutesLandingPage(app *echo.Echo, h *LandingPageHandler) {
|
||||
Lp := app.Group("/landing_page")
|
||||
Lp.GET("/", h.ShowLandingPage)
|
||||
}
|
||||
func SetupRoutesPieChart(app *echo.Echo, h *PiechartHandler) {
|
||||
Lp := app.Group("/pie_chart")
|
||||
Lp.GET("/", h.ShowPieChart)
|
||||
Lp.GET("/bar", h.ShowBarChart)
|
||||
}
|
||||
func SetupRoutesProject(app *echo.Echo) {
|
||||
|
||||
}
|
||||
|
||||
473
services/chart.services.go
Normal file
473
services/chart.services.go
Normal file
@@ -0,0 +1,473 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/emarifer/go-templ-project-structure/db"
|
||||
)
|
||||
|
||||
func NewServicesPiechart(u Piechart, b Barchart, uStore db.PieChartStore, bStore db.BarChartStore) *ServicesPiechart {
|
||||
|
||||
return &ServicesPiechart{
|
||||
Piechart: u,
|
||||
Barchart: b,
|
||||
BarChartStore: bStore,
|
||||
PieChartStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
// type Option struct {
|
||||
// Title struct {
|
||||
// Text string
|
||||
// Left string
|
||||
// }
|
||||
// Tooltip struct {
|
||||
// Trigger string
|
||||
// }
|
||||
// Legend struct {
|
||||
// Top string
|
||||
// Left string
|
||||
// Orient string
|
||||
// }
|
||||
// Series []Series
|
||||
// }
|
||||
|
||||
type SeriesData struct {
|
||||
Value int `json:"value"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type Series struct {
|
||||
Label struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
} `json:"label"`
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
Radius []string `json:"radius"`
|
||||
ItemStyle struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
} `json:"itemStyle"`
|
||||
Data []SeriesData `json:"data"`
|
||||
Emphasis struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
} `json:"emphasis"`
|
||||
}
|
||||
|
||||
type Barchart struct {
|
||||
Title struct {
|
||||
Text string `json:"text"`
|
||||
} `json:"title"`
|
||||
Dataset struct {
|
||||
Source [][]interface{} `json:"source"`
|
||||
} `json:"dataset"`
|
||||
Grid struct {
|
||||
ContainLabel bool `json:"containLabel"`
|
||||
} `json:"grid"`
|
||||
XAxis struct {
|
||||
Name string `json:"name"`
|
||||
} `json:"xAxis"`
|
||||
YAxis struct {
|
||||
Type string `json:"type"`
|
||||
} `json:"yAxis"`
|
||||
VisualMap struct {
|
||||
Orient string `json:"orient"`
|
||||
Left string `json:"left"`
|
||||
Min int `json:"min"`
|
||||
Max int `json:"max"`
|
||||
Show bool `json:"show"`
|
||||
Dimension int `json:"dimension"`
|
||||
InRange struct {
|
||||
Color []string `json:"color"`
|
||||
} `json:"inRange"`
|
||||
} `json:"visualMap"`
|
||||
Series []struct {
|
||||
Label struct {
|
||||
Position string `json:"position"`
|
||||
Show bool `json:"show"`
|
||||
Formatter string `json:"formatter"`
|
||||
} `json:"label"`
|
||||
Type string `json:"type"`
|
||||
Encode struct {
|
||||
X string `json:"x"`
|
||||
Y string `json:"y"`
|
||||
} `json:"encode"`
|
||||
} `json:"series"`
|
||||
}
|
||||
|
||||
type Piechart struct {
|
||||
// ID int `json:"id"`
|
||||
// Xsamplename string `json:"Xsamplename"`
|
||||
// Email string `json:"email"`
|
||||
// CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
|
||||
Title struct {
|
||||
Text string `json:"text"`
|
||||
Left string `json:"left"`
|
||||
} `json:"title"`
|
||||
Tooltip struct {
|
||||
Trigger string `json:"trigger"`
|
||||
} `json:"tooltip"`
|
||||
Legend struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
} `json:"legend"`
|
||||
Series []Series `json:"series"`
|
||||
}
|
||||
|
||||
type ServicesPiechart struct {
|
||||
Piechart Piechart
|
||||
Barchart Barchart
|
||||
BarChartStore db.BarChartStore
|
||||
PieChartStore db.PieChartStore
|
||||
}
|
||||
|
||||
// func (su *ServicesPiechart) GetAllXsamples() ([]Piechart, error) {
|
||||
// query := `SELECT id, Xsamplename, email, created_at FROM Xsamples ORDER BY created_at DESC`
|
||||
|
||||
// rows, err := su.PieChartStore.Db.Query(query)
|
||||
// if err != nil {
|
||||
// return []Piechart{}, err
|
||||
// }
|
||||
// // We close the resource
|
||||
// defer rows.Close()
|
||||
|
||||
// Xsamples := []Piechart{}
|
||||
// for rows.Next() {
|
||||
// rows.Scan(
|
||||
// &su.Piechart.ID,
|
||||
// &su.Piechart.Xsamplename,
|
||||
// &su.Piechart.Email,
|
||||
// &su.Piechart.CreatedAt,
|
||||
// )
|
||||
|
||||
// Xsamples = append(Xsamples, su.Piechart)
|
||||
// }
|
||||
|
||||
// return Xsamples, nil
|
||||
// }
|
||||
|
||||
// func (su *ServicesPiechart) GetXsampleById(id int) (Piechart, error) {
|
||||
|
||||
// query := `SELECT id, Xsamplename, email, created_at FROM Xsamples
|
||||
// WHERE id = ?`
|
||||
|
||||
// stmt, err := su.PieChartStore.Db.Prepare(query)
|
||||
// if err != nil {
|
||||
// return Piechart{}, err
|
||||
// }
|
||||
|
||||
// defer stmt.Close()
|
||||
|
||||
// su.Piechart.ID = id
|
||||
// err = stmt.QueryRow(
|
||||
// su.Piechart.ID,
|
||||
// ).Scan(
|
||||
// &su.Piechart.ID,
|
||||
// &su.Piechart.Xsamplename,
|
||||
// &su.Piechart.Email,
|
||||
// &su.Piechart.CreatedAt,
|
||||
// )
|
||||
// if err != nil {
|
||||
// return Piechart{}, err
|
||||
// }
|
||||
|
||||
// return su.Piechart, nil
|
||||
// }
|
||||
|
||||
// Peserta MCU -- MCU001
|
||||
func GetPieChartMcu001(code string, id int) (string, Piechart, error) {
|
||||
var title = "Status Index Masa Tubuh (BMI)"
|
||||
option := Piechart{
|
||||
Title: struct {
|
||||
Text string `json:"text"`
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
Left: "center",
|
||||
},
|
||||
Tooltip: struct {
|
||||
Trigger string `json:"trigger"`
|
||||
}{
|
||||
Trigger: "item",
|
||||
},
|
||||
Legend: struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
}{
|
||||
Top: "bottom",
|
||||
Left: "center",
|
||||
Orient: "vertical",
|
||||
},
|
||||
Series: []Series{
|
||||
{
|
||||
Label: struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
}{
|
||||
Position: "inner",
|
||||
Formatter: "{d}%",
|
||||
},
|
||||
Name: "Access From",
|
||||
Type: "pie",
|
||||
Radius: []string{"20%", "50%"},
|
||||
ItemStyle: struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
}{
|
||||
BorderRadius: 10,
|
||||
BorderColor: "#fff",
|
||||
BorderWidth: 2,
|
||||
},
|
||||
Data: []SeriesData{
|
||||
{Value: 506, Name: "Sudah MCU : 506 Peserta"},
|
||||
{Value: 54, Name: "Belum MCU : 54 Peserta"},
|
||||
},
|
||||
Emphasis: struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
}{
|
||||
ItemStyle: struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
}{
|
||||
ShadowBlur: 10,
|
||||
ShadowOffsetX: 0,
|
||||
ShadowColor: "rgba(0, 0, 0, 0.5)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return title, option, nil
|
||||
}
|
||||
|
||||
// Kepersertaan MCU Berdasarkan Jenis Kelamin -- MCU002
|
||||
|
||||
// Status Index Masa Tubuh (BMI) -- MCU006
|
||||
func GetPieChartMcu006(code string, id int) (string, Piechart, error) {
|
||||
var title = "Status Index Masa Tubuh (BMI)"
|
||||
option := Piechart{
|
||||
Title: struct {
|
||||
Text string `json:"text"`
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
Left: "center",
|
||||
},
|
||||
Tooltip: struct {
|
||||
Trigger string `json:"trigger"`
|
||||
}{
|
||||
Trigger: "item",
|
||||
},
|
||||
Legend: struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
}{
|
||||
Top: "bottom",
|
||||
Left: "center",
|
||||
Orient: "vertical",
|
||||
},
|
||||
Series: []Series{
|
||||
{
|
||||
Label: struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
}{
|
||||
Position: "inner",
|
||||
Formatter: "{d}%",
|
||||
},
|
||||
Name: "Access From",
|
||||
Type: "pie",
|
||||
Radius: []string{"20%", "50%"},
|
||||
ItemStyle: struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
}{
|
||||
BorderRadius: 10,
|
||||
BorderColor: "#fff",
|
||||
BorderWidth: 2,
|
||||
},
|
||||
Data: []SeriesData{
|
||||
{Value: 19, Name: "Underweight : 19 Peserta"},
|
||||
{Value: 104, Name: "Normal : 104 Peserta"},
|
||||
{Value: 230, Name: "Obese 1 : 230 Peserta"},
|
||||
{Value: 99, Name: "Obese 2 : 99 Peserta"},
|
||||
},
|
||||
Emphasis: struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
}{
|
||||
ItemStyle: struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
}{
|
||||
ShadowBlur: 10,
|
||||
ShadowOffsetX: 0,
|
||||
ShadowColor: "rgba(0, 0, 0, 0.5)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return title, option, nil
|
||||
}
|
||||
|
||||
// Kelainan MCU - MCU004
|
||||
func GetBarChartMcu004(code string, id int) (string, Barchart, error) {
|
||||
title := "Kelainan MCU"
|
||||
option := Barchart{}
|
||||
option.Title = struct {
|
||||
Text string "json:\"text\""
|
||||
}{title}
|
||||
option.Dataset = struct {
|
||||
Source [][]interface{} "json:\"source\""
|
||||
}{[][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
{200, 447, "Body Mass Index"},
|
||||
{150, 314, "Pemeriksaan Mata"},
|
||||
{125, 314, "Fungsi Lemak"},
|
||||
{100, 254, "Autospirometri"},
|
||||
{90, 200, "Hematologi"},
|
||||
{80, 180, "ECG"},
|
||||
{75, 160, "Hiperuricemia"},
|
||||
{70, 125, "Tekanan Darah"},
|
||||
{60, 118, "Urine Lengkap"},
|
||||
{50, 87, "Fungsi Hati"},
|
||||
}}
|
||||
option.Grid.ContainLabel = true
|
||||
option.XAxis.Name = "amount"
|
||||
option.YAxis.Type = "category"
|
||||
option.VisualMap.Orient = "horizontal"
|
||||
option.VisualMap.Left = "center"
|
||||
option.VisualMap.Min = 10
|
||||
option.VisualMap.Max = 100
|
||||
option.VisualMap.Show = false
|
||||
option.VisualMap.Dimension = 0
|
||||
option.VisualMap.InRange.Color = []string{"#42aaf5", "#00eaf2", "#035bff"}
|
||||
option.Series = []struct {
|
||||
Label struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
} "json:\"label\""
|
||||
Type string "json:\"type\""
|
||||
Encode struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
} "json:\"encode\""
|
||||
}{
|
||||
{Label: struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
}{Position: "right", Show: true, Formatter: "{@[3]} %"},
|
||||
Type: "bar", Encode: struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
}{X: "amount", Y: "product"}},
|
||||
}
|
||||
|
||||
return title, option, nil
|
||||
|
||||
}
|
||||
|
||||
// Kelainan MCU - MCU004
|
||||
func GetBarChartMcu005(code string, id int) (string, Barchart, error) {
|
||||
title := "Kelainan Fisik"
|
||||
option := Barchart{}
|
||||
option.Title = struct {
|
||||
Text string "json:\"text\""
|
||||
}{title}
|
||||
option.Dataset = struct {
|
||||
Source [][]interface{} "json:\"source\""
|
||||
}{[][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
{200, 400, "Obesitas Stage 1"},
|
||||
{150, 300, "Pre Hipertensi"},
|
||||
{133, 250, "Kelainan Refraksi"},
|
||||
{125, 180, "Overweight"},
|
||||
{100, 125, "Obesitas Stage 2"},
|
||||
{80, 100, "Hipertensi grade 1"},
|
||||
{70, 80, "Kel. Refrakti terkoreksi"},
|
||||
{60, 70, "Kel. Refrakti tidak terkoreksi"},
|
||||
{55, 55, "Hipertensi grade 2"},
|
||||
}}
|
||||
option.Grid.ContainLabel = true
|
||||
option.XAxis.Name = "amount"
|
||||
option.YAxis.Type = "category"
|
||||
option.VisualMap.Orient = "horizontal"
|
||||
option.VisualMap.Left = "center"
|
||||
option.VisualMap.Min = 10
|
||||
option.VisualMap.Max = 100
|
||||
option.VisualMap.Show = false
|
||||
option.VisualMap.Dimension = 0
|
||||
option.VisualMap.InRange.Color = []string{"#42aaf5", "#00eaf2", "#035bff"}
|
||||
option.Series = []struct {
|
||||
Label struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
} "json:\"label\""
|
||||
Type string "json:\"type\""
|
||||
Encode struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
} "json:\"encode\""
|
||||
}{
|
||||
{Label: struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
}{Position: "right", Show: true, Formatter: "{@[3]} %"},
|
||||
Type: "bar", Encode: struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
}{X: "amount", Y: "product"}},
|
||||
}
|
||||
|
||||
return title, option, nil
|
||||
|
||||
}
|
||||
func (su *ServicesPiechart) GetPieChart(code string, id int) (string, Piechart, error) {
|
||||
if code == "mcu001" {
|
||||
return GetPieChartMcu001(code, id)
|
||||
}
|
||||
|
||||
if code == "mcu006" {
|
||||
return GetPieChartMcu006(code, id)
|
||||
}
|
||||
|
||||
return "", Piechart{}, fmt.Errorf("code " + code + " not found")
|
||||
}
|
||||
func (su *ServicesPiechart) GetBarChart(code string, id int) (string, Barchart, error) {
|
||||
|
||||
if code == "mcu004" {
|
||||
return GetBarChartMcu004(code, id)
|
||||
}
|
||||
if code == "mcu005" {
|
||||
return GetBarChartMcu005(code, id)
|
||||
}
|
||||
|
||||
return "", Barchart{}, fmt.Errorf("code " + code + " not found")
|
||||
}
|
||||
30
views/component/chart/chart.templ
Normal file
30
views/component/chart/chart.templ
Normal file
@@ -0,0 +1,30 @@
|
||||
package chart
|
||||
|
||||
templ ShowChart(idDiv string, udata string) {
|
||||
<div id={ idDiv } class="mx-auto"></div>
|
||||
@GenerateChart(idDiv, udata)
|
||||
}
|
||||
|
||||
script GenerateChart(idDiv string, udata string) {
|
||||
htmx.onLoad(function(elt) {
|
||||
console.log("elt ",elt)
|
||||
var element = document.getElementById(idDiv);
|
||||
console.log("element ",element)
|
||||
if (element) {
|
||||
element.style.height = "400px";
|
||||
element.style.width = "100%";
|
||||
}
|
||||
|
||||
var myChart = {};
|
||||
var option = {};
|
||||
|
||||
// var myChart_001 = echarts.init(document.getElementById(idDiv));
|
||||
myChart[idDiv] = echarts.init(element);
|
||||
|
||||
// var option_001 = JSON.parse(udata);
|
||||
option[idDiv] = JSON.parse(udata);
|
||||
console.log("option ", option)
|
||||
// myChart_001.setOption(option_001);
|
||||
myChart[idDiv].setOption(option[idDiv]);
|
||||
});
|
||||
}
|
||||
82
views/component/chart/chart_templ.go
Normal file
82
views/component/chart/chart_templ.go
Normal file
@@ -0,0 +1,82 @@
|
||||
// Code generated by templ - DO NOT EDIT.
|
||||
|
||||
// templ: version: v0.2.663
|
||||
package chart
|
||||
|
||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||
|
||||
import "github.com/a-h/templ"
|
||||
import "context"
|
||||
import "io"
|
||||
import "bytes"
|
||||
|
||||
func ShowChart(idDiv string, udata string) templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var1 == nil {
|
||||
templ_7745c5c3_Var1 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div id=\"")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
var templ_7745c5c3_Var2 string
|
||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(idDiv)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\component\chart\chart.templ`, Line: 4, Col: 19}
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" class=\"mx-auto\"></div>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
templ_7745c5c3_Err = GenerateChart(idDiv, udata).Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func GenerateChart(idDiv string, udata string) templ.ComponentScript {
|
||||
return templ.ComponentScript{
|
||||
Name: `__templ_GenerateChart_4c73`,
|
||||
Function: `function __templ_GenerateChart_4c73(idDiv, udata){htmx.onLoad(function(elt) {
|
||||
console.log("elt ",elt)
|
||||
var element = document.getElementById(idDiv);
|
||||
console.log("element ",element)
|
||||
if (element) {
|
||||
element.style.height = "400px";
|
||||
element.style.width = "100%";
|
||||
}
|
||||
|
||||
var myChart = {};
|
||||
var option = {};
|
||||
|
||||
// var myChart_001 = echarts.init(document.getElementById(idDiv));
|
||||
myChart[idDiv] = echarts.init(element);
|
||||
|
||||
// var option_001 = JSON.parse(udata);
|
||||
option[idDiv] = JSON.parse(udata);
|
||||
console.log("option ", option)
|
||||
// myChart_001.setOption(option_001);
|
||||
myChart[idDiv].setOption(option[idDiv]);
|
||||
});
|
||||
}`,
|
||||
Call: templ.SafeScript(`__templ_GenerateChart_4c73`, idDiv, udata),
|
||||
CallInline: templ.SafeScriptInline(`__templ_GenerateChart_4c73`, idDiv, udata),
|
||||
}
|
||||
}
|
||||
@@ -92,6 +92,8 @@ templ PlaygroundLayout(title string, css templ.Component, js templ.Component) {
|
||||
id="kt_body"
|
||||
class="header-fixed header-mobile-fixed subheader-enabled subheader-fixed subheader-mobile-fixed aside-enabled aside-fixed aside-minimize-hoverable page-loading"
|
||||
>
|
||||
// htmx
|
||||
<script src="https://unpkg.com/htmx.org@1.9.12"></script>
|
||||
<!--begin::Main-->
|
||||
{ children... }
|
||||
<!--end::Main-->
|
||||
@@ -166,12 +168,7 @@ templ PlaygroundLayout(title string, css templ.Component, js templ.Component) {
|
||||
<script src="assets/plugins/custom/prismjs/prismjs.bundle.js"></script>
|
||||
<script src="assets/js/scripts.bundle.js"></script>
|
||||
<!--end::Global Theme Bundle-->
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/iconify/2.0.0/iconify.min.js"
|
||||
integrity="sha512-lYMiwcB608+RcqJmP93CMe7b4i9G9QK1RbixsNu4PzMRJMsqr/bUrkXUuFzCNsRUo3IXNUr5hz98lINURv5CNA=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"
|
||||
></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/iconify/2.0.0/iconify.min.js" integrity="sha512-lYMiwcB608+RcqJmP93CMe7b4i9G9QK1RbixsNu4PzMRJMsqr/bUrkXUuFzCNsRUo3IXNUr5hz98lINURv5CNA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
@js
|
||||
<!--end::Page Scripts-->
|
||||
</body>
|
||||
|
||||
@@ -45,7 +45,7 @@ func PlaygroundLayout(title string, css templ.Component, js templ.Component) tem
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</head><!--end::Head--><!--begin::Body--><body id=\"kt_body\" class=\"header-fixed header-mobile-fixed subheader-enabled subheader-fixed subheader-mobile-fixed aside-enabled aside-fixed aside-minimize-hoverable page-loading\"><!--begin::Main-->")
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</head><!--end::Head--><!--begin::Body--><body id=\"kt_body\" class=\"header-fixed header-mobile-fixed subheader-enabled subheader-fixed subheader-mobile-fixed aside-enabled aside-fixed aside-minimize-hoverable page-loading\"><script src=\"https://unpkg.com/htmx.org@1.9.12\"></script><!--begin::Main-->")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
|
||||
131
views/mcu/kelainan_global/kelainan_global.templ
Normal file
131
views/mcu/kelainan_global/kelainan_global.templ
Normal file
@@ -0,0 +1,131 @@
|
||||
package kelainanglobal
|
||||
|
||||
import (
|
||||
"github.com/emarifer/go-templ-project-structure/views/layout"
|
||||
chart "github.com/emarifer/go-templ-project-structure/views/component/chart"
|
||||
)
|
||||
|
||||
templ MainKelainanGlobal(divMcu string, dataMcu string, divFisik string, dataFisik string) {
|
||||
<div id="div-chart">
|
||||
@HeaderKelainanGlobal()
|
||||
<div class="d-flex flex-column flex-root bg-white mt-25">
|
||||
<!-- begin::Navbar -->
|
||||
<div class="d-flex justify-content-center ">
|
||||
<h3 class="mb-3 title">Data Persentase Kelainan Global</h3>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 text-center mb-10">
|
||||
@chart.ShowChart(divMcu, dataMcu)
|
||||
</div>
|
||||
<div class="col-12 text-center">
|
||||
@chart.ShowChart(divFisik, dataFisik)
|
||||
</div>
|
||||
</div>
|
||||
<!-- end::Navbar -->
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
templ CssKelainanGlobal() {
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Public Sans:300,400,500,600,700"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700"
|
||||
/>
|
||||
<style>
|
||||
body {
|
||||
background-color: white;
|
||||
/* padding-right: 100px;
|
||||
padding-left: 100px; */
|
||||
}
|
||||
#div-chart {
|
||||
/* overflow-x: scroll; */
|
||||
margin: 40px 10vw 40px 10vw;
|
||||
}
|
||||
.title {
|
||||
font-size:20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
#title {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
</style>
|
||||
}
|
||||
|
||||
templ JsKelainanGlobal() {
|
||||
// echart
|
||||
<script src="assets/js/echarts-js/echart.min.js"></script>
|
||||
}
|
||||
|
||||
templ HeaderKelainanGlobal() {
|
||||
<!-- breadcrumb & icon tanya START -->
|
||||
<div class="row">
|
||||
<div class="col-11">
|
||||
<h1 class="title text-black" style="margin-bottom: 0">
|
||||
PT. Sadhana Abiyasa Sampoerna
|
||||
</h1>
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb" style="margin-bottom: 0">
|
||||
<li class="breadcrumb-item"><a href="#">Dashboard</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="#">Employee Health Medical Analytic</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="#">PT. Sadhana Abiyasa Sampoerna</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
Mcu Karyawan
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-1 align-content-center">
|
||||
<!-- align-content-center -->
|
||||
<div class="d-flex justify-content-end">
|
||||
<a href="#">
|
||||
<i class="fas fa-info-circle text-primary"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- breadcrumb & icon tanya END -->
|
||||
<div class="mt-10">
|
||||
<ul class="nav nav-tabs nav-tabs-line">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-toggle="tab" href="#kt_tab_pane_1">Peserta</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-toggle="tab" href="#kt_tab_pane_2">Kelainan global</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-toggle="tab" href="#kt_tab_pane_3">Kelainan Lab</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-toggle="tab" href="#kt_tab_pane_4">kelainan Non Lab</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-toggle="tab" href="#kt_tab_pane_5">kelainan Fisik</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-toggle="tab" href="#kt_tab_pane_6">Kesimpulan & Saran</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" data-toggle="tab" href="#kt_tab_pane_7">Daftar Peserta</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
}
|
||||
|
||||
templ ShowKelainanGlobal(title string, cmp templ.Component, css templ.Component, js templ.Component) {
|
||||
@layout.PlaygroundLayout(title, css, js) {
|
||||
@cmp
|
||||
}
|
||||
}
|
||||
175
views/mcu/kelainan_global/kelainan_global_templ.go
Normal file
175
views/mcu/kelainan_global/kelainan_global_templ.go
Normal file
@@ -0,0 +1,175 @@
|
||||
// Code generated by templ - DO NOT EDIT.
|
||||
|
||||
// templ: version: v0.2.663
|
||||
package kelainanglobal
|
||||
|
||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||
|
||||
import "github.com/a-h/templ"
|
||||
import "context"
|
||||
import "io"
|
||||
import "bytes"
|
||||
|
||||
import (
|
||||
chart "github.com/emarifer/go-templ-project-structure/views/component/chart"
|
||||
"github.com/emarifer/go-templ-project-structure/views/layout"
|
||||
)
|
||||
|
||||
func MainKelainanGlobal(divMcu string, dataMcu string, divFisik string, dataFisik string) templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var1 == nil {
|
||||
templ_7745c5c3_Var1 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div id=\"div-chart\">")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
templ_7745c5c3_Err = HeaderKelainanGlobal().Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"d-flex flex-column flex-root bg-white mt-25\"><!-- begin::Navbar --><div class=\"d-flex justify-content-center \"><h3 class=\"mb-3 title\">Data Persentase Kelainan Global</h3></div><div class=\"row justify-content-center\"><div class=\"col-12 text-center mb-10\">")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
templ_7745c5c3_Err = chart.ShowChart(divMcu, dataMcu).Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div><div class=\"col-12 text-center\">")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
templ_7745c5c3_Err = chart.ShowChart(divFisik, dataFisik).Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div><!-- end::Navbar --></div></div>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func CssKelainanGlobal() templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var2 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var2 == nil {
|
||||
templ_7745c5c3_Var2 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700\"><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Public Sans:300,400,500,600,700\"><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700\"><style>\r\n body {\r\n background-color: white;\r\n /* padding-right: 100px;\r\n padding-left: 100px; */\r\n }\r\n #div-chart {\r\n /* overflow-x: scroll; */\r\n margin: 40px 10vw 40px 10vw;\r\n }\r\n .title {\r\n font-size:20px;\r\n font-weight: bold;\r\n }\r\n #title {\r\n font-weight: 600;\r\n }\r\n \r\n</style>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func JsKelainanGlobal() templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var3 == nil {
|
||||
templ_7745c5c3_Var3 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"assets/js/echarts-js/echart.min.js\"></script>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func HeaderKelainanGlobal() templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var4 == nil {
|
||||
templ_7745c5c3_Var4 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<!-- breadcrumb & icon tanya START --><div class=\"row\"><div class=\"col-11\"><h1 class=\"title text-black\" style=\"margin-bottom: 0\">PT. Sadhana Abiyasa Sampoerna\r</h1><nav aria-label=\"breadcrumb\"><ol class=\"breadcrumb\" style=\"margin-bottom: 0\"><li class=\"breadcrumb-item\"><a href=\"#\">Dashboard</a></li><li class=\"breadcrumb-item\"><a href=\"#\">Employee Health Medical Analytic</a></li><li class=\"breadcrumb-item\"><a href=\"#\">PT. Sadhana Abiyasa Sampoerna</a></li><li class=\"breadcrumb-item active\" aria-current=\"page\">Mcu Karyawan\r</li></ol></nav></div><div class=\"col-1 align-content-center\"><!-- align-content-center --><div class=\"d-flex justify-content-end\"><a href=\"#\"><i class=\"fas fa-info-circle text-primary\"></i></a></div></div></div><!-- breadcrumb & icon tanya END --><div class=\"mt-10\"><ul class=\"nav nav-tabs nav-tabs-line\"><li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#kt_tab_pane_1\">Peserta</a></li><li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#kt_tab_pane_2\">Kelainan global</a></li><li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#kt_tab_pane_3\">Kelainan Lab</a></li><li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#kt_tab_pane_4\">kelainan Non Lab</a></li><li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#kt_tab_pane_5\">kelainan Fisik</a></li><li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#kt_tab_pane_6\">Kesimpulan & Saran</a></li><li class=\"nav-item\"><a class=\"nav-link active\" data-toggle=\"tab\" href=\"#kt_tab_pane_7\">Daftar Peserta</a></li></ul></div>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func ShowKelainanGlobal(title string, cmp templ.Component, css templ.Component, js templ.Component) templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var5 == nil {
|
||||
templ_7745c5c3_Var5 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
templ_7745c5c3_Var6 := templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
templ_7745c5c3_Err = cmp.Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = io.Copy(templ_7745c5c3_W, templ_7745c5c3_Buffer)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
templ_7745c5c3_Err = layout.PlaygroundLayout(title, css, js).Render(templ.WithChildren(ctx, templ_7745c5c3_Var6), templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
0
views/mcu/peserta/bagian.txt
Normal file
0
views/mcu/peserta/bagian.txt
Normal file
59
views/piechart/piechart.templ
Normal file
59
views/piechart/piechart.templ
Normal file
@@ -0,0 +1,59 @@
|
||||
package piechart
|
||||
|
||||
import (
|
||||
"github.com/emarifer/go-templ-project-structure/views/layout"
|
||||
chart "github.com/emarifer/go-templ-project-structure/views/component/chart"
|
||||
)
|
||||
|
||||
templ MainPieChart(idDiv string, udata string) {
|
||||
<!-- title -->
|
||||
<div class="row justify-content-center mb-3 mt-3">
|
||||
<div class="col-lg-8 col-xxl-8 col-md-10 text-center">
|
||||
<p class="title">Data Kepesertaan MCU</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- title -->
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 col-xxl-8 col-md-10 text-center" style="margin-bottom: 40px;">
|
||||
@chart.ShowChart(idDiv, udata)
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
templ CssPieChart() {
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Public Sans:300,400,500,600,700"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700"
|
||||
/>
|
||||
<style>
|
||||
body {
|
||||
background-color: white;
|
||||
/* padding-right: 100px;
|
||||
padding-left: 100px; */
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size:20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
|
||||
templ JsPieChart() {
|
||||
// echart
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js" integrity="sha512-k37wQcV4v2h6jgYf5IUz1MoSKPpDs630XGSmCaCCOXxy2awgAWKHGZWr9nMyGgk3IOxA1NxdkN8r1JHgkUtMoQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
}
|
||||
|
||||
templ ShowPieChart(title string, cmp templ.Component, css templ.Component, js templ.Component) {
|
||||
@layout.PlaygroundLayout(title, css, js) {
|
||||
@cmp
|
||||
}
|
||||
}
|
||||
135
views/piechart/piechart_templ.go
Normal file
135
views/piechart/piechart_templ.go
Normal file
@@ -0,0 +1,135 @@
|
||||
// Code generated by templ - DO NOT EDIT.
|
||||
|
||||
// templ: version: v0.2.663
|
||||
package piechart
|
||||
|
||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||
|
||||
import "github.com/a-h/templ"
|
||||
import "context"
|
||||
import "io"
|
||||
import "bytes"
|
||||
|
||||
import (
|
||||
chart "github.com/emarifer/go-templ-project-structure/views/component/chart"
|
||||
"github.com/emarifer/go-templ-project-structure/views/layout"
|
||||
)
|
||||
|
||||
func MainPieChart(idDiv string, udata string) templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var1 == nil {
|
||||
templ_7745c5c3_Var1 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<!-- title --><div class=\"row justify-content-center mb-3 mt-3\"><div class=\"col-lg-8 col-xxl-8 col-md-10 text-center\"><p class=\"title\">Data Kepesertaan MCU</p></div></div><!-- title --><div class=\"row justify-content-center\"><div class=\"col-lg-8 col-xxl-8 col-md-10 text-center\" style=\"margin-bottom: 40px;\">")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
templ_7745c5c3_Err = chart.ShowChart(idDiv, udata).Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func CssPieChart() templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var2 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var2 == nil {
|
||||
templ_7745c5c3_Var2 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700\"><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Public Sans:300,400,500,600,700\"><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700\"><style>\r\n body {\r\n background-color: white;\r\n /* padding-right: 100px;\r\n padding-left: 100px; */\r\n }\r\n\r\n .title {\r\n font-size:20px;\r\n font-weight: bold;\r\n }\r\n </style>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func JsPieChart() templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var3 == nil {
|
||||
templ_7745c5c3_Var3 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js\" integrity=\"sha512-k37wQcV4v2h6jgYf5IUz1MoSKPpDs630XGSmCaCCOXxy2awgAWKHGZWr9nMyGgk3IOxA1NxdkN8r1JHgkUtMoQ==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"></script>")
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
|
||||
func ShowPieChart(title string, cmp templ.Component, css templ.Component, js templ.Component) templ.Component {
|
||||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
ctx = templ.InitializeContext(ctx)
|
||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
||||
if templ_7745c5c3_Var4 == nil {
|
||||
templ_7745c5c3_Var4 = templ.NopComponent
|
||||
}
|
||||
ctx = templ.ClearChildren(ctx)
|
||||
templ_7745c5c3_Var5 := templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
|
||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
templ_7745c5c3_Buffer = templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
|
||||
}
|
||||
templ_7745c5c3_Err = cmp.Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = io.Copy(templ_7745c5c3_W, templ_7745c5c3_Buffer)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
templ_7745c5c3_Err = layout.PlaygroundLayout(title, css, js).Render(templ.WithChildren(ctx, templ_7745c5c3_Var5), templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
if !templ_7745c5c3_IsBuffer {
|
||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
|
||||
}
|
||||
return templ_7745c5c3_Err
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user