Merge branch 'ASTRA-163' into 'master'
WIP Начала поиск медкарт See merge request andrusyakka/urban-couscous!485
This commit is contained in:
@@ -1,36 +1,33 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.flex.flex-col.gap-y-2
|
.flex.flex-col.gap-y-2
|
||||||
base-input-container(:label="label", :style="{width: width}")
|
base-input-container(:label="label", :style="{width: width, ...sizeVariable}")
|
||||||
q-select(
|
q-select.select(
|
||||||
v-model="value",
|
v-model="value",
|
||||||
:options="items",
|
:options="items",
|
||||||
:readonly="readonly"
|
:readonly="readonly"
|
||||||
:disable="disable",
|
:disable="disabled",
|
||||||
:hide-dropdown-icon="hideDropdownIcon"
|
:hide-dropdown-icon="hideDropdownIcon || disabled || readonly"
|
||||||
:borderless="borderless",
|
outlined,
|
||||||
:outlined="outlined",
|
|
||||||
:bg-color="bgColor",
|
|
||||||
:standout="standout",
|
|
||||||
dense,
|
|
||||||
:behavior="behavior",
|
:behavior="behavior",
|
||||||
emit-value,
|
emit-value,
|
||||||
map-options,
|
map-options,
|
||||||
:clearable="clearable"
|
:clearable="clearable",
|
||||||
|
dropdown-icon="app:down-arrow"
|
||||||
)
|
)
|
||||||
template(v-slot:selected)
|
template(v-slot:selected)
|
||||||
span(v-if="!value?.icon") {{ textSelect }}
|
span(v-if="!value?.icon", :class="{placeholder: placeholder}") {{ textSelect }}
|
||||||
q-icon.selected-icon(
|
q-icon.selected-icon(
|
||||||
v-else,
|
v-else,
|
||||||
:name="iconSelect",
|
:name="iconSelect",
|
||||||
size="24px"
|
size="24px"
|
||||||
)
|
)
|
||||||
template(
|
template(v-slot:option="scope")
|
||||||
v-slot:option="scope",
|
q-item(v-bind="scope.itemProps", style="justify-content: center", v-if="value?.icon")
|
||||||
v-if="value?.icon"
|
|
||||||
)
|
|
||||||
q-item(v-bind="scope.itemProps", style="justify-content: center")
|
|
||||||
q-item-section(avatar, style="padding: 0px; min-width: 0px")
|
q-item-section(avatar, style="padding: 0px; min-width: 0px")
|
||||||
q-icon.icon(:name="scope.opt.icon", size="24px")
|
q-icon.icon(:name="scope.opt.icon", size="24px")
|
||||||
|
q-item.item.px-4.py-2(v-bind="scope.itemProps", style="justify-content: center", v-else)
|
||||||
|
q-item-section
|
||||||
|
q-item-label.text-dark.text-base.font-medium {{ scope.opt.label }}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -43,20 +40,7 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
placeholder: String,
|
placeholder: String,
|
||||||
hideDropdownIcon: Boolean,
|
hideDropdownIcon: Boolean,
|
||||||
borderless: Boolean,
|
|
||||||
modelValue: [Object, String],
|
modelValue: [Object, String],
|
||||||
bgColor: {
|
|
||||||
type: String,
|
|
||||||
default: "white",
|
|
||||||
},
|
|
||||||
outlined: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
standout: {
|
|
||||||
type: [Boolean, String],
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
items: {
|
items: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
@@ -65,19 +49,12 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
default: "menu",
|
default: "menu",
|
||||||
},
|
},
|
||||||
icon: {
|
disabled: Boolean,
|
||||||
type: String,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
size: {
|
|
||||||
type: Number,
|
|
||||||
default: 18,
|
|
||||||
},
|
|
||||||
disable: Boolean,
|
|
||||||
label: String,
|
label: String,
|
||||||
readonly: Boolean,
|
readonly: Boolean,
|
||||||
width: String,
|
width: String,
|
||||||
clearable: Boolean,
|
clearable: Boolean,
|
||||||
|
size: String,
|
||||||
},
|
},
|
||||||
emits: ["update:modelValue"],
|
emits: ["update:modelValue"],
|
||||||
computed: {
|
computed: {
|
||||||
@@ -96,16 +73,129 @@ export default {
|
|||||||
iconSelect() {
|
iconSelect() {
|
||||||
return this.value?.icon ? this.value.icon : this.placeholder;
|
return this.value?.icon ? this.value.icon : this.placeholder;
|
||||||
},
|
},
|
||||||
|
sizeVariable() {
|
||||||
|
if (this.size === "XS")
|
||||||
|
return {
|
||||||
|
"--input-height": "28px",
|
||||||
|
"--text-size": "12px",
|
||||||
|
"--line-height": "135%",
|
||||||
|
"--px": "0 8px",
|
||||||
|
"--py": "10px 0",
|
||||||
|
};
|
||||||
|
if (this.size === "S")
|
||||||
|
return {
|
||||||
|
"--input-height": "32px",
|
||||||
|
"--text-size": "12px",
|
||||||
|
"--line-height": "135%",
|
||||||
|
"--px": "0 8px",
|
||||||
|
"--py": "10px 0",
|
||||||
|
};
|
||||||
|
if (this.size === "M")
|
||||||
|
return {
|
||||||
|
"--input-height": "40px",
|
||||||
|
"--text-size": "16px",
|
||||||
|
"--line-height": "normal",
|
||||||
|
"--px": "0 16px",
|
||||||
|
"--py": "8px 0",
|
||||||
|
};
|
||||||
|
if (this.size === "L")
|
||||||
|
return {
|
||||||
|
"--input-height": "48px",
|
||||||
|
"--text-size": "16px",
|
||||||
|
"--line-height": "normal",
|
||||||
|
"--px": "0 16px",
|
||||||
|
"--py": "8px 0",
|
||||||
|
};
|
||||||
|
if (this.size)
|
||||||
|
return {
|
||||||
|
"--input-height": this.size,
|
||||||
|
"--text-size": "16px",
|
||||||
|
"--line-height": "normal",
|
||||||
|
"--px": "0 16px",
|
||||||
|
"--py": "8px 0",
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
"--input-height": "56px",
|
||||||
|
"--text-size": "16px",
|
||||||
|
"--line-height": "normal",
|
||||||
|
"--px": "0 16px",
|
||||||
|
"--py": "8px 0",
|
||||||
|
};
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="sass">
|
<style lang="sass">
|
||||||
|
.placeholder
|
||||||
|
color: var(--font-grey-color)
|
||||||
.q-menu
|
.q-menu
|
||||||
font-feature-settings: 'pnum' on, 'lnum' on !important
|
font-feature-settings: 'pnum' on, 'lnum' on !important
|
||||||
.q-btn--outline:before, .q-field--outlined .q-field__control:before
|
|
||||||
|
.q-field--auto-height .q-field__native
|
||||||
|
min-height: var(--input-height) !important
|
||||||
|
font-weight: 500
|
||||||
|
font-size: var(--text-size)
|
||||||
|
line-height: var(--line-height)
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
padding: var(--py)
|
||||||
|
|
||||||
|
.q-field--auto-height .q-field__control
|
||||||
|
min-height: var(--input-height) !important
|
||||||
|
height: var(--input-height) !important
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
padding: var(--px) !important
|
||||||
|
&:before
|
||||||
|
border-color: var(--border-light-grey-color) !important
|
||||||
|
transition: none
|
||||||
|
&:hover:before
|
||||||
|
border-color: var(--font-grey-color) !important
|
||||||
|
&:after
|
||||||
border-width: 1px !important
|
border-width: 1px !important
|
||||||
|
transition: none
|
||||||
|
transform: none !important
|
||||||
|
|
||||||
|
.q-field--disabled .q-field__control > div
|
||||||
|
opacity: 1 !important
|
||||||
|
|
||||||
|
.q-field--outlined.q-field--disabled .q-field__native
|
||||||
|
color: var(--font-grey-color)
|
||||||
|
|
||||||
|
.q-field--outlined.q-field--disabled .q-field__control
|
||||||
|
background: var(--bg-light-grey) !important
|
||||||
|
|
||||||
|
.q-field--outlined.q-field--readonly .q-field__control
|
||||||
|
background: var(--bg-light-grey) !important
|
||||||
|
&:before
|
||||||
|
border-color: var(--bg-light-grey) !important
|
||||||
|
transition: none
|
||||||
|
&:hover:before
|
||||||
|
border-color: var(--bg-light-grey) !important
|
||||||
|
|
||||||
|
.q-field--outlined.q-field--readonly .q-field__native
|
||||||
|
cursor: default
|
||||||
|
|
||||||
|
.q-field--error :deep(.q-field__bottom)
|
||||||
|
padding: 4px 0 0 0
|
||||||
|
font-weight: 500
|
||||||
|
font-size: 12px
|
||||||
|
line-height: 135% !important
|
||||||
|
|
||||||
.q-field__marginal
|
.q-field__marginal
|
||||||
color: var(--font-grey-color) !important
|
height: var(--input-height) !important
|
||||||
.icon :deep(path), .selected-icon :deep(path)
|
|
||||||
|
.q-select__dropdown-icon path
|
||||||
fill: var(--font-dark-blue-color)
|
fill: var(--font-dark-blue-color)
|
||||||
|
.q-select__dropdown-icon
|
||||||
|
width: 20px
|
||||||
|
height: 20px
|
||||||
|
|
||||||
|
.item
|
||||||
|
border-bottom: 1px solid var(--gray-scondary)
|
||||||
|
&:last-child
|
||||||
|
border-bottom: none
|
||||||
|
&:hover
|
||||||
|
background-color: var(--gray-thirdly)
|
||||||
|
|
||||||
|
.q-menu
|
||||||
|
box-shadow: 1px 1px 8px 0px rgba(37, 40, 80, 0.15) !important
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.medcards-wrapper.flex.flex-col.w-full
|
.medcards-wrapper.flex.flex-col.w-full.gap-y-2.h-full
|
||||||
table-patients
|
table-patients
|
||||||
medical-card-search
|
medical-card-list
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import MedicalCardSearch from "./components/MedicalCardSearch.vue";
|
import MedicalCardList from "./components/MedicalCardList.vue";
|
||||||
import TablePatients from "./components/TablePatients.vue";
|
import TablePatients from "./components/TablePatients.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "TheMedcards",
|
name: "TheMedcards",
|
||||||
components: { MedicalCardSearch, TablePatients },
|
components: { MedicalCardList, TablePatients },
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
17
src/pages/medcards/components/MedicalCardList.vue
Normal file
17
src/pages/medcards/components/MedicalCardList.vue
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
.medical-wrapper.flex.h-full.rounded.w-full
|
||||||
|
list-header
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ListHeader from "@/pages/medcards/components/MedicalCardListHeader.vue";
|
||||||
|
export default {
|
||||||
|
name: "MedicalCardList",
|
||||||
|
components: { ListHeader },
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
.medical-wrapper
|
||||||
|
background-color: var(--default-white)
|
||||||
|
</style>
|
||||||
78
src/pages/medcards/components/MedicalCardListHeader.vue
Normal file
78
src/pages/medcards/components/MedicalCardListHeader.vue
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
.header-wrapper.flex.w-full.justify-between.p-4
|
||||||
|
.flex.items-center.justify-center.gap-x-2
|
||||||
|
base-input.search(
|
||||||
|
:width="438",
|
||||||
|
size="M",
|
||||||
|
placeholder="Найти медкарту",
|
||||||
|
iconLeft
|
||||||
|
)
|
||||||
|
template(v-slot:iconLeft)
|
||||||
|
q-icon.search-icon(name="app:search", size="20px")
|
||||||
|
base-select(
|
||||||
|
width="280px",
|
||||||
|
:items="items",
|
||||||
|
size="M",
|
||||||
|
placeholder="Сортировать по ...",
|
||||||
|
v-model="sortingType"
|
||||||
|
)
|
||||||
|
base-button(width="216px")
|
||||||
|
q-icon.plus.mr-2(name="app:plus", size="24px")
|
||||||
|
span Создать медкарту
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BaseInput from "@/components/base/BaseInput.vue";
|
||||||
|
import BaseSelect from "@/components/base/BaseSelect.vue";
|
||||||
|
import BaseButton from "@/components/base/BaseButton.vue";
|
||||||
|
export default {
|
||||||
|
name: "MedicalCardListHeader",
|
||||||
|
components: { BaseInput, BaseSelect, BaseButton },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
label: "ФИО",
|
||||||
|
id: "name",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "приоритету",
|
||||||
|
id: "priority",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "дате рождения",
|
||||||
|
id: "birthDate",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "номеру медкарты",
|
||||||
|
id: "medcardNumber",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "проценту заполнения",
|
||||||
|
id: "percent",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "дате создания медкарты",
|
||||||
|
id: "creationDate",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sortingType: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
.header-wrapper
|
||||||
|
height: 72px
|
||||||
|
border-bottom: 1px solid var(--gray-scondary)
|
||||||
|
|
||||||
|
.search-icon :deep(path)
|
||||||
|
fill: var(--font-grey-color)
|
||||||
|
|
||||||
|
.search :deep(.q-field__prepend)
|
||||||
|
padding-right: 4px
|
||||||
|
|
||||||
|
.plus :deep(path)
|
||||||
|
fill: var(--default-white)
|
||||||
|
</style>
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<template lang="pug">
|
|
||||||
.medical-wrapper.flex
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default { name: "MedicalCardSearch" };
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="sass" scoped></style>
|
|
||||||
Reference in New Issue
Block a user