Flatten nested repos
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
<template>
|
||||
<v-menu
|
||||
v-model="menu2"
|
||||
:close-on-content-click="false"
|
||||
:nudge-right="40"
|
||||
lazy
|
||||
transition="scale-transition"
|
||||
offset-y
|
||||
full-width
|
||||
max-width="290px"
|
||||
min-width="290px"
|
||||
>
|
||||
<v-text-field
|
||||
slot="activator"
|
||||
v-model="computedDateFormatted"
|
||||
:label=init_label
|
||||
hint="DD-MM-YYYY format"
|
||||
persistent-hint
|
||||
readonly
|
||||
solo
|
||||
hide-details
|
||||
class="ma-1"
|
||||
></v-text-field>
|
||||
<v-date-picker v-model="init_date" no-title @input="menu2 = false"></v-date-picker>
|
||||
</v-menu>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['label', 'date', 'data'],
|
||||
|
||||
data () {
|
||||
return {
|
||||
init_date: this.date ? this.date : new Date().toISOString().substr(0, 10),
|
||||
dateFormatted: this.formatDate(new Date().toISOString().substr(0, 10)),
|
||||
menu1: false,
|
||||
menu2: false,
|
||||
|
||||
init_label: this.label ? this.label : 'Date',
|
||||
init_data: this.data ? this.data : ''
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
computedDateFormatted () {
|
||||
return this.formatDate(this.init_date)
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
init_date (n, o) {
|
||||
this.dateFormatted = this.formatDate(this.init_date)
|
||||
|
||||
this.$emit('change', {"old_date":o, "new_date":n, "data":this.init_data});
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
formatDate (date) {
|
||||
if (!date) return null
|
||||
|
||||
const [year, month, day] = date.split('-')
|
||||
return `${day}-${month}-${year}`
|
||||
},
|
||||
parseDate (date) {
|
||||
if (!date) return null
|
||||
|
||||
const [month, day, year] = date.split('/')
|
||||
return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`
|
||||
},
|
||||
|
||||
emitChange (n, o) {
|
||||
console.log("old:"+o)
|
||||
console.log("new:"+n)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,65 @@
|
||||
<template>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="1500px"
|
||||
height="800px"
|
||||
>
|
||||
|
||||
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline grey lighten-2 pt-2 pb-2"
|
||||
primary-title
|
||||
>
|
||||
Preview Hasil
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
@click="dialog = false"
|
||||
flat
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
<v-layout>
|
||||
<v-flex xs12>
|
||||
<v-divider class="mt-1 mb-1"></v-divider>
|
||||
<object :data="rpt_url"
|
||||
width="100%" height="700px"></object>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
components : {
|
||||
},
|
||||
methods : {
|
||||
},
|
||||
computed : {
|
||||
dialog: {
|
||||
get() {
|
||||
return this.$store.state.re_patient.print_dialog;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit('re_patient/update_print_dialog', val);
|
||||
}
|
||||
},
|
||||
rpt_url () {
|
||||
return this.$store.state.re_patient.rpt_url
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,43 @@
|
||||
<template>
|
||||
<div style="height:30px;
|
||||
position:fixed;bottom:0px;
|
||||
left:50%;
|
||||
color:white;
|
||||
font-size:16px;
|
||||
padding-bottom:5px;
|
||||
font-weight:bold;
|
||||
z-index:999;
|
||||
margin-left:-150px;width:300px;">
|
||||
Pasien hari ini : {{ hari_ini }} , menyusul {{ total - hari_ini}}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
computed: {
|
||||
total() {
|
||||
try {
|
||||
let pxs = this.$store.state.re_patient.patients
|
||||
return pxs.length
|
||||
} catch(e) {
|
||||
return 0
|
||||
}
|
||||
},
|
||||
hari_ini() {
|
||||
try {
|
||||
let pxs = this.$store.state.re_patient.patients
|
||||
let curdate = moment().format('DD.MM.YYYY')
|
||||
let xtot = _.filter(pxs,function(p) {
|
||||
let xdate = moment(p.T_OrderHeaderDate).format('DD.MM.YYYY')
|
||||
return curdate == xdate
|
||||
});
|
||||
return xtot.length
|
||||
} catch(e) {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,84 @@
|
||||
<template>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
max-width="500px"
|
||||
persistent
|
||||
>
|
||||
<v-card>
|
||||
<v-card-text>
|
||||
<v-layout row wrap>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
rows="5"
|
||||
outline
|
||||
label="Catatan Validasi External"
|
||||
style="background-color:rgb(255, 204, 242) "
|
||||
hide-details
|
||||
v-model="validation_note"
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row wrap style="margin-top:10px;">
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
rows="5"
|
||||
style="background-color:rgb(204, 255, 221) "
|
||||
outline
|
||||
label="Catatan Validasi Internal"
|
||||
hide-details
|
||||
v-model="validation_note_internal"
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
|
||||
<v-card-actions>
|
||||
<v-btn color="primary" flat @click="dialog=!dialog">Tutup</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="primary" @click="save">Simpan</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
/* .v-overlay--active {
|
||||
z-index: 1005 !important;
|
||||
}
|
||||
|
||||
.v-dialog__content--active {
|
||||
z-index: 1006 !important;
|
||||
} */
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_patient.dialog_note },
|
||||
set (v) { this.$store.commit('re_patient/update_dialog_note', v) }
|
||||
},
|
||||
|
||||
validation_note : {
|
||||
get () { return this.$store.state.re_patient.validation_note},
|
||||
set (v) { this.$store.commit('re_patient/update_validation_note', v) }
|
||||
},
|
||||
validation_note_internal : {
|
||||
get () { return this.$store.state.re_patient.validation_note_internal},
|
||||
set (v) { this.$store.commit('re_patient/update_validation_note_internal', v) }
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
async save () {
|
||||
await this.$store.dispatch('re_patient/save_note')
|
||||
this.$store.commit("re_patient/update_dialog_note",false)
|
||||
this.$store.dispatch("re_patient/info_req")
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,126 @@
|
||||
<template>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
max-width="500px"
|
||||
persistent
|
||||
>
|
||||
<v-card>
|
||||
<v-card-actions class="note">
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="primary" flat @click="dialog=!dialog">Tutup</v-btn>
|
||||
</v-card-actions>
|
||||
|
||||
<v-card-text class="note">
|
||||
<v-layout row wrap mb-2 v-show="info_req.note_fo != ''">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Catatan FO by {{info_req.foUser}}</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.note_fo}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row wrap mb-2 v-show="info_req.note_fo_ver != ''">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Catatan Screening by {{info_req.screeningUser}}</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.note_fo_ver}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row wrap mb-2 v-show="info_req.note_sampling != ''">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Catatan Specimen by {{info_req.samplingUser}} </h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.note_sampling}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row wrap mb-2 v-show="info_req.note_result_entry != ''">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Catatan Result Entry by {{info_req.resultUser}} </h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.note_result_entry}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
|
||||
|
||||
<v-card-text class="req">
|
||||
<v-layout row wrap mb-2 v-show="info_req.req_fo.length > 0">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Requirement FO</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.req_fo.join(', ')}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout row wrap mb-2 v-show="info_req.req_spec_col.length > 0">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Requirement Specimen Collection</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.req_spec_col.join(', ')}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout row wrap mb-2 v-show="info_req.req_spec_ver.length > 0">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Requirement Specimen Verification</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.req_spec_ver.join(', ')}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout row wrap mb-2 v-show="info_req.req_samp_ver.length > 0">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Requirement Sample Verification</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.req_samp_ver.join(', ')}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout row wrap mb-2 v-show="info_req.req_pre_an.length > 0">
|
||||
<v-flex xs12>
|
||||
<h5 class="caption">Requirement Pre Analitik</h5>
|
||||
<h3 class="title font-weight-regular">{{info_req.req_pre_an.join(', ')}}</h3>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
|
||||
<v-card-actions class="note">
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="primary" flat @click="dialog=!dialog">Tutup</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
|
||||
<style >
|
||||
|
||||
.v-card__actions.note {
|
||||
background-color: #cceeff;
|
||||
}
|
||||
.v-card__text.note {
|
||||
background-color: #ffffcc;
|
||||
}
|
||||
.v-card__text.note h5 {
|
||||
color: #662200;
|
||||
}
|
||||
|
||||
.v-card__text.req{
|
||||
background-color: #ffe6f9 ;
|
||||
}
|
||||
.v-card__text.req h5 {
|
||||
color: #b30000 ;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_patient.dialog_req },
|
||||
set (v) { this.$store.commit('re_patient/update_dialog_req', v) }
|
||||
},
|
||||
|
||||
info_req () {
|
||||
return this.$store.state.re_patient.info_req
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,209 @@
|
||||
<template>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
persistent
|
||||
max-width="1000px"
|
||||
min-height="600px"
|
||||
transition="dialog-transition"
|
||||
>
|
||||
|
||||
<v-layout class="fill-height" column>
|
||||
<v-card class="grow" color="blue-grey lighten-2">
|
||||
<v-card-title primary-title class="title white--text pb-2">
|
||||
HISTORI PEMERIKSAAN
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="white" flat @click="filter_test()">{{text_filter_test}}</v-btn>
|
||||
<v-btn color="white" flat @click="uncheck_all()">Clear Test</v-btn>
|
||||
<v-btn color="white" flat @click="dialog = false">Tutup</v-btn>
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
|
||||
<v-layout v-if="show_filter_test" xs12 row wrap style="background-color:white;padding-top:10px;border-radius:10px 10px 0px 0px;padding-left:10px;">
|
||||
<v-flex xs3 v-for="(p, i) in pxs" v-bind:key="p.code" class="pr-2 pb-1">
|
||||
<v-layout row>
|
||||
<v-flex class="boxoutline" class="text-left" style="padding-top:10px" pl-2 pr-2 xs2>
|
||||
<v-layout row align-left justify-space-between>
|
||||
<v-icon v-if="! px_selected(p.code)" @click="selectPx(p.code)" style="color:red">clear</v-icon>
|
||||
<v-icon v-if="px_selected(p.code)" @click="unSelectPx(p.code)" style="color:green">check</v-icon>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
<v-flex class="boxoutline " style="text-overflow:ellipsis;overflow:hidden;padding-top:10px;" xs11>
|
||||
<span >{{p.name}}</span>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
|
||||
<v-layout row wrap>
|
||||
<v-flex xs12 >
|
||||
<v-card>
|
||||
<v-card-text class="pt-1 pb-1 pl-1 pr-1">
|
||||
<v-data-table
|
||||
:headers="new_headers" :items="result"
|
||||
:loading="isLoading"
|
||||
hide-actions class="elevation-1 table-history"
|
||||
>
|
||||
<template slot="items" slot-scope="props">
|
||||
<td class="text-xs-left pl-2 pr-2 pa-1 green--text" >
|
||||
{{ props.item.px_name }}
|
||||
</td>
|
||||
<td class="text-xs-left pl-2 pr-2 pa-1" >
|
||||
{{ props.item.unit}}
|
||||
</td>
|
||||
|
||||
<td class="text-xs-left pl-2 pr-2 pa-1" v-for="xdate in dates" >
|
||||
{{ props.item.result[xdate] }}
|
||||
</td>
|
||||
</template>
|
||||
</v-data-table>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="white" flat @click="dialog = false">Tutup</v-btn>
|
||||
</v-card-actions>
|
||||
|
||||
|
||||
</v-card>
|
||||
</v-layout>
|
||||
</v-dialog>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
|
||||
.table-history table td {
|
||||
height: 40px !important
|
||||
}
|
||||
|
||||
.boxoutline {
|
||||
color: #000099;
|
||||
border: 1px solid #e6f7ff;
|
||||
justify-content: center;
|
||||
height: 55px;
|
||||
line-height: 25px;
|
||||
padding-left: 5px;
|
||||
background: #b3e7ff;
|
||||
font-size: 14px;
|
||||
border-radius: 1px;
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
.boxoutline:hover {
|
||||
background: #e6f7ff!important;
|
||||
font-size: 14px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data() {
|
||||
return {
|
||||
query: "",
|
||||
items: [],
|
||||
|
||||
isLoading: false,
|
||||
show_filter_test: false
|
||||
};
|
||||
},
|
||||
|
||||
methods : {
|
||||
filter_test() {
|
||||
this.show_filter_test = !this.show_filter_test
|
||||
},
|
||||
oneMoment : function(d) {
|
||||
return window.oneMoment(d)
|
||||
},
|
||||
uncheck_all() {
|
||||
this.$store.commit('re_history/update_selected_px',[])
|
||||
},
|
||||
selectPx(code) {
|
||||
console.log('Select ' + code )
|
||||
let pxs = this.$store.state.re_history.pxs
|
||||
let obj = _.filter(pxs,function(o){ return o.code == code})
|
||||
let spx = this.$store.state.re_history.selected_px
|
||||
let n_spx = _.concat(spx,obj)
|
||||
this.$store.commit('re_history/update_selected_px',n_spx)
|
||||
},
|
||||
unSelectPx(code) {
|
||||
let spx = this.$store.state.re_history.selected_px
|
||||
let new_spx = _.filter(spx,function(o){ return o.code != code })
|
||||
this.$store.commit('re_history/update_selected_px',new_spx)
|
||||
},
|
||||
px_selected(code) {
|
||||
let spx = this.$store.state.re_history.selected_px
|
||||
let rst = _.findIndex(spx,{'code':code})
|
||||
if (rst == -1 ) return false
|
||||
return true
|
||||
},
|
||||
},
|
||||
|
||||
computed : {
|
||||
dates() {
|
||||
return this.$store.state.re_history.dates
|
||||
},
|
||||
text_filter_test() {
|
||||
if (this.show_filter_test) return "Hide Test"
|
||||
return "Show Test"
|
||||
},
|
||||
new_headers() {
|
||||
let headers = [
|
||||
{
|
||||
text: "PEMERIKSAAN",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
width: "45%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "Unit",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "16%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
} ]
|
||||
|
||||
for(let i =0; i< this.dates.length ; i++ ) {
|
||||
headers.push({
|
||||
text: this.dates[i],
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "15%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
})
|
||||
}
|
||||
|
||||
return headers
|
||||
},
|
||||
result () {
|
||||
let spx = this.$store.state.re_history.selected_px
|
||||
let rst = this.$store.state.re_history.result
|
||||
let new_rst = _.filter(rst, function(r) {
|
||||
return _.findIndex(spx,{'code':r.code}) > -1
|
||||
})
|
||||
return new_rst
|
||||
},
|
||||
pxs () {
|
||||
return this.$store.state.re_history.pxs
|
||||
},
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_history.dialog_history },
|
||||
set (v) { this.$store.commit('re_history/update_dialog_history', v) }
|
||||
},
|
||||
selected_px: {
|
||||
get () { return this.$store.state.re_history.selected_px }
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,188 @@
|
||||
<template>
|
||||
<v-layout row wrap>
|
||||
<v-flex xs12>
|
||||
<v-card class="pa-2" v-show="!detail">
|
||||
<v-layout row wrap>
|
||||
<v-flex xs3>
|
||||
<div class="caption font-weight-light">No Reg / Tanggal</div>
|
||||
<div class="subheading">{{selected_patient.T_OrderHeaderLabNumber}} / {{order_date}}</div>
|
||||
</v-flex>
|
||||
<v-flex xs3>
|
||||
<div class="caption font-weight-light">Nama / Jenis Kelamin</div>
|
||||
<div class="subheading">{{selected_patient.M_PatientName}} / {{selected_patient.M_SexName}}</div>
|
||||
</v-flex>
|
||||
<v-flex xs3>
|
||||
<div class="caption font-weight-light">DOB / Umur</div>
|
||||
<div class="subheading">{{dob_date}} / {{age}}</div>
|
||||
</v-flex>
|
||||
<v-flex xs3>
|
||||
<div class="caption font-weight-light">Pengirim</div>
|
||||
<div class="subheading">{{selected_patient.doctor_sender_name}} </div>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-btn absolute dark top right
|
||||
color="black" flat depressed
|
||||
@click="detail=!detail"
|
||||
class="btn-detail"
|
||||
>
|
||||
<v-icon>keyboard_arrow_up</v-icon>
|
||||
</v-btn>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
<v-flex xs12>
|
||||
<v-card class="pa-2" v-show="detail">
|
||||
<v-layout row wrap>
|
||||
<v-flex xs6>
|
||||
<div class="caption font-weight-light">No Reg / Tanggal</div>
|
||||
<div class="subheading">{{selected_patient.T_OrderHeaderLabNumber}} / {{order_date}}</div>
|
||||
|
||||
<div class="caption font-weight-light mt-2">Nama / Jenis Kelamin</div>
|
||||
<div class="subheading">{{selected_patient.M_PatientName}} / {{selected_patient.M_SexName}}</div>
|
||||
|
||||
<div class="caption font-weight-light mt-2">DOB / Umur</div>
|
||||
<div class="subheading">{{dob_date}} / {{age}}</div>
|
||||
|
||||
<div class="caption font-weight-light mt-2">Phone / Janji hasil</div>
|
||||
<div class="subheading">{{selected_patient.M_PatientHP}} / {{selected_patient.order_promise?selected_patient.order_promise.join(', '):''}}</div>
|
||||
<div class="caption font-weight-light mt-2">Diagnose</div>
|
||||
<div class="subheading">{{selected_patient.T_OrderHeaderDiagnose}}</div>
|
||||
</v-flex>
|
||||
<v-flex xs6>
|
||||
<div class="caption font-weight-light">Kel. Pelanggan</div>
|
||||
<div class="subheading">{{selected_patient.CorporateName}} </div>
|
||||
|
||||
<div class="caption font-weight-light mt-2">Pengirim</div>
|
||||
<div class="subheading">{{selected_patient.doctor_sender_name}} </div>
|
||||
|
||||
<div class="caption font-weight-light mt-2">Pengiriman Hasil</div>
|
||||
<div class="subheading">{{selected_patient.deliveries?selected_patient.deliveries.join(", "):''}} </div>
|
||||
|
||||
<div class="caption font-weight-light mt-2">Format Hasil</div>
|
||||
<div class="subheading">{{langs}} </div>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
|
||||
|
||||
<v-layout row wrap v-show="false">
|
||||
<v-flex xs4 pr-2>
|
||||
<v-text-field
|
||||
label="Catatan FO"
|
||||
outline
|
||||
readonly
|
||||
hide-details
|
||||
v-model="selected_patient.T_OrderHeaderFoNote"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
|
||||
<v-flex xs4 pr-2>
|
||||
<v-text-field
|
||||
label="Catatan Sampling"
|
||||
outline
|
||||
readonly
|
||||
hide-details
|
||||
v-model="selected_patient.T_OrderHeaderSamplingNote"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
|
||||
<v-flex xs4>
|
||||
<v-text-field
|
||||
label="Catatan Sample Handling"
|
||||
outline
|
||||
readonly
|
||||
hide-details
|
||||
v-model="selected_patient.T_OrderHeaderResultNote"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-btn absolute dark top right
|
||||
color="black" flat depressed
|
||||
@click="detail=!detail"
|
||||
class="btn-detail"
|
||||
>
|
||||
<v-icon>keyboard_arrow_down</v-icon>
|
||||
</v-btn>
|
||||
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.btn-detail {
|
||||
min-width: 0px !important;
|
||||
height: auto;
|
||||
padding: 0px;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports =
|
||||
{
|
||||
data() {
|
||||
return {
|
||||
detail: false
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
selected_patient () {
|
||||
let x = this.$store.state.re_patient.selected_patient
|
||||
if (x)
|
||||
return x
|
||||
return {}
|
||||
},
|
||||
|
||||
order_date() {
|
||||
let d = this.selected_patient.T_OrderHeaderDate
|
||||
let e = ''
|
||||
try {
|
||||
e = d.substr(0,10).split('-').reverse().join('-')
|
||||
} catch(e) { /*console.log(e.message)*/ }
|
||||
|
||||
return e
|
||||
},
|
||||
|
||||
dob_date() {
|
||||
let d = this.selected_patient.M_PatientDOB
|
||||
let e = ''
|
||||
try {
|
||||
e = d.substr(0,10).split('-').reverse().join('-')
|
||||
} catch(e) { /*console.log(e.message)*/ }
|
||||
|
||||
return e
|
||||
},
|
||||
|
||||
age() {
|
||||
let d = this.selected_patient.T_OrderHeaderM_PatientAge
|
||||
let e = ''
|
||||
try {
|
||||
e = d.replace(/tahun/, 'th').replace(/bulan/, 'bl').replace(/hari/, 'hr')
|
||||
} catch(e) { /*console.log(e.message)*/ }
|
||||
|
||||
return e
|
||||
},
|
||||
|
||||
langs() {
|
||||
let x = this.selected_patient
|
||||
if (!x) return ''
|
||||
|
||||
let si_01 = x.T_OrderHeaderLangIsSI == 'Y' ? ' (SI)' : ''
|
||||
let si_02 = x.T_OrderHeaderAddOnSecondLangIsSI == 'Y' ? ' (SI)' : ''
|
||||
|
||||
if (!x.SecondM_LangID) return x.M_LangName + si_01
|
||||
|
||||
return x.M_LangName + si_01 + ', ' + x.SecondM_LangName + si_02
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,256 @@
|
||||
<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;" />
|
||||
<span class="one-critical-value-header" :data-header-id="selected_patient.T_OrderHeaderID" ></span>
|
||||
<div class="one-auto-vv-status"></div>
|
||||
<v-data-table
|
||||
:headers="headers" :items="patients"
|
||||
:loading="isLoading"
|
||||
hide-actions class="xelevation-1">
|
||||
<template slot="items" slot-scope="props">
|
||||
<tr :class="{
|
||||
'susulan' : is_susulan(props.item),
|
||||
'verif_done': is_verif_done(props.item), 'verif_partial': is_verif_partial(props.item),
|
||||
'valid_done': is_valid_done(props.item), 'valid_partial':is_valid_partial(props.item),
|
||||
'kirim_hasil': is_kirim(props.item) }"
|
||||
>
|
||||
<td
|
||||
class="text-xs-left pa-2 green--text" v-bind:class="[ is_cito(props.item)]"
|
||||
@click="select(props.item)">
|
||||
<span style="color:black">{{ props.item.T_OrderHeaderLabNumber }}</span><br/>
|
||||
<span style="color:#660000">{{props.item.T_OrderHeaderLabNumberExt}}</span>
|
||||
</td>
|
||||
<td
|
||||
class="text-xs-left pa-2" v-bind:class="[ is_cito(props.item)]"
|
||||
@click="select(props.item)">
|
||||
{{ props.item.M_PatientName }}<br/>
|
||||
<span style="color:#660000">{{format_date(props.item.T_OrderHeaderDate)}}</span>
|
||||
<i aria-hidden="true" v-if="is_selected(props.item)"
|
||||
style="float:right; position:relative; top:-10px; right:50px;z-index:9"
|
||||
class="v-icon material-icons theme--dark blue--text">pan_tool</i>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
</v-data-table>
|
||||
<v-pagination
|
||||
v-model="curr_patient_page"
|
||||
:length="total_patient_page"
|
||||
:total-visible="5"
|
||||
@input="change_page"
|
||||
></v-pagination>
|
||||
</v-card>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
div.v-table__overflow {
|
||||
height:680px!important;
|
||||
overflow-y:scroll;
|
||||
}
|
||||
tr.susulan {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%, white 5%);
|
||||
}
|
||||
tr.susulan.verif_partial{
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%, white 5%, white 40%,yellow 70%);
|
||||
}
|
||||
tr.susulan.verif_done {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%, yellow 5%);
|
||||
}
|
||||
tr.susulan.verif_partial.valid_partial {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699 20%,white 30%, white 70%, yellow 80%);
|
||||
}
|
||||
tr.susulan.verif_done.valid_partial {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699 40%,yellow 60%);
|
||||
}
|
||||
tr.susulan.valid_done{
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699,#99e699, #99e699, #99e699);
|
||||
}
|
||||
tr.susulan.verif_partial.valid_partial.kirim_hasil {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699 20%,white 30%, white 70%, yellow 80%,
|
||||
yellow 95%, #b800e6 95%);
|
||||
}
|
||||
tr.susulan.verif_done.valid_partial.kirim_hasil {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699 40%,yellow 60%,
|
||||
yellow 95%, #b800e6 95% );
|
||||
}
|
||||
tr.susulan.verif_done.kirim_hasil {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699 40%,yellow 60%,
|
||||
yellow 95%, #b800e6 95% );
|
||||
}
|
||||
tr.susulan.valid_done.kirim_hasil {
|
||||
background-image: linear-gradient(to right, rgba(255, 0, 0,0.9) 5%,#99e699 5%, #99e699,#99e699, #99e699, #99e699,
|
||||
yellow 95%, #b800e6 95% );
|
||||
}
|
||||
|
||||
|
||||
|
||||
tr.verif_partial{
|
||||
background-image: linear-gradient(to right, white 40%,yellow 70%);
|
||||
}
|
||||
tr.verif_done {
|
||||
background-image: linear-gradient(to right, yellow,yellow, yellow, yellow);
|
||||
}
|
||||
tr.verif_partial.valid_partial {
|
||||
background-image: linear-gradient(to right, #99e699 20%,white 30%, white 70%, yellow 80%);
|
||||
}
|
||||
tr.verif_done.valid_partial {
|
||||
background-image: linear-gradient(to right, #99e699 40%,yellow 60%);
|
||||
}
|
||||
tr.valid_done{
|
||||
background-image: linear-gradient(to right, #99e699,#99e699, #99e699, #99e699);
|
||||
}
|
||||
|
||||
tr.verif_partial.valid_partial.kirim_hasil {
|
||||
background-image: linear-gradient(to right, #99e699 20%,white 30%, white 70%, yellow 80%, yellow 95%, #b800e6 95% );
|
||||
}
|
||||
tr.verif_done.valid_partial.kirim_hasil {
|
||||
background-image: linear-gradient(to right, #99e699 40%,yellow 60%, yellow 95%, #b800e6 95% );
|
||||
}
|
||||
tr.valid_done.kirim_hasil {
|
||||
background-image: linear-gradient(to right, #99e699,#99e699, #99e699, #99e699, yellow 95%, #b800e6 95% );
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data() {
|
||||
return {
|
||||
query: "",
|
||||
items: [],
|
||||
headers: [
|
||||
{
|
||||
text: "NO REG",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "30%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "NAMA",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "70%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
methods : {
|
||||
is_susulan(i) {
|
||||
let cur_date = moment().format('DD.MM.YYYY')
|
||||
let o_date = moment(i.T_OrderHeaderDate).format('DD.MM.YYYY')
|
||||
|
||||
return cur_date != o_date
|
||||
},
|
||||
oneMoment : function(d) {
|
||||
return window.oneMoment(d)
|
||||
},
|
||||
is_cito (item) {
|
||||
let x = this.$store.state.re_patient.selected_patient
|
||||
if (!x)
|
||||
return ''
|
||||
|
||||
if (item.T_OrderHeaderIsCito == "Y")
|
||||
return 'amber'
|
||||
|
||||
return ''
|
||||
},
|
||||
is_kirim(i) {
|
||||
return i.T_OrderHeaderAddOnReadyPrint== 'P' || i.T_OrderHeaderAddOnReadyPrint == 'Y'
|
||||
},
|
||||
is_valid_partial(i) {
|
||||
return i.T_OrderHeaderAddOnValidationDone == 'P'
|
||||
},
|
||||
is_valid_done(i) {
|
||||
return i.T_OrderHeaderAddOnValidationDone == 'Y'
|
||||
},
|
||||
is_verif_partial(i) {
|
||||
return i.T_OrderHeaderAddOnVerificationDone == 'P'
|
||||
},
|
||||
is_verif_done(i) {
|
||||
return i.T_OrderHeaderAddOnVerificationDone == 'Y'
|
||||
},
|
||||
format_date(p) {
|
||||
return moment(p).format("DD.MM.YYYY HH:mm")
|
||||
},
|
||||
select (item) {
|
||||
this.$store.commit('re_patient/update_selected_patient', item)
|
||||
this.$store.commit('re_px/update_id', item.T_OrderHeaderID)
|
||||
this.$store.dispatch('re_px/search')
|
||||
this.$store.dispatch('re_patient/info_req')
|
||||
// this.$store.commit('ver_verification/update_selected_sent_sample', item)
|
||||
},
|
||||
|
||||
is_selected (item) {
|
||||
let x = this.$store.state.re_patient.selected_patient
|
||||
if (!x)
|
||||
return false
|
||||
|
||||
if (x.T_OrderHeaderID == item.T_OrderHeaderID)
|
||||
return true
|
||||
|
||||
return false
|
||||
},
|
||||
|
||||
change_page(x) {
|
||||
this.curr_patient_page = x
|
||||
this.$store.dispatch('re_patient/search')
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
isLoading() {
|
||||
return this.$store.state.re_patient.search_status == 1
|
||||
},
|
||||
patients () {
|
||||
return this.$store.state.re_patient.patients
|
||||
},
|
||||
|
||||
total_patient () {
|
||||
return this.$store.state.re_patient.total_patient
|
||||
},
|
||||
|
||||
total_patient_page () {
|
||||
return this.$store.state.re_patient.total_patient_page
|
||||
},
|
||||
|
||||
curr_patient_page : {
|
||||
get () { return this.$store.state.re_patient.curr_patient_page },
|
||||
set (v) { this.$store.commit('re_patient/update_curr_patient_page', v) }
|
||||
},
|
||||
selected_patient() {
|
||||
return this.$store.state.re_patient.selected_patient;
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
this.$store.dispatch('re_patient/search')
|
||||
this.$store.dispatch('re_px/getflagbloodtype')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,695 @@
|
||||
<template>
|
||||
<v-layout class="fill-height flex-card" column>
|
||||
<v-card class="fill-height">
|
||||
<!-- <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), validation_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), validation_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), validation_color(props.item)]"
|
||||
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'"
|
||||
style="position: relative">
|
||||
<span v-if="props.item.ResultGroupName === 'LAB'" class="body-1">{{ init_result(props.item) }}
|
||||
<v-btn style="width: 28px;padding-bottom: 10px;"
|
||||
v-if="props.item.is_quantitative == 'Y' && props.item.result_instrument_n > 0"
|
||||
color="blue lighten-2" class="btn_rerun" icon flat small
|
||||
@click="rerun_me(props.index, props.item)">
|
||||
<v-img :src="icon_info" aspect-ratio="1" height="15" contain></v-img>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'FNA'" class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogFNA(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'Preparasi Sperma'"
|
||||
class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogPreparasiSperma(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'Cytologi'" class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogCytologi(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'Patologi Anatomi'"
|
||||
class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogPatologiAnatomy(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'Papsmear'" class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogPapsmear(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'Pap Smear (Liquid C Prep)'"
|
||||
class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogLcprep(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'Mikro'" class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogMikro(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span v-if="props.item.ResultGroupName === 'DFI'" class="body-1">{{ init_result(props.item) }}
|
||||
|
||||
<v-btn fab v-if="props.item.result === null || props.item.result === ''" small color="grey"
|
||||
class="ma-0 ml-2">
|
||||
<v-icon>description</v-icon>
|
||||
</v-btn>
|
||||
<v-btn fab v-if="props.item.result !== null && props.item.result !== ''" dark small color="#26c6da"
|
||||
class="ma-0 ml-2" @click="openDialogDNAFRagmentasi(props.item)">
|
||||
<v-icon small>description</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
<span>
|
||||
<v-btn v-if="props.item.nattest_id === selected_flagbloodtype.FlagBloodTypeNat_TestID" style="min-width: 25px; height: 25px; margin: 0;"
|
||||
small class="ml-1 text-xs-right"
|
||||
title="View image golongan darah"
|
||||
color="red"
|
||||
@click="openDialogGolonganDarah(props.item)"
|
||||
>
|
||||
<v-icon small color="white">add</v-icon>
|
||||
</v-btn>
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), validation_color(props.item)]"
|
||||
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
||||
<span v-if="props.item.is_result == 'Y'" class="one-critical-value" :data-detail-id="props.item.id"
|
||||
style="margin-right:20px"></span>
|
||||
|
||||
{{ !init_blank(props.item) ? props.item.result_flag : "" }}
|
||||
</td>
|
||||
<td class="text-xs-left pa-2" v-bind:class="[is_selected(props.item), validation_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), validation_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), validation_color(props.item)]"
|
||||
@click="select(props.index, props.item)" v-if="props.item.is_result == 'Y'">
|
||||
<span class="body-1">{{ !init_blank(props.item) ? props.item.note : "" }}</span>
|
||||
</td>
|
||||
|
||||
<td class="text-xs-center pa-1" v-if="props.item.is_result == 'Y'"
|
||||
v-bind:class="[validation_color(props.item)]" @click="select(props.index, props.item)">
|
||||
<div class="text-xs-center" v-if="parseInt(props.item.IsRefer) > 0">
|
||||
<div class="text-xs-center">
|
||||
<v-btn v-if="props.item.has_critical_value == 'N'" fab :dark="props.item.validation_old != 'Y'" :disabled="props.item.validation_old == 'Y'"
|
||||
small color="red" class="ma-0 float-left" @click="reject(props.item)"
|
||||
v-show="props.item.verification == 'Y'">
|
||||
<v-icon>clear</v-icon>
|
||||
</v-btn>
|
||||
|
||||
<v-btn v-if="props.item.has_critical_value == 'N'" fab dark small :color="props.item.validation == 'Y' ? 'green' : 'grey'"
|
||||
class="ml-1 ma-0 float-left" @click="validation_y(props.index)"
|
||||
v-show="props.item.verification == 'Y'">
|
||||
<v-icon>done</v-icon>
|
||||
</v-btn>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
|
||||
<td class="text-xs-center pa-1" v-if="props.item.is_result == 'Y'"
|
||||
v-bind:class="[validation_color(props.item)]">
|
||||
<v-btn dark fab v-if="props.item.has_critical_value == 'Y'" small color="red" class="ma-0 float-left">
|
||||
<v-icon dark>warning</v-icon>
|
||||
</v-btn>
|
||||
<!--<div class="text-xs-center">
|
||||
<div class="text-xs-center">
|
||||
<div style="position:relative;display:inline-block;min-width:80px;padding:0px;"
|
||||
v-if="show_critical(props.item)" class="one-auto-vv"
|
||||
:data-header-id="selected_patient.T_OrderHeaderID" :data-detail-id="props.item.id"> </div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
</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-mr></one-process-rv-dialog-mr>
|
||||
<one-process-rv-dialog-unval></one-process-rv-dialog-unval>
|
||||
<one-process-re-fna></one-process-re-fna>
|
||||
<one-process-re-cytologi></one-process-re-cytologi>
|
||||
<one-process-re-papsmear></one-process-re-papsmear>
|
||||
<one-process-re-lcprep></one-process-re-lcprep>
|
||||
<one-process-re-mikro></one-process-re-mikro>
|
||||
<one-process-re-preparasi-sperma></one-process-re-preparasi-sperma>
|
||||
<one-process-re-dnafragmentasi></one-process-re-dnafragmentasi>
|
||||
<one-process-re-patologianatomy></one-process-re-patologianatomy>
|
||||
<one-process-re-golongandarah></one-process-re-golongandarah>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
div.v-table__overflow {
|
||||
height: 640px !important;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.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: 10px;
|
||||
right: 2px
|
||||
}
|
||||
|
||||
.flex-card {
|
||||
min-height: -webkit-min-content;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.v-text-field.v-text-field--solo .v-input__control {
|
||||
min-height: 40px;
|
||||
}
|
||||
|
||||
.v-textarea.v-text-field--box.v-text-field--single-line .v-text-field__prefix,
|
||||
.v-textarea.v-text-field--box.v-text-field--single-line textarea,
|
||||
.v-textarea.v-text-field--enclosed.v-text-field--single-line .v-text-field__prefix,
|
||||
.v-textarea.v-text-field--enclosed.v-text-field--single-line textarea {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.v-btn--floating {
|
||||
border-radius: 0%;
|
||||
}
|
||||
|
||||
/* .cb-auto-ver {
|
||||
float: left;
|
||||
} */
|
||||
|
||||
.cb-auto-ver .v-icon {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.cb-auto-ver label {
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.v-btn--floating.v-btn--small {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.v-input--selection-controls__ripple {
|
||||
position: relative !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
let ts = '?ts=' + moment().format('YYMMDDhhmmss')
|
||||
module.exports = {
|
||||
components: {
|
||||
'one-process-re-rerun-result': httpVueLoader('./oneProcessReRerunResult.vue' + ts),
|
||||
'one-process-re-history': httpVueLoader('./oneProcessReHistory.vue' + ts),
|
||||
'one-process-rv-dialog-mr': httpVueLoader('./oneProcessRvDialogMr.vue' + ts),
|
||||
'one-process-rv-dialog-trend': httpVueLoader('./oneProcessRvDialogTrend.vue' + ts),
|
||||
'one-process-rv-dialog-unval': httpVueLoader('./oneProcessRvDialogUnval.vue' + ts),
|
||||
'one-process-re-fna': httpVueLoader('./oneResultFNA.vue' + ts),
|
||||
'one-process-re-cytologi': httpVueLoader('./oneResultCytologi.vue' + ts),
|
||||
'one-process-re-papsmear': httpVueLoader('./oneResultPapsmear.vue' + ts),
|
||||
'one-process-re-lcprep': httpVueLoader('./oneResultLcprep.vue' + ts),
|
||||
'one-process-re-mikro': httpVueLoader('./oneResultMikro.vue' + ts),
|
||||
'one-process-re-preparasi-sperma': httpVueLoader('./oneResultPreparasiSperma.vue' + ts),
|
||||
'one-process-re-dnafragmentasi': httpVueLoader('./oneResultDNAFragmentasi.vue' + ts),
|
||||
'one-process-re-patologianatomy': httpVueLoader('./oneResultPatologyAnatomy.vue' + ts),
|
||||
'one-process-re-golongandarah':httpVueLoader('./openDialogGolonganDarah.vue' + ts )
|
||||
},
|
||||
|
||||
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: "10%",
|
||||
// class: "pa-2 blue lighten-3 white--text"
|
||||
// },
|
||||
{
|
||||
text: "METODE",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "15%",
|
||||
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: "VALIDASI",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "8%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "MR",
|
||||
align: "center",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "20%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
}
|
||||
],
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
show_critical(item) {
|
||||
return item.is_result == "Y" && (item.verification == "Y" || item.old_validation == "Y");
|
||||
},
|
||||
openDialogDNAFRagmentasi(value) {
|
||||
|
||||
this.$store.dispatch("re_dnafragmentasi/get_dnafragmentasiresult", value)
|
||||
},
|
||||
openDialogCytologi(value) {
|
||||
this.$store.dispatch("re_cytologi/get_cytologiresult", value)
|
||||
|
||||
},
|
||||
openDialogMikro(value) {
|
||||
this.$store.commit("re_mikro/update_selected_mikro", value)
|
||||
this.$store.dispatch("re_mikro/get_mikroresult", value)
|
||||
},
|
||||
openDialogFNA(value) {
|
||||
this.$store.dispatch("re_fna/get_fnaresult", value)
|
||||
},
|
||||
openDialogPatologiAnatomy(value) {
|
||||
//this.$store.commit("re_patologianatomy/update_selected_patologi_anatomy",value)
|
||||
console.log('ini pa')
|
||||
this.$store.dispatch("re_patologianatomy/get_patologianatomyresult", value)
|
||||
},
|
||||
openDialogPreparasiSperma(value) {
|
||||
this.$store.dispatch("re_preparasisperma/get_preparasispermaresult", value)
|
||||
},
|
||||
openDialogPapsmear(value) {
|
||||
this.$store.dispatch("re_papsmear/get_papsmearresult", value)
|
||||
},
|
||||
openDialogLcprep(value) {
|
||||
console.log(value)
|
||||
//this.$store.commit("re_lcprep/update_selected_lcprep",value)
|
||||
this.$store.dispatch("re_lcprep/get_lcprepresult", value)
|
||||
},
|
||||
openDialogGolonganDarah(value){
|
||||
this.$store.commit("re_golongandarah/update_selected_golongandarah", value)
|
||||
this.$store.commit("re_golongandarah/update_dialog_golongandarah", true)
|
||||
this.$store.dispatch("re_golongandarah/get_golongandarah",value)
|
||||
},
|
||||
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_validation/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(idx, item) {
|
||||
this.select(idx, item)
|
||||
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 })
|
||||
},
|
||||
|
||||
validation(i) {
|
||||
if (i.validation == "N" || i.validation == "Y")
|
||||
return i.validation
|
||||
|
||||
if (i.sample_handling_perfect != "Y")
|
||||
return "N"
|
||||
|
||||
if (i.mr_state == "N")
|
||||
return "N"
|
||||
|
||||
return "Y"
|
||||
},
|
||||
|
||||
_old_validation_y(idx) {
|
||||
|
||||
let x = this.$store.state.re_px.pxs
|
||||
let e = x[idx].validation
|
||||
x[idx].validation = e == 'Y' ? 'N' : 'Y'
|
||||
this.$store.commit("re_px/update_pxs", { records: x })
|
||||
},
|
||||
async validation_y(idx) {
|
||||
let x = this.$store.state.re_px.pxs
|
||||
let e = x[idx].validation
|
||||
|
||||
if (e == 'Y') {
|
||||
return
|
||||
}
|
||||
|
||||
// hanya N -> Y
|
||||
x[idx].validation = 'Y'
|
||||
|
||||
let prm = { order_id: x[idx].id, validation: x[idx].validation }
|
||||
await this.$store.dispatch("re_px/single_validation", prm)
|
||||
|
||||
x[idx].validation_old = 'Y'
|
||||
this.$store.commit("re_px/update_pxs", { records: x })
|
||||
|
||||
let have_val = false
|
||||
for (let i = 0; i < x.length; i++) {
|
||||
if (x[i].validation == 'Y') have_val = true
|
||||
}
|
||||
this.$store.commit('re_px/update_contain_val', have_val)
|
||||
|
||||
if (have_val) {
|
||||
let patient = this.$store.state.re_patient.selected_patient
|
||||
if (patient.T_OrderHeaderAddOnValidationDone == 'N') {
|
||||
patient.T_OrderHeaderAddOnValidationDone = 'P'
|
||||
}
|
||||
let patients = this.$store.state.re_patient.patients
|
||||
for (let i = 0; i < patients.length; i++) {
|
||||
if (patients[i].M_PatientID == patient.M_PatientID) {
|
||||
patients[i] = patient
|
||||
}
|
||||
}
|
||||
let dt = { records: patients, total_page: 1, total: patients.length }
|
||||
this.$store.commit("re_patient/update_patients", dt)
|
||||
} else {
|
||||
let patient = this.$store.state.re_patient.selected_patient
|
||||
patient.T_OrderHeaderAddOnValidationDone = 'N'
|
||||
let patients = this.$store.state.re_patient.patients
|
||||
for (let i = 0; i < patients.length; i++) {
|
||||
if (patients[i].M_PatientID == patient.M_PatientID) {
|
||||
patients[i] = patient
|
||||
}
|
||||
}
|
||||
let dt = { records: patients, total_page: 1, total: patients.length }
|
||||
this.$store.commit("re_patient/update_patients", dt)
|
||||
}
|
||||
},
|
||||
|
||||
mr(x) {
|
||||
this.$store.commit('re_px/update_selected_mr', x)
|
||||
this.$store.commit('re_px/update_dialog_mr', true)
|
||||
console.log('do mr')
|
||||
},
|
||||
|
||||
validation_color(i) {
|
||||
if (i.validation_old == "Y")
|
||||
return "green lighten-4"
|
||||
|
||||
return ""
|
||||
},
|
||||
|
||||
mr_color(x) {
|
||||
if (x.sample_handling_perfect == "N")
|
||||
return "grey"
|
||||
|
||||
if ((x.mr_state[3]) && x.mr_state[3].overlimit) return "red"
|
||||
if (x.mr_state[0] == "N") return "red"
|
||||
if (x.mr_state[0] == "X") return "grey"
|
||||
|
||||
return "green"
|
||||
},
|
||||
|
||||
delta_color_2(x) {
|
||||
if (x.sample_handling_perfect == "N")
|
||||
return "grey"
|
||||
|
||||
if (x.delta_check == "N")
|
||||
return "red"
|
||||
|
||||
return "green"
|
||||
},
|
||||
|
||||
init_result(x) {
|
||||
if (x.validation_old == "Y" || x.verification == "Y")
|
||||
return x.result
|
||||
|
||||
if (x.sample_receive != 'Y')
|
||||
return "Bahan Belum"
|
||||
if (x.sample_receive == 'Y' && !x.pre_analytic)
|
||||
return ""
|
||||
if (x.sample_receive == 'Y' && x.pre_analytic) {
|
||||
if (x.sample_worklist_receive == "Y")
|
||||
return x.result
|
||||
else
|
||||
return ""
|
||||
}
|
||||
},
|
||||
|
||||
init_blank(x) {
|
||||
if (x.validation_old == "Y" || x.verification == "Y")
|
||||
return false
|
||||
|
||||
if (x.sample_receive == "Y" &&
|
||||
x.sample_worklist_receive == "Y" &&
|
||||
!!x.pre_analytic &&
|
||||
x.result != "" &&
|
||||
x.result != null) return false
|
||||
return true
|
||||
},
|
||||
|
||||
trend(x) {
|
||||
// this.$store.commit('re_px/update_dialog_trend', true)
|
||||
},
|
||||
|
||||
delta(x) {
|
||||
this.$store.commit('re_px/update_dialog_trend', true)
|
||||
},
|
||||
|
||||
reject(x) {
|
||||
this.$store.commit('re_px/update_dialog_unval', true)
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
isLoading() {
|
||||
return this.$store.state.re_px.search_status == 1
|
||||
},
|
||||
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) }
|
||||
},
|
||||
selected_patient() {
|
||||
return this.$store.state.re_patient.selected_patient;
|
||||
},
|
||||
selected_flagbloodtype() {
|
||||
return this.$store.state.re_px.selected_flagbloodtype
|
||||
}
|
||||
|
||||
},
|
||||
watch: {
|
||||
selected_patient(n, o) {
|
||||
/*
|
||||
let cv_itv_retry = 0;
|
||||
let me = this;
|
||||
let cv_itv = setInterval(function () {
|
||||
if (window.render_one_critical_value != undefined && window.render_one_critical_value_header != undefined) {
|
||||
clearInterval(cv_itv);
|
||||
window.render_one_critical_value();
|
||||
window.render_one_critical_value_header();
|
||||
} else {
|
||||
cv_itv_retry++;
|
||||
}
|
||||
}, 800);
|
||||
|
||||
// auto vv
|
||||
let autovv_retry = 0;
|
||||
let autovv_itv = setInterval(function () {
|
||||
if (window.oneAutoVvRender != undefined && window.oneAutoVvStatusRender != undefined) {
|
||||
clearInterval(autovv_itv);
|
||||
console.log("AutoVV Retry", autovv_retry);
|
||||
window.oneAutoVvStatusRender();
|
||||
window.oneAutoVvRender();
|
||||
} else {
|
||||
autovv_retry++;
|
||||
}
|
||||
}, 1100);
|
||||
*/
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// this.$store.dispatch('re_patient/search')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,156 @@
|
||||
<template>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
persistent
|
||||
max-width="500px"
|
||||
transition="dialog-transition"
|
||||
>
|
||||
|
||||
|
||||
<v-layout class="fill-height" column>
|
||||
<v-card class="grow">
|
||||
<v-card-text>
|
||||
<v-data-table
|
||||
:headers="headers" :items="reruns"
|
||||
:loading="isLoading"
|
||||
hide-actions class="elevation-1">
|
||||
<template slot="items" slot-scope="props">
|
||||
<td class="text-xs-left pa-2 green--text" v-bind:class="is_selected(props.item)">
|
||||
{{ props.item.date }}
|
||||
</td>
|
||||
<td class="text-xs-left pa-2" v-bind:class="is_selected(props.item)">
|
||||
{{ props.item.instrument }}
|
||||
</td>
|
||||
<td class="text-xs-left pa-2" v-bind:class="is_selected(props.item)">
|
||||
{{ props.item.result }}
|
||||
</td>
|
||||
|
||||
<!--
|
||||
<td class="text-xs-left pa-2" v-bind:class="is_selected(props.item)">
|
||||
<v-btn flat icon color="green" @click="select(props.item)">
|
||||
<v-icon>get_app</v-icon>
|
||||
</v-btn>
|
||||
</td>
|
||||
-->
|
||||
</template>
|
||||
|
||||
</v-data-table>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog = false">Tutup</v-btn>
|
||||
<!-- <v-btn color="blue darken-1" :dark="btn_save_enabled" @click="save" :disabled="!btn_save_enabled">Simpan</v-btn> -->
|
||||
</v-card-actions>
|
||||
|
||||
|
||||
</v-card>
|
||||
</v-layout>
|
||||
</v-dialog>
|
||||
</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;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data() {
|
||||
return {
|
||||
query: "",
|
||||
items: [],
|
||||
headers: [
|
||||
{
|
||||
text: "TANGGAL",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "20%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "ALAT",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "35%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "HASIL",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "40%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "5%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
isLoading: false
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
methods : {
|
||||
oneMoment : function(d) {
|
||||
return window.oneMoment(d)
|
||||
},
|
||||
|
||||
select (item) {
|
||||
this.$store.commit('re_px/update_selected_rerun', item)
|
||||
this.$store.commit('re_px/update_dialog_rerun', false)
|
||||
|
||||
let x = this.$store.state.re_px.pxs
|
||||
x[this.$store.state.re_px.selected_px_idx]['result'] = item.result
|
||||
this.$store.commit('re_px/update_pxs', {records:x})
|
||||
},
|
||||
|
||||
is_selected (item) {
|
||||
// let x = this.$store.state.re_patient.selected_patient
|
||||
// if (!x)
|
||||
// return ''
|
||||
|
||||
// if (x.T_OrderHeaderID == item.T_OrderHeaderID)
|
||||
// return 'green lighten-4'
|
||||
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
reruns () {
|
||||
return this.$store.state.re_px.reruns
|
||||
},
|
||||
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_px.dialog_rerun },
|
||||
set (v) { this.$store.commit('re_px/update_dialog_rerun', v) }
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
// this.$store.dispatch('re_px/search_rerun')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,158 @@
|
||||
<template>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
persistent
|
||||
max-width="500px"
|
||||
transition="dialog-transition"
|
||||
>
|
||||
|
||||
|
||||
<v-layout class="fill-height" column>
|
||||
<v-card class="grow">
|
||||
<v-card-text>
|
||||
<v-data-table
|
||||
:headers="headers" :items="reruns"
|
||||
:loading="isLoading"
|
||||
hide-actions class="elevation-1">
|
||||
<template slot="items" slot-scope="props">
|
||||
<td class="text-xs-left pa-2 green--text" v-bind:class="is_selected(props.item)">
|
||||
{{get_instrument_date(props.item)}}
|
||||
</td>
|
||||
<td class="text-xs-left pa-2" v-bind:class="is_selected(props.item)">
|
||||
{{ props.item.instrument_name }}
|
||||
</td>
|
||||
<td class="text-xs-left pa-2" v-bind:class="is_selected(props.item)">
|
||||
{{ props.item.result }}
|
||||
</td>
|
||||
|
||||
</template>
|
||||
|
||||
</v-data-table>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog = false">Tutup</v-btn>
|
||||
<!-- <v-btn color="blue darken-1" :dark="btn_save_enabled" @click="save" :disabled="!btn_save_enabled">Simpan</v-btn> -->
|
||||
</v-card-actions>
|
||||
|
||||
|
||||
</v-card>
|
||||
</v-layout>
|
||||
</v-dialog>
|
||||
</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;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data() {
|
||||
return {
|
||||
query: "",
|
||||
items: [],
|
||||
headers: [
|
||||
{
|
||||
text: "TANGGAL",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "40%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "ALAT",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "35%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
},
|
||||
{
|
||||
text: "HASIL",
|
||||
align: "left",
|
||||
sortable: false,
|
||||
value: "mr",
|
||||
width: "20%",
|
||||
class: "pa-2 blue lighten-3 white--text"
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
isLoading: false
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
methods : {
|
||||
oneMoment : function(d) {
|
||||
return window.oneMoment(d)
|
||||
},
|
||||
get_instrument_date(i) {
|
||||
// debugger
|
||||
let rst = ''
|
||||
try {
|
||||
rst = moment(i.instrument_date).format('DD.MM.YYYY HH:mm')
|
||||
} catch(e) {}
|
||||
return rst
|
||||
},
|
||||
select (item) {
|
||||
this.$store.commit('re_px/update_selected_rerun', item)
|
||||
this.$store.commit('re_px/update_dialog_rerun', false)
|
||||
|
||||
let x = this.$store.state.re_px.pxs
|
||||
x[this.$store.state.re_px.selected_px_idx]['result'] = item.result
|
||||
x[this.$store.state.re_px.selected_px_idx]['resultInstrumentID'] = item.resultInstrumentID
|
||||
console.log(x)
|
||||
this.$store.commit('re_px/update_pxs', {records:x})
|
||||
},
|
||||
|
||||
is_selected (item) {
|
||||
// let x = this.$store.state.re_patient.selected_patient
|
||||
// if (!x)
|
||||
// return ''
|
||||
|
||||
// if (x.T_OrderHeaderID == item.T_OrderHeaderID)
|
||||
// return 'green lighten-4'
|
||||
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
reruns () {
|
||||
return this.$store.state.re_px.reruns
|
||||
},
|
||||
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_px.dialog_rerun },
|
||||
set (v) { this.$store.commit('re_px/update_dialog_rerun', v) }
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
// this.$store.dispatch('re_px/search_rerun')
|
||||
},
|
||||
|
||||
watch : {
|
||||
dialog(n, o) {
|
||||
if (n && !o) {
|
||||
this.$store.dispatch('re_px/search_rerun')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,635 @@
|
||||
<template>
|
||||
<v-card class="mb-1 pa-1">
|
||||
<v-dialog v-model="dialog_confirm_local"
|
||||
max-width="1000px"
|
||||
persistent>
|
||||
<v-card>
|
||||
<v-card-title primary-title class="grey lighten-3">
|
||||
<h4 class="grey--text text--darken-2">Konfirmasi Daftar Pemeriksaan</h4>
|
||||
</v-card-title>
|
||||
<v-divider></v-divider>
|
||||
<v-progress-linear
|
||||
v-show="waiting_progress"
|
||||
indeterminate
|
||||
color="red darken-2"
|
||||
height="4"
|
||||
></v-progress-linear>
|
||||
<v-card-text>
|
||||
|
||||
<p class="mb-1">Pastikan pemeriksaan berikut yang akan dikirim:</p>
|
||||
<p class="warning--text caption">Jika tidak sesuai, silahkan klik tombol <b>Tutup</b> dan validasi terlebih dahulu.</p>
|
||||
<v-layout row wrap>
|
||||
<v-flex xs12>
|
||||
<v-data-table
|
||||
:headers="headers_test_refers"
|
||||
:items="test_refers"
|
||||
class="elevation-1"
|
||||
:items-per-page="20"
|
||||
>
|
||||
<template v-slot:items="props">
|
||||
<td>{{ props.item.T_TestSasCode }}</td>
|
||||
<td>{{ props.item.t_testname }}</td>
|
||||
</template>
|
||||
</v-data-table>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn dark @click="dialog_confirm_local = false">Tutup</v-btn>
|
||||
<v-btn v-if="!waiting_progress" color="warning" @click="uploadCpone()">Kirim</v-btn>
|
||||
<v-btn v-if="waiting_progress" disabled>Proses...</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
<v-dialog
|
||||
v-model="dialog_error"
|
||||
width="500"
|
||||
>
|
||||
|
||||
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline red lighten-2"
|
||||
primary-title
|
||||
>
|
||||
Gagal mengunduh data lokal
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text>
|
||||
<p>{{error_message}}</p>
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="dialog_error = false"
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog_success"
|
||||
width="500"
|
||||
>
|
||||
|
||||
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline green lighten-2"
|
||||
primary-title
|
||||
>
|
||||
Berhasil mengirim data ke CPONE
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text>
|
||||
<p>Silahkan periksa data pemeriksaan pada aplikasi CPONE</p>
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeSuccess()"
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
<v-layout row>
|
||||
<v-flex xs9>
|
||||
<v-layout>
|
||||
<one-date-picker
|
||||
label="Tanggal"
|
||||
:date="sdate"
|
||||
style="width:160px"
|
||||
data="0"
|
||||
class="mt-1"
|
||||
hide-details
|
||||
@change="changeDate"
|
||||
></one-date-picker>
|
||||
<v-text-field class="flex xs6 ma-1 mt-2"
|
||||
label=""
|
||||
placeholder="No Reg / Nama"
|
||||
solo
|
||||
|
||||
hide-details
|
||||
v-model="search"
|
||||
@keyup.native="keySearch"
|
||||
></v-text-field>
|
||||
|
||||
<v-autocomplete
|
||||
v-model="company"
|
||||
:items="companies"
|
||||
:loading="loading_company"
|
||||
:search-input.sync="search_company"
|
||||
class="xs6 ma-1 ml-1 mr-1 mt-2"
|
||||
hide-no-data
|
||||
solo
|
||||
item-text="CorporateName"
|
||||
item-value="CorporateID"
|
||||
label="company"
|
||||
hide-details
|
||||
placeholder="Cari Kelompok Pelanggan"
|
||||
return-object
|
||||
></v-autocomplete>
|
||||
|
||||
<v-select
|
||||
label="status"
|
||||
:items="status_validasi"
|
||||
style="width:30%"
|
||||
item-value="code"
|
||||
item-text="name"
|
||||
class="mt-2"
|
||||
hide-details
|
||||
solo
|
||||
return-object
|
||||
v-model="selected_status_validasi"
|
||||
></v-select>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
<v-flex xs1>
|
||||
<v-layout>
|
||||
<v-btn class="btn-search one-btn-icon ma-1 mt-2" color="success" style="height: 46px;" @click="searchs" >
|
||||
<span class="icon-search"><span>
|
||||
</v-btn>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
|
||||
<v-flex xs7 class="text-xs-right">
|
||||
<v-layout row wrap>
|
||||
<v-flex xs2 class="text-xs-left">
|
||||
|
||||
</v-flex>
|
||||
<v-flex xs10>
|
||||
<!-- <img v-if="img_lang" :src="'../../../libs/image/' + img_lang_2(lang.code, lang.is_si)" height="36" style="float:left" alt="" class="mt-1" /> -->
|
||||
<v-btn v-show="!info_req_perfect" class="btn-search one-btn-icon ma-1" color="red" @click="info" dark >
|
||||
<v-icon>info</v-icon>
|
||||
</v-btn>
|
||||
|
||||
<v-btn class="btn-search one-btn-icon ma-1 mt-2" v-if="info_req.validation_internal === '' || !info_req.validation_internal" color="red" @click="note"
|
||||
title="Catatan"
|
||||
dark >
|
||||
<v-icon>library_books</v-icon>
|
||||
</v-btn>
|
||||
<v-btn class="btn-search one-btn-icon ma-1 mt-2" v-if="info_req.validation_internal !== '' && info_req.validation_internal" color="teal ligthen-2" @click="note"
|
||||
title="Catatan"
|
||||
dark >
|
||||
<v-icon>library_books</v-icon>
|
||||
</v-btn>
|
||||
|
||||
<v-btn
|
||||
color="blue-grey"
|
||||
small
|
||||
class="white--text ma-1 mt-2"
|
||||
@click="histories"
|
||||
v-show="btn_history_show"
|
||||
>
|
||||
Histori
|
||||
</v-btn>
|
||||
<v-btn @click="doPrintKultur()" class="white--text ma-1" color="red darken-2" dark v-show="btn_print_kultur_show">Print out kultur <v-icon right
|
||||
dark>print</v-icon></v-btn>
|
||||
<v-btn @click="doPrintPapsmear()" class="white--text ma-1" color="brown" dark v-show="btn_print_papsmear_show">Print out papsmear <v-icon right
|
||||
dark>print</v-icon></v-btn>
|
||||
<v-btn @click="doPrintPatient()" class="white--text ma-1" color="purple darken-2" dark>Cetak History <v-icon right
|
||||
dark>print</v-icon></v-btn>
|
||||
<v-btn @click="doPrint()" class="white--text ma-1" color="orange" dark>Cetak <v-icon right
|
||||
dark>print</v-icon></v-btn>
|
||||
<v-btn
|
||||
color="orange"
|
||||
|
||||
class="one-btn-icon white--text ma-1 mt-2"
|
||||
@click="preview"
|
||||
title="Preview Hasil"
|
||||
>
|
||||
<v-icon>remove_red_eye</v-icon>
|
||||
</v-btn>
|
||||
|
||||
|
||||
<v-btn
|
||||
color="blue"
|
||||
small
|
||||
|
||||
class="white--text ma-1 mt-2"
|
||||
@click="save_result"
|
||||
:disabled="!btn_validation_enable"
|
||||
:dark="btn_validation_enable"
|
||||
style="height: 36px;"
|
||||
v-show="true || btn_validation_show"
|
||||
>
|
||||
Validasi
|
||||
|
||||
</v-btn>
|
||||
|
||||
<!--<v-btn
|
||||
color="green"
|
||||
small
|
||||
style="height: 36px;"
|
||||
class="white--text ma-1 mt-2"
|
||||
@click="send_to_cpone"
|
||||
:dark="contain_val"
|
||||
v-show="contain_val"
|
||||
>
|
||||
Kirim CPONE
|
||||
|
||||
</v-btn>-->
|
||||
|
||||
<v-btn
|
||||
color="red"
|
||||
class="white--text ma-1 mt-2"
|
||||
@click="unvalidate"
|
||||
style="height: 36px;"
|
||||
small
|
||||
dark
|
||||
v-show="!btn_validation_show && false"
|
||||
>
|
||||
UnValidasi
|
||||
|
||||
</v-btn>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
|
||||
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<one-dialog-print :title="printtitle" :width="printwidth" :height="700" :status="openprint" :urlprint="urlprint"
|
||||
@close-dialog-print="openprint = false"></one-dialog-print>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.btn-legend {
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
border-radius: 0%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.btn-search {
|
||||
font-size: 1.5em
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
components: {
|
||||
'one-date-picker': httpVueLoader('./oneDatePicker.vue'),
|
||||
'one-edate-picker': httpVueLoader('./oneEndDatePicker.vue'),
|
||||
'one-dialog-print': httpVueLoader('../../common/oneDialogPrintX.vue')
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
search_company: '',
|
||||
headers_test_refers: [
|
||||
{ text: 'Kode', value: 'T_TestSasCode' },
|
||||
{ text: 'Nama', value: 't_testname' }
|
||||
],
|
||||
status_validasi : [
|
||||
{'code': 'ALL', 'name': 'Semua Hasil'},
|
||||
{'code': 'BV', 'name': 'Belum Tervalidasi'},
|
||||
{'code': 'SV', 'name': 'Tervalidasi'},
|
||||
{'code': 'SVS', 'name': 'Tervalidasi dan Serahkan'},
|
||||
|
||||
],
|
||||
}
|
||||
},
|
||||
watch : {
|
||||
search_company(n,o) {
|
||||
this.$store.dispatch('company/search',n)
|
||||
}
|
||||
},
|
||||
computed : {
|
||||
openprint: {
|
||||
get() {
|
||||
return this.$store.state.helper.open_print
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("helper/update_open_print", false)
|
||||
}
|
||||
},
|
||||
dialog_confirm_local: {
|
||||
get() { return this.$store.state.re_patient.dialog_confirm_local},
|
||||
set(v) { this.$store.commit('re_patient/update_dialog_confirm_local',v) }
|
||||
},
|
||||
waiting_progress: {
|
||||
get() { return this.$store.state.re_patient.waiting_progress},
|
||||
set(v) { this.$store.commit('re_patient/update_waiting_progress',v) }
|
||||
},
|
||||
test_refers: {
|
||||
get() { return this.$store.state.re_patient.test_refers},
|
||||
set(v) { this.$store.commit('re_patient/update_test_refers',v) }
|
||||
},
|
||||
error_message: {
|
||||
get() { return this.$store.state.re_patient.error_message},
|
||||
set(v) { this.$store.commit('re_patient/update_error_message',v) }
|
||||
},
|
||||
dialog_success: {
|
||||
get() { return this.$store.state.re_patient.dialog_success},
|
||||
set(v) { this.$store.commit('re_patient/update_dialog_success',v) }
|
||||
},
|
||||
dialog_error: {
|
||||
get() { return this.$store.state.re_patient.dialog_error},
|
||||
set(v) { this.$store.commit('re_patient/update_dialog_error',v) }
|
||||
},
|
||||
selected_status_validasi: {
|
||||
get() { return this.$store.state.re_patient.selected_status_validasi},
|
||||
set(v) { this.$store.commit('re_patient/update_selected_status_validasi',v) }
|
||||
},
|
||||
company: {
|
||||
get() { return this.$store.state.company.company },
|
||||
set(v) { this.$store.commit('company/update_company',v) }
|
||||
},
|
||||
companies() {
|
||||
return this.$store.state.company.companies
|
||||
},
|
||||
loading_company() {
|
||||
return this.$store.state.company.loading
|
||||
},
|
||||
nolab : {
|
||||
get () { return this.$store.state.re_patient.nolab },
|
||||
set (v) { this.$store.commit('re_patient/update_nolab', v) }
|
||||
},
|
||||
|
||||
search : {
|
||||
get () { return this.$store.state.re_patient.search },
|
||||
set (v) { this.$store.commit('re_patient/update_search', v) }
|
||||
},
|
||||
|
||||
groups () {
|
||||
return this.$store.state.re_px.groups
|
||||
},
|
||||
|
||||
selected_group : {
|
||||
get () { return this.$store.state.re_px.selected_group },
|
||||
set (v) { this.$store.commit('re_px/update_selected_group', v) }
|
||||
},
|
||||
|
||||
order_id () {
|
||||
return this.$store.state.re_px.order_id
|
||||
},
|
||||
|
||||
contain_val () {
|
||||
return this.$store.state.re_px.contain_val
|
||||
},
|
||||
|
||||
lang () {
|
||||
return {code:this.$store.state.re_patient.selected_patient.M_LangCode, is_si:this.$store.state.re_patient.selected_patient.is_si}
|
||||
},
|
||||
|
||||
img_lang () {
|
||||
if (this.lang.code == "ID")
|
||||
return "flag-ina_48.png"
|
||||
else if (this.lang.code == "EN")
|
||||
return "flag-us_48.png"
|
||||
},
|
||||
|
||||
sdate : {
|
||||
get () { return this.$store.state.re_patient.s_date },
|
||||
set (v) { this.$store.commit('re_patient/update_sdate', v) }
|
||||
},
|
||||
|
||||
selected_patient () {
|
||||
return this.$store.state.re_patient.selected_patient
|
||||
},
|
||||
|
||||
btn_history_show () {
|
||||
if (!this.selected_patient) return false
|
||||
if (!this.selected_patient.is_history) return false
|
||||
if (this.selected_patient.is_history == "N") return false
|
||||
|
||||
return true
|
||||
},
|
||||
|
||||
info_req_perfect () {
|
||||
let x = false
|
||||
try {
|
||||
x = this.$store.state.re_patient.info_req.is_perfect == 'Y';
|
||||
let info_req = this.$store.state.re_patient.info_req
|
||||
if ( info_req.note_fo != '' ) x = false
|
||||
if ( info_req.note_fo_ver != '' ) x = false
|
||||
if ( info_req.note_sampling != '' ) x = false
|
||||
if ( info_req.note_result_entry != '' ) x = false
|
||||
} catch (error) {
|
||||
}
|
||||
|
||||
return x
|
||||
},
|
||||
info_req(){
|
||||
return this.$store.state.re_patient.info_req
|
||||
},
|
||||
|
||||
btn_validation_enable() {
|
||||
return true
|
||||
let x = this.$store.state.re_px.pxs
|
||||
// console.log(x)
|
||||
let y = 0, n = 0
|
||||
for(let i in x) {
|
||||
// console.log(i+' : '+x[i].t_testname+' : '+x[i].is_result+' : '+x[i].validation+' : '+x[i].verification)
|
||||
if (x[i].is_result == 'Y') {
|
||||
n++
|
||||
if (x[i].validation == 'Y')
|
||||
{y++;}
|
||||
}
|
||||
}
|
||||
// console.log("n:"+n+" y:"+y)
|
||||
if (y < 1) return false
|
||||
return true
|
||||
},
|
||||
|
||||
btn_validation_show() {
|
||||
let x = this.$store.state.re_px.pxs
|
||||
let z = 0, n = 0
|
||||
for(let i in x) {
|
||||
if (x[i].is_result == 'Y') {
|
||||
n++
|
||||
if (x[i].validation_old == 'Y')
|
||||
z++
|
||||
}
|
||||
}
|
||||
|
||||
if (z == n) return false
|
||||
return true
|
||||
},
|
||||
btn_print_papsmear_show() {
|
||||
let x = this.$store.state.re_px.pxs
|
||||
for (let i in x) {
|
||||
|
||||
if (x[i].t_testid == '1611') {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// return true
|
||||
},
|
||||
btn_print_kultur_show() {
|
||||
let x = this.$store.state.re_px.pxs
|
||||
for (let i in x) {
|
||||
|
||||
if (x[i].ResultGroupName == 'Mikro') {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// return true
|
||||
},
|
||||
},
|
||||
|
||||
methods : {
|
||||
doPrint() {
|
||||
id = this.$store.state.re_patient.selected_patient.T_OrderHeaderID
|
||||
tm = Date.now()
|
||||
let user = one_user()
|
||||
this.printwidth = 1700
|
||||
this.printtitle = ""
|
||||
let rpt = 'rpt_test'
|
||||
// https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_test.rptdesign&__format=pdf&PID=1&username=adhi&tm=1717726294764
|
||||
this.urlprint = "/birt/run?__report=report/one/lab/" + rpt + ".rptdesign&__format=pdf&PID=" + id + "&username=" + user.M_StaffName + "&tm=" + tm
|
||||
this.$store.commit("helper/update_open_print", true)
|
||||
},
|
||||
doPrintPatient() {
|
||||
id = this.$store.state.re_patient.selected_patient.T_OrderHeaderID
|
||||
tm = Date.now()
|
||||
let user = one_user()
|
||||
this.printwidth = 1700
|
||||
this.printtitle = ""
|
||||
let rpt = 'rpt_test_history'
|
||||
// https://cpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_test_history.rptdesign&__format=pdf&PID=7931&username=adhi&tm=1717726294764
|
||||
this.urlprint = "/birt/run?__report=report/one/lab/" + rpt + ".rptdesign&__format=pdf&PID=" + id + "&username=" + user.M_StaffName + "&tm=" + tm
|
||||
this.$store.commit("helper/update_open_print", true)
|
||||
},
|
||||
doPrintPapsmear() {
|
||||
id = this.$store.state.re_patient.selected_patient.T_OrderHeaderID
|
||||
tm = Date.now()
|
||||
let user = one_user()
|
||||
this.printwidth = 1700
|
||||
this.printtitle = ""
|
||||
let rpt = 'rpt_test_papsmear'
|
||||
// https://cpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_test_papsmear.rptdesign&__format=pdf&PID=323&username=PETUGAS%20SAMPLE%20LAB&tm=1721461717824
|
||||
this.urlprint = "/birt/run?__report=report/one/lab/" + rpt + ".rptdesign&__format=pdf&PID=" + id + "&username=" + user.M_StaffName + "&tm=" + tm
|
||||
this.$store.commit("helper/update_open_print", true)
|
||||
},
|
||||
doPrintKultur() {
|
||||
id = this.$store.state.re_patient.selected_patient.T_OrderHeaderID
|
||||
tm = Date.now()
|
||||
let user = one_user()
|
||||
this.printwidth = 1700
|
||||
this.printtitle = ""
|
||||
let rpt = 'rpt_test_mikro'
|
||||
// https://cpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_test_mikro.rptdesign&__format=pdf&PID=2088&username=PETUGAS%20SAMPLE%20LAB&tm=1721461717824
|
||||
this.urlprint = "/birt/run?__report=report/one/lab/" + rpt + ".rptdesign&__format=pdf&PID=" + id + "&username=" + user.M_StaffName + "&tm=" + tm
|
||||
this.$store.commit("helper/update_open_print", true)
|
||||
},
|
||||
closeSuccess(){
|
||||
this.dialog_success = false
|
||||
this.dialog_confirm_local = false
|
||||
},
|
||||
uploadCpone(){
|
||||
this.$store.commit('re_patient/update_waiting_progress', true)
|
||||
this.$store.dispatch('re_patient/uploadCpone')
|
||||
},
|
||||
send_to_cpone(){
|
||||
let pxs = this.$store.state.re_px.pxs
|
||||
let test_refers = []
|
||||
for(let i in pxs){
|
||||
if(pxs[i].validation == 'Y'){
|
||||
test_refers.push(pxs[i])
|
||||
}
|
||||
}
|
||||
if(test_refers.length > 0){
|
||||
this.$store.commit('re_patient/update_test_refers', test_refers)
|
||||
this.$store.commit('re_patient/update_dialog_confirm_local', true)
|
||||
}
|
||||
else{
|
||||
this.$store.commit('re_patient/update_error_message', 'Tidak ada pemeriksaan yang akan dikirim')
|
||||
this.$store.commit('re_patient/update_dialog_error', true)
|
||||
}
|
||||
},
|
||||
searchs() {
|
||||
console.log('search .... ')
|
||||
this.$store.dispatch('re_patient/search')
|
||||
},
|
||||
async send_to_adm() {
|
||||
await this.$store.dispatch('re_patient/send_to_adm')
|
||||
},
|
||||
keySearch(e) {
|
||||
if (e.which == 13) {
|
||||
this.searchs()
|
||||
}
|
||||
},
|
||||
save_result() {
|
||||
this.$store.dispatch('re_px/confirm')
|
||||
let patient = this.$store.state.re_patient.selected_patient
|
||||
if (patient.T_OrderHeaderAddOnValidationDone == 'N' ) {
|
||||
patient.T_OrderHeaderAddOnValidationDone = 'P'
|
||||
}
|
||||
let patients = this.$store.state.re_patient.patients;
|
||||
|
||||
for(let i=0; i < patients.length; i++) {
|
||||
if ( patients[i].M_PatientID == patient.M_PatientID ) {
|
||||
patients[i] = patient
|
||||
}
|
||||
}
|
||||
let dt = { records : patients, total_page : 1, total: patients.length }
|
||||
this.$store.commit("re_patient/update_patients", dt)
|
||||
console.log('pat',patients)
|
||||
},
|
||||
|
||||
histories() {
|
||||
this.$store.dispatch('re_history/history')
|
||||
this.$store.commit('re_history/update_dialog_history', true)
|
||||
},
|
||||
|
||||
preview() {
|
||||
this.$store.commit('re_patient/update_rpt_url', this.$store.state.re_patient.selected_patient.T_OrderHeaderID)
|
||||
this.$store.commit('re_patient/update_print_dialog', true)
|
||||
},
|
||||
|
||||
img_lang_2 (lang, si) {
|
||||
|
||||
if (lang == "ID" && si == "N")
|
||||
return "inako.png"
|
||||
if (lang == "ID" && si == "Y")
|
||||
return "inasi.png"
|
||||
if (lang == "EN" && si == "N")
|
||||
return "engko.png"
|
||||
if (lang == "EN" && si == "Y")
|
||||
return "engsi.png"
|
||||
},
|
||||
|
||||
changeDate(x) {
|
||||
this.sdate = x.new_date
|
||||
this.searchs()
|
||||
},
|
||||
|
||||
note() {
|
||||
this.$store.commit('re_patient/update_dialog_note', true)
|
||||
},
|
||||
|
||||
info() {
|
||||
this.$store.commit('re_patient/update_dialog_req', true)
|
||||
},
|
||||
|
||||
unvalidate() {
|
||||
this.$store.dispatch('re_px/unvalidate')
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
this.$store.dispatch('re_px/search_group')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,144 @@
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="600"
|
||||
>
|
||||
|
||||
<v-card>
|
||||
<v-card-title
|
||||
v-if="info_mr.title"
|
||||
class="headline grey lighten-2"
|
||||
primary-title
|
||||
>
|
||||
{{ info_mr.title }}
|
||||
</v-card-title>
|
||||
|
||||
<div style="padding:10px;font-size:16px;background-color:#efefef;" v-html="info_mr.sub_title">
|
||||
</div>
|
||||
|
||||
<v-card-text v-if="info_mr.note" v-html='info_mr.note' >
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="dialog = false"
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<style >
|
||||
table.mr-table {
|
||||
border-collapse: collapse;
|
||||
width:100%;
|
||||
border: 1px solid #e6e6e6;
|
||||
font-size:14px;
|
||||
}
|
||||
table.mr-table th {
|
||||
padding: 10px;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
table.mr-table td {
|
||||
padding: 10px;
|
||||
}
|
||||
table.mr-table tr.reflex-ok td {
|
||||
background-color: #ccffcc;
|
||||
}
|
||||
table.mr-table tr.reflex-not-ok td {
|
||||
background-color: #ffcccc ;
|
||||
}
|
||||
table.mr-table tr.reflex-not-ok-argument td {
|
||||
background-color: #ffcc99;
|
||||
}
|
||||
|
||||
table.mr-table tr.reflex-not-ok-global td {
|
||||
background-color: #ffffb3;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_px.dialog_mr},
|
||||
set (v) { this.$store.commit("re_px/update_dialog_mr", v) }
|
||||
},
|
||||
info_mr() {
|
||||
let mr = this.$store.state.re_px.selected_mr_state
|
||||
let title = mr[3]["title"];
|
||||
let sub_title = mr[3]["sub_title"];
|
||||
let overlimit = mr[3]["overlimit"];
|
||||
if (overlimit) {
|
||||
sub_title = '<span style="font-weight:bold; color:red">' + sub_title + "</font>";
|
||||
}
|
||||
let note = ""
|
||||
|
||||
if ( mr[3]["argument_1"]) {
|
||||
let arg= mr[3]["argument_1"];
|
||||
|
||||
for(let idx =0; idx < arg.length ; idx++ ) {
|
||||
if ( note != "" ) note += "<br/>";
|
||||
let px_arg = arg[idx]["px"];
|
||||
let note_arg = arg[idx]["note"];
|
||||
note += '<table class="mr-table" >';
|
||||
note += '<tr>';
|
||||
note += '<th>Argument 1</th><th style="text-align:center" >Hasil</th> <th style="text-align:center" >Condition</th>';
|
||||
note += '</tr>';
|
||||
let xtr_class = 'reflex-not-ok-argument';
|
||||
if ( arg[idx]['is_ok'] ) xtr_class = 'reflex-ok';
|
||||
if ( arg[idx]['is_ok'] == false && arg[idx]['is_ok_argument']) xtr_class = 'reflex-not-ok-global';
|
||||
note += '<tr class="' + xtr_class + '" />';
|
||||
note += '<td>' + px_arg + '</td>';
|
||||
note += '<td style="text-align:center" >' + arg[idx]['result'] + '</td>';
|
||||
note += '<td style="text-align:center" >' + arg[idx]['condition'] + '</td>';
|
||||
note += '</tr>';
|
||||
if ( ! arg[idx]['is_show_mandatory']) {
|
||||
note += '</table>';
|
||||
continue;
|
||||
}
|
||||
if ( arg[idx]['mandatory'].length == 0 ) {
|
||||
note += '<tr><td colspan="3">Tidak ada mandatory</td></tr>';
|
||||
note += '</table>';
|
||||
continue;
|
||||
}
|
||||
note += '<th>Mandatory</th><th style="text-align:center" >Hasil</th> <th style="text-align:center" >Condition</th>';
|
||||
note += '</tr>';
|
||||
let mandatory = arg[idx]['mandatory'];
|
||||
for(let jdx=0; jdx < mandatory.length ; jdx++) {
|
||||
let px = mandatory[jdx]['px'];
|
||||
let result = mandatory[jdx]['result'];
|
||||
let condition= mandatory[jdx]['condition'];
|
||||
let tr_class = 'reflex-not-ok';
|
||||
if ( mandatory[jdx]['is_ok'] ) tr_class = 'reflex-ok';
|
||||
note += '<tr class="' + tr_class + '" />';
|
||||
note += '<td>' + px + '</td>';
|
||||
note += '<td style="text-align:center" >' + result + '</td>';
|
||||
note += '<td style="text-align:center" >' + condition + '</td>';
|
||||
note += '</tr>';
|
||||
}
|
||||
note += '</table>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let result ={
|
||||
title : title,
|
||||
sub_title : sub_title,
|
||||
overlimit: overlimit,
|
||||
note : note
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,61 @@
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="500"
|
||||
>
|
||||
|
||||
<v-card>
|
||||
<v-img
|
||||
v-if="info_trend.image"
|
||||
:src="info_trend.image"
|
||||
|
||||
></v-img>
|
||||
|
||||
<v-card-title
|
||||
v-if="info_trend.title"
|
||||
class="headline grey lighten-2"
|
||||
primary-title
|
||||
>
|
||||
{{ info_trend.title }}
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text v-if="info_trend.note">
|
||||
{{ info_trend.note }}
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="dialog = false"
|
||||
>
|
||||
I accept
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_px.dialog_trend },
|
||||
set (v) { this.$store.commit("re_px/update_dialog_trend", v) }
|
||||
},
|
||||
|
||||
info_trend () { return this.$store.state.re_px.info_trend }
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,61 @@
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="500"
|
||||
>
|
||||
|
||||
<v-card>
|
||||
<v-img
|
||||
v-if="info_trend.image"
|
||||
:src="info_trend.image"
|
||||
|
||||
></v-img>
|
||||
|
||||
<v-card-title
|
||||
v-if="info_trend.title"
|
||||
class="headline grey lighten-2"
|
||||
primary-title
|
||||
>
|
||||
{{ info_trend.title }}
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text v-if="info_trend.note">
|
||||
{{ info_trend.note }}
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="dialog = false"
|
||||
>
|
||||
I accept
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_px.dialog_trend },
|
||||
set (v) { this.$store.commit("re_px/update_dialog_trend", v) }
|
||||
},
|
||||
|
||||
info_trend () { return this.$store.state.re_px.info_trend }
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,82 @@
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="500"
|
||||
>
|
||||
|
||||
<v-card>
|
||||
|
||||
|
||||
<v-card-title
|
||||
class="headline grey lighten-2"
|
||||
primary-title
|
||||
>
|
||||
Tolak Pemeriksaan
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text>
|
||||
<v-radio-group v-model="selected_unval_action">
|
||||
<v-radio
|
||||
v-for="(unval, n) in unval_actions"
|
||||
v-bind:key="n"
|
||||
:label="unval.label"
|
||||
:value="unval.val"></v-radio>
|
||||
</v-radio-group>
|
||||
</v-card-text>
|
||||
|
||||
<v-card-actions>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="dialog=!dialog"
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
@click="reject"
|
||||
:disabled="!selected_unval_action"
|
||||
:dark="!!selected_unval_action"
|
||||
>
|
||||
Tolak
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_px.dialog_unval },
|
||||
set (v) { this.$store.commit("re_px/update_dialog_unval", v) }
|
||||
},
|
||||
|
||||
unval_actions () {
|
||||
return this.$store.state.re_px.unval_actions
|
||||
},
|
||||
|
||||
selected_unval_action : {
|
||||
get () { return this.$store.state.re_px.selected_unval_action },
|
||||
set (v) { this.$store.commit('re_px/update_selected_unval_action', v) }
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
reject () {
|
||||
this.$store.dispatch('re_px/reject')
|
||||
this.dialog = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,46 @@
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="500"
|
||||
>
|
||||
|
||||
<v-card>
|
||||
<v-card-text>
|
||||
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-btn color="primary" flat @click="dialog = !dialog">Tutup</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="dialog = false"
|
||||
>
|
||||
Simpan
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.re_verification.dialog_verification },
|
||||
set (v) { this.$store.commit("re_verification/update_dialog_verification", v) }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,100 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_cytologi" persistent max-width="40%">
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
<span class="headline">CYTOLOGI</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-select
|
||||
class="mini-select"
|
||||
item-text="name"
|
||||
return-object
|
||||
outline
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
hide-details
|
||||
label="Dokter"
|
||||
disabled
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout wrap>
|
||||
<v-flex xs12>
|
||||
<v-layout v-for="result in results" mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
:label="result.label"
|
||||
outline
|
||||
rows="2"
|
||||
disabled
|
||||
v-model="result.result"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_cytologi = false">Tutup</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_cytologi/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
dialog_cytologi: {
|
||||
get() {
|
||||
return this.$store.state.re_cytologi.dialog_cytologi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_cytologi/update_dialog_cytologi", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_cytologi.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_cytologi/update_results", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_cytologi.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_cytologi.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_cytologi/update_selected_doctor", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
saveResult_Cytologi(){
|
||||
this.$store.dispatch("re_cytologi/saveresult_cytologi",{results:this.results})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,197 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_dnafragmentasi" persistent max-width="40%">
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
<span class="headline">DNA FRAGMENTASI INDEKS</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-select
|
||||
class="mini-select"
|
||||
item-text="name"
|
||||
return-object
|
||||
outline
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
disabled
|
||||
hide-details
|
||||
label="Dokter"
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-select
|
||||
class="mini-select"
|
||||
item-text="name"
|
||||
disabled
|
||||
return-object
|
||||
outline
|
||||
:items="methodes"
|
||||
v-model="selected_methode"
|
||||
hide-details
|
||||
label="Metode"
|
||||
></v-select>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout wrap>
|
||||
<v-flex xs12>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-text-field
|
||||
disabled
|
||||
label="Sperma dengan Halo Luas"
|
||||
outline
|
||||
v-model="results.halo_luas"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-text-field
|
||||
label="Sperma dengan Halo Sedang"
|
||||
outline
|
||||
disabled
|
||||
v-model="results.halo_sedang"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-text-field
|
||||
disabled
|
||||
label="Sperma dengan Halo Sempit"
|
||||
outline
|
||||
v-model="results.halo_sempit"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-text-field
|
||||
disabled
|
||||
label="Sperma dengan Tanpa Halo"
|
||||
outline
|
||||
v-model="results.tanpa_halo"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex pa-2 xs4>
|
||||
<v-text-field
|
||||
label="DFI"
|
||||
outline
|
||||
disabled
|
||||
v-model="results.dfi"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-2 xs4>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
label="Keterangan"
|
||||
outline
|
||||
disabled
|
||||
grow
|
||||
v-model="results.kesimpulan"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
<v-flex pa-2 xs4>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
label="Catatan"
|
||||
outline
|
||||
disabled
|
||||
grow
|
||||
v-model="results.catatan"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_dnafragmentasi = false">Tutup</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
console.log("dialog dna fragmentasi")
|
||||
//this.$store.dispatch("re_fragmentasi/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
onprocess(){
|
||||
return this.$store.state.re_dnafragmentasi.onprocess
|
||||
},
|
||||
dialog_dnafragmentasi: {
|
||||
get() {
|
||||
return this.$store.state.re_dnafragmentasi.dialog_dnafragmentasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_dnafragmentasi/update_dialog_dnafragmentasi", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_dnafragmentasi.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_dnafragmentasi/update_results", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_dnafragmentasi.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_dnafragmentasi.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_dnafragmentasi/update_selected_doctor", val)
|
||||
}
|
||||
},
|
||||
methodes(){
|
||||
return this.$store.state.re_dnafragmentasi.methodes
|
||||
},
|
||||
selected_methode: {
|
||||
get() {
|
||||
return this.$store.state.re_dnafragmentasi.selected_methode
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_dnafragmentasi/update_selected_methode", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
saveResult_DNAFragmentasi(){
|
||||
console.log('in save')
|
||||
//this.$store.dispatch("re_fragmentasi/saveresult_cytologi",{results:this.results})
|
||||
if(_.isEmpty(this.selected_doctor) || this.selected_doctor == '0'){
|
||||
this.error_doctor = true
|
||||
|
||||
}else
|
||||
this.$store.commit("re_dnafragmentasi/update_onprocess", true)
|
||||
this.$store.dispatch("re_dnafragmentasi/saveresult_dnafragmentasi",{methode:this.selected_methode,doctor:this.selected_doctor,results:this.results})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,120 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_fna" persistent max-width="40%">
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
<h3 class="headline">FNA</h3>
|
||||
|
||||
</v-card-title>
|
||||
<v-divider></v-divider>
|
||||
<v-card-text>
|
||||
<v-sheet dark color="blue" class="mb-2 pa-2">
|
||||
<v-layout color="info" align-center row>
|
||||
|
||||
<v-flex xs4>
|
||||
<label class="mono font-weight-black" dark>DOKTER</label>
|
||||
<!--<v-select
|
||||
item-text="name"
|
||||
return-object
|
||||
outline
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
hide-details
|
||||
label="Dokter"
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
-->
|
||||
</v-flex>
|
||||
<v-flex xs8>
|
||||
<h5 class="mono font-weight-bold" dark >{{selected_doctor.name}}</h5>
|
||||
</v-flex>
|
||||
|
||||
</v-layout>
|
||||
</v-sheet>
|
||||
<v-card color="#26c6da"
|
||||
dark
|
||||
>
|
||||
<v-layout class="mt-2 pa-2 " align-center wrap>
|
||||
<v-flex xs12>
|
||||
<v-layout v-for="result in results" mb-2 row>
|
||||
<v-flex xs4>
|
||||
<!--<v-textarea
|
||||
auto-grow
|
||||
:label="result.label"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="result.result"
|
||||
hide-details
|
||||
></v-textarea>-->
|
||||
<label class="font-weight-black">{{result.label}}</label>
|
||||
</v-flex>
|
||||
<v-flex xs8>
|
||||
<p class="mono font-condensed ">{{result.result}}</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_fna = false">Tutup</v-btn>
|
||||
<!--<v-btn color="blue darken-1" @click="saveResult_Fna" flat >Simpan</v-btn>-->
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_fna/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
dialog_fna: {
|
||||
get() {
|
||||
return this.$store.state.re_fna.dialog_fna
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_fna/update_dialog_fna", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_fna.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_fna/update_results", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_fna.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_fna.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_fna/update_selected_doctor", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
saveResult_Fna(){
|
||||
if(_.isEmpty(this.selected_doctor) || this.selected_doctor == '0'){
|
||||
this.error_doctor = true
|
||||
|
||||
}else
|
||||
this.$store.dispatch("re_fna/saveresult_fna",{doctor:this.selected_doctor.id,results:this.results})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,267 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_lcprep" persistent max-width="75%">
|
||||
<v-card>
|
||||
<v-card-title class="red white--text">
|
||||
<span class="headline">PAP SMEAR (LCPrep)</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout class="mb-2" row>
|
||||
<v-flex xs12>
|
||||
<v-select item-text="name" return-object style="font-size:12px" class="mini-select" outline :items="langs"
|
||||
v-model="selected_lang" hide-details label="Bahasa"></v-select>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout class="mb-2" row>
|
||||
<v-flex xs12>
|
||||
<v-select item-text="name" return-object style="font-size:12px" class="mini-select" outline
|
||||
:items="doctors" v-model="selected_doctor" :disabled="disabled_form" hide-details
|
||||
label="Dokter"></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout class="mt-2 mb-2" row>
|
||||
<v-flex xs6>
|
||||
<v-card outlined class="mr-1 pa-2">
|
||||
<v-card-text>
|
||||
<p v-if="parseInt(selected_lang.id) == 1" class="overline mb-0 font-weight-bold">ADEKUASI BAHAN
|
||||
PEMERIKSAAN</p>
|
||||
<p v-else class="overline caption font-weight-bold mb-0">SAMPLE ADEQUACY</p>
|
||||
<v-checkbox v-for="chx_adekuasi in adekuasi" class="mono" v-model="chx_adekuasi.chex"
|
||||
:label="parseInt(selected_lang.id) == 1 ? chx_adekuasi.name : chx_adekuasi.name_en"
|
||||
:disabled="disabled_form" hide-details></v-checkbox>
|
||||
</v-card-text>
|
||||
|
||||
</v-card>
|
||||
</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-card outlined class="ml-1 pa-2">
|
||||
<v-card-text>
|
||||
<p v-if="parseInt(selected_lang.id) == 1" class="overline mb-0 font-weight-bold">KATEGORI UMUM</p>
|
||||
<p v-else class="overline caption font-weight-bold mb-0">GENERAL CATEGORY</p>
|
||||
<v-checkbox v-for="chx_kategoriumum in kategoriumum" class="mono" v-model="chx_kategoriumum.chex"
|
||||
:label="parseInt(selected_lang.id) == 1 ? chx_kategoriumum.name : chx_kategoriumum.name_en"
|
||||
:disabled="disabled_form" hide-details></v-checkbox>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-divider></v-divider>
|
||||
<v-layout wrap>
|
||||
<v-flex v-for="(details, idx) in interpretasi"
|
||||
:class="{ 'xs3': idx === 0, 'xs7 pl-1': idx === 1, 'xs2 pl-1': idx === 2 }">
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-card>
|
||||
<v-card-title color="warning" class="purple white--text">
|
||||
<h5 class="subheader overline font-weight-bold">{{ parseInt(selected_lang.id) == 1 ?
|
||||
details.group_name : details.group_name_en }}</h5>
|
||||
</v-card-title>
|
||||
<v-list dense subheader single-line v-for="(subgroups, idxx) in details.subgroups"
|
||||
:key="details.id">
|
||||
<v-subheader class="font-weight-black">{{ parseInt(selected_lang.id) == 1 ?
|
||||
subgroups.subgroup_name : subgroups.subgroup_name_en }}</v-subheader>
|
||||
<v-list-tile v-if="subgroups.childs.length > 0" v-for="(childs, idxxx) in subgroups.childs"
|
||||
:key="childs.id">
|
||||
<div v-if="childs.has_result === 'Y' && childs.type_result === 'CHECK'"
|
||||
:class="{ 'pl-0': childs.code.length === 2, 'pl-4': childs.code.length === 4 }">
|
||||
<v-list-tile-action class="mb-2 mono">
|
||||
<v-checkbox v-model="childs.chex" :label="parseInt(selected_lang.id) == 1 ?
|
||||
childs.name : childs.name_en" :disabled="childs.is_parent === 'Y' || disabled_form"
|
||||
@change="changeChildsChex(childs, idxxx, idxx, idx)" hide-details></v-checkbox>
|
||||
</v-list-tile-action>
|
||||
</div>
|
||||
<div v-if="childs.has_result === 'Y' && childs.type_result === 'TEXT'">
|
||||
<v-list-tile-action class="mb-2 pl-0 mono">
|
||||
<v-text-field v-if="parseInt(selected_lang.id) == 1" label="" single-line
|
||||
:disabled="disabled_form" v-model="childs.value"></v-text-field>
|
||||
<v-text-field v-else label="" single-line v-model="childs.value_en"></v-text-field>
|
||||
</v-list-tile-action>
|
||||
</div>
|
||||
|
||||
</v-list>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout class="mb-2 mt-2" column>
|
||||
<v-card>
|
||||
<v-card-title color="warning" class="purple white--text">
|
||||
<h5 class="subheader overline font-weight-bold">{{ parseInt(selected_lang.id) == 1 ?
|
||||
'HASIL AKHIR' : 'FINAL RESULT' }}</h5>
|
||||
</v-card-title>
|
||||
<v-card-text class="pa-2">
|
||||
<v-layout v-if="parseInt(selected_lang.id) == 1" v-for="result in results" mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea :disabled="disabled_form" auto-grow :label="result.label" outline rows="2"
|
||||
v-model="result.result" hide-details></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout v-if="parseInt(selected_lang.id) == 2" v-for="result in other_results" mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea :disabled="disabled_form" auto-grow :label="result.label" outline rows="2"
|
||||
v-model="result.result" hide-details></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_lcprep = false">Tutup</v-btn>
|
||||
<v-btn v-if="!onprocess && !disabled_form" color="blue darken-1" @click="saveResult_Lcprep"
|
||||
flat>Simpan</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
<style scoped>
|
||||
.v-input.lcprep .v-label {
|
||||
height: 20px !important;
|
||||
line-height: 25px !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_lcprep/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor: false
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
disabled_form() {
|
||||
if (this.order.validation === 'Y') {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
},
|
||||
order() {
|
||||
return this.$store.state.re_lcprep.order
|
||||
},
|
||||
other_results: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.other_results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_other_results", val)
|
||||
}
|
||||
},
|
||||
langs() {
|
||||
return this.$store.state.re_lcprep.langs
|
||||
},
|
||||
selected_lang: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.selected_lang
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_selected_lang", val)
|
||||
}
|
||||
},
|
||||
onprocess() {
|
||||
return this.$store.state.re_lcprep.onprocess
|
||||
},
|
||||
dialog_lcprep: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.dialog_lcprep
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_dialog_lcprep", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_results", val)
|
||||
}
|
||||
},
|
||||
adekuasi: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.adekuasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_adekuasi", val)
|
||||
}
|
||||
},
|
||||
kategoriumum: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.kategoriumum
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_kategoriumum", val)
|
||||
}
|
||||
},
|
||||
interpretasi: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.interpretasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_interpretasi", val)
|
||||
}
|
||||
},
|
||||
doctors() {
|
||||
return this.$store.state.re_lcprep.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_selected_doctor", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeChildsChex(childs, idxxx, idxx, idx) {
|
||||
let interpretasi = this.interpretasi
|
||||
var parent_id = interpretasi[idx].subgroups[idxx].childs[idxxx].parent_id
|
||||
if (parent_id !== '0') {
|
||||
let childs = interpretasi[idx].subgroups[idxx].childs
|
||||
let index_parent = _.findIndex(childs, function (o) { return o.id === parent_id })
|
||||
if (childs.chex)
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = true
|
||||
else {
|
||||
let xfilter = _.filter(childs, { 'chex': true, 'parent_id': parent_id })
|
||||
if (xfilter.length === 0)
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = false
|
||||
else
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = true
|
||||
}
|
||||
}
|
||||
this.interpretasi = interpretasi
|
||||
},
|
||||
saveResult_Lcprep() {
|
||||
if (_.isEmpty(this.selected_doctor) || this.selected_doctor.id == '0') {
|
||||
this.error_doctor = true
|
||||
|
||||
} else {
|
||||
this.$store.commit("re_lcprep/update_onprocess", true)
|
||||
let selected_lcprep = this.$store.state.re_lcprep.selected_lcprep
|
||||
var prm = {
|
||||
doctor: this.selected_doctor.id,
|
||||
order_id: selected_lcprep.order_id,
|
||||
detail_id: selected_lcprep.id,
|
||||
results: this.results,
|
||||
interpretasi: this.interpretasi,
|
||||
kategoriumum: this.kategoriumum,
|
||||
adekuasi: this.adekuasi,
|
||||
other_results: this.other_results,
|
||||
selected_lang: this.selected_lang.id
|
||||
}
|
||||
this.$store.dispatch("re_lcprep/saveresult_lcprep", prm)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,267 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_lcprep" persistent max-width="75%">
|
||||
<v-card>
|
||||
<v-card-title class="red white--text">
|
||||
<span class="headline">PAP SMEAR (LCPrep)</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout class="mb-2" row>
|
||||
<v-flex xs12>
|
||||
<v-select
|
||||
item-text="name"
|
||||
return-object
|
||||
style="font-size:12px"
|
||||
class="mini-select"
|
||||
disabled
|
||||
outline
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
hide-details
|
||||
label="Dokter"
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout class="mt-2 mb-2" row>
|
||||
<v-flex xs6>
|
||||
<v-card
|
||||
outlined
|
||||
class="mr-1 pa-2"
|
||||
>
|
||||
<v-card-text>
|
||||
<p class="overline mb-0 font-weight-bold">ADEKUASI BAHAN PEMERIKSAAN</p>
|
||||
<v-checkbox v-for="chx_adekuasi in adekuasi"
|
||||
class="mono"
|
||||
disabled
|
||||
v-model="chx_adekuasi.chex"
|
||||
:label="chx_adekuasi.name"
|
||||
hide-details
|
||||
></v-checkbox>
|
||||
</v-card-text>
|
||||
|
||||
</v-card>
|
||||
</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-card
|
||||
outlined
|
||||
class="ml-1 pa-2"
|
||||
>
|
||||
<v-card-text>
|
||||
<p class="overline mb-0 font-weight-bold">KATEGORI UMUM</p>
|
||||
<v-checkbox v-for="chx_kategoriumum in kategoriumum"
|
||||
class="mono"
|
||||
disabled
|
||||
v-model="chx_kategoriumum.chex"
|
||||
:label="chx_kategoriumum.name"
|
||||
hide-details
|
||||
></v-checkbox>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-divider></v-divider>
|
||||
<v-layout wrap>
|
||||
<v-flex v-for="(details,idx) in interpretasi" :class="{'xs3':idx===0,'xs7 pl-1':idx===1,'xs2 pl-1':idx===2}">
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-card>
|
||||
<v-card-title color="warning" class="purple white--text">
|
||||
<h5 class="subheader overline font-weight-bold">{{details.group_name}}</h5>
|
||||
</v-card-title>
|
||||
<v-list
|
||||
dense
|
||||
subheader
|
||||
single-line
|
||||
v-for="(subgroups,idxx) in details.subgroups" :key="details.id"
|
||||
>
|
||||
<v-subheader class="font-weight-black">{{subgroups.subgroup_name}}</v-subheader>
|
||||
<v-list-tile v-if="subgroups.childs.length > 0" v-for="(childs,idxxx) in subgroups.childs" :key="childs.id" >
|
||||
<div v-if="childs.has_result === 'Y' && childs.type_result === 'CHECK'"
|
||||
:class="{'pl-0':childs.code.length === 2,'pl-4':childs.code.length === 4}"
|
||||
>
|
||||
<v-list-tile-action class="mb-2 mono">
|
||||
<v-checkbox
|
||||
class="lcprep"
|
||||
v-model="childs.chex"
|
||||
:label="childs.name"
|
||||
disabled
|
||||
hide-details
|
||||
></v-checkbox>
|
||||
</v-list-tile-action>
|
||||
</div>
|
||||
<div v-if="childs.has_result === 'Y' && childs.type_result === 'TEXT'">
|
||||
<v-list-tile-action class="mb-2 pl-0 mono">
|
||||
<v-text-field
|
||||
label=""
|
||||
disabled
|
||||
single-line
|
||||
v-model="childs.value"
|
||||
></v-text-field>
|
||||
</v-list-tile-action>
|
||||
</div>
|
||||
|
||||
</v-list>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout class="mb-2 mt-2" column >
|
||||
<v-card>
|
||||
<v-card-title color="warning" class="purple white--text">
|
||||
<h5 class="subheader overline font-weight-bold">HASIL AKHIR</h5>
|
||||
</v-card-title>
|
||||
<v-card-text class="pa-2">
|
||||
<v-layout v-for="result in results" mt-2 mb-2 row>
|
||||
<!--<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
:label="result.label"
|
||||
outline
|
||||
disabled
|
||||
rows="2"
|
||||
v-model="result.result"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>-->
|
||||
<v-flex xs2>
|
||||
<!--<v-textarea
|
||||
auto-grow
|
||||
:label="result.label"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="result.result"
|
||||
hide-details
|
||||
></v-textarea>-->
|
||||
<label class="font-weight-black">{{result.label}}</label>
|
||||
</v-flex>
|
||||
<v-flex xs10>
|
||||
<p class="mono">{{result.result}}</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_lcprep = false">Tutup</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
<style scoped>
|
||||
.v-input.lcprep .v-label {
|
||||
height: 20px!important;
|
||||
line-height: 22px!important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_lcprep/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
dialog_lcprep: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.dialog_lcprep
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_dialog_lcprep", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_results", val)
|
||||
}
|
||||
},
|
||||
adekuasi: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.adekuasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_adekuasi", val)
|
||||
}
|
||||
},
|
||||
kategoriumum: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.kategoriumum
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_kategoriumum", val)
|
||||
}
|
||||
},
|
||||
interpretasi: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.interpretasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_interpretasi", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_lcprep.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_lcprep.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_lcprep/update_selected_doctor", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeChildsChex(childs,idxxx,idxx,idx){
|
||||
let interpretasi = this.interpretasi
|
||||
var parent_id = interpretasi[idx].subgroups[idxx].childs[idxxx].parent_id
|
||||
if(parent_id !== '0'){
|
||||
let childs = interpretasi[idx].subgroups[idxx].childs
|
||||
let index_parent = _.findIndex(childs, function(o) { return o.id === parent_id })
|
||||
if(childs.chex)
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = true
|
||||
else
|
||||
{
|
||||
let xfilter = _.filter(childs, { 'chex': true, 'parent_id': parent_id })
|
||||
if(xfilter.length === 0)
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = false
|
||||
else
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = true
|
||||
}
|
||||
}
|
||||
this.interpretasi = interpretasi
|
||||
},
|
||||
saveResult_Lcprep(){
|
||||
if(_.isEmpty(this.selected_doctor) || this.selected_doctor.id == '0'){
|
||||
this.error_doctor = true
|
||||
|
||||
}else{
|
||||
let selected_lcprep = this.$store.state.re_lcprep.selected_lcprep
|
||||
var prm = {
|
||||
doctor:this.selected_doctor.id,
|
||||
order_id:selected_lcprep.order_id,
|
||||
detail_id:selected_lcprep.id,
|
||||
results:this.results,
|
||||
interpretasi:this.interpretasi,
|
||||
kategoriumum:this.kategoriumum,
|
||||
adekuasi:this.adekuasi
|
||||
}
|
||||
this.$store.dispatch("re_lcprep/saveresult_lcprep",prm)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,354 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_mikro" persistent max-width="50%">
|
||||
<v-card>
|
||||
<v-card-title class="teal white--text">
|
||||
<span class="headline">Mikro</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout class="mb-0" row>
|
||||
<v-flex xs6 pa-2 pb-0>
|
||||
<v-select
|
||||
item-text="value"
|
||||
:disabled="true"
|
||||
return-object
|
||||
class="mini-select"
|
||||
:items="result_values"
|
||||
v-model="selected_result_value"
|
||||
label="Pilih Hasil"
|
||||
outline
|
||||
hide-details
|
||||
></v-select>
|
||||
<p v-if="error_hasil" class="error pt-1 pl-2 pr-2" style="color:#fff">Hasilnya apa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout class="mb-0" row>
|
||||
<v-flex xs6 pa-2 pb-0>
|
||||
<v-select
|
||||
:disabled="true"
|
||||
item-text="name"
|
||||
return-object
|
||||
class="mini-select"
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
label="Pilih Dokter"
|
||||
outline
|
||||
hide-details
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pt-1 pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
<v-flex xs6 v-if="selected_result_value.id === 'Positif'" pa-2 pb-0>
|
||||
<v-select
|
||||
:disabled="true"
|
||||
class="mini-select"
|
||||
item-text="name"
|
||||
return-object
|
||||
:items="bacteries"
|
||||
v-model="selected_bacteria"
|
||||
label="Pilih Bakteri"
|
||||
outline
|
||||
hide-details
|
||||
></v-select>
|
||||
<p v-if="error_bacteria" class="error pt-1 pl-2 pr-2" style="color:#fff">Bakterinya ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout v-if="selected_result_value.id === 'other'" class="pl-2 pr-2" row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
:disabled="true"
|
||||
auto-grow
|
||||
label="Hasil Lainnya"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="results.result_other"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
<p v-if="error_result_other" class="error pt-1 pl-2 pr-2" style="color:#fff">Hasil Lainnya : harus diisi</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout v-if="selected_result_value.id === 'Positif'" class="mb-2" row>
|
||||
<v-flex xs6 pa-2 pb-0>
|
||||
<v-text-field
|
||||
:disabled="true"
|
||||
label="Hasil Biakan"
|
||||
outline
|
||||
v-model="results.hasil_biakan"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex xs6 pa-2 pb-0>
|
||||
<v-text-field
|
||||
:disabled="true"
|
||||
label="Jenis Bahan"
|
||||
outline
|
||||
v-model="results.sample_name"
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout v-if="selected_result_value.id === 'Positif'" class="mb-2" row>
|
||||
<v-flex xs12>
|
||||
<table style="width:100%;border-collapse: collapse;" class="table_antibiotics">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%" style="padding: 8px;border: 1px solid black;" rowspan="2">No.</th>
|
||||
<th width="22%" style="padding: 8px;border: 1px solid black;" rowspan="2">Jenis Obat</th>
|
||||
<th style="padding: 8px;border: 1px solid black;" colspan="3">Standart</th>
|
||||
<th width="10%" style="padding: 8px;border: 1px solid black;" rowspan="2">Test</th>
|
||||
<th width="23%" style="padding: 8px;border: 1px solid black;" rowspan="2">Keterangan</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="12%" style="padding: 8px;border: 1px solid black;">R <</th>
|
||||
<th width="12%" style="padding: 8px;border: 1px solid black;"> =< I = </th>
|
||||
<th width="12%" style="padding: 8px;border: 1px solid black;">S >=</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr style="border: 1px solid black;"
|
||||
v-for="detail in results.details"
|
||||
>
|
||||
<td style="border: 1px solid black;padding: 8px;text-align:center">{{detail.xno}}</td>
|
||||
<td style="border: 1px solid black;padding: 8px;">{{detail.T_AntibioticName}}</td>
|
||||
<td style="border: 1px solid black;padding: 8px;text-align:center">{{detail.T_AntibioticNoteR}}</td>
|
||||
<td style="border: 1px solid black;padding: 8px;text-align:center">{{detail.T_AntibioticNoteI}}</td>
|
||||
<td style="border: 1px solid black;padding: 8px;text-align:center">{{detail.T_AntibioticNoteS}}</td>
|
||||
<td style="border: 1px solid black;padding: 8px;">
|
||||
{{detail.value}}
|
||||
</td>
|
||||
<td style="border: 1px solid black;padding: 8px;text-align:center">
|
||||
<v-btn style="min-width:30px" v-if="detail.chx_r === 'Y'" color="teal" dark small>R</v-btn>
|
||||
<v-btn style="min-width:30px" v-if="detail.chx_r === 'N'" color="red" dark small>R</v-btn>
|
||||
<v-btn style="min-width:30px" v-if="detail.chx_i === 'Y'" color="teal" dark small>I</v-btn>
|
||||
<v-btn style="min-width:30px" v-if="detail.chx_i === 'N'" color="red" dark small>I</v-btn>
|
||||
<v-btn style="min-width:30px" v-if="detail.chx_s === 'Y'" color="teal" dark small>S</v-btn>
|
||||
<v-btn style="min-width:30px" v-if="detail.chx_s === 'N'" color="red" dark small>S</v-btn>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="grey darken-1" flat @click="dialog_mikro = false">Tutup</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
<style scoped>
|
||||
table.table_antibiotics {
|
||||
font-family: arial, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.table_antibiotics tbody td, table.table_antibiotics tbody th {
|
||||
border: 1px solid #dddddd;
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
table.table_antibiotics tbody tr:nth-child(even) {
|
||||
background-color: #dddddd;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_mikro/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false,
|
||||
error_bacteria:false,
|
||||
error_hasil:false,
|
||||
error_result_other:false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
selected_result_value: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.selected_result_value
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_selected_result_value", val)
|
||||
}
|
||||
},
|
||||
result_values(){
|
||||
return this.$store.state.re_mikro.result_values
|
||||
},
|
||||
bacteries(){
|
||||
return this.$store.state.re_mikro.bacteries
|
||||
},
|
||||
selected_bacteria: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.selected_bacteria
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_selected_bacteria", val)
|
||||
this.$store.dispatch("re_mikro/getantibiotics", val)
|
||||
}
|
||||
},
|
||||
dialog_mikro: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.dialog_mikro
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_dialog_mikro", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_results", val)
|
||||
}
|
||||
},
|
||||
hasil_biakan: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.hasil_biakan
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_hasil_biakan", val)
|
||||
}
|
||||
},
|
||||
result_other: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.result_other
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_result_other", val)
|
||||
}
|
||||
},
|
||||
sample_name: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.sample_name
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_sample_name", val)
|
||||
}
|
||||
},
|
||||
interpretasi: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.interpretasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_interpretasi", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_mikro.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_mikro.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_mikro/update_selected_doctor", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeValue(detail,value){
|
||||
let antibiotics = this.results.details
|
||||
let idx = _.findIndex(antibiotics, function(o) { return o.T_AntibioticID === detail.T_AntibioticID })
|
||||
console.log(antibiotics[idx])
|
||||
antibiotics[idx].value = value
|
||||
antibiotics[idx].chx_r = 'N'
|
||||
antibiotics[idx].chx_s = 'N'
|
||||
antibiotics[idx].chx_i = 'N'
|
||||
|
||||
if(
|
||||
((detail.T_AntibioticMinInclusiveR === 'N' && parseFloat(antibiotics[idx].value) > detail.T_AntibioticMinValueR) ||
|
||||
(detail.T_AntibioticMinInclusiveR === 'Y' && parseFloat(antibiotics[idx].value) >= detail.T_AntibioticMinValueR)) &&
|
||||
((detail.T_AntibioticMaxInclusiveR === 'N' && parseFloat(antibiotics[idx].value) < detail.T_AntibioticMaxValueR) ||
|
||||
(detail.T_AntibioticMaxInclusiveR === 'Y' && parseFloat(antibiotics[idx].value) <= detail.T_AntibioticMaxValueR))
|
||||
){
|
||||
antibiotics[idx].chx_r = 'Y'
|
||||
antibiotics[idx].note = 'R'
|
||||
}
|
||||
|
||||
if(
|
||||
((detail.T_AntibioticMinInclusiveS === 'N' && parseFloat(antibiotics[idx].value) > detail.T_AntibioticMinValueS) ||
|
||||
(detail.T_AntibioticMinInclusiveS === 'Y' && parseFloat(antibiotics[idx].value) >= detail.T_AntibioticMinValueS)) &&
|
||||
((detail.T_AntibioticMaxInclusiveS === 'N' && parseFloat(antibiotics[idx].value) < detail.T_AntibioticMaxValueS) ||
|
||||
(detail.T_AntibioticMaxInclusiveS === 'Y' && parseFloat(antibiotics[idx].value) <= detail.T_AntibioticMaxValueS))
|
||||
){
|
||||
antibiotics[idx].chx_s = 'Y'
|
||||
antibiotics[idx].note = 'S'
|
||||
}
|
||||
|
||||
if(
|
||||
((detail.T_AntibioticMinInclusiveI === 'N' && parseFloat(antibiotics[idx].value) > detail.T_AntibioticMinValueI) ||
|
||||
(detail.T_AntibioticMinInclusiveI === 'Y' && parseFloat(antibiotics[idx].value) >= detail.T_AntibioticMinValueI)) &&
|
||||
((detail.T_AntibioticMaxInclusiveI === 'N' && parseFloat(antibiotics[idx].value) < detail.T_AntibioticMaxValueI) ||
|
||||
(detail.T_AntibioticMaxInclusiveI === 'Y' && parseFloat(antibiotics[idx].value) <= detail.T_AntibioticMaxValueI))
|
||||
){
|
||||
antibiotics[idx].chx_i = 'Y'
|
||||
antibiotics[idx].note = 'I'
|
||||
}
|
||||
|
||||
this.results.details = antibiotics
|
||||
},
|
||||
getAntibiotics(){
|
||||
console.log(this.selected_bacteria)
|
||||
var prm = this.selected_bacteria
|
||||
this.$store.dispatch("re_mikro/getantibiotics", prm)
|
||||
},
|
||||
changeChildsChex(childs,idxxx,idxx,idx){
|
||||
let interpretasi = this.interpretasi
|
||||
var parent_id = interpretasi[idx].subgroups[idxx].childs[idxxx].parent_id
|
||||
if(parent_id !== '0'){
|
||||
let childs = interpretasi[idx].subgroups[idxx].childs
|
||||
let index_parent = _.findIndex(childs, function(o) { return o.id === parent_id })
|
||||
if(childs.chex)
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = true
|
||||
else
|
||||
{
|
||||
let xfilter = _.filter(childs, { 'chex': true, 'parent_id': parent_id })
|
||||
if(xfilter.length === 0)
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = false
|
||||
else
|
||||
interpretasi[idx].subgroups[idxx].childs[index_parent].chex = true
|
||||
}
|
||||
}
|
||||
this.interpretasi = interpretasi
|
||||
},
|
||||
saveResult_Mikro(){
|
||||
var go_save = true
|
||||
|
||||
if(_.isEmpty(this.selected_doctor) || this.selected_doctor.id == '0'){
|
||||
this.error_doctor = true
|
||||
go_save = false
|
||||
}
|
||||
if(this.selected_result_value.id === 'Positif' && (_.isEmpty(this.selected_bacteria) || this.selected_bacteria.id == '0')){
|
||||
this.error_bacteria = true
|
||||
go_save = false
|
||||
}
|
||||
|
||||
if(this.selected_result_value.id === 'other' && this.results.result_other === ''){
|
||||
this.error_result_other = true
|
||||
go_save = false
|
||||
}
|
||||
if(go_save){
|
||||
let selected_mikro = this.$store.state.re_mikro.selected_mikro
|
||||
var prm = {
|
||||
result_value:this.selected_result_value.id,
|
||||
doctor:this.selected_doctor.id,
|
||||
bacteria:this.selected_bacteria.id,
|
||||
hasil_biakan:this.hasil_biakan,
|
||||
sample_name:this.sample_name,
|
||||
results:this.results
|
||||
}
|
||||
this.$store.dispatch("re_mikro/saveresult_mikro",prm)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,255 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_papsmear" persistent max-width="50%">
|
||||
<v-card>
|
||||
<v-card-title class="red white--text">
|
||||
<span class="headline">PAP SMEAR</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout class="mb-2" row>
|
||||
<v-flex xs8>
|
||||
<v-select
|
||||
item-text="name"
|
||||
return-object
|
||||
style="font-size:12px"
|
||||
class="mini-select"
|
||||
outline
|
||||
disabled
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
hide-details
|
||||
label="Dokter"
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
<v-flex pt-2 xs4>
|
||||
<v-layout class="pa-2" align-center text-xs-right row>
|
||||
<v-flex xs12>
|
||||
<h3 class="subheading font-weight-bold">Bahan dari :</h3>
|
||||
</v-flex>
|
||||
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout class="mt-2 mb-2" wrap>
|
||||
<v-flex xs8>
|
||||
<v-layout v-for="(check,index) in checks" align-center mb-1 row>
|
||||
<v-flex xs1>
|
||||
<v-btn v-if="check.selected === 'N'" small style="min-width:18px"><v-icon small>close</v-icon></v-btn>
|
||||
<v-btn color="teal" dark v-if="check.selected === 'Y'" small style="min-width:18px"><v-icon small>check</v-icon></v-btn>
|
||||
</v-flex>
|
||||
<v-flex xs5 pl-2>
|
||||
<label class="body-2 font-weight-bold mb-0 mono">{{check.name}}</label>
|
||||
</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-text-field
|
||||
outline
|
||||
v-model="check.note"
|
||||
disabled
|
||||
single-line
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
<v-flex pr-4 xs4>
|
||||
<v-layout align-center text-xs-right v-for="(bahan,i) in bahans" align-center mb-1 row>
|
||||
<v-flex xs15 pl-2>
|
||||
<label class="body-2 font-weight-bold mb-0 mono">{{bahan.name}}</label>
|
||||
</v-flex>
|
||||
<v-flex xs1>
|
||||
<v-btn v-if="bahan.selected === 'N'" small style="min-width:18px"><v-icon small>close</v-icon></v-btn>
|
||||
<v-btn color="teal" dark v-if="bahan.selected === 'Y'" small style="min-width:18px"><v-icon small>check</v-icon></v-btn>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-divider></v-divider>
|
||||
<v-layout mt-2 mb-2 align-center row>
|
||||
<v-flex xs3>
|
||||
<span class="subheading font-weight-bold">
|
||||
Kategori keganasan :
|
||||
</span>
|
||||
</v-flex>
|
||||
<v-flex text-xs-right xs9>
|
||||
<span v-for="(category,idx) in categories">
|
||||
<v-btn v-if="category.selected === 'N'" small style="min-width:18px"><v-icon small>close</v-icon></v-btn>
|
||||
<v-btn color="teal" dark v-if="category.selected === 'Y'" small style="min-width:18px"><v-icon small>check</v-icon></v-btn>
|
||||
<span class="pl-1 pr-2">{{category.name}}</span>
|
||||
</span>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-divider></v-divider>
|
||||
<v-layout mt-2 mb-2 align-center row>
|
||||
<v-flex xs3>
|
||||
<span class="subheading font-weight-bold">
|
||||
Index maturasi :
|
||||
</span>
|
||||
</v-flex>
|
||||
<v-flex xs1>
|
||||
<span class="subheading font-weight-bold">
|
||||
M.I
|
||||
</span>
|
||||
</v-flex>
|
||||
<v-flex v-for="(mtr,m) in maturasi.value" xs3 pl-2 pt-2 pb-2>
|
||||
<v-text-field
|
||||
v-model="mtr"
|
||||
disabled
|
||||
outline
|
||||
single-line
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
|
||||
</v-layout>
|
||||
<v-divider></v-divider>
|
||||
<v-layout v-for="result in results" mt-2 mb-2 row>
|
||||
<v-flex xs4>
|
||||
<!--<v-textarea
|
||||
auto-grow
|
||||
:label="result.label"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="result.result"
|
||||
hide-details
|
||||
></v-textarea>-->
|
||||
<label class="font-weight-black">{{result.label}}</label>
|
||||
</v-flex>
|
||||
<v-flex xs8>
|
||||
<p class="mono">{{result.result}}</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_papsmear = false">Tutup</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_papsmear/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
dialog_papsmear: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.dialog_papsmear
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_dialog_papsmear", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_results", val)
|
||||
}
|
||||
},
|
||||
checks: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.checks
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_checks", val)
|
||||
}
|
||||
},
|
||||
maturasi: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.maturasi
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_maturasi", val)
|
||||
}
|
||||
},
|
||||
bahans: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.bahans
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_bahans", val)
|
||||
}
|
||||
},
|
||||
categories: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.categories
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_categories", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_papsmear.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_papsmear.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_papsmear/update_selected_doctor", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
saveResult_Papsmear(){
|
||||
if(_.isEmpty(this.selected_doctor) || this.selected_doctor == '0'){
|
||||
this.error_doctor = true
|
||||
|
||||
}else{
|
||||
let selected_papsmear = this.$store.state.re_papsmear.selected_papsmear
|
||||
var prm = {
|
||||
order_id:selected_papsmear.order_id,
|
||||
detail_id:selected_papsmear.id,
|
||||
doctor:this.selected_doctor.id,
|
||||
checks:this.checks,
|
||||
maturasi:this.maturasi,
|
||||
bahans:this.bahans,
|
||||
categories:this.categories,
|
||||
results:this.results
|
||||
}
|
||||
this.$store.dispatch("re_papsmear/saveresult_papsmear",prm)
|
||||
}
|
||||
},
|
||||
changeChecksSelected(value,idx){
|
||||
let checks = this.$store.state.re_papsmear.checks
|
||||
checks[idx].selected = value.selected === 'N'?'Y':'N'
|
||||
if(checks[idx].selected === 'N')
|
||||
checks[idx].note = ''
|
||||
this.checks = checks
|
||||
},
|
||||
changeNote(value,idx){
|
||||
let checks = this.$store.state.re_papsmear.checks
|
||||
checks[idx].note = value.note
|
||||
this.checks = checks
|
||||
},
|
||||
changeCategoriesSelected(value,idx){
|
||||
let categories = this.$store.state.re_papsmear.categories
|
||||
categories[idx].selected = value.selected === 'N'?'Y':'N'
|
||||
this.categories = categories
|
||||
},
|
||||
changeBahansSelected(value,idx){
|
||||
let bahans = this.$store.state.re_papsmear.bahans
|
||||
bahans[idx].selected = value.selected === 'N'?'Y':'N'
|
||||
this.bahans = bahans
|
||||
},
|
||||
changeMaturasi(value,idx){
|
||||
let mx = this.$store.state.re_papsmear.maturasi
|
||||
mx.value[idx] = value
|
||||
this.maturasi = mx
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,362 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_patologianatomy" persistent max-width="50%">
|
||||
<v-card>
|
||||
<v-card-title class="red white--text">
|
||||
<span class="headline">PATOLOGI ANATOMI</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout class="mb-2" row>
|
||||
<v-flex xs8>
|
||||
<v-select
|
||||
item-text="name"
|
||||
return-object
|
||||
style="font-size: 12px"
|
||||
class="mini-select"
|
||||
outline
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
hide-details
|
||||
label="Dokter"
|
||||
disabled
|
||||
></v-select>
|
||||
<p
|
||||
v-if="error_doctor"
|
||||
class="error pl-2 pr-2"
|
||||
style="color: #fff"
|
||||
>
|
||||
Dokternya siapa ? jangan lupa ya ...
|
||||
</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-divider></v-divider>
|
||||
<v-layout mt-2 mb-2 row>
|
||||
<v-flex pr-1 xs6>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
disabled
|
||||
label="No Sediaan"
|
||||
outline
|
||||
rows="1"
|
||||
v-model="no_sediaan"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
<v-flex pl-1 xs6>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
label="Lokasi Organ"
|
||||
outline
|
||||
rows="1"
|
||||
v-model="lokasi"
|
||||
disabled
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
disabled
|
||||
label="Keterangan Klinis"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="klinis"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
disabled
|
||||
label="Diagnosa Klinis"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="diagnosis_klinis"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
disabled
|
||||
label="Makroskopik"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="makroskopik"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
disabled
|
||||
label="Mikroskopik"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="mikroskopik"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mt-2 mb-2 row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
disabled
|
||||
label="Kesimpulan"
|
||||
outline
|
||||
rows="2"
|
||||
v-model="kesimpulan"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<p class="mb-2">Makroskopis</p>
|
||||
<p class="mb-2" v-if="images_makro.length === 0">Belum unggah foto</p>
|
||||
<v-layout v-if="images_makro.length > 0" align-center row>
|
||||
<v-flex v-for="image in images_makro" xs6 pa-2>
|
||||
<v-img :src="image.image_url">
|
||||
<div class="fill-height bottom-gradient"></div>
|
||||
</v-img>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<p class="mb-2">Mikroskopis</p>
|
||||
<p class="mb-2" v-if="images_makro.length === 0">Belum unggah foto</p>
|
||||
<v-layout v-if="images_mikro.length > 0" align-center row>
|
||||
<v-flex v-for="image in images_mikro" xs6 pa-2>
|
||||
<v-img :src="image.image_url">
|
||||
<div class="fill-height bottom-gradient"></div>
|
||||
</v-img>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="grey darken-1"
|
||||
flat
|
||||
@click="dialog_patologianatomy = false"
|
||||
>Tutup</v-btn
|
||||
>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_patologianatomy/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
images_makro: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.images_makro;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_images_makro", val);
|
||||
},
|
||||
},
|
||||
images_mikro: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.images_mikro;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_images_mikro", val);
|
||||
},
|
||||
},
|
||||
no_sediaan: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.no_sediaan;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_no_sediaan", val);
|
||||
},
|
||||
},
|
||||
diagnosis_klinis: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.diagnosis_klinis;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_diagnosis_klinis", val);
|
||||
},
|
||||
},
|
||||
klinis: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.klinis;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_klinis", val);
|
||||
},
|
||||
},
|
||||
lokasi: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.lokasi;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_lokasi", val);
|
||||
},
|
||||
},
|
||||
makroskopik: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.makroskopik;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_makroskopik", val);
|
||||
},
|
||||
},
|
||||
mikroskopik: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.mikroskopik;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_mikroskopik", val);
|
||||
},
|
||||
},
|
||||
kesimpulan: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.kesimpulan;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_kesimpulan", val);
|
||||
},
|
||||
},
|
||||
dialog_patologianatomy: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.dialog_patologianatomy;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit(
|
||||
"re_patologianatomy/update_dialog_patologianatomy",
|
||||
val
|
||||
);
|
||||
},
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.results;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_results", val);
|
||||
},
|
||||
},
|
||||
checks: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.checks;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_checks", val);
|
||||
},
|
||||
},
|
||||
maturasi: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.maturasi;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_maturasi", val);
|
||||
},
|
||||
},
|
||||
bahans: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.bahans;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_bahans", val);
|
||||
},
|
||||
},
|
||||
categories: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.categories;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_categories", val);
|
||||
},
|
||||
},
|
||||
doctors() {
|
||||
return this.$store.state.re_patologianatomy.doctors;
|
||||
},
|
||||
onprocess() {
|
||||
return this.$store.state.re_patologianatomy.onprocess;
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_patologianatomy.selected_doctor;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_patologianatomy/update_selected_doctor", val);
|
||||
},
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
saveResult_PatologiAnatomy() {
|
||||
if (_.isEmpty(this.selected_doctor) || this.selected_doctor == "0") {
|
||||
this.error_doctor = true;
|
||||
} else {
|
||||
this.$store.commit("re_patologianatomy/update_onprocess", true);
|
||||
let seldata =
|
||||
this.$store.state.re_patologianatomy.selected_patologianatomy;
|
||||
let xid = _.isEmpty(seldata) ? "0" : seldata.xid;
|
||||
var prm = {
|
||||
xid: xid,
|
||||
detail_id: this.$store.state.re_patologianatomy.orderdetail_id,
|
||||
doctor: this.selected_doctor.id,
|
||||
no_sediaan: this.no_sediaan,
|
||||
klinis: this.klinis,
|
||||
diagnosa: this.diagnosis_klinis,
|
||||
lokasi: this.lokasi,
|
||||
makroskopik: this.makroskopik,
|
||||
mikroskopik: this.mikroskopik,
|
||||
kesimpulan: this.kesimpulan,
|
||||
};
|
||||
this.$store.dispatch(
|
||||
"re_patologianatomy/saveresult_patologianatomy",
|
||||
prm
|
||||
);
|
||||
}
|
||||
},
|
||||
changeChecksSelected(value, idx) {
|
||||
let checks = this.$store.state.re_patologianatomy.checks;
|
||||
checks[idx].selected = value.selected === "N" ? "Y" : "N";
|
||||
if (checks[idx].selected === "N") checks[idx].note = "";
|
||||
this.checks = checks;
|
||||
},
|
||||
changeNote(value, idx) {
|
||||
let checks = this.$store.state.re_patologianatomy.checks;
|
||||
checks[idx].note = value.note;
|
||||
this.checks = checks;
|
||||
},
|
||||
changeCategoriesSelected(value, idx) {
|
||||
let categories = this.$store.state.re_patologianatomy.categories;
|
||||
categories[idx].selected = value.selected === "N" ? "Y" : "N";
|
||||
this.categories = categories;
|
||||
},
|
||||
changeBahansSelected(value, idx) {
|
||||
let bahans = this.$store.state.re_patologianatomy.bahans;
|
||||
bahans[idx].selected = value.selected === "N" ? "Y" : "N";
|
||||
this.bahans = bahans;
|
||||
},
|
||||
changeMaturasi(value, idx) {
|
||||
let mx = this.$store.state.re_patologianatomy.maturasi;
|
||||
mx.value[idx] = value;
|
||||
this.maturasi = mx;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,359 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_preparasisperma" persistent max-width="70%">
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
<span class="headline">PREPARASI SPERMA</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout mb-3 row>
|
||||
<v-flex pl-0 xs4>
|
||||
<v-select
|
||||
class="mini-select"
|
||||
item-text="name"
|
||||
return-object
|
||||
disabled
|
||||
outline
|
||||
:items="doctors"
|
||||
v-model="selected_doctor"
|
||||
hide-details
|
||||
label="Dokter"
|
||||
></v-select>
|
||||
<p v-if="error_doctor" class="error pl-2 pr-2" style="color:#fff">Dokternya siapa ? jangan lupa ya ...</p>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex class="font-weight-bold" xs12>
|
||||
<v-select
|
||||
class="mini-select"
|
||||
item-text="name"
|
||||
return-object
|
||||
outline
|
||||
:items="methodes"
|
||||
v-model="selected_methode"
|
||||
hide-details
|
||||
label="Metode"
|
||||
></v-select>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex xs6>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex class="font-weight-bold" xs12>Pre Preparasi</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex xs4>Volume</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Volume"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPreVolume"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs4>Motilitas</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Progresive"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPreMotilitasA"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Non Progresive"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPreMotilitasB"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Immotile"
|
||||
outline
|
||||
disabled
|
||||
v-model="results.Other_PreparasiSpermaPreMotilitasC"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs4>Konsentrasi</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-text-field
|
||||
label="Konsentrasi"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPreKonsentrasi"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs4>Kontaminan</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-text-field
|
||||
label="Kontaminan"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPreKontaminan"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex class="font-weight-bold" xs12>Post Preparasi</v-flex>
|
||||
</v-layout>
|
||||
<v-layout mb-2 row>
|
||||
<v-flex xs4>Volume</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Volume"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPostVolume"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs4>Motilitas</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Progresive"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPostMotilitasA"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Non Progresive"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPostMotilitasB"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex pa-1 xs2>
|
||||
<v-text-field
|
||||
label="Immotile"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPostMotilitasC"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs4>Konsentrasi</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-text-field
|
||||
label="Konsentrasi"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPostKonsentrasi"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs4>Kontaminan</v-flex>
|
||||
<v-flex xs6>
|
||||
<v-text-field
|
||||
label="Kontaminan"
|
||||
disabled
|
||||
outline
|
||||
v-model="results.Other_PreparasiSpermaPostKontaminan"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-textarea
|
||||
auto-grow
|
||||
label="Keterangan"
|
||||
outline
|
||||
disabled
|
||||
grow
|
||||
v-model="results.Other_PreparasiSpermaNote"
|
||||
hide-details
|
||||
></v-textarea>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
<v-card class="mt-1">
|
||||
<v-layout align-center row>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-card>
|
||||
<v-layout row>
|
||||
<v-flex pa-2 xs12><p class="mb-1">Pre Preparasi</p></v-flex>
|
||||
</v-layout>
|
||||
<v-layout align-center justify-center row>
|
||||
<v-flex xs12>
|
||||
<v-img v-if="pre_image.image_url" :src="pre_image.image_url" aspect-ratio="1"></v-img>
|
||||
<div v-if="!pre_image.image_url" class="display-2 text-xs-center ma-3">PRE IMAGE</div>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
<v-flex pa-2 xs6>
|
||||
<v-card>
|
||||
<v-layout row>
|
||||
<v-flex pa-2 xs12><p class="mb-1">Post Preparasi</p></v-flex>
|
||||
</v-layout>
|
||||
<v-layout align-center justify-center row>
|
||||
<v-flex xs12>
|
||||
<v-img v-if="post_image.image_url" :src="post_image.image_url" aspect-ratio="1"></v-img>
|
||||
<div v-if="!post_image.image_url" class="display-2 text-xs-center ma-3">POST IMAGE</div>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="dialog_preparasisperma = false">Tutup</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_preparasisperma/get_doctors",{token:''})
|
||||
this.files = ''
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false,
|
||||
error_image_pre:false,
|
||||
error_image_post:false,
|
||||
type_image:'PRE'
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
pre_image(){
|
||||
return this.$store.state.re_preparasisperma.pre_image
|
||||
},
|
||||
post_image(){
|
||||
return this.$store.state.re_preparasisperma.post_image
|
||||
},
|
||||
show_progrees_upload: {
|
||||
get() {
|
||||
return this.$store.state.re_preparasisperma.show_progrees_upload
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_preparasisperma/update_show_progrees_upload", val)
|
||||
}
|
||||
},
|
||||
images(){
|
||||
return this.$store.state.re_preparasisperma.images
|
||||
},
|
||||
onprocess(){
|
||||
return this.$store.state.re_preparasisperma.onprocess
|
||||
},
|
||||
dialog_preparasisperma: {
|
||||
get() {
|
||||
return this.$store.state.re_preparasisperma.dialog_preparasisperma
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_preparasisperma/update_dialog_preparasisperma", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_preparasisperma.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_preparasisperma/update_results", val)
|
||||
}
|
||||
},
|
||||
doctors(){
|
||||
return this.$store.state.re_preparasisperma.doctors
|
||||
},
|
||||
selected_doctor: {
|
||||
get() {
|
||||
return this.$store.state.re_preparasisperma.selected_doctor
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_preparasisperma/update_selected_doctor", val)
|
||||
}
|
||||
},
|
||||
methodes(){
|
||||
return this.$store.state.re_preparasisperma.methodes
|
||||
},
|
||||
selected_methode: {
|
||||
get() {
|
||||
return this.$store.state.re_preparasisperma.selected_methode
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_preparasisperma/update_selected_methode", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleFileUploads(value){
|
||||
if(value === 'PRE'){
|
||||
this.files = this.$refs.prefile.files;
|
||||
//this.$refs.prefile.files = []
|
||||
}
|
||||
else{
|
||||
this.files = this.$refs.postfile.files;
|
||||
//this.$refs.postfile.files = []
|
||||
}
|
||||
console.log(this.files)
|
||||
this.type_image = value
|
||||
},
|
||||
|
||||
removeFile( key ){
|
||||
this.files.splice( key, 1 );
|
||||
},
|
||||
submitFiles(){
|
||||
this.error_image = false
|
||||
this.error_image_pre = false
|
||||
this.error_image_post = false
|
||||
let formData = new FormData()
|
||||
console.log(this.files)
|
||||
for( var i = 0; i < this.files.length; i++ ){
|
||||
let file = this.files[i];
|
||||
formData.append('files[' + i + ']', file)
|
||||
}
|
||||
if(this.files.length == 1){
|
||||
this.files = []
|
||||
this.show_progrees_upload = true
|
||||
formData.append('orderid', this.$store.state.re_patient.selected_patient.T_OrderHeaderID)
|
||||
formData.append('labnumber', this.$store.state.re_patient.selected_patient.T_OrderHeaderLabNumber)
|
||||
formData.append('token', one_token())
|
||||
formData.append('type', this.type_image)
|
||||
this.$store.dispatch("re_preparasisperma/uploadimage_preparasi_sperma",formData)
|
||||
}
|
||||
else{
|
||||
if(this.type_image === 'PRE')
|
||||
this.error_image_pre = true
|
||||
else
|
||||
this.error_image_post = true
|
||||
}
|
||||
|
||||
},
|
||||
saveResult(){
|
||||
if(_.isEmpty(this.selected_doctor) || this.selected_doctor == '0'){
|
||||
this.error_doctor = true
|
||||
|
||||
}else
|
||||
var selected_x = this.$store.state.re_preparasisperma.selected_preparasisperma
|
||||
this.$store.commit("re_preparasisperma/update_onprocess", true)
|
||||
this.$store.dispatch("re_preparasisperma/saveresult",{orderdetailid:selected_x.id,doctor:this.selected_doctor.id,results:this.results})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,125 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog_golongandarah" persistent max-width="40%">
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
<span class="headline">Golongan Darah</span>
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<v-card class="mt-1">
|
||||
<v-layout v-if="imagePreviews.length > 0 && !show_progrees_upload" align-center row wrap>
|
||||
<v-flex
|
||||
v-for="(img, index) in imagePreviews"
|
||||
:key="index"
|
||||
xs12
|
||||
class="pa-2"
|
||||
>
|
||||
<v-img :src="img.image_url">
|
||||
<div class="fill-height bottom-gradient"></div>
|
||||
</v-img>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" flat @click="closeDialogGolonganDarah">Tutup</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
//this.$store.dispatch("re_fna/get_doctors",{token:''})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
error_doctor:false,
|
||||
error_image:false,
|
||||
selectedFileName: ''
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
show_progrees_upload: {
|
||||
get() {
|
||||
return this.$store.state.re_golongandarah.show_progrees_upload
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_golongandarah/update_show_progrees_upload", val)
|
||||
}
|
||||
},
|
||||
onprocess(){
|
||||
return this.$store.state.re_golongandarah.onprocess
|
||||
},
|
||||
dialog_golongandarah: {
|
||||
get() {
|
||||
return this.$store.state.re_golongandarah.dialog_golongandarah
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_golongandarah/update_dialog_golongandarah", val)
|
||||
}
|
||||
},
|
||||
results: {
|
||||
get() {
|
||||
return this.$store.state.re_golongandarah.results
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_golongandarah/update_results", val)
|
||||
}
|
||||
},
|
||||
imagePreviews: {
|
||||
get() {
|
||||
return this.$store.state.re_golongandarah.imagePreviews
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_golongandarah/update_imagePreviews", val)
|
||||
}
|
||||
},
|
||||
imageFiles: {
|
||||
get() {
|
||||
return this.$store.state.re_golongandarah.imageFiles
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit("re_golongandarah/update_imageFiles", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeDialogGolonganDarah(){
|
||||
this.dialog_golongandarah = false
|
||||
this.error_image = false
|
||||
this.imagePreviews = []
|
||||
this.imageFiles = []
|
||||
this.selectedFileName = ''
|
||||
},
|
||||
handleFileUploads() {
|
||||
const files = this.$refs.files.files;
|
||||
this.imagePreviews = [];
|
||||
this.imageFiles = [];
|
||||
|
||||
if (files.length > 0) {
|
||||
const file = files[0]; // ambil file pertama saja
|
||||
this.selectedFileName = file.name;
|
||||
|
||||
const url = URL.createObjectURL(file);
|
||||
this.imagePreviews.push({
|
||||
image_url: url
|
||||
});
|
||||
this.imageFiles.push(file);
|
||||
} else {
|
||||
this.selectedFileName = '';
|
||||
}
|
||||
|
||||
// reset input supaya bisa pilih file yang sama lagi
|
||||
this.$refs.files.value = '';
|
||||
},
|
||||
removeFile( key ){
|
||||
this.files.splice( key, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user