264 lines
7.4 KiB
PHP
264 lines
7.4 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" >
|
|
<v-snackbar
|
|
v-model="snackbar.value"
|
|
:color="snackbar.color"
|
|
:multi-line="snackbar.mode === 'multi-line'"
|
|
:timeout="snackbar.timeout"
|
|
>
|
|
{{ snackbar.text }}
|
|
<v-btn
|
|
dark
|
|
flat
|
|
@click="snackbar.value = false"
|
|
>
|
|
Tutup
|
|
</v-btn>
|
|
</v-snackbar>
|
|
<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 xs5 class="left" fill-height pa-1>
|
|
<!--<v-btn
|
|
color="primary"
|
|
flat
|
|
@click="openDialog()"
|
|
>
|
|
buka
|
|
</v-btn>-->
|
|
<one-resultentry-so-list></one-resultentry-so-list>
|
|
</v-flex>
|
|
<v-flex xs7 class="right" fill-height pa-1>
|
|
<one-resultentry-so-form></one-resultentry-so-form>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
</v-container>
|
|
|
|
|
|
<!--<v-dialog
|
|
v-model="dialog_xsignature"
|
|
width="auto"
|
|
>
|
|
|
|
|
|
<v-card>
|
|
<v-card-title
|
|
class="headline grey lighten-2"
|
|
primary-title
|
|
>
|
|
Signature Pad
|
|
</v-card-title>
|
|
|
|
<v-card-text>
|
|
<div class="signature-pad-container">
|
|
<a class="button-text" @click="clear()" id="clear_button">CLEAR</a>
|
|
<canvas id="signature_pad"></canvas>
|
|
</div>
|
|
</v-card-text>
|
|
|
|
<v-divider></v-divider>
|
|
|
|
<v-card-actions>
|
|
<v-spacer></v-spacer>
|
|
<v-btn
|
|
color="primary"
|
|
flat
|
|
@click="save()"
|
|
>
|
|
Simpan
|
|
</v-btn>
|
|
<v-btn
|
|
color="primary"
|
|
flat
|
|
@click="dialog_xsignature = false"
|
|
>
|
|
Tutup
|
|
</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</v-dialog>-->
|
|
</v-content>
|
|
<one-footer> </one-footer>
|
|
</v-app>
|
|
</div>
|
|
<style>
|
|
|
|
canvas {
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
border: 1px #5fca83 dashed;
|
|
border-radius: 7px;
|
|
}
|
|
|
|
.signature-pad-container {
|
|
width: 50vw;
|
|
height: 35vh;
|
|
max-height: 30em;
|
|
min-width: 40em;
|
|
min-height: 25em;
|
|
padding: 2em;
|
|
|
|
position: relative;
|
|
|
|
background-color: white;
|
|
box-shadow: 0 0 20px 1px #ddd;
|
|
|
|
text-align: right;
|
|
}
|
|
#clear_button {
|
|
z-index: 10;
|
|
position: absolute;
|
|
right: 2em;
|
|
padding: 1.5em 2em;
|
|
|
|
color: #21cfa6;
|
|
font-weight: 600;
|
|
font-size: 14pt;
|
|
cursor: pointer;
|
|
}
|
|
|
|
</style>
|
|
<!-- 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="https://cdnjs.cloudflare.com/ajax/libs/signature_pad/1.5.3/signature_pad.min.js"></script>-->
|
|
<script src="https://cdn.jsdelivr.net/npm/signature_pad@2.3.2/dist/signature_pad.min.js" integrity="sha256-W+ivNvVjmQX6FTlF0S+SCDMjAuTVNKzH16+kQvRWcTg=" crossorigin="anonymous"></script>
|
|
<script src="https://unpkg.com/merge-images"></script>
|
|
|
|
<script src="../../../libs/one_global.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`
|
|
}
|
|
|
|
|
|
import { store } from './store.js<?php echo $ts ?>';
|
|
|
|
|
|
//for testing
|
|
window.store = store;
|
|
new Vue({
|
|
store,
|
|
el: '#app',
|
|
mounted() {
|
|
//this.draw()
|
|
},
|
|
data: () => ({
|
|
dialog:false
|
|
}),
|
|
computed: {
|
|
snackbar:{
|
|
get() {
|
|
return this.$store.state.sample.snackbar
|
|
},
|
|
set(val) {
|
|
this.$store.commit("sample/update_snackbar",val)
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
/*clear(){
|
|
var _this = this;
|
|
_this.sig.clear();
|
|
},
|
|
save(format){
|
|
var _this = this;
|
|
//return format ? _this.sig.toDataURL(format) : _this.sig.toDataURL()
|
|
console.log(_this.sig.toDataURL()) // save image as PNG
|
|
// signaturePad.toDataURL("image/jpeg"); // save image as JPEG
|
|
// signaturePad.toDataURL("image/svg+xml"); // save image as SVG
|
|
},
|
|
openDialog(){
|
|
this.dialog_xsignature=true
|
|
this.$nextTick(() => {
|
|
this.draw()
|
|
});
|
|
},
|
|
draw(){
|
|
var _this = this;
|
|
var canvas = document.getElementById("signature_pad")
|
|
//var canvas = document.querySelector("#signature_pad");
|
|
_this.sig = new SignaturePad(canvas, {
|
|
minWidth: 2,
|
|
maxWidth: 4,
|
|
});
|
|
|
|
function resizeCanvas() {
|
|
var ratio = Math.max(window.devicePixelRatio || 1, 1);
|
|
canvas.width = canvas.offsetWidth * ratio;
|
|
canvas.height = canvas.offsetHeight * ratio;
|
|
canvas.getContext("2d").scale(ratio, ratio);
|
|
let storedData = _this.sig.toData();
|
|
_this.sig.clear(); // otherwise isEmpty() might return incorrect value
|
|
_this.sig.fromData(storedData);
|
|
}
|
|
|
|
window.addEventListener("resize", resizeCanvas);
|
|
resizeCanvas();
|
|
},*/
|
|
tab_selected : function(tab) {
|
|
return this.$store.state.tab_selected == tab
|
|
}
|
|
},
|
|
components: {
|
|
'one-navbar': httpVueLoader('../../../apps/components/oneNavbarComponent.vue'),
|
|
'one-footer': httpVueLoader('../../../apps/components/oneFooter.vue'),
|
|
'one-resultentry-so-list': httpVueLoader('./components/oneResultEntrySoList.vue'),
|
|
'one-resultentry-so-form': httpVueLoader('./components/oneResultEntrySoForm.vue')
|
|
}
|
|
})
|
|
</script>
|
|
<style>
|
|
[v-cloak] {
|
|
display: none
|
|
}
|
|
.left {
|
|
}
|
|
.right {
|
|
}
|
|
</style>
|
|
</body>
|
|
|
|
</html>
|