Files
FE_CPONE/fo/one-dashboard-que/index.php
2026-04-27 10:08:27 +07:00

179 lines
6.1 KiB
PHP

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>One</title>
<link rel="stylesheet" href="../../libs/vendor/css/google-fonts.css">
<link rel="stylesheet" href="../../libs/vendor/css/icomoon-fonts.css">
<link rel="stylesheet" href="../../libs/vendor/css/vuetify.min.css">
</head>
<body>
<div v-cloak id="app">
<v-app id="smartApp" >
<one-navbar></one-navbar>
<v-content style="background:#F5E8DF!important" >
<v-container fluid fill-height class="pl-1 pr-1 pt-2 pb-2">
<v-layout row wrap >
<v-flex xs12 class="one" fill-height pa-1>
<v-container>
<v-layout row wrap>
<v-flex xs12 md6 style="text-align:center">
Antrian Saat Ini {{totalAntrian}}
<one-now :chart-data="chartQueueNow" :options="chartOption" ></one-now>
</v-flex>
<v-flex xs12 md6>
<one-antrian :chart-data="chartAntrian"></one-antrian>
</v-flex>
<v-flex xs12 md6>
<one-line :chart-data="chartLine"></one-line>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
</v-container>
</v-content>
<one-footer> </one-footer>
</v-app>
</div>
<!-- Vendor -->
<script src="../../libs/vendor/moment.min.js"></script>
<script src="../../libs/vendor/numeral.min.js"></script>
<script src="../../libs/vendor/moment-locale-id.js"></script>
<script src="../../libs/vendor/lodash.js"></script>
<script src="../../libs/vendor/axios.min.js"></script>
<script src="../../libs/vendor/vue.js"></script>
<script src="../../libs/vendor/vuex.js"></script>
<script src="../../libs/vendor/vuetify.js"></script>
<script src="../../libs/vendor/Chart.min.js"></script>
<script src="../../libs/vendor/vue-chartjs.min.js"></script>
<script src="../../libs/vendor/httpVueLoader.js"></script>
<script src="../../libs/one_global.js"></script>
<script src="../../libs/vendor/socket.io.js"></script>
<!-- App Script -->
<?php
$ts = "?ts=" . Date("ymdhis");
?>
<script type="module">
import { store } from './store.js<?php echo $ts ?>';
import LineChart from './components/Antrian.js';
import SaatIni from './components/SaatIni.js';
import Line from './components/Line.js';
//for testing
var socketIoUrl = "http://" + window.location.host + ":9090/";
new Vue({
store,
el: '#app',
methods: {
},
data : {
tsInterval:0,
socket : io.connect(socketIoUrl,{forceNew:false})
},
components: {
'one-navbar': httpVueLoader('../../apps/components/oneNavbarComponent.vue'),
'one-footer': httpVueLoader('../../apps/components/oneFooter.vue'),
'one-antrian': LineChart,
'one-line': Line,
'one-now': SaatIni
},
computed: {
totalAntrian() {
let c_data = this.$store.state.queue.queue_now
return c_data[0] + c_data[1]
},
chartAntrian() {
let data = this.$store.state.queue.status
let c_data = {
labels: [ ],
datasets: [
]
}
if (data.length > 0 ) {
c_data = {
labels: [ data[0].Hour , data[1].Hour, data[2].Hour ],
datasets: [
{
label: 'Total',
data: [ data[0].Total , data[1].Total, data[2].Total ],
fill: false,
borderColor: "rgb(51, 153, 51)",
backgroundColor: "rgb(51, 153, 51)"
},
{
label: '< 5 menit',
data: [ data[0].Done , data[1].Done, data[2].Done ],
fill: false,
borderColor: "rgba(0, 153, 255,0.4)",
backgroundColor: "rgba(0, 153, 255,0.6)"
},
{
label: '> 5 menit',
data: [ data[0].More5Min , data[1].More5Min, data[2].More5Min ],
fill: false,
borderColor: "rgb(204, 0, 153)",
backgroundColor: "rgb(204, 0, 153)"
}
]
}
}
return c_data
},
chartQueueNow() {
let c_data = this.$store.state.queue.queue_now
let data = {
labels: ['< 5 menit', '> 5 menit'],
datasets: [{
data: c_data,
borderColor: ["rgb(51, 204, 51)","rgb(255, 51, 0)"],
backgroundColor: ["rgb(51, 204, 51)","rgb(255, 51, 0)"],
}]
}
return data
},
chartOption() {
return {
responsive: true,
maintainAspectRatio: false,
tooltips: {
mode:'index',
},
cutoutPercentage: 50,
title : {
display: false,
text: 'Antrian Saat Ini'
}
}
}
},
mounted(){
let self =this
this.socket.on("notification", function(msg) {
switch(msg.type) {
case "reload-fo" :
self.$store.dispatch("queue/update")
break;
}
});
this.$store.dispatch("queue/update")
},
beforeDestroy() {
if (this.tsInterval > 0 ) clearTimeout(this.tsInterval)
}
})
</script>
<style>
[v-cloak] {
display: none
}
</style>
</body>
</html>