Files
FE_CPONE/test/vuex/cpone-queue-ticket/index.php
2026-04-27 10:13:31 +07:00

292 lines
11 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>CPOne</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: #2196F3 !important"> -->
<!-- background: linear-gradient(180deg, rgba(33,150,243,1) 0%, rgba(255,255,255,1) 50%, rgba(33,150,243,1) 100%); -->
<v-content style="background: rgb(33,150,243);">
<v-container fluid fill-height class="pl-1 pr-1 pt-2 pb-2">
<v-layout row wrap>
<v-flex xs12 class="right" fill-height>
<!-- <one-price-list></one-price-list> -->
<one-main></one-main>
</v-flex>
<!-- <v-flex xs6 class="right" fill-height pa-1> -->
<!-- komponen kanan -->
<!-- <one-fo-cashier-payment></one-fo-cashier-payment>-->
<!-- </v-flex> -->
<!-- <div id="start"></div> -->
<div id="start" @click="getar()"></div>
</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/httpVueLoader.js"></script>
<script src="../../../libs/one_global.js"></script>
<script src="../../../libs/vendor/socket.io.js"></script>
<!-- <script src="../../../libs/one_print_barcode.js"></script>
<script src="../../../libs/one_print_robo.js"></script> -->
<!-- App Script -->
<?php
$ts = "?ts=" . Date("ymdhis");
?>
<script type="module">
window.calculate_age = function(inp_dob) {
var now = moment(new Date())
var dob = moment(new Date(inp_dob))
var year = now.diff(dob, 'years')
dob.add(year, 'years')
var month = now.diff(dob, 'months')
dob.add(month, 'months')
var day = now.diff(dob, 'days')
if (isNaN(year)) return ''
return `${year} tahun ${month} bulan ${day} hari`
}
window.play_audio = function(prm) {
var url = "/audio/?prm=";
url = url + prm;
var audio = new Audio(url);
audio.addEventListener('canplay', function() {
if (document.readyState === 'complete') {
audio.play().catch(function(error) {
console.error("Error playing audio:", error);
});
} else {
window.addEventListener('click', function() {
audio.play().catch(function(error) {
console.error("Error playing audio:", error);
});
}, {
once: true
});
}
});
}
window.pisahkanAngka = function(angka) {
let hasil = [];
if (angka >= 100) {
let seratusan = Math.floor(angka / 100) * 100;
hasil.push(seratusan);
angka -= seratusan;
}
if (angka >= 20) {
let puluhan = Math.floor(angka / 10) * 10;
hasil.push(puluhan);
angka -= puluhan;
}
// Add the remaining units if any, or treat as a two-digit number if less than 10
if (angka > 0) {
hasil.push(angka);
}
return hasil.join(',');
}
window.processSound = function(queueNumber, stationCode) {
// Memisahkan huruf dan angka
let huruf = queueNumber.match(/[A-Z]/)[0]; // Mengambil huruf
let angka = parseInt(queueNumber.match(/\d+/)[0]); // Mengambil angka dan konversi ke integer
let splitQueueNumber = window.pisahkanAngka(angka);
let str = "antrian," + huruf + "," + splitQueueNumber + "," + stationCode;
console.log("Huruf:", huruf);
console.log("Angka:", angka);
console.log("Hasil split:", splitQueueNumber);
console.log("prm:", str);
window.play_audio(str);
}
import {
store
} from './store.js<?php echo $ts ?>';
//for testing
window.store = store;
let g_timeout = 0;
var socketIoUrl = "https://" + window.location.host + ":9099/";
// var socketIoUrl = "wss://" + window.location.host + ":9099/";
new Vue({
store,
el: '#app',
data: {
socket: io.connect(socketIoUrl, {
forceNew: false,
// transports: ['polling', 'flashsocket']
transports: ['websocket']
}).on('connect', function() {
console.log('connection established');
})
},
mounted() {
this.socket.on("notification", function(msg) {
console.log("iosocket message", msg.type);
let type = msg.type;
let data = type.split('.')
let dataTicket = window.store.state.queue.dataTicket;
// call.fo .1.A0005.A1 .1 .1
// skip.fo .1 .1 .1
if (data[1] === 'fo') {
if (data[0] === 'call' &&
data[2] === dataTicket['serviceID'] &&
data[3] === dataTicket['queueNumber'] &&
data[6] === dataTicket['M_BranchID']) {
store.dispatch("queue/getTicket", dataTicket['queueCode']);
navigator.vibrate(1000)
document.getElementById("start").click();
// document.getElementById("start").addEventListener("click", function() {
// console.log('getar');
// });
} else if (data[0] === 'skip' &&
data[2] === dataTicket['serviceID'] &&
data[4] === dataTicket['M_BranchID']) {
store.dispatch("queue/getTicket", dataTicket['queueCode']);
} else if (data[0] === 'serve' &&
data[2] === dataTicket['serviceID'] &&
data[4] === dataTicket['M_BranchID']) {
store.dispatch("queue/getTicket", dataTicket['queueCode']);
} else if (data[0] === 'done' &&
data[2] === dataTicket['serviceID'] &&
data[4] === dataTicket['M_BranchID']) {
store.dispatch("queue/getTicket", dataTicket['queueCode']);
}
}
let statusStation = window.store.state.queue.statusStation;
if (data[0] === 'sm') {
// 'sm.call.1.201.1.B0001'
statusStation.forEach(element => {
if (element.T_SampleStationID === data[2]) {
if (
dataTicket['M_BranchID'] == data[4] &&
element.T_OrderHeaderMgm_McuID === data[3]) {
if (data[5] === element.queueNumber && data[1] === 'call') {
store.dispatch("queue/getTicket", dataTicket['queueCode']);
navigator.vibrate(1000)
// Auto click button start
document.getElementById("start").click();
console.log('Masuk Call');
} else {
console.log('Masuk refresh');
store.dispatch("queue/getTicket", dataTicket['queueCode']);
}
}
}
});
}
});
},
methods: {
getar() {
navigator.vibrate(1000);
// document.addEventListener('click', function() {
// console.log("Getar");
// }, {
// once: true
// });
// window.addEventListener('load', function() {
// console.log("Getar");
// navigator.vibrate(1000);
// });
// }
},
tab_selected: function(tab) {
return this.$store.state.tab_selected == tab
},
selectedStation: function(tab) {
return window.store.state.queue.selectedStation
},
play_audio(prm) {
var url = "/audio/?prm=";
url = url + prm;
var audio = new Audio(url);
audio.addEventListener('canplay', function() {
audio.play();
});
},
processSound(queueNumber) {
// http: //devcpone.aplikasi.web.id/audio/?prm=antrian,D,1,counter,A,1
let splitQueueNumber = this.pisahkanAngka(queueNumber);
let str = "antrian," + splitQueueNumber
console.log("Hasil split", splitQueueNumber);
console.log("prm:", str);
this.play_audio(str);
},
pisahkanAngka(angka) {
let hasil = [];
if (angka >= 100) {
let seratusan = Math.floor(angka / 100) * 100;
hasil.push(seratusan);
angka -= seratusan;
}
if (angka >= 20) {
let puluhan = Math.floor(angka / 10) * 10;
hasil.push(puluhan);
angka -= puluhan;
}
// Add the remaining units if any, or treat as a two-digit number if less than 10
if (angka > 0) {
hasil.push(angka);
}
return hasil.join(',');
}
},
components: {
'one-navbar': httpVueLoader('../../../apps/components/oneNavbarComponent.vue'),
'one-footer': httpVueLoader('../../../apps/components/oneFooter.vue'),
'one-patient-list': httpVueLoader('./components/onePatientList.vue'),
'one-main': httpVueLoader('./components/main.vue'),
}
})
</script>
<style>
[v-cloak] {
display: none
}
.left {}
.right {}
</style>
</body>
</html>