Jelajahi Sumber

FDB Playground - multi-support

Vijayakrishnan 3 tahun lalu
induk
melakukan
ff92ae00ff

+ 0 - 1
resources/views/app/fdb-pg/fdb-contraindications.blade.php

@@ -1,7 +1,6 @@
 @if(!count($contraindications))
     <span class="d-block no-suggest-items">No contraindications!</span>
 @else
-    <p class="font-weight-bold text-secondary mb-2">Contraindications</p>
     <table class="table table-sm table-striped table-bordered">
         <thead>
         <tr>

+ 0 - 1
resources/views/app/fdb-pg/fdb-geriatric-precautions.blade.php

@@ -1,7 +1,6 @@
 @if(!count($precautions))
     <span class="d-block no-suggest-items">No geriatric precautions!</span>
 @else
-    <p class="font-weight-bold text-secondary mb-2">Geriatric Precautions</p>
     <table class="table table-sm table-striped table-bordered">
         <thead>
         <tr>

+ 0 - 1
resources/views/app/fdb-pg/fdb-indications.blade.php

@@ -1,7 +1,6 @@
 @if(!count($indications))
     <span class="d-block no-suggest-items">No indications!</span>
 @else
-    <p class="font-weight-bold text-secondary mb-2">Indications</p>
     <table class="table table-sm table-striped table-bordered">
         <thead>
         <tr>

+ 264 - 173
resources/views/app/fdb-pg/fdb-rx.blade.php

@@ -2,66 +2,123 @@
 
 @section('content')
 
-    <div class="p-3 mcp-theme-1" id="fdb-pg">
-        <div class="card">
-
-            <div class="card-header px-3 py-2 d-flex align-items-center">
-                <strong class="mr-4">
-                    FDB Playground
-                </strong>
-            </div>
-            <div class="card-body px-3 py-4">
-                <div class="row">
-                    <div class="col-2">
-                        <div class="mb-2 d-flex align-items-center">
-                            <label class="m-0 width-100px">Search</label>
-                            <div class="flex-grow-1">
-                                <input type="text" class="form-control form-control-sm min-width-unset"
-                                       fdb-med-suggest-search fdb-suggest-group="1">
-                            </div>
-                        </div>
-                        <div class="mb-2 d-flex align-items-center">
-                            <label class="m-0 width-100px">Route</label>
-                            <div class="flex-grow-1">
-                                <select class="form-control form-control-sm min-width-unset"
-                                       fdb-med-suggest-route fdb-suggest-group="1"
-                                       disabled>
-                                </select>
-                            </div>
-                        </div>
-                        <div class="mb-2 d-flex align-items-center">
-                            <label class="m-0 width-100px">Dosage</label>
-                            <div class="flex-grow-1">
-                                <select class="form-control form-control-sm min-width-unset"
-                                        fdb-med-suggest-dosage fdb-suggest-group="1"
-                                        disabled>
-                                </select>
-                            </div>
-                        </div>
-                        <div class="mb-2 d-flex align-items-center">
-                            <label class="m-0 width-100px">Strength</label>
-                            <div class="flex-grow-1">
-                                <select class="form-control form-control-sm min-width-unset"
-                                        fdb-med-suggest-strength fdb-suggest-group="1"
-                                        disabled>
-                                </select>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-2 side-effects">
-
-                    </div>
-                    <div class="col-2 geriatric-precautions">
-
-                    </div>
-                    <div class="col-2 indications">
-
-                    </div>
-                    <div class="col-2 contraindications">
-
-                    </div>
-                </div>
+    <style>
+      .fdb-suggestions-container .suggestions-outer {
+        right: auto;
+        left: 0;
+      }
+    </style>
+
+    <div class="p-0 mcp-theme-1" id="fdb-pg">
+        <div class="px-3 py-2 bg-light border-bottom d-flex align-items-center font-weight-bold font-size-14">FDB Playground</div>
+        <div class="p-3">
+            <div class="d-flex align-items-baseline mb-2">
+                <span class="font-size-14 font-weight-bold">Medications</span>
+                <a href="#" v-on:click.prevent="addRx()" class="ml-3">+ Add</a>
             </div>
