97 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
| 	<div v-if="info">
 | |
| 		<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-body row" style="font-family: monospace;">
 | |
| 				<div class="col" v-if="info.dob"><strong>DOB:</strong> {{strptime_vista(info.dob).toLocaleDateString('en-CA')}}</div>
 | |
| 				<div class="col" v-if="info.age"><strong>Age:</strong> {{info.age}}</div>
 | |
| 				<div class="col" v-if="info.sex"><strong>Sex:</strong> {{info.sex}}</div>
 | |
| 				<div class="col" v-if="info.sc_percentage"><strong>SC%:</strong> {{info.sc_percentage}}</div>
 | |
| 				<div class="col" v-if="info.type"><strong>Type:</strong> {{info.type}}</div>
 | |
| 				<div class="col" v-if="info.ward"><strong>Ward:</strong> {{info.ward}}</div>
 | |
| 				<div class="col" v-if="info.room_bed"><strong>Room/bed:</strong> {{info.room_bed}}</div>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 		<div class="card mb-3 shadow">
 | |
| 			<div class="card-header d-flex justify-content-between align-items-center">
 | |
| 				<span>Data</span>
 | |
| 				<DateRangePicker range="1M" direction="-1" v-model:date="report_date" v-model:date_end="report_date_begin" />
 | |
| 			</div>
 | |
| 			<div class="card-body">
 | |
| 				<ViewVitalsLabs :client="client" :dfn="dfn" :date_begin="report_date_begin" :date_end="report_date" />
 | |
| 			</div>
 | |
| 		</div>
 | |
| 		<div class="card mb-3 shadow">
 | |
| 			<div class="card-header d-flex justify-content-between align-items-center">
 | |
| 				<span>Orders</span>
 | |
| 				<OrderFilterPicker :client="client" v-model="orders_filter" />
 | |
| 				<DateRangePicker range="6M" direction="-1" v-model:date="orders_date" v-model:date_end="orders_date_begin" />
 | |
| 			</div>
 | |
| 			<div class="card-body"><ViewOrders :client="client" :dfn="dfn" :filter="orders_filter" :date_begin="orders_date_begin" :date_end="orders_date" /></div>
 | |
| 		</div>
 | |
| 	</div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| 	import { strptime_vista } from './util.mjs';
 | |
| 
 | |
| 	import DateRangePicker from './DateRangePicker.vue';
 | |
| 	import ViewVitalsLabs from './ViewVitalsLabs.vue';
 | |
| 	import OrderFilterPicker from './OrderFilterPicker.vue';
 | |
| 	import ViewOrders from './ViewOrders.vue';
 | |
| 
 | |
| 	var now = new Date();
 | |
| 
 | |
| 	export default {
 | |
| 		components: {
 | |
| 			DateRangePicker, ViewVitalsLabs, OrderFilterPicker, ViewOrders
 | |
| 		},
 | |
| 		props: {
 | |
| 			client: Object
 | |
| 		},
 | |
| 		data() {
 | |
| 			return {
 | |
| 				dfn: null,
 | |
| 				info: null,
 | |
| 				report_date: now,
 | |
| 				report_date_begin: now,
 | |
| 				orders_filter: 2,
 | |
| 				orders_date: now,
 | |
| 				orders_date_begin: now
 | |
| 			};
 | |
| 		},
 | |
| 		watch: {
 | |
| 			info(value) {
 | |
| 				if((value) && (value.name)) document.title = value.name;
 | |
| 			}
 | |
| 		},
 | |
| 		methods: {
 | |
| 			strptime_vista
 | |
| 		},
 | |
| 		async mounted() {
 | |
| 			if(this.$route.params.id.startsWith('$')) {
 | |
| 				var id = this.$route.params.id.substring(1);
 | |
| 				if(id.length == 9) {
 | |
| 					var patient = await this.client.ORWPT_FULLSSN(id);
 | |
| 					this.$router.replace('/patient/' + patient[0].dfn);
 | |
| 				} else if(id.length == 5) {
 | |
| 					var name = this.$route.query.name.toUpperCase();
 | |
| 					var patient = await this.client.ORWPT_LAST5(id);
 | |
| 					for(var i = 0; i < patient.length; ++i) if(name == patient[i].name) {
 | |
| 						this.$router.replace('/patient/' + patient[i].dfn);
 | |
| 						break;
 | |
| 					}
 | |
| 				}
 | |
| 			} else {
 | |
| 				this.dfn = this.$route.params.id;
 | |
| 				this.info = await this.client.ORWPT16_ID_INFO(this.$route.params.id);
 | |
| 			}
 | |
| 		},
 | |
| 		async beforeRouteUpdate(to, from, next) {
 | |
| 			this.dfn = to.params.id;
 | |
| 			this.info = await this.client.ORWPT16_ID_INFO(to.params.id);
 | |
| 			next();
 | |
| 		}
 | |
| 	};
 | |
| </script>
 |