Compare commits
No commits in common. "cc5ec1f69f355683d4efa07f83cfa82ca90f447e" and "39dba30d14a8998c690fbc77de7ed24a032fd4b4" have entirely different histories.
cc5ec1f69f
...
39dba30d14
@ -40,12 +40,6 @@
|
|||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
a.router-link-exact-active {
|
|
||||||
color: #bbb;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import vistax from './vistax.mjs';
|
import vistax from './vistax.mjs';
|
||||||
|
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Detail" />
|
|
||||||
<div v-if="(sensitive) && (!info)" class="alert alert-danger text-center mb-3 shadow" role="alert">
|
<div v-if="(sensitive) && (!info)" class="alert alert-danger text-center mb-3 shadow" role="alert">
|
||||||
<h1>Warning: Restricted Record</h1>
|
<h1>Warning: Restricted Record</h1>
|
||||||
<p>This record is protected by the Privacy Act of 1974 and the Health Insurance Portability and Accountability Act of 1996. If you elect to proceed, you will be required to prove you have a need to know. Accessing this patient is tracked, and your station Security Officer will contact you for your justification.</p>
|
<p>This record is protected by the Privacy Act of 1974 and the Health Insurance Portability and Accountability Act of 1996. If you elect to proceed, you will be required to prove you have a need to know. Accessing this patient is tracked, and your station Security Officer will contact you for your justification.</p>
|
||||||
<router-link class="btn btn-danger" :to="'/patient/' + dfn + '?viewsensitive'">Proceed</router-link>
|
<router-link class="btn btn-danger" :to="'/patient/' + dfn + '?viewsensitive'">Proceed</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="info">
|
<div v-if="info">
|
||||||
<Subtitle :value="info.name" />
|
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header">{{info.name}} <span :title="info.pid">{{info.pid.slice(-4)}}</span> #{{dfn}}</div>
|
<div class="card-header">{{info.name}} <span :title="info.pid">{{info.pid.slice(-4)}}</span> #{{dfn}}</div>
|
||||||
<div class="card-body row" style="font-family: monospace;">
|
<div class="card-body row" style="font-family: monospace;">
|
||||||
@ -34,7 +32,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { strptime_vista } from './util.mjs';
|
import { strptime_vista } from './util.mjs';
|
||||||
|
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import DateRangePicker from './DateRangePicker.vue';
|
import DateRangePicker from './DateRangePicker.vue';
|
||||||
import ViewVitalsLabs from './ViewVitalsLabs.vue';
|
import ViewVitalsLabs from './ViewVitalsLabs.vue';
|
||||||
|
|
||||||
@ -42,7 +39,7 @@
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, DateRangePicker, ViewVitalsLabs
|
DateRangePicker, ViewVitalsLabs
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
@ -59,6 +56,11 @@
|
|||||||
orders_date_begin: now
|
orders_date_begin: now
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
info(value) {
|
||||||
|
if((value) && (value.name)) document.title = value.name;
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
strptime_vista,
|
strptime_vista,
|
||||||
async loadinfo(dfn, viewsensitive) {
|
async loadinfo(dfn, viewsensitive) {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Lookup" />
|
|
||||||
<div>
|
<div>
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header">Patients</div>
|
<div class="card-header">Patients</div>
|
||||||
@ -11,12 +10,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import ViewPatientLookup from './ViewPatientLookup.vue';
|
import ViewPatientLookup from './ViewPatientLookup.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, ViewPatientLookup
|
ViewPatientLookup
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Orders" />
|
|
||||||
<div v-if="(sensitive) && (!info)" class="alert alert-danger text-center mb-3 shadow" role="alert">
|
<div v-if="(sensitive) && (!info)" class="alert alert-danger text-center mb-3 shadow" role="alert">
|
||||||
<h1>Warning: Restricted Record</h1>
|
<h1>Warning: Restricted Record</h1>
|
||||||
<p>This record is protected by the Privacy Act of 1974 and the Health Insurance Portability and Accountability Act of 1996. If you elect to proceed, you will be required to prove you have a need to know. Accessing this patient is tracked, and your station Security Officer will contact you for your justification.</p>
|
<p>This record is protected by the Privacy Act of 1974 and the Health Insurance Portability and Accountability Act of 1996. If you elect to proceed, you will be required to prove you have a need to know. Accessing this patient is tracked, and your station Security Officer will contact you for your justification.</p>
|
||||||
<router-link class="btn btn-danger" :to="'/patient/' + dfn + '/orders?viewsensitive'">Proceed</router-link>
|
<router-link class="btn btn-danger" :to="'/patient/' + dfn + '/orders?viewsensitive'">Proceed</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="info">
|
<div v-if="info">
|
||||||
<Subtitle :value="info.name" />
|
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header">{{info.name}} <span :title="info.pid">{{info.pid.slice(-4)}}</span> #{{dfn}}</div>
|
<div class="card-header">{{info.name}} <span :title="info.pid">{{info.pid.slice(-4)}}</span> #{{dfn}}</div>
|
||||||
<div class="card-body row" style="font-family: monospace;">
|
<div class="card-body row" style="font-family: monospace;">
|
||||||
@ -37,7 +35,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { strptime_vista } from './util.mjs';
|
import { strptime_vista } from './util.mjs';
|
||||||
|
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import DateRangePicker from './DateRangePicker.vue';
|
import DateRangePicker from './DateRangePicker.vue';
|
||||||
import OrderFilterPicker from './OrderFilterPicker.vue';
|
import OrderFilterPicker from './OrderFilterPicker.vue';
|
||||||
import ViewOrderMenu from './ViewOrderMenu.vue';
|
import ViewOrderMenu from './ViewOrderMenu.vue';
|
||||||
@ -47,7 +44,7 @@
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, DateRangePicker, OrderFilterPicker, ViewOrderMenu, ViewOrders
|
DateRangePicker, OrderFilterPicker, ViewOrderMenu, ViewOrders
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
@ -62,6 +59,11 @@
|
|||||||
orders_date_begin: now
|
orders_date_begin: now
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
info(value) {
|
||||||
|
if((value) && (value.name)) document.title = value.name;
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
strptime_vista,
|
strptime_vista,
|
||||||
async loadinfo(dfn, viewsensitive) {
|
async loadinfo(dfn, viewsensitive) {
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Visits" />
|
|
||||||
<div v-if="(sensitive) && (!info)" class="alert alert-danger text-center mb-3 shadow" role="alert">
|
<div v-if="(sensitive) && (!info)" class="alert alert-danger text-center mb-3 shadow" role="alert">
|
||||||
<h1>Warning: Restricted Record</h1>
|
<h1>Warning: Restricted Record</h1>
|
||||||
<p>This record is protected by the Privacy Act of 1974 and the Health Insurance Portability and Accountability Act of 1996. If you elect to proceed, you will be required to prove you have a need to know. Accessing this patient is tracked, and your station Security Officer will contact you for your justification.</p>
|
<p>This record is protected by the Privacy Act of 1974 and the Health Insurance Portability and Accountability Act of 1996. If you elect to proceed, you will be required to prove you have a need to know. Accessing this patient is tracked, and your station Security Officer will contact you for your justification.</p>
|
||||||
<router-link class="btn btn-danger" :to="'/patient/' + dfn + '/orders?viewsensitive'">Proceed</router-link>
|
<router-link class="btn btn-danger" :to="'/patient/' + dfn + '/orders?viewsensitive'">Proceed</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="info">
|
<div v-if="info">
|
||||||
<Subtitle :value="info.name" />
|
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header">{{info.name}} <span :title="info.pid">{{info.pid.slice(-4)}}</span> #{{dfn}}</div>
|
<div class="card-header">{{info.name}} <span :title="info.pid">{{info.pid.slice(-4)}}</span> #{{dfn}}</div>
|
||||||
<div class="card-body row" style="font-family: monospace;">
|
<div class="card-body row" style="font-family: monospace;">
|
||||||
@ -32,7 +30,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { strptime_vista } from './util.mjs';
|
import { strptime_vista } from './util.mjs';
|
||||||
|
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import DateRangePicker from './DateRangePicker.vue';
|
import DateRangePicker from './DateRangePicker.vue';
|
||||||
import OrderFilterPicker from './OrderFilterPicker.vue';
|
import OrderFilterPicker from './OrderFilterPicker.vue';
|
||||||
import ViewVisits from './ViewVisits.vue';
|
import ViewVisits from './ViewVisits.vue';
|
||||||
@ -41,7 +38,7 @@
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, DateRangePicker, OrderFilterPicker, ViewVisits
|
DateRangePicker, OrderFilterPicker, ViewVisits
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
@ -56,6 +53,11 @@
|
|||||||
visits_date_begin: now
|
visits_date_begin: now
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
info(value) {
|
||||||
|
if((value) && (value.name)) document.title = value.name;
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
strptime_vista,
|
strptime_vista,
|
||||||
async loadinfo(dfn, viewsensitive) {
|
async loadinfo(dfn, viewsensitive) {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Planner" />
|
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header d-flex justify-content-between align-items-center">
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
<span>Planner</span>
|
<span>Planner</span>
|
||||||
@ -11,13 +10,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import DateRangePicker from './DateRangePicker.vue';
|
import DateRangePicker from './DateRangePicker.vue';
|
||||||
import ViewPlanner from './ViewPlanner.vue';
|
import ViewPlanner from './ViewPlanner.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, DateRangePicker, ViewPlanner
|
DateRangePicker, ViewPlanner
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Recall" />
|
|
||||||
<div>
|
<div>
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header">Clinics</div>
|
<div class="card-header">Clinics</div>
|
||||||
@ -48,7 +47,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { groupByArray, strtr_unscramble, strHashHSL, strftime_vista, debounce } from './util.mjs';
|
import { groupByArray, strtr_unscramble, strHashHSL, strftime_vista, debounce } from './util.mjs';
|
||||||
|
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import ViewResourceLookup from './ViewResourceLookup.vue';
|
import ViewResourceLookup from './ViewResourceLookup.vue';
|
||||||
|
|
||||||
function dateonly(date) {
|
function dateonly(date) {
|
||||||
@ -57,7 +55,7 @@
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, ViewResourceLookup
|
ViewResourceLookup
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<Subtitle value="Schedule" />
|
|
||||||
<div>
|
<div>
|
||||||
<div class="card mb-3 shadow">
|
<div class="card mb-3 shadow">
|
||||||
<div class="card-header">Clinics</div>
|
<div class="card-header">Clinics</div>
|
||||||
@ -20,7 +19,6 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Subtitle from './Subtitle.vue';
|
|
||||||
import ViewResourceLookup from './ViewResourceLookup.vue';
|
import ViewResourceLookup from './ViewResourceLookup.vue';
|
||||||
import DateRangePicker from './DateRangePicker.vue';
|
import DateRangePicker from './DateRangePicker.vue';
|
||||||
import ViewSchedule from './ViewSchedule.vue';
|
import ViewSchedule from './ViewSchedule.vue';
|
||||||
@ -31,7 +29,7 @@
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Subtitle, ViewResourceLookup, DateRangePicker, ViewSchedule
|
ViewResourceLookup, DateRangePicker, ViewSchedule
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
client: Object
|
client: Object
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
<script>
|
|
||||||
import { debounce } from './util.mjs';
|
|
||||||
|
|
||||||
const base = 'nuVistA';
|
|
||||||
const state = [{ value: base }];
|
|
||||||
const settitle = debounce(s => document.title = s || base, 0);
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: ['value'],
|
|
||||||
data() {
|
|
||||||
return { ptr: null };
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
value: {
|
|
||||||
handler(value) {
|
|
||||||
this.update(value);
|
|
||||||
}, immediate: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
update(value) {
|
|
||||||
if(value) {
|
|
||||||
if(this.ptr) this.ptr.value = value;
|
|
||||||
else {
|
|
||||||
this.ptr = { value };
|
|
||||||
state.unshift(this.ptr);
|
|
||||||
}
|
|
||||||
} else if(this.ptr) {
|
|
||||||
var idx = state.indexOf(this.ptr);
|
|
||||||
if(idx >= 0) state.splice(idx, 1);
|
|
||||||
this.ptr = null;
|
|
||||||
}
|
|
||||||
settitle(state.map(x => x.value).join(' - '));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
unmounted() {
|
|
||||||
this.update();
|
|
||||||
},
|
|
||||||
render() {}
|
|
||||||
};
|
|
||||||
</script>
|
|
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="throbber" :class="{ connected, idle }" />
|
<div :class="{ connected, idle }" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
div.throbber {
|
div {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 59px;
|
top: 59px;
|
||||||
right: 0;
|
right: 0;
|
||||||
@ -12,7 +12,7 @@
|
|||||||
z-index: 1030;
|
z-index: 1030;
|
||||||
background-color: #dc3545;
|
background-color: #dc3545;
|
||||||
}
|
}
|
||||||
div.throbber.connected {
|
div.connected {
|
||||||
background-color: #0d6efd;
|
background-color: #0d6efd;
|
||||||
background-image: repeating-linear-gradient(
|
background-image: repeating-linear-gradient(
|
||||||
-45deg,
|
-45deg,
|
||||||
@ -25,7 +25,7 @@
|
|||||||
animation: barberpole 60s linear infinite;
|
animation: barberpole 60s linear infinite;
|
||||||
animation-direction: reverse;
|
animation-direction: reverse;
|
||||||
}
|
}
|
||||||
div.throbber.idle {
|
div.idle {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: visibility 0s 0.5s, opacity 0.5s linear;
|
transition: visibility 0s 0.5s, opacity 0.5s linear;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<div class="datebox" :style="{ backgroundColor: resultset.max > 0 ? 'rgba(220, 53, 69, ' + week.values[day].length/resultset.max + ')' : null }"><span class="occupancy hidden">#{{week.values[day].length}}</span> {{day > 0 ? week.values[day][0]._START_OBJ.getDate() : week.key.toLocaleDateString('sv-SE')}} <span class="occupancy">#{{week.values[day].length}}</span></div>
|
<div class="datebox" :style="{ backgroundColor: resultset.max > 0 ? 'rgba(220, 53, 69, ' + week.values[day].length/resultset.max + ')' : null }"><span class="occupancy hidden">#{{week.values[day].length}}</span> {{day > 0 ? week.values[day][0]._START_OBJ.getDate() : week.key.toLocaleDateString('sv-SE')}} <span class="occupancy">#{{week.values[day].length}}</span></div>
|
||||||
<template v-for="appointment in week.values[day]">
|
<template v-for="appointment in week.values[day]">
|
||||||
<div v-if="appointment._BREAK" class="vacancy" :title="appointment._START_OBJ.toLocaleTimeString('en-GB').substring(0, 5) + '–' + appointment._END_OBJ.toLocaleTimeString('en-GB').substring(0, 5)" />
|
<div v-if="appointment._BREAK" class="vacancy" :title="appointment._START_OBJ.toLocaleTimeString('en-GB').substring(0, 5) + '–' + appointment._END_OBJ.toLocaleTimeString('en-GB').substring(0, 5)" />
|
||||||
<div v-else :title="appointment._START_OBJ.toLocaleTimeString('en-GB').substring(0, 5) + '–' + appointment._END_OBJ.toLocaleTimeString('en-GB').substring(0, 5) + '\n' + appointment.PATIENTNAME + ' ' + appointment.HRN.slice(-4) + '\n' + appointment.NOTE"><span v-if="appointment._CONCURRENCY > 0" class="concurrency hidden">*<template v-if="appointment._CONCURRENCY > 1">{{appointment._CONCURRENCY}}</template></span>{{appointment._START_OBJ.toLocaleTimeString('en-GB').substring(0, 5)}} <router-link :to="'/patient/' + appointment.PATIENTID">{{appointment.PATIENTNAME.substring(0, 1)}}{{appointment.HRN.slice(-4)}}</router-link><span v-if="appointment._CONCURRENCY > 0" class="concurrency">*<template v-if="appointment._CONCURRENCY > 1">{{appointment._CONCURRENCY}}</template></span></div>
|
<div v-else :title="appointment._START_OBJ.toLocaleTimeString('en-GB').substring(0, 5) + '–' + appointment._END_OBJ.toLocaleTimeString('en-GB').substring(0, 5) + '\n' + appointment.PATIENTNAME + ' ' + appointment.HRN.slice(-4) + '\n' + appointment.NOTE"><span v-if="appointment._CONCURRENCY > 0" class="concurrency hidden">*<template v-if="appointment._CONCURRENCY > 1">{{appointment._CONCURRENCY}}</template></span>{{appointment._START_OBJ.toLocaleTimeString('en-GB').substring(0, 5)}} {{appointment.PATIENTNAME.substring(0, 1)}}{{appointment.HRN.slice(-4)}}<span v-if="appointment._CONCURRENCY > 0" class="concurrency">*<template v-if="appointment._CONCURRENCY > 1">{{appointment._CONCURRENCY}}</template></span></div>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
<div v-else class="datebox">{{day > 0 ? (new Date(week.key.getTime() + 1000*60*60*24*day)).getDate() : week.key.toLocaleDateString('sv-SE')}}</div>
|
<div v-else class="datebox">{{day > 0 ? (new Date(week.key.getTime() + 1000*60*60*24*day)).getDate() : week.key.toLocaleDateString('sv-SE')}}</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user