+            <table class="table table-sm table-striped table-bordered" style="table-layout: fixed">
+                <thead>
+                <tr>
+                    <th class="border-bottom-0 text-secondary">Medication</th>
+                    <th class="border-bottom-0 text-secondary">Route</th>
+                    <th class="border-bottom-0 text-secondary">Dosage</th>
+                    <th class="border-bottom-0 text-secondary">Strength</th>
+                    <th class="border-bottom-0 text-secondary">Side Effects</th>
+                    <th class="border-bottom-0 text-secondary">Ger. Precautions</th>
+                    <th class="border-bottom-0 text-secondary">Indications</th>
+                    <th class="border-bottom-0 text-secondary">Contraindications</th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr v-for="(item, index) in rx">
+                    <td class="p-0 width-200px position-relative" style="z-index: 1">
+                        <input type="text" class="rounded-0 border-0 form-control form-control-sm min-width-unset" style="z-index: 1"
+                               fdb-med-suggest-search :fdb-suggest-group="index">
+                    </td>
+                    <td class="p-0 width-200px position-relative">
+                        <select class="rounded-0 border-0 form-control form-control-sm min-width-unset"
+                                fdb-med-suggest-route :fdb-suggest-group="index"
+                                disabled>
+                        </select>
+                    </td>
+                    <td class="p-0 width-200px position-relative">
+                        <select class="rounded-0 border-0 form-control form-control-sm min-width-unset"
+                                fdb-med-suggest-dosage :fdb-suggest-group="index"
+                                disabled>
+                        </select>
+                    </td>
+                    <td class="p-0 width-200px position-relative">
+                        <select class="rounded-0 border-0 form-control form-control-sm min-width-unset"
+                                fdb-med-suggest-strength :fdb-suggest-group="index"
+                                disabled>
+                        </select>
+                    </td>
+
+                    <td class="overflow-auto side-effects" :fdb-suggest-group="index">
+
+                    </td>
+                    <td class="overflow-auto geriatric-precautions" :fdb-suggest-group="index">
+
+                    </td>
+                    <td class="overflow-auto indications" :fdb-suggest-group="index">
+
+                    </td>
+                    <td class="overflow-auto contraindications" :fdb-suggest-group="index">
+
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+{{--            <div class="row">--}}
+{{--                <div class="col-2">--}}
+{{--                    <div class="mb-2 d-flex align-items-center">--}}
+{{--                        <label class="m-0 width-100px">Search</label>--}}
+{{--                        <div class="flex-grow-1">--}}
+{{--                            <input type="text" class="form-control form-control-sm min-width-unset"--}}
+{{--                                   fdb-med-suggest-search fdb-suggest-group="1">--}}
+{{--                        </div>--}}
+{{--                    </div>--}}
+{{--                    <div class="mb-2 d-flex align-items-center">--}}
+{{--                        <label class="m-0 width-100px">Route</label>--}}
+{{--                        <div class="flex-grow-1">--}}
+{{--                            <select class="form-control form-control-sm min-width-unset"--}}
+{{--                                   fdb-med-suggest-route fdb-suggest-group="1"--}}
+{{--                                   disabled>--}}
+{{--                            </select>--}}
+{{--                        </div>--}}
+{{--                    </div>--}}
+{{--                    <div class="mb-2 d-flex align-items-center">--}}
+{{--                        <label class="m-0 width-100px">Dosage</label>--}}
+{{--                        <div class="flex-grow-1">--}}
+{{--                            <select class="form-control form-control-sm min-width-unset"--}}
+{{--                                    fdb-med-suggest-dosage fdb-suggest-group="1"--}}
+{{--                                    disabled>--}}
+{{--                            </select>--}}
+{{--                        </div>--}}
+{{--                    </div>--}}
+{{--                    <div class="mb-2 d-flex align-items-center">--}}
+{{--                        <label class="m-0 width-100px">Strength</label>--}}
+{{--                        <div class="flex-grow-1">--}}
+{{--                            <select class="form-control form-control-sm min-width-unset"--}}
+{{--                                    fdb-med-suggest-strength fdb-suggest-group="1"--}}
+{{--                                    disabled>--}}
+{{--                            </select>--}}
+{{--                        </div>--}}
+{{--                    </div>--}}
+{{--                </div>--}}
+{{--                <div class="col-2 side-effects">--}}
+
+{{--                </div>--}}
+{{--                <div class="col-2 geriatric-precautions">--}}
+
+{{--                </div>--}}
+{{--                <div class="col-2 indications">--}}
+
+{{--                </div>--}}
+{{--                <div class="col-2 contraindications">--}}
+
+{{--                </div>--}}
+{{--            </div>--}}
         </div>
     </div>
 
