2125 lines
103 KiB
PHP
2125 lines
103 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:#F5E8DF!important">
|
|
<v-container fluid>
|
|
<template>
|
|
<div id="e3" style="max-width: 620px; margin:auto">
|
|
<v-dialog v-model="dialogError" width="500">
|
|
<v-card>
|
|
<v-card-title class="headline red darken-4 text-white" primary-title>
|
|
ERROR !
|
|
</v-card-title>
|
|
|
|
<v-card-text>
|
|
{{ errorMsg }}
|
|
</v-card-text>
|
|
|
|
<v-divider></v-divider>
|
|
|
|
<v-card-actions>
|
|
<v-spacer></v-spacer>
|
|
<v-btn color="primary" flat @click="dialogError = false">
|
|
Tutup
|
|
</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</v-dialog>
|
|
<v-toolbar class="primary" dark>
|
|
<v-btn icon>
|
|
<v-icon>colorize</v-icon>
|
|
</v-btn>
|
|
<v-toolbar-title>Sampling</v-toolbar-title>
|
|
<v-spacer></v-spacer>
|
|
<!--<v-btn @click="logout()" icon>
|
|
<v-icon color="black">remove_circle</v-icon>
|
|
</v-btn>-->
|
|
</v-toolbar>
|
|
|
|
<v-card>
|
|
<v-card-text>
|
|
<v-container fluid grid-list-lg>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-select v-if="_.isEmpty(data_patient)" class="mini-select ml-1" :items="stations" item-text="name" return-object style="font-size: 14px" v-model="selected_station" label="Station" outline hide-details></v-select>
|
|
<v-text-field v-else v-model="selected_station.name" label="Station" disabled></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-select v-if="_.isEmpty(data_patient)" class="mini-select ml-1" :items="locations" item-text="locationName" return-object style="font-size: 14px" v-model="selected_location" label="Lokasi" outline hide-details></v-select>
|
|
<v-text-field v-else v-model="selected_location.locationName" label="Lokasi" disabled></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-divider></v-divider>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="_.isEmpty(data_patient)" row wrap>
|
|
<v-flex xs12>
|
|
<v-card color="primary" class="white--text">
|
|
<v-card-text>
|
|
<v-img :src="imageSrc"></v-img>
|
|
</v-card-text>
|
|
<v-card-actions>
|
|
<v-btn block @click="openscanner()">
|
|
Scan QR (Check In)
|
|
</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="!_.isEmpty(data_patient) && !status_done" row>
|
|
<v-flex xs12>
|
|
<v-card color="primary" class="white--text">
|
|
<v-layout row>
|
|
<v-flex xs7>
|
|
<v-card-title primary-title>
|
|
<div>
|
|
<div class="headline mb-1">{{data_patient.labnumber}}</div>
|
|
<p class="mb-0">{{data_patient.patient_name}} <span v-if="data_patient.nip">/ {{data_patient.nip}}</span></p>
|
|
<!--<div class="caption">{{data_patient.order_date}}</div>-->
|
|
<p class="mb-0 caption font-weight-bold">{{data_patient.corporate_name}}</p>
|
|
</div>
|
|
</v-card-title>
|
|
</v-flex>
|
|
<v-flex class="align-self-end" xs5>
|
|
<v-img class="mt-2 mr-2 text-xs-right" position="center right" :src="data_patient.photo" height="115px" contain></v-img>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-divider light></v-divider>
|
|
<v-card-actions class="pa-3">
|
|
|
|
{{data_patient.gender}}
|
|
<v-spacer></v-spacer>
|
|
|
|
{{data_patient.dob}}
|
|
</v-card-actions>
|
|
</v-card>
|
|
<v-subheader class="mt-4" v-if="data_requirement.length > 0">Requirement</v-subheader>
|
|
<v-layout v-if="data_requirement.length > 0" class="px-3" row wrap>
|
|
<div v-for="(req ,idx) in data_requirement">
|
|
<kbd class="ml-1 mr-1">{{ req.reqName }}</kbd>
|
|
</div>
|
|
</v-layout>
|
|
<v-list v-if="data_patient" class="mt-4" subheader>
|
|
<v-subheader>Pemeriksaan</v-subheader>
|
|
|
|
<v-list-group v-if="data_packet.length > 0" v-for="(item,k_item) in data_packet" :key="k_item" v-model="item.active" :prepend-icon="item.action" no-action>
|
|
<template v-slot:activator>
|
|
<v-list-tile>
|
|
<v-list-tile-content>
|
|
<v-list-tile-title>{{ item.packet_name }}</v-list-tile-title>
|
|
</v-list-tile-content>
|
|
</v-list-tile>
|
|
</template>
|
|
|
|
<v-list-tile v-for="subItem in item.details" :key="subItem.test_name" @click="">
|
|
<v-list-tile-content>
|
|
<v-list-tile-title>{{ subItem.test_name }}</v-list-tile-title>
|
|
</v-list-tile-content>
|
|
|
|
<v-list-tile-action>
|
|
<v-icon>{{ subItem.action }}</v-icon>
|
|
</v-list-tile-action>
|
|
</v-list-tile>
|
|
</v-list-group>
|
|
|
|
<v-card v-if="data_tests.length > 0" flat>
|
|
|
|
<v-form>
|
|
<v-text-field v-for="(test,k_test) in data_tests" :key="k_test" label="" prepend-inner-icon="label_important" :value="test.test_name" single-line full-width hide-details></v-text-field>
|
|
<!--<v-divider v-if="k_test <= data.tests.length - 1"></v-divider>-->
|
|
<!--<v-text-field
|
|
prepend-inner-icon="label_important"
|
|
label="Subject"
|
|
value="Nebeng boy"
|
|
single-line
|
|
full-width
|
|
hide-details
|
|
></v-text-field>-->
|
|
|
|
</v-form>
|
|
</v-card>
|
|
|
|
|
|
</v-list>
|
|
|
|
|
|
<v-subheader>Pengambilan Sample / Pemeriksaan Fisik</v-subheader>
|
|
<!-- <v-subheader v-if="data_sample_lab.length > 0" inset>Laboratorium</v-subheader>-->
|
|
|
|
<v-list-tile class="mb-4" v-if="data_sample_lab.length > 0" v-for="sample in data_sample_lab" :key="sample.barcode" avatar @click="goToResult(sample)">
|
|
<v-list-tile-avatar>
|
|
<v-icon v-if="selected_station.isnonlab === ''" class="blue white--text">colorize</v-icon>
|
|
<v-icon v-if="selected_station.isnonlab === 'RADIODIAGNOSTIC'" class="amber white--text">assignment_ind</v-icon>
|
|
<v-icon v-if="selected_station.isnonlab === 'ELEKTROMEDIS'" class="teal white--text">contacts</v-icon>
|
|
<v-icon v-if="selected_station.isnonlab === 'OTHERS'" class="orange darken-2 white--text">accessibility</v-icon>
|
|
</v-list-tile-avatar>
|
|
|
|
<v-list-tile-content>
|
|
<v-list-tile-title>{{ sample.sampletype_name }}</v-list-tile-title>
|
|
<v-list-tile-sub-title>{{ sample.receive_date }} {{ sample.receive_time }}</v-list-tile-sub-title>
|
|
</v-list-tile-content>
|
|
|
|
<v-list-tile-action>
|
|
<v-btn icon ripple>
|
|
<v-icon v-if="sample.is_sampling == 'N' || sample.is_received == 'N'" color="grey lighten-1">info</v-icon>
|
|
<v-icon v-if="sample.is_sampling == 'Y' && sample.is_received == 'Y'" color="success lighten-1">check_circle</v-icon>
|
|
</v-btn>
|
|
</v-list-tile-action>
|
|
</v-list-tile>
|
|
<v-card v-if="parseInt(selected_station.id) === 17" class="mt-4 mb-4">
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">Form Tinggi dan Berat Badan</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-text-field hide-details v-model="value_tb" label="Tinggi Badan" type="number" suffix="cm"></v-text-field>
|
|
<small class="red--text" v-if="value_tb == '' || value_tb == null || value_tb == 0">Jangan lupa diisi</small>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field hide-details v-model="value_bb" label="Berat Badan" type="number" suffix="kg"></v-text-field>
|
|
<small class="red--text" v-if="value_bb == '' || value_bb == null || value_bb == 0">Jangan lupa diisi</small>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
</v-card>
|
|
|
|
|
|
<v-layout v-if="parseInt(selected_station.id) === 17" class="mt-4 mb-4" row>
|
|
<v-flex xs12 pa-2>
|
|
<v-btn color="primary"
|
|
:disabled="loading_save_bbtb || value_tb == '' || value_tb == null || value_tb == 0 || value_bb == '' || value_bb == null || value_bb == 0"
|
|
:loading="loading_save_bbtb"
|
|
block
|
|
@click="saveBBTB()">
|
|
Simpan BB/TB
|
|
<template v-slot:loader>
|
|
<span>Saving...</span>
|
|
</template>
|
|
</v-btn>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<v-layout v-if="parseInt(selected_station.id) === 35" class="mt-2" row>
|
|
<v-flex xs12>
|
|
<v-text-field v-model="value_bf" label="Body Fat" hide-details></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<div class="mt-3" v-if="glucoses.length > 0">
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-card>
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">Hasil Gula Darah</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
<v-layout class="mt-1" row>
|
|
<v-flex xs12 v-for="gluc in glucoses">
|
|
<v-text-field v-model="gluc.result" :label="gluc.test_name" hide-details></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-btn :disabled="loading_save_glucoses" :loading="loading_save_glucoses" color="primary" block @click="saveGlucoses()">Simpan Gula Darah</v-btn>
|
|
</v-flex>
|
|
</v-layout>
|
|
</div>
|
|
|
|
<v-card v-if="parseInt(selected_station.id) === 1" class="mt-4 mb-4">
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">Form Catatan Phlebotomy</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
<v-radio-group v-model="puasa_tp">
|
|
<v-radio label="Puasa" hide-details value="P"></v-radio>
|
|
<v-radio label="Tidak Puasa" hide-details value="T"></v-radio>
|
|
</v-radio-group>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-checkbox v-model="sample_kurang" hide-details label="Sample Kurang"></v-checkbox>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-checkbox v-model="lipemik" hide-details label="Lipemik"></v-checkbox>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<v-text-field v-model="note_phlebotomy" hide-details label="Catatan"></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
</v-card>
|
|
|
|
<v-layout v-if="parseInt(selected_station.id) === 1" class="mt-4 mb-4" row>
|
|
<v-flex xs12 pa-2>
|
|
<v-btn color="primary"
|
|
:disabled="loading_save_phlebotomy || !(note_phlebotomy !== '' || sample_kurang || lipemik || puasa_tp)"
|
|
:loading="loading_save_phlebotomy"
|
|
block
|
|
@click="savePhlebotomy()">
|
|
Simpan Phlebotomy
|
|
<template v-slot:loader>
|
|
<span>Saving...</span>
|
|
</template>
|
|
</v-btn>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<v-card v-if="parseInt(selected_station.id) === 17 ||parseInt(selected_station.id) === 11 || parseInt(selected_station.id) === 35">
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">BB/TB</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
<v-layout row>
|
|
<v-flex xs12 v-if="data_patient.isTBBB === 'Y'">
|
|
<p>Umur Pasien {{ data_patient.patient_age }}</p>
|
|
<p>Tinggi badan {{ data_patient.patientTB }} cm</p>
|
|
<p>Berat badan {{ data_patient.patientBB }} kg</p>
|
|
</v-flex>
|
|
<v-flex xs12 v-if="data_patient.isTBBB === 'N'">
|
|
<p>Umur Pasien {{ data_patient.patient_age }}</p>
|
|
<p v-if="parseInt(data_patient.bbtbid) == 0 || ( parseFloat(value_tb) == 0 && parseFloat(value_bb) == 0)">Belum melakukan pengukuran tinggi dan berat badan</p>
|
|
<p class="red--text" v-if="parseInt(data_patient.bbtbid) == 0 || parseFloat(value_tb) != parseFloat(data_patient.patientTB) || parseFloat(value_bb) != parseFloat(data_patient.patientBB)">Jangan lupa klik tombol simpan BB/TB</p>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
</v-card>
|
|
|
|
<!--<v-card v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 11" class="mt-4 mb-4">
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">Form Kuesioner Spirometri</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
|
|
<div v-for="group in getSpirometriGrouped()" :key="group.group_number" class="mt-4">
|
|
<p class="font-weight-bold mb-2">{{ group.group_name }}</p>
|
|
|
|
<div v-for="(item, idx) in group.items" :key="item.id" class="mb-4">
|
|
<v-layout
|
|
v-if="isSpirometriRightSideChecklist(group, idx, item)"
|
|
row
|
|
wrap
|
|
align-center
|
|
>
|
|
<v-flex xs10>
|
|
<p class="mb-0">{{ idx + 1 }}. {{ item.question }}</p>
|
|
</v-flex>
|
|
<v-flex xs2 class="text-xs-right">
|
|
<v-checkbox
|
|
:input-value="isSpirometriOptionChecked(item, item.options[0])"
|
|
hide-details
|
|
class="mt-0 pt-0"
|
|
@change="onChangeSpirometriOption(item, item.options[0], $event)">
|
|
</v-checkbox>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<div v-else>
|
|
<p class="mb-2">{{ idx + 1 }}. {{ item.question }}</p>
|
|
|
|
<v-radio-group
|
|
v-if="item.type === 'choice'"
|
|
:value="item.answer.value_choice"
|
|
row
|
|
@change="onChangeSpirometriChoice(item, $event)">
|
|
<v-radio label="Ya" value="Y"></v-radio>
|
|
<v-radio label="Tidak" value="T"></v-radio>
|
|
</v-radio-group>
|
|
|
|
<div v-if="item.type === 'option' && isSpirometriSingleChecklist(group, idx, item)">
|
|
<v-checkbox
|
|
v-for="opt in item.options"
|
|
:key="item.id + '_' + opt.order"
|
|
:label="opt.label"
|
|
:input-value="isSpirometriOptionChecked(item, opt)"
|
|
hide-details
|
|
class="mt-0 pt-0"
|
|
@change="onChangeSpirometriSingleOption(item, opt, $event)">
|
|
</v-checkbox>
|
|
</div>
|
|
|
|
<div v-if="item.type === 'option' && !isSpirometriSingleChecklist(group, idx, item)">
|
|
<v-checkbox
|
|
v-for="opt in item.options"
|
|
:key="item.id + '_' + opt.order"
|
|
:label="opt.label"
|
|
:input-value="isSpirometriOptionChecked(item, opt)"
|
|
hide-details
|
|
class="mt-0 pt-0"
|
|
@change="onChangeSpirometriOption(item, opt, $event)">
|
|
</v-checkbox>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</v-card-text>
|
|
</v-card>
|
|
|
|
<v-layout v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 11" class="mt-4 mb-4" row>
|
|
<v-flex xs12 pa-2>
|
|
<v-btn
|
|
color="primary"
|
|
:disabled="loading_save_spirometri"
|
|
:loading="loading_save_spirometri"
|
|
block
|
|
@click="saveSpirometri()">
|
|
Simpan Kuesioner Spirometri
|
|
<template v-slot:loader>
|
|
<span>Saving...</span>
|
|
</template>
|
|
</v-btn>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
-->
|
|
|
|
<!--json template form quesioner spirometri
|
|
[
|
|
{
|
|
"group_id":"RKES",
|
|
"group_name":"Riwayat Kesehatan",
|
|
"childs":[
|
|
{
|
|
"id":"RKES_01",
|
|
"label":"Saat pemeriksaan, dalam keadaan flu / pilek",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RKES_02",
|
|
"label":"Riwayat batuk > 2 minggu dalam 12 bulan terakhir",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RKES_03",
|
|
"label":"Riwayat Asma / sesak napas",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RKES_04",
|
|
"label":"Saat pemeriksaan, dalam pengobatan penyakit paru-paru",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RKES_05",
|
|
"label":"Riwayat aktivitas terganggu karena merasa sesak napas / napas berbunyi",
|
|
"value":"N"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"group_id":"RPEK",
|
|
"group_name":"Riwayat Pekerjaan",
|
|
"childs":[
|
|
{
|
|
"id":"RPEK_01",
|
|
"label":"Saat Bekerja terpapar / terpajan",
|
|
"childs":[
|
|
{
|
|
"id":"RPEK_01_A",
|
|
"label":"Bahan Kimia",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_01_B",
|
|
"label":"Debu",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_01_C",
|
|
"label":"Asap",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_01_D",
|
|
"label":"Uap",
|
|
"value":"N"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id":"RPEK_02",
|
|
"label":"Sudah berapa lama terpapar / terpajan?",
|
|
"childs":[
|
|
{
|
|
"id":"RPEK_02_A",
|
|
"label":"< 1 tahun",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_02_B",
|
|
"label":"1 - 3 tahun",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_02_C",
|
|
"label":"3 - 5 tahun",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_02_D",
|
|
"label":"5 - 7 tahun",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_02_E",
|
|
"label":"> 7 tahun",
|
|
"value":"N"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id":"RPEK_03",
|
|
"label":"Apakah saat bekerja menggunakan alat pelindung pernapasan (masker)?",
|
|
"childs":[
|
|
{
|
|
"id":"RPEK_03_A",
|
|
"label":"Ya",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_01_B",
|
|
"label":"Tidak",
|
|
"value":"N"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id":"RPEK_04",
|
|
"label":"Apakah alat pelindung pernapasan dipakai?",
|
|
"childs":[
|
|
{
|
|
"id":"RPEK_04_A",
|
|
"label":"Selalu dipakai",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_04_B",
|
|
"label":"Kadang-kadang",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_04_C",
|
|
"label":"Tidak pernah dipakai",
|
|
"value":"N"
|
|
},
|
|
{
|
|
"id":"RPEK_04_D",
|
|
"label":"Tidak ada alat pelindung",
|
|
"value":"N"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
-->
|
|
<v-layout class="mt-4 mb-4" v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 11" row>
|
|
<v-flex xs12 >
|
|
<v-card>
|
|
<v-toolbar color="indigo" dark>
|
|
|
|
|
|
<v-toolbar-title>Kuesioner Spirometri</v-toolbar-title>
|
|
</v-toolbar>
|
|
|
|
|
|
<v-card-text>
|
|
<v-layout v-for="item in spirometri_template" :key="item.id" row>
|
|
<v-flex xs12>
|
|
<v-subheader>{{ item.group_name }}</v-subheader>
|
|
<v-layout v-if="item.group_id === 'RKES' && item.childs.length > 0" v-for="child in item.childs" :key="child.id" row>
|
|
<v-flex sm1 xs2>
|
|
<v-checkbox class="mt-0" v-model="child.value" hide-details></v-checkbox>
|
|
</v-flex>
|
|
<v-flex xs10 sm11>
|
|
<p class="pt-1 mb-0">{{ child.label }}</p>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="item.group_id === 'RPEK' && item.childs.length > 0" v-for="child in item.childs" :key="child.id" row>
|
|
<v-flex xs12 class="pt-2" >
|
|
<p>{{ child.label }}</p>
|
|
<v-layout v-if="child.childs.length > 0" v-for="x_child in child.childs" :key="x_child.id" row>
|
|
<v-flex xs2 sm1>
|
|
<v-checkbox class="mt-0" v-model="x_child.value"
|
|
@change="onChangeSpirometriTemplateOption(child.id, x_child.id, x_child.value, $event)"
|
|
hide-details></v-checkbox>
|
|
</v-flex>
|
|
<v-flex xs10 sm11>
|
|
<p class="pt-1 mb-0">{{ x_child.label }}</p>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-divider></v-divider>
|
|
</v-card-text>
|
|
<v-card-actions>
|
|
|
|
<v-btn
|
|
:loading="loading_save_quesioner_spirometri"
|
|
:disabled="loading_save_quesioner_spirometri"
|
|
color="indigo"
|
|
@click="saveQuestionerSpirometri()"
|
|
class="mb-3 ml-3 mr-3"
|
|
block
|
|
dark
|
|
>
|
|
Simpan
|
|
<template v-slot:loader>
|
|
<span>Loading...</span>
|
|
</template>
|
|
</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<v-layout v-if="status_save_quesioner_spirometri.status === 'OK'" row>
|
|
<v-flex xs12>
|
|
<v-card class="success lighten-5">
|
|
<v-card-text>
|
|
<v-icon class="success--text">check_circle</v-icon>
|
|
<span class="ml-2">{{ status_save_quesioner_spirometri.message }}</span>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="status_save_quesioner_spirometri.status === 'ERR'" row>
|
|
<v-flex xs12>
|
|
<v-card class="error lighten-5">
|
|
<v-card-text>
|
|
<v-icon class="error--text">error</v-icon>
|
|
<span class="ml-2">{{ status_save_quesioner_spirometri.message }}</span>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
|
|
<v-layout class="mt-4 mb-4" v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 10" row>
|
|
<v-flex xs12>
|
|
<v-card>
|
|
<v-toolbar color="teal" dark>
|
|
<v-toolbar-title>Kuesioner Audiometri</v-toolbar-title>
|
|
</v-toolbar>
|
|
<v-card-text>
|
|
<v-layout v-for="item in audiometri_template" :key="item.group_id" row>
|
|
<v-flex xs12>
|
|
<v-subheader>{{ item.group_name }}</v-subheader>
|
|
<v-layout v-if="item.childs && item.childs.length > 0" v-for="child in item.childs" :key="child.id" row>
|
|
<v-flex xs12 class="pt-2">
|
|
<p>{{ child.label }}</p>
|
|
<v-layout v-if="child.childs && child.childs.length > 0" v-for="x_child in child.childs" :key="x_child.id" row>
|
|
<v-flex xs2 sm1>
|
|
<v-checkbox class="mt-0" v-model="x_child.value"
|
|
:disabled="isAudiometriChildDisabled(child.id)"
|
|
@change="onChangeAudiometriTemplateOption(child.id, x_child.id, x_child.value, $event)"
|
|
hide-details></v-checkbox>
|
|
</v-flex>
|
|
<v-flex xs10 sm11>
|
|
<p class="pt-1 mb-0" :class="{ 'grey--text': isAudiometriChildDisabled(child.id) }">{{ x_child.label }}</p>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-divider></v-divider>
|
|
</v-card-text>
|
|
<v-card-actions>
|
|
<v-btn
|
|
:loading="loading_save_quesioner_audiometri"
|
|
:disabled="loading_save_quesioner_audiometri"
|
|
color="teal"
|
|
@click="saveQuestionerAudiometri()"
|
|
class="mb-3 ml-3 mr-3"
|
|
block
|
|
dark
|
|
>
|
|
Simpan
|
|
<template v-slot:loader>
|
|
<span>Loading...</span>
|
|
</template>
|
|
</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<v-layout v-if="status_save_quesioner_audiometri.status === 'OK'" row>
|
|
<v-flex xs12>
|
|
<v-card class="success lighten-5">
|
|
<v-card-text>
|
|
<v-icon class="success--text">check_circle</v-icon>
|
|
<span class="ml-2">{{ status_save_quesioner_audiometri.message }}</span>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="status_save_quesioner_audiometri.status === 'ERR'" row>
|
|
<v-flex xs12>
|
|
<v-card class="error lighten-5">
|
|
<v-card-text>
|
|
<v-icon class="error--text">error</v-icon>
|
|
<span class="ml-2">{{ status_save_quesioner_audiometri.message }}</span>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
<v-card v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 33">
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">Visus dan Buta Warna</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
|
|
<v-layout v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 33" row>
|
|
<v-flex xs12>
|
|
<v-checkbox v-model="off_visus" label="Tanpa Visus"></v-checkbox>
|
|
</v-flex>
|
|
</v-layout>
|
|
<p v-if="parseInt(selected_station.id) === 33 && !off_visus" class="mt-4 mb-1">Tanpa Kacamata</p>
|
|
<v-layout v-if="parseInt(selected_station.id) === 33 && !off_visus" row>
|
|
<v-flex xs12>
|
|
<v-text-field v-model="tkod" label="OD" hide-details></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field v-model="tkos" label="OS" hide-details></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<p v-if="parseInt(selected_station.id) === 33 && !off_visus" class="mt-2 mb-1">Dengan Kacamata</p>
|
|
<v-layout v-if="parseInt(selected_station.id) === 33 && !off_visus" row>
|
|
<v-flex xs12>
|
|
<v-text-field v-model="dkod" label="OD" hide-details></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field v-model="dkos" label="OS" hide-details></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<p v-if="parseInt(selected_station.id) === 33 && visusDenganKoreksi()" class="mt-4 mb-1">Dengan Koreksi</p>
|
|
<v-layout v-if="parseInt(selected_station.id) === 33 && visusDenganKoreksi()" row>
|
|
<v-flex xs12>
|
|
<v-text-field label="OD Sph" v-model="odSph"></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field label="OD Cyl" v-model="odCyl"></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field label="OD X" v-model="odX"></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field label="ADD" v-model="visusAdd"></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="parseInt(selected_station.id) === 33 && visusDenganKoreksi()" row>
|
|
<v-flex xs12>
|
|
<v-text-field label="OS Sph" v-model="osSph"></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field label="OS Cyl" v-model="osCyl"></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs12>
|
|
<v-text-field label="OS X" v-model="osX"></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<p v-if="parseInt(selected_station.id) === 33" class="mt-2 mb-1">Buta Warna</p>
|
|
<v-radio-group v-if="parseInt(selected_station.id) === 33" v-model="btwrn">
|
|
<v-radio label="Normal" value="N"></v-radio>
|
|
<v-radio label="Buta Warna" value="BW"></v-radio>
|
|
|
|
</v-radio-group>
|
|
<v-text-field v-if="btwrn === 'BW'" label="Buta Warna" v-model="colorBlindNumber"></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 33" row>
|
|
<v-flex xs12>
|
|
<v-btn
|
|
color="primary"
|
|
block
|
|
:disabled="loading_save_visus_bw"
|
|
:loading="loading_save_visus_bw"
|
|
|
|
@click="saveVisusBW()">
|
|
Simpan Visus dan Buta Warna
|
|
<template v-slot:loader>
|
|
<span>Saving...</span>
|
|
</template>
|
|
</v-btn>
|
|
</v-flex>
|
|
</v-layout>
|
|
|
|
|
|
<v-layout v-if="!_.isEmpty(data_patient) && parseInt(selected_station.id) === 33" row>
|
|
<v-flex xs12>
|
|
<v-card>
|
|
<v-card-title>
|
|
<v-icon>assignment</v-icon>
|
|
<span class="ml-2">Visus dan Buta Warna</span>
|
|
</v-card-title>
|
|
<v-card-text class="py-0">
|
|
<v-divider></v-divider>
|
|
<v-layout v-if="parseInt(data_patient.visus_id) > 0" row>
|
|
<v-flex v-if="tkod === 'OFF' && tkos === 'OFF' && dkod === 'OFF' && dkos === 'OFF'" xs12>
|
|
<kbd>Tanpa Visus</kbd>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="parseInt(data_patient.visus_id) > 0" row>
|
|
<v-flex v-if="tkod !== 'OFF' && tkos !== 'OFF' && dkod !== 'OFF' && dkos !== 'OFF' && ( tkod !== '' || tkos !== '')" xs12>
|
|
<p>Tanpa Kacamata : OD <b>{{ tkod !== '' ? tkod : '-' }}</b>, OS <b>{{ tkos !== '' ? tkos : '-' }}</b></p>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="parseInt(data_patient.visus_id) > 0" row>
|
|
<v-flex v-if="tkod !== 'OFF' && tkos !== 'OFF' && dkod !== 'OFF' && dkos !== 'OFF' && ( dkod !== '' || dkos !== '')" xs12>
|
|
<p>Dengan Kacamata : OD <b>{{ dkod !== '' ? dkod : '-' }}</b>, OS <b>{{ dkos !== '' ? dkos : '-' }}</b></p>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="parseInt(data_patient.visus_id) > 0 && visusDenganKoreksi()" row>
|
|
<v-flex xs12>
|
|
<p>Dengan Koreksi :</p>
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<td>#</td>
|
|
<td>Sph</td>
|
|
<td>Cyl</td>
|
|
<td>X</td>
|
|
<td>ADD</td>
|
|
</tr>
|
|
<tr>
|
|
<td>OD</td>
|
|
<td>{{ odSph }}</td>
|
|
<td>{{ odCyl }}</td>
|
|
<td>{{ odX }}</td>
|
|
<td>{{ visusAdd }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>OS</td>
|
|
<td>{{ osSph }}</td>
|
|
<td>{{ osCyl }}</td>
|
|
<td>{{ osX }}</td>
|
|
<td>{{ visusAdd }}</td>
|
|
</tr>
|
|
</table>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="parseInt(data_patient.visus_id) == 0" row>
|
|
<v-flex xs12>
|
|
<p class="red--text mb-1">Data pemeriksaan visus belum disimpan</p>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout row>
|
|
<v-flex xs12>
|
|
<p v-if="parseInt(data_patient.bw_id) > 0">Buta Warna : {{ data_patient.btwrn === 'BW' ? 'Buta Warna ('+data_patient.bw_angka+')' : 'Normal' }}</p>
|
|
<p v-if="parseInt(data_patient.bw_id) == 0">Data pemeriksaan buta warna belum disimpan</p>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
<v-layout v-if="success_msg" row>
|
|
<v-flex xs12>
|
|
<v-card class="success lighten-5">
|
|
<v-card-text>
|
|
<v-icon class="success--text">check_circle</v-icon>
|
|
<span class="ml-2">{{ success_msg }}</span>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
|
|
|
|
</v-container>
|
|
|
|
</v-card-text>
|
|
<v-divider v-if="!_.isEmpty(data_patient)"></v-divider>
|
|
<v-card-actions v-if="!_.isEmpty(data_patient) && isdone != 'Y'" class="pa-2">
|
|
|
|
<v-btn @click="skipAction()" dark color="black ligthen-2"><v-icon left>fast_rewind</v-icon> SKIP</v-btn>
|
|
|
|
<v-spacer></v-spacer>
|
|
<v-btn @click="scanSample()" dark color="blue"> SCAN QR (CHECKOUT) <v-icon right>camera</v-icon></v-btn>
|
|
|
|
|
|
</v-card-actions>
|
|
</v-card>
|
|
|
|
|
|
<qr-scanner></qr-scanner>
|
|
|
|
</div>
|
|
</template>
|
|
|
|
</v-container>
|
|
</v-content>
|
|
<one-footer> </one-footer>
|
|
|
|
</v-app>
|
|
</div>
|
|
|
|
<!-- Vendor -->
|
|
<script src="../../../libs/vendor/html5-qrcode.min.js"></script>
|
|
<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/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`
|
|
}
|
|
|
|
|
|
import {
|
|
store
|
|
} from './store.js<?php echo $ts ?>';
|
|
|
|
//for testing
|
|
window.store = store;
|
|
new Vue({
|
|
store,
|
|
el: '#app',
|
|
methods: {
|
|
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-patient-list': httpVueLoader('./components/onePatientList.vue'),
|
|
'qr-scanner': httpVueLoader('./components/oneQRscanner.vue')
|
|
},
|
|
mounted: function() {
|
|
let url_string = window.location.href
|
|
let url = new URL(url_string)
|
|
let id = url.searchParams.get("nolab")
|
|
let labnumber = url.searchParams.get("labnumber")
|
|
let station_id = url.searchParams.get("stat")
|
|
let location_id = url.searchParams.get("loc")
|
|
console.log("xasdasd")
|
|
|
|
//this.$store.commit('patient/update_order_id', id)
|
|
//this.$store.commit('patient/update_noreg', noreg)
|
|
if (labnumber) {
|
|
console.log(labnumber)
|
|
this.$store.commit('patient/update_url_labnumber', labnumber)
|
|
this.$store.commit('patient/update_station_id', station_id)
|
|
this.$store.commit('patient/update_location_id', location_id)
|
|
this.$store.dispatch("patient/scan_patient", {
|
|
'labnumber': labnumber,
|
|
'station_id': station_id,
|
|
'location_id': location_id
|
|
})
|
|
//this.$store.dispatch("patient/getstations",{labnumber:labnumber,station_id:station_id,location_id:location_id})
|
|
} else if (station_id && location_id) {
|
|
console.log('stationid ' + station_id)
|
|
this.$store.commit('patient/update_station_id', station_id)
|
|
this.$store.commit('patient/update_location_id', location_id)
|
|
//this.$store.dispatch("patient/scan_patient",{'station_id':station_id,'location_id':location_id})
|
|
}
|
|
|
|
if(station_id && parseInt(station_id) === 11) {
|
|
this.$store.dispatch("patient/getSpirometriTemplate", {
|
|
'labnumber': this.url_labnumber
|
|
})
|
|
}
|
|
|
|
if(station_id && parseInt(station_id) === 10) {
|
|
this.$store.dispatch("patient/getAudiometriTemplate", {
|
|
'labnumber': this.url_labnumber
|
|
})
|
|
}
|
|
|
|
this.$store.dispatch("patient/getstations")
|
|
//this.$store.dispatch("patient/getSpirometriTemplate")
|
|
|
|
|
|
|
|
},
|
|
methods: {
|
|
onChangeSpirometriTemplateOption(master_id, option_id, value, event) {
|
|
const multiSelectIds = ['RPEK_01']
|
|
if(master_id.startsWith('RPEK_') && !multiSelectIds.includes(master_id)) {
|
|
let template = _.cloneDeep(this.spirometri_template)
|
|
template.forEach(function(item) {
|
|
if(item.group_id === 'RPEK' && item.childs) {
|
|
item.childs.forEach(function(child) {
|
|
if(child.id === master_id && child.childs) {
|
|
child.childs.forEach(function(x_child) {
|
|
x_child.value = (x_child.id === option_id && event) ? true : false
|
|
})
|
|
}
|
|
})
|
|
}
|
|
})
|
|
this.spirometri_template = template
|
|
}
|
|
},
|
|
saveQuestionerSpirometri() {
|
|
this.loading_save_quesioner_spirometri = true
|
|
this.$store.dispatch("patient/saveQuestionerSpirometri", {
|
|
'labnumber': this.url_labnumber,
|
|
'template': this.spirometri_template
|
|
})
|
|
},
|
|
isAudiometriChildDisabled(child_id) {
|
|
if (child_id !== 'RP_01_02') return false
|
|
let template = this.audiometri_template
|
|
for (let group of template) {
|
|
if (group.group_id === 'RP_01' && group.childs) {
|
|
for (let child of group.childs) {
|
|
if (child.id === 'RP_01_01' && child.childs) {
|
|
for (let x_child of child.childs) {
|
|
if (x_child.id === 'RP_01_01A') {
|
|
return !x_child.value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
},
|
|
onChangeAudiometriTemplateOption(master_id, option_id, value, event) {
|
|
let template = _.cloneDeep(this.audiometri_template)
|
|
if(event) {
|
|
template.forEach(function(group) {
|
|
if(group.childs) {
|
|
group.childs.forEach(function(child) {
|
|
if(child.id === master_id && child.childs) {
|
|
child.childs.forEach(function(x_child) {
|
|
x_child.value = (x_child.id === option_id) ? true : false
|
|
})
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
if (master_id === 'RP_01_01') {
|
|
let rp01_01A_checked = false
|
|
template.forEach(function(group) {
|
|
if(group.group_id === 'RP_01' && group.childs) {
|
|
group.childs.forEach(function(child) {
|
|
if(child.id === 'RP_01_01' && child.childs) {
|
|
child.childs.forEach(function(x_child) {
|
|
if (x_child.id === 'RP_01_01A') rp01_01A_checked = x_child.value
|
|
})
|
|
}
|
|
})
|
|
}
|
|
})
|
|
if (!rp01_01A_checked) {
|
|
template.forEach(function(group) {
|
|
if(group.group_id === 'RP_01' && group.childs) {
|
|
group.childs.forEach(function(child) {
|
|
if(child.id === 'RP_01_02' && child.childs) {
|
|
child.childs.forEach(function(x_child) { x_child.value = false })
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
this.audiometri_template = template
|
|
},
|
|
saveQuestionerAudiometri() {
|
|
this.loading_save_quesioner_audiometri = true
|
|
this.$store.dispatch("patient/saveQuestionerAudiometri", {
|
|
'labnumber': this.url_labnumber,
|
|
'template': this.audiometri_template
|
|
})
|
|
},
|
|
saveGlucoses() {
|
|
let glucoses = this.glucoses
|
|
let err_glucoses = []
|
|
glucoses.forEach(function(gluc) {
|
|
if (gluc.result == '' || gluc.result == null || gluc.result == undefined) {
|
|
err_glucoses.push(gluc.test_name)
|
|
}
|
|
})
|
|
if (err_glucoses.length > 0) {
|
|
this.$store.commit("patient/update_alert_msg", "Anda lupa mengisi hasil " + err_glucoses.join(", "))
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else {
|
|
this.loading_save_glucoses = true
|
|
this.$store.dispatch("patient/saveGlucoses", {
|
|
'glucoses': this.glucoses,
|
|
'labnumber': this.url_labnumber,
|
|
'station_id': this.selected_station.id
|
|
})
|
|
}
|
|
},
|
|
saveVisusBW() {
|
|
this.loading_save_visus_bw = true
|
|
const fields = [this.tkod, this.tkos, this.dkod, this.dkos, this.odSph, this.odCyl, this.odX, this.osSph, this.osCyl, this.osX, this.visusAdd, this.btwrn, this.colorBlindNumber, this.url_labnumber];
|
|
for (const field of fields) {
|
|
if (field.includes('_') || field.includes(',')) {
|
|
//alert('Tidak boleh mengandung karakter _ atau , (underscore atau koma) ');
|
|
let message = 'Tidak boleh mengandung karakter _ atau , (underscore atau koma) ';
|
|
this.$store.commit("patient/update_alert_msg", message)
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
this.loading_save_visus_bw = false;
|
|
return;
|
|
}
|
|
}
|
|
let xdate = new Date()
|
|
let xdate_format = xdate.toISOString().split('T')[0]
|
|
console.log(xdate_format)
|
|
this.$store.dispatch("patient/saveVisusBW", {
|
|
'tkod': this.tkod,
|
|
'tkos': this.tkos,
|
|
'dkod': this.dkod,
|
|
'dkos': this.dkos,
|
|
'odSph': this.odSph,
|
|
'odCyl': this.odCyl,
|
|
'odX': this.odX,
|
|
'osSph': this.osSph,
|
|
'osCyl': this.osCyl,
|
|
'osX': this.osX,
|
|
'visusAdd': this.visusAdd,
|
|
'btwrn': this.btwrn,
|
|
'colorBlindNumber': this.colorBlindNumber,
|
|
'labnumber': this.url_labnumber
|
|
})
|
|
},
|
|
visusDenganKoreksi() {
|
|
let ret = false;
|
|
|
|
if ((this.tkod.trim() != '20/20' && this.tkod.trim() != '20/25' && this.tkod.trim() != '') ||
|
|
(this.tkos.trim() != '20/20' && this.tkos.trim() != '20/25' && this.tkos.trim() != '') ||
|
|
(this.dkod.trim() != '20/20' && this.dkod.trim() != '20/25' && this.dkod.trim() != '') ||
|
|
(this.dkos.trim() != '20/20' && this.dkos.trim() != '20/25' && this.dkos.trim() != '') ||
|
|
this.off_visus
|
|
) {
|
|
ret = true;
|
|
}
|
|
// console.log("Visus dengan koreksi");
|
|
// console.log(this.tkod);
|
|
// console.log(this.tkos);
|
|
// console.log(this.dkod);
|
|
// console.log(this.dkos);
|
|
// console.log(ret);
|
|
this.withCorection = ret;
|
|
return ret;
|
|
},
|
|
goToResult(sample) {
|
|
let stat_id = this.$store.state.patient.selected_station.id
|
|
let loc_id = this.$store.state.patient.selected_location.locationID
|
|
let urls = this.$store.state.patient.urls
|
|
if (sample.sampletype_name === "Pemeriksaan Fisik") {
|
|
window.location = "/one-ui/" + urls.url_fisik + "?id=" + this.url_labnumber + "&type=fisik&stat=" + stat_id + "&loc=" + loc_id
|
|
}
|
|
if (sample.groupresult_name === "Elektromedik" || sample.groupresult_name === "Audiometri" || sample.groupresult_name === "Spirometri") {
|
|
// https: //devcpone.aplikasi.web.id/one-ui/test/vuex/one-resultentry-so-electromedis-v7-cpone/?id=T2406260012&test=1675
|
|
window.location = "/one-ui/" + urls.url_electromedis + "?id=" + this.url_labnumber + "&test=" + sample.test_id + "&stat=" + stat_id + "&loc=" + loc_id
|
|
}
|
|
if (sample.groupresult_name === "USG" || sample.groupresult_name === "Rontgen") {
|
|
// https: //devcpone.aplikasi.web.id/one-ui/test/vuex/one-resultentry-so-xray-v7-cpone/?id=T2406260009&stat=7&loc=3
|
|
window.location = "/one-ui/" + urls.url_xray + "?id=" + this.url_labnumber + "&stat=" + stat_id + "&loc=" + loc_id
|
|
}
|
|
},
|
|
logout() {
|
|
window.one_logout('/one-ui/test/vuex/one-login')
|
|
},
|
|
openscanner() {
|
|
this.$store.commit("patient/update_act_scan", 'qrpatient')
|
|
this.dialog_scanner = true
|
|
},
|
|
skipAction() {
|
|
this.$store.dispatch("patient/skipaction")
|
|
},
|
|
scanSample() {
|
|
let data_patient = this.data_patient
|
|
console.log("check input")
|
|
if (parseInt(this.selected_station.id) === 10) {
|
|
let validation = this.validateAudiometri()
|
|
if (!validation.valid) {
|
|
this.$store.commit("patient/update_alert_msg", validation.errors.join(", "))
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
return
|
|
}
|
|
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
return
|
|
} else if (parseInt(this.selected_station.id) === 11) {
|
|
let validation = this.validateSpirometri()
|
|
if (!validation.valid) {
|
|
this.$store.commit("patient/update_alert_msg", "Silahkan lengkapi kuesioner spirometri terlebih dahulu, kemudian simpan kembali")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
return
|
|
}
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
return
|
|
}else if (parseInt(this.selected_station.id) === 17) {
|
|
if (parseFloat(this.value_tb) === 0 || parseFloat(this.value_bb) === 0 || this.value_tb === "" || this.value_bb === "") {
|
|
this.$store.commit("patient/update_alert_msg", "Silahkan diisi, tinggi badan dan berat badan")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else if (parseInt(this.data_patient.bbtbid) == 0 || (parseFloat(this.value_tb) != parseFloat(this.data_patient.patientTB) || parseFloat(this.value_bb) != parseFloat(this.data_patient.patientBB))) {
|
|
this.$store.commit("patient/update_alert_msg", "Anda lupa menyimpan data BB/TB")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else {
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
}
|
|
} else if (parseInt(this.selected_station.id) === 35) {
|
|
console.log("body fat")
|
|
if (parseFloat(this.value_bf) === 0 || this.value_bf === "" || this.value_bf === null) {
|
|
this.$store.commit("patient/update_alert_msg", "Silahkan diisi, body fat")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else {
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
}
|
|
} else if (parseInt(this.selected_station.id) === 33) {
|
|
if (parseInt(this.data_patient.visus_id) == 0 || parseInt(this.data_patient.bw_id) == 0) {
|
|
this.$store.commit("patient/update_alert_msg", "Data pemeriksaan visus dan buta warna belum disimpan")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else if (this.tkod !== data_patient.tkod ||
|
|
this.tkos !== data_patient.tkos ||
|
|
this.dkod !== data_patient.dkod ||
|
|
this.dkos !== data_patient.dkos ||
|
|
this.odSph !== data_patient.odSph ||
|
|
this.odCyl !== data_patient.odCyl ||
|
|
this.odX !== data_patient.odX ||
|
|
this.osSph !== data_patient.osSph ||
|
|
this.osCyl !== data_patient.osCyl ||
|
|
this.osX !== data_patient.osX ||
|
|
this.visusAdd !== data_patient.visusAdd ||
|
|
this.btwrn !== data_patient.btwrn ||
|
|
this.colorBlindNumber !== data_patient.bw_angka) {
|
|
this.$store.commit("patient/update_alert_msg", "Anda lupa menyimpan data pemeriksaan visus dan buta warna")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else if ((this.tkod !== '' && this.tkos !== '') || (this.dkod !== '' && this.dkos !== '')) {
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
} else {
|
|
this.$store.commit("patient/update_alert_msg", "Anda lupa mengisi visus")
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
}
|
|
} else if (this.glucoses.length > 0) {
|
|
let glucoses = this.glucoses
|
|
let dhis = this
|
|
let err_glucoses = []
|
|
glucoses.forEach(function(gluc) {
|
|
if (parseInt(gluc.order_glucose_id) == 0) {
|
|
err_glucoses.push(gluc.test_name)
|
|
}
|
|
})
|
|
if (err_glucoses.length > 0) {
|
|
this.$store.commit("patient/update_alert_msg", "Anda lupa menyimpan hasil " + err_glucoses.join(", "))
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
} else {
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
}
|
|
} else {
|
|
this.$store.commit("patient/update_act_scan", 'scanbarcode')
|
|
this.dialog_scanner = true
|
|
}
|
|
|
|
},
|
|
saveBBTB() {
|
|
this.loading_save_bbtb = true
|
|
this.$store.dispatch("patient/saveBBTB", {
|
|
'value_tb': this.value_tb,
|
|
'value_bb': this.value_bb,
|
|
'labnumber': this.url_labnumber
|
|
})
|
|
},
|
|
savePhlebotomy() {
|
|
this.loading_save_phlebotomy = true
|
|
|
|
let requirements = []
|
|
if (this.sample_kurang) {
|
|
requirements.push({
|
|
'requirement': 'sample_kurang',
|
|
'status': this.sample_kurang === true ? 'Y' : 'N',
|
|
'note': this.note_phlebotomy
|
|
})
|
|
}
|
|
if (this.lipemik) {
|
|
requirements.push({
|
|
'requirement': 'lipemik',
|
|
'status': this.lipemik === true ? 'Y' : 'N',
|
|
'note': this.note_phlebotomy
|
|
})
|
|
}
|
|
if (this.puasa_tp) {
|
|
requirements.push({
|
|
'requirement': 'puasa_tp',
|
|
'status': this.puasa_tp,
|
|
'note': this.note_phlebotomy
|
|
})
|
|
}
|
|
this.$store.dispatch("patient/savePhlebotomy", {
|
|
'data': requirements,
|
|
'labnumber': this.url_labnumber
|
|
})
|
|
},
|
|
getAudiometriGrouped() {
|
|
let masters = this.audiometri_master || []
|
|
let answers = this.audiometri_answers || {}
|
|
let grouped = {}
|
|
|
|
masters.forEach(row => {
|
|
if (!grouped[row.group_number]) {
|
|
grouped[row.group_number] = {
|
|
group_number: row.group_number,
|
|
group_name: row.group_name,
|
|
items: []
|
|
}
|
|
}
|
|
|
|
let options = []
|
|
if (row.option_json) {
|
|
try {
|
|
let parsed = JSON.parse(row.option_json)
|
|
options = (Array.isArray(parsed) ? parsed : []).map((opt, index) => {
|
|
return {
|
|
order: String(
|
|
opt.order ??
|
|
opt.code ??
|
|
opt.id ??
|
|
opt.value ??
|
|
(index + 1)
|
|
),
|
|
label: String(
|
|
opt.label ??
|
|
opt.name ??
|
|
opt.text ??
|
|
opt.value ??
|
|
''
|
|
)
|
|
}
|
|
}).filter(opt => opt.label !== '')
|
|
} catch (e) {
|
|
options = []
|
|
}
|
|
}
|
|
|
|
grouped[row.group_number].items.push({
|
|
...row,
|
|
options: options,
|
|
answer: answers[row.id] ? {
|
|
...answers[row.id]
|
|
} : {
|
|
master_id: row.id,
|
|
value_choice: null,
|
|
value_option_order: null,
|
|
value_option_label: null
|
|
}
|
|
})
|
|
})
|
|
|
|
return Object.values(grouped)
|
|
},
|
|
onChangeAudiometriChoice(item, val) {
|
|
item.answer.value_choice = val
|
|
item.answer.value_option_order = null
|
|
item.answer.value_option_label = null
|
|
|
|
this.$set(this.audiometri_answers, item.id, {
|
|
...item.answer
|
|
})
|
|
this.audiometri_is_saved = 'N'
|
|
},
|
|
onChangeAudiometriOption(item, val) {
|
|
if (!val) {
|
|
item.answer.value_choice = null
|
|
item.answer.value_option_order = null
|
|
item.answer.value_option_label = null
|
|
} else {
|
|
item.answer.value_choice = null
|
|
item.answer.value_option_order = val.code
|
|
item.answer.value_option_label = val.label
|
|
}
|
|
|
|
this.$set(this.audiometri_answers, item.id, {
|
|
...item.answer
|
|
})
|
|
this.audiometri_is_saved = 'N'
|
|
},
|
|
validateAudiometri() {
|
|
let template_before = JSON.parse(localStorage.getItem('audiometri_template'))
|
|
let trx_id = localStorage.getItem('audiometri_template_trx_id')
|
|
let template_after = this.audiometri_template
|
|
if (!template_before || !trx_id || JSON.stringify(template_before) !== JSON.stringify(template_after)) {
|
|
return {
|
|
valid: false,
|
|
errors: ['template changed, please save again']
|
|
}
|
|
}
|
|
return { valid: true, errors: [] }
|
|
},
|
|
saveAudiometri() {
|
|
let validation = this.validateAudiometri()
|
|
if (!validation.valid) {
|
|
this.$store.commit("patient/update_alert_msg", "Masih ada jawaban kuesioner audiometri yang belum diisi: " + validation.errors.join(", "))
|
|
this.$store.commit("patient/update_alert_status", true)
|
|
return
|
|
}
|
|
|
|
let payloadAnswers = []
|
|
let masters = this.audiometri_master || []
|
|
let answers = this.audiometri_answers || {}
|
|
|
|
masters.forEach(row => {
|
|
let ans = answers[row.id] || {}
|
|
|
|
payloadAnswers.push({
|
|
master_id: row.id,
|
|
type: row.type,
|
|
value_choice: row.type === 'choice'
|
|
? (ans.value_choice || null)
|
|
: null,
|
|
value_option_order: row.type === 'option'
|
|
? (ans.value_option_order || null)
|
|
: null,
|
|
value_option_label: row.type === 'option'
|
|
? (ans.value_option_label || null)
|
|
: null
|
|
})
|
|
})
|
|
|
|
this.$store.dispatch("patient/saveAudiometri", {
|
|
labnumber: this.url_labnumber,
|
|
samplingso_id: this.data_patient.audiometri_samplingso_id || 0,
|
|
answers: payloadAnswers
|
|
})
|
|
},
|
|
getSpirometriGrouped() {
|
|
let masters = this.spirometri_master || []
|
|
let answers = this.spirometri_answers || {}
|
|
let grouped = {}
|
|
|
|
masters.forEach(row => {
|
|
if (!grouped[row.group_number]) {
|
|
grouped[row.group_number] = {
|
|
group_number: row.group_number,
|
|
group_name: row.group_name,
|
|
items: []
|
|
}
|
|
}
|
|
|
|
let options = []
|
|
if (row.option_json) {
|
|
try {
|
|
let parsed = JSON.parse(row.option_json)
|
|
options = (Array.isArray(parsed) ? parsed : []).map((opt, index) => {
|
|
return {
|
|
order: String(
|
|
opt.order ??
|
|
opt.code ??
|
|
opt.id ??
|
|
opt.value ??
|
|
(index + 1)
|
|
),
|
|
label: String(
|
|
opt.label ??
|
|
opt.name ??
|
|
opt.text ??
|
|
opt.value ??
|
|
''
|
|
)
|
|
}
|
|
}).filter(opt => opt.label !== '')
|
|
} catch (e) {
|
|
options = []
|
|
}
|
|
}
|
|
|
|
let defaultAnswer = {
|
|
master_id: row.id,
|
|
value_choice: null,
|
|
options: []
|
|
}
|
|
|
|
grouped[row.group_number].items.push({
|
|
...row,
|
|
options: options,
|
|
answer: answers[row.id] ? _.cloneDeep(answers[row.id]) : defaultAnswer
|
|
})
|
|
})
|
|
|
|
return Object.values(grouped)
|
|
},
|
|
isSpirometriOptionChecked(item, opt) {
|
|
let ans = this.spirometri_answers[item.id]
|
|
if (!ans || !ans.options) return false
|
|
return _.findIndex(ans.options, function(x) {
|
|
return String(x.value_option_order) === String(opt.order)
|
|
}) > -1
|
|
},
|
|
onChangeSpirometriChoice(item, val) {
|
|
let payload = {
|
|
master_id: item.id,
|
|
value_choice: val,
|
|
options: []
|
|
}
|
|
|
|
this.$set(this.spirometri_answers, item.id, payload)
|
|
this.spirometri_is_saved = 'N'
|
|
},
|
|
onChangeSpirometriOption(item, opt, checked) {
|
|
let current = this.spirometri_answers[item.id]
|
|
? _.cloneDeep(this.spirometri_answers[item.id])
|
|
: {
|
|
master_id: item.id,
|
|
value_choice: null,
|
|
options: []
|
|
}
|
|
|
|
if (!current.options) {
|
|
current.options = []
|
|
}
|
|
|
|
const optionOrder = String(opt.order || '')
|
|
const optionLabel = String(opt.label || '')
|
|
|
|
if (!optionOrder || !optionLabel) {
|
|
return
|
|
}
|
|
|
|
let idx = _.findIndex(current.options, function(x) {
|
|
return String(x.value_option_order) === optionOrder
|
|
})
|
|
|
|
if (checked) {
|
|
if (idx === -1) {
|
|
current.options.push({
|
|
value_option_order: optionOrder,
|
|
value_option_label: optionLabel
|
|
})
|
|
}
|
|
} else if (idx > -1) {
|
|
current.options.splice(idx, 1)
|
|
}
|
|
|
|
current.value_choice = null
|
|
this.$set(this.spirometri_answers, item.id, current)
|
|
this.spirometri_is_saved = 'N'
|
|
},
|
|
validateSpirometri() {
|
|
let template_before = JSON.parse(localStorage.getItem('spirometri_template'))
|
|
let trx_id = localStorage.getItem('spirometri_template_trx_id')
|
|
let template_after = this.spirometri_template
|
|
if (!template_before || !trx_id || JSON.stringify(template_before) !== JSON.stringify(template_after)) {
|
|
return {
|
|
valid: false,
|
|
errors: ['template changed, please save again']
|
|
}
|
|
}
|
|
return { valid: true, errors: [] }
|
|
},
|
|
isSpirometriRightSideChecklist(group, idx, item) {
|
|
return (
|
|
group.group_number === 'RKES' &&
|
|
item.type === 'option' &&
|
|
idx >= 0 &&
|
|
idx <= 4 &&
|
|
item.options &&
|
|
item.options.length > 0
|
|
)
|
|
},
|
|
isSpirometriSingleChecklist(group, idx, item) {
|
|
return (
|
|
group.group_number === 'RPEK' &&
|
|
item.type === 'option' &&
|
|
(idx === 1 || idx === 3)
|
|
)
|
|
},
|
|
onChangeSpirometriSingleOption(item, opt, checked) {
|
|
const optionOrder = String(opt.order || '')
|
|
const optionLabel = String(opt.label || '')
|
|
|
|
if (!optionOrder || !optionLabel) {
|
|
return
|
|
}
|
|
|
|
let current = {
|
|
master_id: item.id,
|
|
value_choice: null,
|
|
options: []
|
|
}
|
|
|
|
if (checked) {
|
|
current.options = [{
|
|
value_option_order: optionOrder,
|
|
value_option_label: optionLabel
|
|
}]
|
|
}
|
|
|
|
this.$set(this.spirometri_answers, item.id, current)
|
|
this.spirometri_is_saved = 'N'
|
|
},
|
|
isSpirometriNullableOption(row) {
|
|
const rawNumber = String(row.number || '').trim()
|
|
const numberMatch = rawNumber.match(/(\d+)$/)
|
|
const plainNumber = numberMatch ? numberMatch[1] : rawNumber
|
|
|
|
return (
|
|
row.type === 'option' &&
|
|
row.group_number === 'RKES' &&
|
|
['1', '2', '3', '4', '5'].includes(plainNumber)
|
|
)
|
|
},
|
|
},
|
|
computed: {
|
|
spirometri_template: {
|
|
get() {
|
|
return this.$store.state.patient.spirometri_template
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_spirometri_template", val)
|
|
}
|
|
},
|
|
loading_save_visus_bw: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_visus_bw
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_visus_bw", val)
|
|
}
|
|
},
|
|
loading_save_bbtb: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_bbtb
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_bbtb", val)
|
|
}
|
|
},
|
|
glucoses: {
|
|
get() {
|
|
return this.$store.state.patient.glucoses
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_glucoses", val)
|
|
}
|
|
},
|
|
loc_id() {
|
|
return this.$store.state.patient.loc_id
|
|
},
|
|
stat_id() {
|
|
return this.$store.state.patient.station_id
|
|
},
|
|
url_labnumber() {
|
|
return this.$store.state.patient.url_labnumber
|
|
},
|
|
btwrn: {
|
|
get() {
|
|
return this.$store.state.patient.btwrn
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_btwrn", val)
|
|
}
|
|
},
|
|
dkos: {
|
|
get() {
|
|
return this.$store.state.patient.dkos
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_dkos", val)
|
|
}
|
|
},
|
|
dkod: {
|
|
get() {
|
|
return this.$store.state.patient.dkod
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_dkod", val)
|
|
}
|
|
},
|
|
tkos: {
|
|
get() {
|
|
return this.$store.state.patient.tkos
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_tkos", val)
|
|
}
|
|
},
|
|
tkod: {
|
|
get() {
|
|
return this.$store.state.patient.tkod
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_tkod", val)
|
|
}
|
|
},
|
|
visusAdd: {
|
|
get() {
|
|
return this.$store.state.patient.visusAdd
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_visusAdd", val)
|
|
}
|
|
},
|
|
value_tb: {
|
|
get() {
|
|
return this.$store.state.patient.value_tb
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_value_tb", val)
|
|
}
|
|
},
|
|
value_bb: {
|
|
get() {
|
|
return this.$store.state.patient.value_bb
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_value_bb", val)
|
|
}
|
|
},
|
|
value_bf: {
|
|
get() {
|
|
return this.$store.state.patient.value_bf
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_value_bf", val)
|
|
}
|
|
},
|
|
status_done() {
|
|
return this.$store.state.patient.status_done
|
|
},
|
|
isdone() {
|
|
return this.$store.state.patient.isdone
|
|
},
|
|
stations() {
|
|
return this.$store.state.patient.stations
|
|
},
|
|
selected_station: {
|
|
get() {
|
|
return this.$store.state.patient.selected_station
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_selected_station", val)
|
|
this.$store.dispatch("patient/getLocation", val.id)
|
|
}
|
|
},
|
|
locations() {
|
|
return this.$store.state.patient.locations
|
|
},
|
|
selected_location: {
|
|
get() {
|
|
return this.$store.state.patient.selected_location
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_selected_location", val)
|
|
}
|
|
},
|
|
data_patient() {
|
|
return this.$store.state.patient.data_patient
|
|
},
|
|
dialog_scanner: {
|
|
get() {
|
|
return this.$store.state.patient.dialog_scanner
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_dialog_scanner", val)
|
|
}
|
|
},
|
|
|
|
withCorection: {
|
|
get() {
|
|
return this.$store.state.patient.withCorection
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_withCorection", val)
|
|
}
|
|
},
|
|
odSph: {
|
|
get() {
|
|
return this.$store.state.patient.odSph
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_odSph", val)
|
|
}
|
|
},
|
|
odCyl: {
|
|
get() {
|
|
return this.$store.state.patient.odCyl
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_odCyl", val)
|
|
}
|
|
},
|
|
odX: {
|
|
get() {
|
|
return this.$store.state.patient.odX
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_odX", val)
|
|
}
|
|
},
|
|
osSph: {
|
|
get() {
|
|
return this.$store.state.patient.osSph
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_osSph", val)
|
|
}
|
|
},
|
|
osCyl: {
|
|
get() {
|
|
return this.$store.state.patient.osCyl
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_osCyl", val)
|
|
}
|
|
},
|
|
osX: {
|
|
get() {
|
|
return this.$store.state.patient.osX
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_osX", val)
|
|
}
|
|
},
|
|
colorBlindNumber: {
|
|
get() {
|
|
return this.$store.state.patient.colorBlindNumber
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_colorBlindNumber", val)
|
|
}
|
|
},
|
|
dialogError: {
|
|
get() {
|
|
return this.$store.state.patient.dialogError
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_dialogError", val)
|
|
}
|
|
},
|
|
errorMsg: {
|
|
get() {
|
|
return this.$store.state.patient.errorMsg
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_errorMsg", val)
|
|
}
|
|
},
|
|
data_patient() {
|
|
return this.$store.state.patient.data_patient
|
|
},
|
|
data_requirement() {
|
|
return this.$store.state.patient.data_requirement
|
|
},
|
|
data_packet() {
|
|
return this.$store.state.patient.data_packet
|
|
},
|
|
data_tests() {
|
|
return this.$store.state.patient.data_tests
|
|
},
|
|
data_sample_lab() {
|
|
return this.$store.state.patient.data_sample_lab
|
|
},
|
|
data_sample_radiodiagnostic() {
|
|
return this.$store.state.patient.data_sample_radiodiagnostic
|
|
},
|
|
data_sample_electromedic() {
|
|
return this.$store.state.patient.data_sample_electromedic
|
|
},
|
|
data_sample_other() {
|
|
return this.$store.state.patient.data_sample_other
|
|
},
|
|
success_msg: {
|
|
get() {
|
|
return this.$store.state.patient.success_msg
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_success_msg", val)
|
|
}
|
|
},
|
|
loading_save_glucoses: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_glucoses
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_glucoses", val)
|
|
}
|
|
},
|
|
sample_kurang: {
|
|
get() {
|
|
return this.$store.state.patient.sample_kurang
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_sample_kurang", val)
|
|
}
|
|
},
|
|
lipemik: {
|
|
get() {
|
|
return this.$store.state.patient.lipemik
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_lipemik", val)
|
|
}
|
|
},
|
|
puasa_tp: {
|
|
get() {
|
|
return this.$store.state.patient.puasa_tp
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_puasa_tp", val)
|
|
}
|
|
},
|
|
loading_save_phlebotomy: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_phlebotomy
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_phlebotomy", val)
|
|
}
|
|
},
|
|
note_phlebotomy: {
|
|
get() {
|
|
return this.$store.state.patient.note_phlebotomy
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_note_phlebotomy", val)
|
|
}
|
|
},
|
|
audiometri_master() {
|
|
return this.$store.state.patient.audiometri_master
|
|
},
|
|
audiometri_answers: {
|
|
get() {
|
|
return this.$store.state.patient.audiometri_answers
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_audiometri_answers", val)
|
|
}
|
|
},
|
|
audiometri_is_saved: {
|
|
get() {
|
|
return this.$store.state.patient.audiometri_is_saved
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_audiometri_is_saved", val)
|
|
}
|
|
},
|
|
loading_save_audiometri: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_audiometri
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_audiometri", val)
|
|
}
|
|
},
|
|
spirometri_master() {
|
|
return this.$store.state.patient.spirometri_master
|
|
},
|
|
spirometri_answers: {
|
|
get() {
|
|
return this.$store.state.patient.spirometri_answers
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_spirometri_answers", val)
|
|
}
|
|
},
|
|
spirometri_is_saved: {
|
|
get() {
|
|
return this.$store.state.patient.spirometri_is_saved
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_spirometri_is_saved", val)
|
|
}
|
|
},
|
|
loading_save_quesioner_spirometri: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_quesioner_spirometri
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_quesioner_spirometri", val)
|
|
}
|
|
},
|
|
status_save_quesioner_spirometri: {
|
|
get() {
|
|
return this.$store.state.patient.status_save_quesioner_spirometri
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_status_save_quesioner_spirometri", val)
|
|
}
|
|
},
|
|
audiometri_template: {
|
|
get() {
|
|
return this.$store.state.patient.audiometri_template
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_audiometri_template", val)
|
|
}
|
|
},
|
|
loading_save_quesioner_audiometri: {
|
|
get() {
|
|
return this.$store.state.patient.loading_save_quesioner_audiometri
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_loading_save_quesioner_audiometri", val)
|
|
}
|
|
},
|
|
status_save_quesioner_audiometri: {
|
|
get() {
|
|
return this.$store.state.patient.status_save_quesioner_audiometri
|
|
},
|
|
set(val) {
|
|
this.$store.commit("patient/update_status_save_quesioner_audiometri", val)
|
|
}
|
|
},
|
|
|
|
},
|
|
data() {
|
|
return {
|
|
error_tb: '',
|
|
error_bb: '',
|
|
off_visus: false,
|
|
imageSrc: './images/undraw_the_search_s0xf.png',
|
|
items2: [{
|
|
icon: 'assignment',
|
|
iconClass: 'blue white--text',
|
|
title: 'Vacation itinerary',
|
|
subtitle: 'Jan 20, 2014'
|
|
},
|
|
{
|
|
icon: 'call_to_action',
|
|
iconClass: 'amber white--text',
|
|
title: 'Kitchen remodel',
|
|
subtitle: 'Jan 10, 2014'
|
|
}
|
|
],
|
|
items: [{
|
|
action: 'healing',
|
|
title: 'Paket Pria 2024',
|
|
items: [{
|
|
title: 'List Item'
|
|
},
|
|
{
|
|
title: 'List Item'
|
|
},
|
|
{
|
|
title: 'List Item'
|
|
}
|
|
]
|
|
}]
|
|
}
|
|
},
|
|
watch: {
|
|
off_visus: {
|
|
handler(val) {
|
|
if (val) {
|
|
this.tkod = 'OFF'
|
|
this.tkos = 'OFF'
|
|
this.dkod = 'OFF'
|
|
this.dkos = 'OFF'
|
|
} else {
|
|
this.tkod = ''
|
|
this.tkos = ''
|
|
this.dkod = ''
|
|
this.dkos = ''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|
|
</script>
|
|
<style>
|
|
[v-cloak] {
|
|
display: none
|
|
}
|
|
|
|
.left {}
|
|
|
|
.right {}
|
|
|
|
.table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
.table td,
|
|
.table th {
|
|
border: 1px solid #ddd;
|
|
padding: 8px;
|
|
}
|
|
|
|
.table tr:nth-child(even) {
|
|
background-color: #f2f2f2;
|
|
}
|
|
|
|
.table tr:hover {
|
|
background-color: #ddd;
|
|
}
|
|
|
|
.table th {
|
|
padding-top: 12px;
|
|
padding-bottom: 12px;
|
|
text-align: left;
|
|
background-color: #4CAF50;
|
|
color: white;
|
|
}
|
|
</style>
|
|
</body>
|
|
|
|
</html>
|