461 lines
15 KiB
Vue
461 lines
15 KiB
Vue
<template>
|
|
<v-layout class="fill-height" column>
|
|
<v-card class="grow">
|
|
<!-- <v-subheader>
|
|
<h3 class="title">DAFTAR PASIEN</h3>
|
|
</v-subheader> -->
|
|
<hr style="border-top:0px solid #c8c8c8;" />
|
|
<v-data-table
|
|
:headers="headers" :items="pxs"
|
|
:loading="isLoading"
|
|
hide-actions class="xelevation-1">
|
|
<template slot="items" slot-scope="props">
|
|
<td class="text-xs-left pt-2 pb-2 pr-2 green--text" v-bind:class="[margin_left(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'N'" colspan="8">
|
|
{{ props.item.t_testname }}
|
|
</td>
|
|
|
|
<td class="text-xs-left pt-2 pb-2 pr-2 green--text" v-bind:class="[margin_left(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
|
{{ props.item.t_testname }}
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'" style="position: relative">
|
|
<span class="body-1">{{init_result(props.item)}}</span>
|
|
<!-- <v-textarea
|
|
label=""
|
|
solo
|
|
rows=1
|
|
hide-details
|
|
v-on:keyup="update_result(props.index, $event.target.value)"
|
|
:value="props.item.result"
|
|
flat
|
|
readonly
|
|
></v-textarea> -->
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
|
{{ !init_blank(props.item) ? props.item.result_flag : '' }}
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
|
{{ !init_blank(props.item) ? props.item.normal_note : '' }}
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
|
{{ !init_blank(props.item) ? props.item.unit_name : '' }}
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
|
{{ !init_blank(props.item) ? props.item.methode_name : '' }}
|
|
</td>
|
|
|
|
|
|
|
|
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), verification_color(props.item)]"
|
|
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
|
<!-- <v-textarea
|
|
label=""
|
|
solo
|
|
rows=1
|
|
hide-details
|
|
v-on:keyup="update_note(props.index, $event.target.value)"
|
|
:value="props.item.note"
|
|
flat
|
|
readonly
|
|
></v-textarea> -->
|
|
<span class="body-1">{{props.item.note}}</span>
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-1" v-if="props.item.is_result == 'Y' && props.item.result != '' && props.item.result != null" @click="select(props.index, props.item)" v-bind:class="[verification_color(props.item)]">
|
|
<div class="text-xs-center">
|
|
<div class="text-xs-center">
|
|
<v-btn fab
|
|
:dark="props.item.verification_old != 'Y'"
|
|
:disabled="props.item.verification_old == 'Y'"
|
|
small color="red" class="ma-0 float-left" @click="reject(props.item)">
|
|
<v-icon>clear</v-icon>
|
|
</v-btn>
|
|
|
|
<v-btn fab
|
|
:dark="verification(props.item) == 'Y' && props.item.validation != 'Y'"
|
|
:disabled="props.item.validation == 'Y'"
|
|
small :color="verification(props.item) == 'Y' ? 'green' : 'white'" class="ml-1 ma-0 float-left" @click="verification_change(props.index)" >
|
|
<v-icon>done</v-icon>
|
|
</v-btn>
|
|
<!-- <v-checkbox label="" :input-value="verification(props.item)" value="Y" false-value="N" @change="verification_change($event, props.index)" class="mt-1 mr-1 ml-0 mb-0 cb-auto-ver" hide-details></v-checkbox> -->
|
|
|
|
<v-btn fab
|
|
:dark="props.item.sample_handling_perfect == 'Y'"
|
|
|
|
small :color="delta_color(props.item)+' lighten-2'" class="ma-0 ml-3" @click="select(props.index, props.item); trend(props.item.id)">
|
|
<v-icon>equalizer</v-icon>
|
|
</v-btn>
|
|
|
|
<v-btn fab
|
|
:dark="props.item.sample_handling_perfect == 'Y'"
|
|
|
|
small :color="delta_color(props.item)+' lighten-2'" class="ma-0" @click="select(props.index, props.item); delta(props.item.id)">
|
|
<span class="icon-delta"></span>
|
|
</v-btn>
|
|
</div>
|
|
</div>
|
|
|
|
</td>
|
|
|
|
<td class="text-xs-left pa-1" v-if="props.item.is_result == 'Y' && (props.item.result == '' || props.item.result == null)" v-bind:class="[verification_color(props.item)]">
|
|
|
|
</td>
|
|
</template>
|
|
|
|
</v-data-table>
|
|
|
|
</v-card>
|
|
|
|
<one-process-re-rerun-result></one-process-re-rerun-result>
|
|
<one-process-re-history></one-process-re-history>
|
|
<v-snackbar
|
|
v-model="snackbar"
|
|
:timeout="5000"
|
|
bottom right
|
|
>
|
|
{{ save_text }}
|
|
<v-btn
|
|
color="pink"
|
|
flat
|
|
@click="snackbar = false"
|
|
>
|
|
Close
|
|
</v-btn>
|
|
</v-snackbar>
|
|
|
|
<v-snackbar
|
|
v-model="snackbar_err"
|
|
:timeout="5000"
|
|
bottom right
|
|
color="red"
|
|
>
|
|
{{ err_text }}
|
|
<v-btn
|
|
color="pink"
|
|
flat
|
|
@click="snackbar_err = false"
|
|
>
|
|
Close
|
|
</v-btn>
|
|
</v-snackbar>
|
|
|
|
<one-process-rv-dialog-trend></one-process-rv-dialog-trend>
|
|
<one-process-rv-dialog-reject></one-process-rv-dialog-reject>
|
|
</v-layout>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.searchbox .v-input.v-text-field .v-input__slot{
|
|
min-height:60px;
|
|
}
|
|
.searchbox .v-btn {
|
|
min-height:60px;
|
|
}
|
|
table.v-table tbody td,table.v-table tbody th {
|
|
height: 40px;
|
|
}
|
|
|
|
table.v-table thead tr {
|
|
height: 40px;
|
|
}
|
|
|
|
.btn_rerun {
|
|
position: absolute;
|
|
top: 4px;
|
|
right: 2px
|
|
}
|
|
|
|
.v-btn--floating {
|
|
border-radius: 0%;
|
|
}
|
|
|
|
.cb-auto-ver {
|
|
float: left;
|
|
}
|
|
|
|
.cb-auto-ver .v-icon {
|
|
font-size: 40px;
|
|
}
|
|
|
|
.v-btn--floating.v-btn--small {
|
|
height: 30px;
|
|
width: 30px;
|
|
}
|
|
|
|
.float-left {
|
|
float: left !important
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
module.exports = {
|
|
components : {
|
|
'one-process-re-rerun-result': httpVueLoader('./oneProcessReRerunResult.vue'),
|
|
'one-process-re-history': httpVueLoader('./oneProcessReHistory.vue'),
|
|
'one-process-rv-dialog-trend': httpVueLoader('./oneProcessRvDialogTrend.vue'),
|
|
'one-process-rv-dialog-reject': httpVueLoader('./oneProcessRvDialogReject.vue')
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
query: "",
|
|
save_text: "Data berhasil dikonfirmasi.",
|
|
err_text: "Tidak ada data yang perlu dikonfirmasi !",
|
|
items: [],
|
|
headers: [
|
|
{
|
|
text: "NAMA PEMERIKSAAN",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "15%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "HASIL",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "15%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "FLAG",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "10%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "NILAI NORMAL",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "15%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "UNIT",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "7%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "METODE",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "10%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "CATATAN",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "10%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
},
|
|
{
|
|
text: "VERIFIKASI",
|
|
align: "left",
|
|
sortable: false,
|
|
value: "mr",
|
|
width: "18%",
|
|
class: "pa-2 blue lighten-3 white--text"
|
|
}
|
|
],
|
|
|
|
isLoading: false
|
|
};
|
|
},
|
|
|
|
methods : {
|
|
oneMoment : function(d) {
|
|
return window.oneMoment(d)
|
|
},
|
|
|
|
select (idx, item) {
|
|
this.$store.commit('re_px/update_selected_px', item)
|
|
this.$store.commit('re_px/update_selected_px_idx', idx)
|
|
// this.$store.commit('ver_verification/update_selected_sent_sample', item)
|
|
},
|
|
|
|
is_selected (item) {
|
|
|
|
return ''
|
|
},
|
|
|
|
margin_left (item) {
|
|
if (item.level == 3 || item.level == 2)
|
|
return 'pl-5'
|
|
|
|
return 'pl-2'
|
|
},
|
|
|
|
rerun_me () {
|
|
this.$store.commit('re_px/update_dialog_rerun', true)
|
|
},
|
|
|
|
update_result(idx, result) {
|
|
|
|
let x = this.$store.state.re_px.pxs
|
|
x[idx]['result'] = result
|
|
|
|
this.$store.commit('re_px/update_pxs', {records:x})
|
|
},
|
|
|
|
update_note(idx, note) {
|
|
|
|
let x = this.$store.state.re_px.pxs
|
|
x[idx]['note'] = note
|
|
|
|
this.$store.commit('re_px/update_pxs', {records:x})
|
|
},
|
|
|
|
verification(i) {
|
|
|
|
// console.log("test name = " + i.t_testname + " | verification = " + i.verification + " | sample handling = " + i.sample_handling_perfect + " | delta = " + i.delta_check + " | trend = "+ i.trend_analysis)
|
|
|
|
if (i.verification == "N" || i.verification == "Y")
|
|
return i.verification
|
|
|
|
if (i.sample_handling_perfect != "Y")
|
|
return "N"
|
|
|
|
if (i.delta_check == "N" || i.trend_analysis == "N")
|
|
return "N"
|
|
|
|
return "Y"
|
|
},
|
|
|
|
verification_change(idx) {
|
|
let x = this.$store.state.re_px.pxs
|
|
let e = x[idx].verification
|
|
x[idx].verification = e == 'Y' ? 'N' : 'Y'
|
|
|
|
this.$store.commit("re_px/update_pxs", {records:x})
|
|
},
|
|
|
|
verification_show(idx) {
|
|
this.$store.commit("re_verification/update_dialog_verification", true)
|
|
},
|
|
|
|
trend(x) {
|
|
this.$store.dispatch('re_px/trend_analysis');
|
|
// this.$store.commit('re_px/update_dialog_trend', true)
|
|
},
|
|
|
|
delta(x) {
|
|
this.$store.dispatch('re_px/delta_check')
|
|
this.$store.commit('re_px/update_dialog_trend', true)
|
|
},
|
|
|
|
delta_color(x) {
|
|
if (x.sample_handling_perfect == "N")
|
|
return "grey"
|
|
|
|
if (x.delta_check == "N")
|
|
return "red"
|
|
|
|
return "green"
|
|
},
|
|
|
|
init_result(x) {
|
|
if (x.verification_old == "Y" || x.validation == "Y")
|
|
return x.result
|
|
|
|
// Override
|
|
if (x.resample == "Y") {
|
|
if (x.resample_status == "N")
|
|
return "Bahan belum"
|
|
if (x.resample_status == "R")
|
|
return "Hasil Menyusul"
|
|
if (x.resample_status == "W")
|
|
return x.result
|
|
}
|
|
|
|
if (x.sample_receive != 'Y')
|
|
return "Bahan belum"
|
|
if (x.sample_receive == 'Y' && !x.pre_analytic)
|
|
return "Belum Pre Analitik"
|
|
if (x.sample_receive == 'Y' && x.pre_analytic)
|
|
{
|
|
if (x.sample_worklist_receive == "Y")
|
|
return x.result
|
|
else
|
|
return "Hasil Menyusul"
|
|
}
|
|
},
|
|
|
|
init_blank(x) {
|
|
if (x.verification_old == "Y" || x.validation == "Y")
|
|
return x.result
|
|
|
|
// Override
|
|
if (x.resample == "Y") {
|
|
if (x.resample_status == "N" || x.resample_status == "R")
|
|
return true
|
|
}
|
|
|
|
if (x.sample_receive != 'Y' || !x.pre_analytic || x.sample_worklist_receive != "Y" ||
|
|
x.result == '' || x.result == null)
|
|
return true
|
|
|
|
return false
|
|
},
|
|
|
|
reject(x) {
|
|
this.$store.commit('re_px/update_dialog_reject', true)
|
|
},
|
|
|
|
verification_color(i) {
|
|
if (i.validation == "Y")
|
|
return "green lighten-4"
|
|
if (i.verification_old == "Y")
|
|
return "red lighten-4"
|
|
|
|
return""
|
|
}
|
|
},
|
|
|
|
computed : {
|
|
pxs () {
|
|
return this.$store.state.re_px.pxs
|
|
},
|
|
|
|
icon_info () {
|
|
return window.BASE_URL + '/one-ui/apps/image/info.png'
|
|
},
|
|
|
|
snackbar : {
|
|
get () { return this.$store.state.re_px.snackbar },
|
|
set (v) { this.$store.commit('re_px/update_snackbar', v) }
|
|
},
|
|
|
|
snackbar_err : {
|
|
get () { return this.$store.state.re_px.snackbar_err },
|
|
set (v) { this.$store.commit('re_px/update_snackbar_err', v) }
|
|
}
|
|
},
|
|
|
|
mounted () {
|
|
// this.$store.dispatch('re_patient/search')
|
|
}
|
|
}
|
|
</script>
|