[WIP] Добавил модальное окно создания тэга на форму данных обследования, фикс компонента

This commit is contained in:
megavrilinvv
2023-06-29 17:13:42 +03:00
parent f61c405f0f
commit e6015ba458
3 changed files with 67 additions and 57 deletions

View File

@@ -61,8 +61,9 @@
) )
.name.flex.items-center.font-medium.text-smm {{ name }} .name.flex.items-center.font-medium.text-smm {{ name }}
.flex.h-10.w-10.absolute.right-4.bottom-4 .flex.h-10.w-10.absolute.right-4.bottom-4
q-btn(color="primary", dense, padding="4px 12px") q-btn(@click="showModal = true", color="primary", dense, padding="4px 12px")
q-icon(name="app:icon-plus", size="17px") q-icon(name="app:icon-plus", size="17px")
tag-creation-form(:show-modal="showModal", :close-modal="closeModal", :create-tag="createTag")
.flex.gap-x-20.w-full(v-if="change || fillInspection") .flex.gap-x-20.w-full(v-if="change || fillInspection")
.flex.flex-col.gap-y-3.w-full(v-for="file in protocolData[data.state].files") .flex.flex-col.gap-y-3.w-full(v-for="file in protocolData[data.state].files")
.title.text-smm.font-semibold {{file.name}} .title.text-smm.font-semibold {{file.name}}
@@ -97,13 +98,14 @@
<script> <script>
import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue"; import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue";
import TagCreationForm from "@/pages/newMedicalCard/components/InitialInspectionProtocol/Forms/TagCreationForm.vue";
import BaseButton from "@/components/base/BaseButton.vue"; import BaseButton from "@/components/base/BaseButton.vue";
import BaseInput from "@/components/base/BaseInput.vue"; import BaseInput from "@/components/base/BaseInput.vue";
import { mapState } from "vuex"; import { mapState } from "vuex";
export default { export default {
name: "DataForm", name: "DataForm",
components: { MedicalFormWrapper, BaseButton, BaseInput }, components: { MedicalFormWrapper, BaseButton, BaseInput, TagCreationForm },
props: { props: {
abc: Array, abc: Array,
data: Object, data: Object,
@@ -113,6 +115,7 @@ export default {
data() { data() {
return { return {
change: false, change: false,
showModal: false,
}; };
}, },
computed: { computed: {
@@ -183,6 +186,13 @@ export default {
reader.readAsDataURL(file); reader.readAsDataURL(file);
}); });
}, },
closeModal() {
this.showModal = false;
},
createTag(model) {
this.showModal = false;
this.protocolData[this.data.state].complaints.push(model.tag);
},
}, },
watch: { watch: {
fillInspection: { fillInspection: {

View File

@@ -50,8 +50,7 @@
.flex.h-10.w-10.absolute.right-4.bottom-4 .flex.h-10.w-10.absolute.right-4.bottom-4
q-btn(@click="showModal = true", color="primary", dense, padding="4px 12px") q-btn(@click="showModal = true", color="primary", dense, padding="4px 12px")
q-icon(name="app:icon-plus", size="17px") q-icon(name="app:icon-plus", size="17px")
base-modal(v-model="showModal", title="Создание тега", modal-padding) tag-creation-form(:show-modal="showModal", :close-modal="closeModal", :create-tag="createTag")
tag-creation-form(:close-modal="closeModal", :create-tag="createTag")
.flex(v-if="data.title === 'Осмотр полости рта' && (fillInspection || change)", :style="{color: 'var(--btn-blue-color)'}") .flex(v-if="data.title === 'Осмотр полости рта' && (fillInspection || change)", :style="{color: 'var(--btn-blue-color)'}")
q-btn(no-caps, flat padding="2px 4px") q-btn(no-caps, flat padding="2px 4px")
q-icon(left, name="app:plus", size="11px") q-icon(left, name="app:plus", size="11px")
@@ -64,7 +63,6 @@ import BaseInput from "@/components/base/BaseInput.vue";
import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue"; import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue";
import TagCreationForm from "@/pages/newMedicalCard/components/InitialInspectionProtocol/Forms/TagCreationForm.vue"; import TagCreationForm from "@/pages/newMedicalCard/components/InitialInspectionProtocol/Forms/TagCreationForm.vue";
import { mapState } from "vuex"; import { mapState } from "vuex";
import BaseModal from "@/components/base/BaseModal.vue";
export default { export default {
name: "MedicalFormTag", name: "MedicalFormTag",
@@ -73,7 +71,6 @@ export default {
BaseInput, BaseInput,
MedicalFormWrapper, MedicalFormWrapper,
TagCreationForm, TagCreationForm,
BaseModal,
}, },
props: { data: Object, abc: Array, fillInspection: Boolean }, props: { data: Object, abc: Array, fillInspection: Boolean },
data() { data() {

View File

@@ -1,66 +1,69 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col base-modal(v-model="showModal", title="Создание тега", modal-padding)
.flex.flex-col.justify-between.py-6(:style="{height: '194px'}") .flex.flex-col
.flex.flex-col(class="gap-y-1.5") .flex.flex-col.justify-between.py-6(:style="{height: '194px'}")
.label.font-semibold.text-smm Категория .flex.flex-col(class="gap-y-1.5")
.select.flex.items-center.justify-between.cursor-pointer.py-2.px-4.rounded( .label.font-semibold.text-smm Категория
:class="{'open-select': isOpen}", .select.flex.items-center.justify-between.cursor-pointer.py-2.px-4.rounded(
@click="openMenu", :class="{'open-select': isOpen}",
v-click-outside="closeMenu" @click="openMenu",
) {{model.category ? model.category : "Выберите категорию"}} v-click-outside="closeMenu"
.flex.duration-100(:class="{'open-menu': isOpen}") ) {{model.category ? model.category : "Выберите категорию"}}
q-icon(name="app:down-arrow") .flex.duration-100(:class="{'open-menu': isOpen}")
q-menu( q-icon(name="app:down-arrow")
v-if="isOpen", q-menu(
:style="{rowGap: '6px'}", v-if="isOpen",
style="margin-top: 4px !important", :style="{rowGap: '6px'}",
fit, style="margin-top: 4px !important",
anchor="bottom left", fit,
self="top left" anchor="bottom left",
) self="top left"
.menu-wrapper.flex.flex-col.h-40.overflow-y-auto
.options.flex(v-for="item in options")
.item.flex.py-2.px-4.items-center.cursor-pointer(
@click="selected(item.label)"
) {{item.label}}
.tag.item.flex.py-2.px-4.items-center.cursor-pointer.w-full.gap-x-2(
@click="addCategory"
) )
q-icon(name="app:icon-plus", size="10px",) .menu-wrapper.flex.flex-col.h-40.overflow-y-auto
span Добавить категорию .options.flex(v-for="item in options")
.flex.flex-col(class="gap-x-1.5") .item.flex.py-2.px-4.items-center.cursor-pointer(
base-input(v-model="model.tag", label="Текст тега", placeholder="Введите тэг", outlined) @click="selected(item.label)"
.buttons-group.flex ) {{item.label}}
q-btn( .tag.item.flex.py-2.px-4.items-center.cursor-pointer.w-full.gap-x-2(
@click="closeModal", @click="addCategory"
color="primary", )
outline, q-icon(name="app:icon-plus", size="10px",)
size="16px", span Добавить категорию
no-caps, .flex.flex-col(class="gap-x-1.5")
label="Отменить", base-input(v-model="model.tag", label="Текст тега", placeholder="Введите тэг", outlined)
:style="{width: '100%', height: '40px'}", .buttons-group.flex
padding="10px 24px" q-btn(
) @click="closeModal",
q-btn( color="primary",
@click="createTag(model)", outline,
color="primary", size="16px",
size="16px", no-caps,
no-caps, label="Отменить",
label="Создать" :style="{width: '100%', height: '40px'}",
:style="{width: '100%', height: '40px'}", padding="10px 24px"
padding="10px 24px" )
) q-btn(
@click="createTag(model)",
color="primary",
size="16px",
no-caps,
label="Создать"
:style="{width: '100%', height: '40px'}",
padding="10px 24px"
)
</template> </template>
<script> <script>
import BaseInput from "@/components/base/BaseInput.vue"; import BaseInput from "@/components/base/BaseInput.vue";
import BaseModal from "@/components/base/BaseModal.vue";
export default { export default {
name: "TagCreationForm", name: "TagCreationForm",
components: { BaseInput }, components: { BaseInput, BaseModal },
props: { props: {
closeModal: Function, closeModal: Function,
createTag: Function, createTag: Function,
showModal: Boolean,
}, },
data() { data() {
return { return {