@@ -154,150 +211,184 @@
                 }
             }
 
-            function fillSideEffects(_gcn_seqno) {
-                $('.side-effects').empty();
+            function fillSideEffects(_group, _gcn_seqno) {
+                let container = $('.side-effects[fdb-suggest-group=' + _group + ']');
+                container.empty();
                 $.get('/fdb-side-effects?gcn-seq-no=' + _gcn_seqno, _data => {
-                    $('.side-effects').html(_data);
+                    container.html(_data);
                 });
             }
 
-            function fillGeriatricPrecautions(_gcn_seqno) {
-                $('.geriatric-precautions').empty();
+            function fillGeriatricPrecautions(_group, _gcn_seqno) {
+                let container = $('.geriatric-precautions[fdb-suggest-group=' + _group + ']');
+                container.empty();
                 $.get('/fdb-geriatric-precautions?gcn-seq-no=' + _gcn_seqno, _data => {
-                    $('.geriatric-precautions').html(_data);
+                    container.html(_data);
                 });
             }
 
-            function fillIndications(_gcn_seqno) {
-                $('.indications').empty();
+            function fillIndications(_group, _gcn_seqno) {
+                let container = $('.indications[fdb-suggest-group=' + _group + ']');
+                container.empty();
                 $.get('/fdb-indications?gcn-seq-no=' + _gcn_seqno, _data => {
-                    $('.indications').html(_data);
+                    container.html(_data);
                 });
             }
 
-            function fillContraindications(_gcn_seqno) {
-                $('.contraindications').empty();
+            function fillContraindications(_group, _gcn_seqno) {
+                let container = $('.contraindications[fdb-suggest-group=' + _group + ']');
+                container.empty();
                 $.get('/fdb-contraindications?routed-med-id=' + _gcn_seqno, _data => {
-                    $('.contraindications').html(_data);
+                    container.html(_data);
                 });
             }
 
             addMCInitializer('fdb-pg', function() {
 
-                $('[fdb-med-suggest-search]:not([fdb-suggest-initialized])').each(function() {
-                    let elem = $(this);
-                    elem.next('.fdb-suggestions-container').remove();
-                    $('<div class="fdb-suggestions-container position-relative" fdb-suggest-group="' + elem.attr('fdb-suggest-group') + '">' +
-                        '<div class="suggestions-outer fdb-suggestions position-absolute d-none"></div>' +
-                        '</div>').insertAfter(elem);
-
-                    elem
-                        .off('keydown.fdb-suggest')
-                        .on('keydown.fdb-suggest', function (e) {
-                            suggestionsOuter = $(this).next('.fdb-suggestions-container').find('>.suggestions-outer');
-                            return handleKeydown($(this), e);
-                        })
-                        .off('keypress.fdb-suggest')
-                        .on('keypress.fdb-suggest', function (e) {
-                            suggestionsOuter = $(this).next('.fdb-suggestions-container').find('>.suggestions-outer');
-                            return handleKeypress($(this), e);
-                        });
+                new Vue({
+                    el: '#fdb-pg',
+                    delimiters: ['@{{', '}}'],
+                    data: {
+                        dx: [{
+
+                        }],
+                        rx: [{
+
+                        }],
+                    },
+                    methods: {
+                        addRx: function() {
+                            this.rx.push({});
+                            Vue.nextTick(() => {
+                                this.initFDBSuggest();
+                                $('[fdb-med-suggest-search]').last().focus();
+                            });
+                        },
+                        initFDBSuggest: function() {
+                            $('[fdb-med-suggest-search]:not([fdb-suggest-initialized])').each(function() {
+                                let elem = $(this);
+                                elem.next('.fdb-suggestions-container').remove();
+                                $('<div class="fdb-suggestions-container position-relative" fdb-suggest-group="' + elem.attr('fdb-suggest-group') + '">' +
+                                    '<div class="suggestions-outer fdb-suggestions position-absolute d-none"></div>' +
+                                    '</div>').insertAfter(elem);
+
+                                elem
+                                    .off('keydown.fdb-suggest')
+                                    .on('keydown.fdb-suggest', function (e) {
+                                        suggestionsOuter = $(this).next('.fdb-suggestions-container').find('>.suggestions-outer');
+                                        return handleKeydown($(this), e);
+                                    })
+                                    .off('keypress.fdb-suggest')
+                                    .on('keypress.fdb-suggest', function (e) {
+                                        suggestionsOuter = $(this).next('.fdb-suggestions-container').find('>.suggestions-outer');
+                                        return handleKeypress($(this), e);
+                                    });
+
+                                $(this).attr('fdb-suggest-initialized', 1);
+                            });
+                        }
+                    },
+                    mounted: function() {
 
-                    $(this).attr('fdb-suggest-initialized', 1);
-                });
+                        // on auto-suggest selection
+                        $(document).off('click', '.suggest-item.fdb-suggest[data-med-name-id]');
+                        $(document).on('click', '.suggest-item.fdb-suggest[data-med-name-id]', function () {
 
-                // on auto-suggest selection
-                $(document).off('click', '.suggest-item.fdb-suggest[data-med-name-id]');
-                $(document).on('click', '.suggest-item.fdb-suggest[data-med-name-id]', function () {
+                            $('.suggestions-outer.fdb-suggestions').addClass('d-none');
 
-                    $('.suggestions-outer.fdb-suggestions').addClass('d-none');
+                            let medNameID = $(this).attr('data-med-name-id'),
+                                label = $.trim($(this).text()),
+                                group = $(this).closest('.fdb-suggestions-container').attr('fdb-suggest-group');
 
-                    let medNameID = $(this).attr('data-med-name-id'),
-                        label = $.trim($(this).text()),
-                        group = $(this).closest('.fdb-suggestions-container').attr('fdb-suggest-group');
+                            // set value
+                            let input = $(this).closest('.position-relative').prev('[fdb-med-suggest-search]');
+                            input.val(label);
+                            input.attr('data-med-name-id', medNameID);
+                            input.trigger('input');
+                            input.trigger('change');
 
-                    // set value
-                    let input = $(this).closest('.position-relative').prev('[fdb-med-suggest-search]');
-                    input.val(label);
-                    input.attr('data-med-name-id', medNameID);
-                    input.trigger('input');
-                    input.trigger('change');
+                            $(document).trigger('fdb-med-changed', [group]);
 
-                    $(document).trigger('fdb-med-changed', [group]);
+                            return false;
+                        });
 
-                    return false;
-                });
+                        // med changed, update routes
+                        $(document).off('fdb-med-changed');
+                        $(document).on('fdb-med-changed', function(e, group) {
+                            let routeSelect = $('[fdb-med-suggest-route][fdb-suggest-group='+group+']').empty().prop('disabled', true);
+                            let dosageSelect = $('[fdb-med-suggest-dosage][fdb-suggest-group='+group+']').empty().prop('disabled', true);
+                            let strengthSelect = $('[fdb-med-suggest-strength][fdb-suggest-group='+group+']').empty().prop('disabled', true);
+                            let medNameID = $('[fdb-med-suggest-search][fdb-suggest-group='+group+']').attr('data-med-name-id');
+                            $.get('/fdb-routed-meds?med-name-id=' + medNameID, _data => {
+                                routeSelect
+                                    .empty()
+                                    .append('<option value="">-- select --</option>');
+                                for (let i = 0; i < _data.length; i++) {
+                                    routeSelect.append('<option value="' + _data[i].routed_med_id + '">' + _data[i].med_routed_med_id_desc + '</option>')
+                                }
+                                routeSelect.prop('disabled', false);
+                                if(_data.length === 1) {
+                                    routeSelect.val(_data[0].routed_med_id).trigger('change');
+                                }
+                            }, 'json');
+                            routeSelect.prop('disabled', false);
+                        });
 
-                // med changed, update routes
-                $(document).off('fdb-med-changed');
-                $(document).on('fdb-med-changed', function(e, group) {
-                    let routeSelect = $('[fdb-med-suggest-route][fdb-suggest-group='+group+']').empty().prop('disabled', true);
-                    let dosageSelect = $('[fdb-med-suggest-dosage][fdb-suggest-group='+group+']').empty().prop('disabled', true);
-                    let strengthSelect = $('[fdb-med-suggest-strength][fdb-suggest-group='+group+']').empty().prop('disabled', true);
-                    let medNameID = $('[fdb-med-suggest-search][fdb-suggest-group='+group+']').attr('data-med-name-id');
-                    $.get('/fdb-routed-meds?med-name-id=' + medNameID, _data => {
-                        routeSelect
-                            .empty()
-                            .append('<option value="">-- select --</option>');
-                        for (let i = 0; i < _data.length; i++) {
-                            routeSelect.append('<option value="' + _data[i].routed_med_id + '">' + _data[i].med_routed_med_id_desc + '</option>')
-                        }
-                        routeSelect.prop('disabled', false);
-                        if(_data.length === 1) {
-                            routeSelect.val(_data[0].routed_med_id).trigger('change');
-                        }
-                    }, 'json');
-                    routeSelect.prop('disabled', false);
-                });
+                        // on route selection
+                        $(document).off('change', '[fdb-med-suggest-route]');
+                        $(document).on('change', '[fdb-med-suggest-route]', function () {
+                            let group = $(this).attr('fdb-suggest-group');
+                            let dosageSelect = $('[fdb-med-suggest-dosage][fdb-suggest-group='+group+']').empty().prop('disabled', true);
+                            let strengthSelect = $('[fdb-med-suggest-strength][fdb-suggest-group='+group+']').empty().prop('disabled', true);
+                            let routedMedID = $('[fdb-med-suggest-route][fdb-suggest-group='+$(this).attr('fdb-suggest-group')+']').val();
+                            $.get('/fdb-routed-dosages?routed-med-id=' + routedMedID, _data => {
+                                dosageSelect
+                                    .empty()
+                                    .append('<option value="">-- select --</option>');
+                                for (let i = 0; i < _data.length; i++) {
+                                    dosageSelect.append('<option value="' + _data[i].routed_dosage_form_med_id + '">' + _data[i].med_routed_df_med_id_desc + '</option>')
+                                }
+                                dosageSelect.prop('disabled', false);
+                                if(_data.length === 1) {
+                                    dosageSelect.val(_data[0].routed_dosage_form_med_id).trigger('change');
+                                }
+                            }, 'json');
+                        });
 
-                // on route selection
-                $(document).off('change', '[fdb-med-suggest-route]');
-                $(document).on('change', '[fdb-med-suggest-route]', function () {
-                    let group = $(this).attr('fdb-suggest-group');
-                    let dosageSelect = $('[fdb-med-suggest-dosage][fdb-suggest-group='+group+']').empty().prop('disabled', true);
-                    let strengthSelect = $('[fdb-med-suggest-strength][fdb-suggest-group='+group+']').empty().prop('disabled', true);
-                    let routedMedID = $('[fdb-med-suggest-route][fdb-suggest-group='+$(this).attr('fdb-suggest-group')+']').val();
-                    $.get('/fdb-routed-dosages?routed-med-id=' + routedMedID, _data => {
-                        dosageSelect
-                            .empty()
-                            .append('<option value="">-- select --</option>');
-                        for (let i = 0; i < _data.length; i++) {
-                            dosageSelect.append('<option value="' + _data[i].routed_dosage_form_med_id + '">' + _data[i].med_routed_df_med_id_desc + '</option>')
-                        }
-                        dosageSelect.prop('disabled', false);
-                        if(_data.length === 1) {
-                            dosageSelect.val(_data[0].routed_dosage_form_med_id).trigger('change');
-                        }
-                    }, 'json');
-                });
+                        // on dosage selection
+                        $(document).off('change', '[fdb-med-suggest-dosage]');
+                        $(document).on('change', '[fdb-med-suggest-dosage]', function () {
+                            let group = $(this).attr('fdb-suggest-group');
+                            let strengthSelect = $('[fdb-med-suggest-strength][fdb-suggest-group='+group+']').empty().prop('disabled', true);
+                            let dosageFormMedID = $('[fdb-med-suggest-dosage][fdb-suggest-group='+$(this).attr('fdb-suggest-group')+']').val();
+                            $.get('/fdb-meds?dosage-form-med-id=' + dosageFormMedID, _data => {
+                                strengthSelect
+                                    .empty()
+                                    .append('<option value="">-- select --</option>');
+                                for (let i = 0; i < _data.length; i++) {
+                                    strengthSelect.append('<option value="' + _data[i].gcn_seqno + '">' + _data[i].med_medid_desc + '</option>')
+                                }
+                            }, 'json');
+                            strengthSelect.prop('disabled', false);
+                        });
 
-                // on dosage selection
-                $(document).off('change', '[fdb-med-suggest-dosage]');
-                $(document).on('change', '[fdb-med-suggest-dosage]', function () {
-                    let group = $(this).attr('fdb-suggest-group');
-                    let strengthSelect = $('[fdb-med-suggest-strength][fdb-suggest-group='+group+']').empty().prop('disabled', true);
-                    let dosageFormMedID = $('[fdb-med-suggest-dosage][fdb-suggest-group='+$(this).attr('fdb-suggest-group')+']').val();
-                    $.get('/fdb-meds?dosage-form-med-id=' + dosageFormMedID, _data => {
-                        strengthSelect
-                            .empty()
-                            .append('<option value="">-- select --</option>');
-                        for (let i = 0; i < _data.length; i++) {
-                            strengthSelect.append('<option value="' + _data[i].gcn_seqno + '">' + _data[i].med_medid_desc + '</option>')
-                        }
-                    }, 'json');
-                    strengthSelect.prop('disabled', false);
-                });
+                        // on strength (medid) selection
+                        $(document).off('change', '[fdb-med-suggest-strength]');
+                        $(document).on('change', '[fdb-med-suggest-strength]', function () {
+                            fillSideEffects($(this).attr('fdb-suggest-group'), $(this).val());
+                            fillGeriatricPrecautions($(this).attr('fdb-suggest-group'), $(this).val());
+                            fillIndications($(this).attr('fdb-suggest-group'), $(this).val());
 
-                // on strength (medid) selection
-                $(document).off('change', '[fdb-med-suggest-strength]');
-                $(document).on('change', '[fdb-med-suggest-strength]', function () {
-                    fillSideEffects($(this).val());
-                    fillGeriatricPrecautions($(this).val());
-                    fillIndications($(this).val());
+                            let routedMedID = $('[fdb-med-suggest-route][fdb-suggest-group='+$(this).attr('fdb-suggest-group')+']').val();
+                            fillContraindications($(this).attr('fdb-suggest-group'), routedMedID);
+                        });
 
-                    let routedMedID = $('[fdb-med-suggest-route][fdb-suggest-group='+$(this).attr('fdb-suggest-group')+']').val();
-                    fillContraindications(routedMedID);
-                });
+                        Vue.nextTick(() => {
+                            this.initFDBSuggest();
+                            $('[fdb-med-suggest-search]').first().focus();
+                        });
+                    }
+                })
 
             }, '#fdb-pg');
         }).call(window);

+ 0 - 1
resources/views/app/fdb-pg/fdb-side-effects.blade.php

@@ -1,7 +1,6 @@
 @if(!count($sides))
     <span class="d-block no-suggest-items">No side effects!</span>
 @else
-    <p class="font-weight-bold text-secondary mb-2">Side Effects</p>
     <table class="table table-sm table-striped table-bordered">
         <thead>
         <tr>