Merge branch 'master' into 'UC-190'

# Conflicts:
#   src/pages/schedule/components/FormChangeShift.vue
This commit is contained in:
Vasiliy Gavrilin
2022-12-29 14:44:08 +00:00
42 changed files with 614 additions and 381 deletions

View File

@@ -2,7 +2,7 @@
.flex.w-full(class="gap-x-1.5") .flex.w-full(class="gap-x-1.5")
.flex(:id="value.id" @click="(e) => saveNetworkId(e)") .flex(:id="value.id" @click="(e) => saveNetworkId(e)")
base-select-networks(:style-border="true" :list-data="listAddingNetworks" :option-data="selectedOption" :choose-option="chooseNetwork" :width-select="42") base-select-networks(:style-border="true" :list-data="listAddingNetworks" :option-data="selectedOption" :choose-option="chooseNetwork" :width-select="42")
base-input.w-full(v-model:value="value.username" placeholder="Ссылкa") base-input.w-full(v-model="value.username", placeholder="Ссылкa")
</template> </template>
<script> <script>

View File

@@ -38,7 +38,7 @@
img.avatar.object-cover(for="image-upload", :src="img", v-if="img") img.avatar.object-cover(for="image-upload", :src="img", v-if="img")
base-button(:rounded="true", :size="48", @click="closeAddImage") base-button(:rounded="true", :size="48", @click="closeAddImage")
.icon-ok .icon-ok
base-input.w-full(v-model:value="infoClient.basic.full_name" placeholder="ФИО*") base-input.w-full(v-model="infoClient.basic.full_name", placeholder="ФИО*")
.flex.flex-col.flex-auto.l.gap-y-8 .flex.flex-col.flex-auto.l.gap-y-8
.flex.px-4 .flex.px-4
button.title-info.px-6.py-2.cursor-pointer.w-full.text-sm( button.title-info.px-6.py-2.cursor-pointer.w-full.text-sm(

View File

@@ -1,27 +1,31 @@
<template lang="pug"> <template lang="pug">
.base-select.flex.justify-between.items-center.py-9px.px-4.gap-4.cursor-pointer.relative( .flex.flex-col.gap-y-2
@click="open = !open", .label.font-semibold.text-sm.opacity-40(v-if="label") {{ label }}
:class="{'open': open, 'border-none': borderNone}", .base-select.flex.justify-between.items-center.py-9px.px-4.gap-4.cursor-pointer.relative(
) ref="select",
.placeholder.text-base.flex.items-center( @click="open = !open",
:class="{'value-color': value.label || placeholderOpacity}" :class="{'open': open, 'border-none': borderNone}",
) {{ value.label || placeholder }}
.flex.items-center
.select-form-separator.cursor-pointer.mr-4(v-if="separator")
span.icon-down-arrow.open-icon.flex.text-xsm(:class="{'open': open }")
base-options(
v-if="open",
) )
.items-container.mt-1( .placeholder.text-base.flex.items-center(
@click="closeOptions", :class="{'value-color': value.label || placeholderOpacity}",
v-click-outside="leaveSelect" ) {{ value.label || placeholder }}
.flex.items-center
.select-form-separator.cursor-pointer.mr-4(v-if="separator")
span.icon-down-arrow.open-icon.flex.text-xsm(:class="{'open': open }")
base-options(
v-if="open",
) )
.item.py-2.px-4.cursor-pointer( .items-container.mt-1(
v-for="item in items", @click="closeOptions",
:key="item?.id", v-click-outside="leaveSelect",
:class="{'center': center}", :class="textClass"
@click="clickItem(item?.id, item?.label)" )
) {{ item?.label }} .item.py-2.px-4.cursor-pointer(
v-for="item in items",
:key="item?.id",
:class="{'center': center}",
@click="clickItem(item?.id, item?.label)"
) {{ item?.label }}
</template> </template>
<script> <script>
@@ -40,6 +44,8 @@ export default {
separator: Boolean, separator: Boolean,
placeholderOpacity: Boolean, placeholderOpacity: Boolean,
center: Boolean, center: Boolean,
label: String,
textStyle: String,
}, },
emits: ["update:modelValue"], emits: ["update:modelValue"],
data() { data() {
@@ -56,6 +62,15 @@ export default {
this.$emit("update:modelValue", value); this.$emit("update:modelValue", value);
}, },
}, },
textClass() {
return this.textStyle
? {
[this.textStyle]: true,
}
: {
"text-base": true,
};
},
}, },
methods: { methods: {
clickItem(id, label) { clickItem(id, label) {
@@ -82,13 +97,14 @@ export default {
border-radius: 4px border-radius: 4px
background-color: white background-color: white
user-select: none user-select: none
height: 40px
&.open &.open
border: 1.5px solid #4772F2 border: 1.5px solid #4772F2
.items-container .items-container
box-shadow: 1px 1px 8px rgba(37, 40, 80, 0.15) box-shadow: 1px 1px 8px rgba(37, 40, 80, 0.15)
border-radius: 4px border-radius: 4px
background-color: white background-color: white
max-height: 140px max-height: 142px
overflow-y: auto overflow-y: auto
.placeholder .placeholder
color: #090A15 color: #090A15

View File

@@ -0,0 +1,34 @@
<template lang="pug">
.section-wrapper.flex.flex-col.h-fit.cursor-pointer(:style="{height: `${height}px`}")
.section-header.flex.items-center.justify-between.pl-4.pr-3.py-4
span.text-sm.font-semibold.whitespace-normal {{title}}
.flex.items-center.gap-x-8
.section-add.flex.justify-center.items-center.cursor-pointer Добавить данные
</template>
<script>
export default {
name: "BaseDetailInfo",
props: {
title: String,
height: Number,
},
};
</script>
<style lang="sass" scoped>
.section-wrapper
border: 1px solid var(--border-light-grey-color)
border-radius: 4px
color: var(--font-dark-blue-color)
&.click
background-color: var(--light-grey-bg-color)
.section-header
min-height: 44px
border-bottom: 1px solid var(--border-light-grey-color)
.section-add
height: 100%
color: var(--btn-blue-color)
</style>

View File

@@ -1,32 +1,28 @@
<template lang="pug"> <template lang="pug">
.input-wrapper.flex.gap-x-2.px-4.box-border.py-10px( .flex.flex-col.gap-y-2
:class="{'border-none': borderNone, 'date-input': dateInput}", .label.font-semibold.text-sm.opacity-40(v-if="label") {{ label }}
:style="{ minWidth: widthInput + 'px' }" .input-wrapper.flex.gap-x-2.px-4.box-border.py-10px(
) :class="{'border-none': borderNone, 'border-error': borderError }"
input.input.w-full.outline-0.not-italic( :style="{'background-color': disabled && 'var(--bg-disable-grey-color)'}"
:class="{date:type === 'date'}",
:value="value",
:type="type",
@input="$emit('update:value', $event.target.value)",
:placeholder="placeholder",
:maxLength="maxLength",
:max="maxDate",
:disabled="disabled"
) )
.slot(v-if="withIcon", :class="iconPosition") input.input.w-full.outline-0.not-italic(
slot.cursor-pointer v-model="value",
:placeholder="placeholder",
:disabled="disabled",
:type="type"
)
.slot(v-if="withIcon", :class="iconPosition")
slot.cursor-pointer
</template> </template>
<script> <script>
//TODO: Переписать v-model:value, убрать лишнии пропсы, добавить label или вынести в отдельную компоненту
export default { export default {
name: "BaseInput", name: "BaseInput",
props: { props: {
type: { type: {
default: "text", default: "text",
}, },
maxLength: Number, modelValue: String,
value: String,
withIcon: { withIcon: {
default: false, default: false,
}, },
@@ -34,11 +30,21 @@ export default {
default: "right", default: "right",
}, },
placeholder: String, placeholder: String,
widthInput: Number,
borderNone: Boolean, borderNone: Boolean,
borderError: Boolean,
disabled: Boolean, disabled: Boolean,
maxDate: String, label: String,
dateInput: Boolean, },
emits: ["update:modelValue"],
computed: {
value: {
get() {
return this.modelValue;
},
set(value) {
this.$emit("update:modelValue", value);
},
},
}, },
}; };
</script> </script>
@@ -55,12 +61,14 @@ export default {
background-color: var(--default-white) background-color: var(--default-white)
color: var(--font-black-color) color: var(--font-black-color)
height: 40px height: 40px
.date
background: url("../../assets/icons/calendar-input.svg") no-repeat 100% 50%
&::-webkit-calendar-picker-indicator
opacity: 0
.border-none .border-none
border: none border: none
.border-error
border-color: var(--border-red-color)
.input .input
background-color: inherit background-color: inherit
&:disabled, &[disabled]
background-color: var(--bg-disable-grey-color)
.label
color: var(--font-black-color)
</style> </style>

View File

@@ -1,5 +1,5 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col .flex.flex-col.gap-y-2
.label(v-if="!!label") {{label}} .label(v-if="!!label") {{label}}
.field .field
input( input(
@@ -37,7 +37,7 @@ export default {
<style lang="sass" scoped> <style lang="sass" scoped>
.field .field
height: 100% height: 40px
display: flex display: flex
align-items: center align-items: center
border: 1.5px solid var(--border-light-grey-color) border: 1.5px solid var(--border-light-grey-color)
@@ -56,5 +56,6 @@ export default {
.label .label
font-weight: 600 font-weight: 600
font-size: 14px font-size: 14px
line-height: 135% line-height: 16px
opacity: 0.4
</style> </style>

View File

@@ -1,25 +1,21 @@
<template lang="pug"> <template lang="pug">
.input-wrapper.flex.gap-x-2.px-4.box-border( .flex.flex-col.gap-y-2
class="py-2.5" .label.font-semibold.text-sm.opacity-40(v-if="label") {{ label }}
:style="{ minWidth: widthInput + 'px' }" .input-wrapper.flex.gap-x-2.px-4.box-border.py-2.h-10
) input.input.w-full.outline-0.not-italic.cursor-text(
input.input.w-full.outline-0.not-italic.cursor-text( v-model="value"
:value="value" type="time"
type="time" :placeholder="placeholder"
@input="$emit('update:value', $event.target.value)" )
:placeholder="placeholder" .slot(v-if="withIcon" :class="iconPosition")
:maxlength="maxLength" slot.cursor-pointer
)
.slot(v-if="withIcon" :class="iconPosition")
slot.cursor-pointer
</template> </template>
<script> <script>
export default { export default {
name: "BaseInputTime", name: "BaseInputTime",
props: { props: {
maxLength: Number, modelValue: String,
value: String,
withIcon: { withIcon: {
default: false, default: false,
}, },
@@ -27,7 +23,18 @@ export default {
default: "right", default: "right",
}, },
placeholder: String, placeholder: String,
widthInput: Number, label: String,
},
emits: ["update:modelValue"],
computed: {
value: {
get() {
return this.modelValue;
},
set(value) {
this.$emit("update:modelValue", value);
},
},
}, },
}; };
</script> </script>
@@ -41,6 +48,7 @@ export default {
border-radius: 4px border-radius: 4px
background-color: var(--default-white) background-color: var(--default-white)
color: var(--font-black-color) color: var(--font-black-color)
border: 1.5px solid var(--border-light-grey-color)
input::-webkit-calendar-picker-indicator input::-webkit-calendar-picker-indicator
cursor: pointer cursor: pointer
</style> </style>

View File

@@ -8,7 +8,7 @@ export default {
name: "BaseOptions", name: "BaseOptions",
computed: { computed: {
parent() { parent() {
return this.$parent.$el; return this.$parent.$refs.select;
}, },
parentSize() { parentSize() {
return this.parent?.getBoundingClientRect(); return this.parent?.getBoundingClientRect();

View File

@@ -1,5 +1,9 @@
<template lang="pug"> <template lang="pug">
.base-select(@click="invertOpen", :class="{'open': open && !disable, 'border-none': borderNone}") .base-select(
@click="invertOpen",
:class="{'open': open && !disable, 'border-none': borderNone}",
ref="select"
)
.placeholder( .placeholder(
:class="{'value-color': value || placeholderOpacity, ...textClass}", :class="{'value-color': value || placeholderOpacity, ...textClass}",
:style="{'color': !disable || '#9ca3af', 'opacity': 1}" :style="{'color': !disable || '#9ca3af', 'opacity': 1}"

View File

@@ -7,54 +7,45 @@
.flex.pt-2 .flex.pt-2
.icon-cancel.close-icon.tesxt-xs.cursor-pointer(@click="clearForm") .icon-cancel.close-icon.tesxt-xs.cursor-pointer(@click="clearForm")
.flex.flex-col.gap-y-8 .flex.flex-col.gap-y-8
.flex.flex-col.gap-y-2 base-custom-select(
span.text-xxs.opacity-40.font-bold.leading-3 Статус приема v-if="selectedEventData.id"
base-custom-select.select( v-model="status",
v-if="selectedEventData.id" :items="eventStatuses",
v-model="status", label="Статус приема"
:items="eventStatuses", )
placeholder="Статус приема" base-input(
v-else,
disabled,
v-model="status.label",
label="Статус приема"
)
base-custom-select(
:items="ownersList",
v-model="employees.employee",
placeholder="Выберите сотрудника"
label="Сотрудник"
)
base-custom-select(
:items="membersList",
v-model="members.person",
placeholder="Выберите клиента",
label="Клиент"
)
.flex.gap-x-4
base-input-date(
v-model="eventDate",
label="Дата"
)
.flex.gap-x-2.items-center
base-input-time.item-input.text-base(
v-model="startTime",
label="Начало"
) )
base-input( span.mt-4
v-else, base-input-time.item-input.text-base(
disabled, v-model="endTime",
v-model:value="status.label" label="Конец"
) )
.flex.flex-col(class="gap-y-1.5")
span.text-xxs.opacity-40.font-bold Сотрудник
base-custom-select.select(
:items="ownersList",
v-model="employees.employee",
placeholder="Выберите сотрудника"
)
.flex.flex-col(class="gap-y-1.5")
span.text-xxs.opacity-40.font-bold Клиент
base-custom-select.select(
:items="membersList",
v-model="members.person",
placeholder="Выберите клиента",
)
.flex.flex-col.gap-y-8
.flex.gap-x-4
.flex.gap-x-2
.flex.flex-col(class="gap-y-1.5")
span.text-xxs.opacity-40.font-bold.leading-3.font-bold Дата
base-input-date.h-10(v-model="eventDate")
.flex.gap-x-2.items-center
.flex.flex-col(class="gap-y-1.5")
span.text-xxs.opacity-40.font-bold.leading-3.font-bold Начало
base-input-time.item-input.text-base.select(
v-model:value="startTime",
:width-input="72"
)
span.mt-4
.flex.flex-col(class="gap-y-1.5")
span.text-xxs.opacity-40.font-bold.leading-3.font-bold Конец
base-input-time.item-input.text-base.select(
v-model:value="endTime",
:width-input="72"
)
base-button.create-button.text-base.font-semibold( base-button.create-button.text-base.font-semibold(
v-if="!selectedEventData.id", v-if="!selectedEventData.id",
:size="40", :size="40",
@@ -597,7 +588,6 @@ export default {
<style lang="sass" scoped> <style lang="sass" scoped>
.event-form .event-form
height: fit-content
width: 634px width: 634px
background-color: var(--default-white) background-color: var(--default-white)
box-shadow: var(--default-shadow) box-shadow: var(--default-shadow)
@@ -613,18 +603,12 @@ export default {
appearance: none appearance: none
border: none border: none
outline: none outline: none
height: 40px
&::-webkit-calendar-picker-indicator &::-webkit-calendar-picker-indicator
display: none display: none
-webkit-appearance: none -webkit-appearance: none
&::placeholder &::placeholder
color: var(--font-black-color-1) color: var(--font-black-color-1)
.time-input
width: 72px
border-radius: 4px
background-color: var(--default-white)
.date-input .date-input
width: 174px width: 174px
border-radius: 4px border-radius: 4px
@@ -644,7 +628,6 @@ export default {
width: 183px width: 183px
.select .select
height: 40px
border: 1.5px solid var(--border-light-grey-color) border: 1.5px solid var(--border-light-grey-color)
border-radius: 4px border-radius: 4px

View File

@@ -106,7 +106,7 @@
client-detail-input.text-sm.w-max-fit( client-detail-input.text-sm.w-max-fit(
v-if="section!=='docs' && section!=='additional' && isChange && settings[section].options[key] !== 'Дата выдачи'", v-if="section!=='docs' && section!=='additional' && isChange && settings[section].options[key] !== 'Дата выдачи'",
:style="{fontWeight:key === 'number'&&600}", :style="{fontWeight:key === 'number'&&600}",
v-model:value="sectionInfo[key]", v-model="sectionInfo[key]",
:rows="section ==='pass' ? 2 : 1", :rows="section ==='pass' ? 2 : 1",
:placeholder="settings[section].placeholder[key] || settings[section].placeholder" :placeholder="settings[section].placeholder[key] || settings[section].placeholder"
:sharp="settings[section].sharps[key] && section === 'pass' ? settings[section].sharps[key] : ''" :sharp="settings[section].sharps[key] && section === 'pass' ? settings[section].sharps[key] : ''"
@@ -138,7 +138,7 @@
client-detail-input.text-sm.w-max-fit.pr-12.relative( client-detail-input.text-sm.w-max-fit.pr-12.relative(
:maxLength="40", :maxLength="40",
:style="{fontWeight:key === 'number'&&600}", :style="{fontWeight:key === 'number'&&600}",
v-model:value="sectionInfo[key].title", v-model="sectionInfo[key].title",
placeholder="Заголовок" placeholder="Заголовок"
) )
.text.flex.absolute.text-xsx.top-18px( .text.flex.absolute.text-xsx.top-18px(
@@ -149,7 +149,7 @@
client-detail-input.text-sm.w-max-fit( client-detail-input.text-sm.w-max-fit(
:maxLength="40", :maxLength="40",
:style="{fontWeight:key === 'number'&&600}", :style="{fontWeight:key === 'number'&&600}",
v-model:value="sectionInfo[key].description", v-model="sectionInfo[key].description",
placeholder="Описание" placeholder="Описание"
) )
.flex.items-center(v-if="item?.title && section !== 'additional'") .flex.items-center(v-if="item?.title && section !== 'additional'")
@@ -250,7 +250,7 @@ export default {
pdf: pdfIcon, pdf: pdfIcon,
xls: exelIcon, xls: exelIcon,
}, },
isOpenPackage: true, isOpenPackage: false,
isOpenAddDoc: false, isOpenAddDoc: false,
showModal: false, showModal: false,
}; };

View File

@@ -3,16 +3,14 @@
textarea.place-input.w-full.outline-0.not-italic.resize-none.font-medium( textarea.place-input.w-full.outline-0.not-italic.resize-none.font-medium(
v-if="!sharp" v-if="!sharp"
:rows="textareaRows", :rows="textareaRows",
:value="value", v-model="value",
:cols="24", :cols="24",
@input="$emit('update:value', $event.target.value)",
:placeholder="placeholder", :placeholder="placeholder",
:maxLength="maxLength" :maxLength="maxLength"
) )
input.w-full.outline-0.not-italic.font-medium( input.w-full.outline-0.not-italic.font-medium(
v-else, v-else,
:value="value", v-model="value",
@input="$emit('update:value', $event.target.value)",
:placeholder="placeholder", :placeholder="placeholder",
v-mask="sharp" v-mask="sharp"
) )
@@ -23,15 +21,14 @@
import { mask } from "vue-the-mask"; import { mask } from "vue-the-mask";
export default { export default {
name: "ClientDetailInput", name: "ClientDetailInput",
emits: ["update:modelValue"],
props: { props: {
value: String, modelValue: String,
width: Number, width: Number,
sharp: String, sharp: String,
placeholder: {
default: "Поиск",
},
rows: Number, rows: Number,
maxLength: Number, maxLength: Number,
placeholder: String,
}, },
directives: { mask }, directives: { mask },
computed: { computed: {
@@ -42,6 +39,14 @@ export default {
if (this.value.length <= 22) return this.rows; if (this.value.length <= 22) return this.rows;
return Math.ceil(this.value.length / 22); return Math.ceil(this.value.length / 22);
}, },
value: {
get() {
return this.modelValue;
},
set(value) {
this.$emit("update:modelValue", value);
},
},
}, },
}; };
</script> </script>

View File

@@ -14,7 +14,7 @@
base-input.text-sm.input-info( base-input.text-sm.input-info(
disabled, disabled,
placeholder="Введите область", placeholder="Введите область",
v-model:value="dopeAddress.region", v-model="dopeAddress.region",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" :style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
) )
.flex.flex-col(class="gap-y-1.5") .flex.flex-col(class="gap-y-1.5")
@@ -22,7 +22,7 @@
base-input.text-sm.input-info( base-input.text-sm.input-info(
disabled, disabled,
placeholder="Введите улицу", placeholder="Введите улицу",
v-model:value="dopeAddress.street", v-model="dopeAddress.street",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" :style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
) )
.flex.gap-x-4 .flex.gap-x-4
@@ -31,7 +31,7 @@
base-input.text-sm.input-info( base-input.text-sm.input-info(
disabled, disabled,
placeholder="Дом", placeholder="Дом",
v-model:value="dopeAddress.house", v-model="dopeAddress.house",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" :style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
) )
.flex.flex-col(class="gap-y-1.5") .flex.flex-col(class="gap-y-1.5")
@@ -39,7 +39,7 @@
base-input.text-sm.input-info( base-input.text-sm.input-info(
disabled, disabled,
placeholder="Квартира", placeholder="Квартира",
v-model:value="dopeAddress.flat", v-model="dopeAddress.flat",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" :style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
) )
.flex.flex-col(class="gap-y-1.5") .flex.flex-col(class="gap-y-1.5")
@@ -48,7 +48,7 @@
disabled, disabled,
v-mask="'######'", v-mask="'######'",
placeholder="000000", placeholder="000000",
v-model:value="dopeAddress.index", v-model="dopeAddress.index",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" :style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
) )
</template> </template>

View File

@@ -8,7 +8,7 @@
.button.keep-redaction.flex.gap-x-3 .button.keep-redaction.flex.gap-x-3
.icon-star-off.icon .icon-star-off.icon
span На ведение span На ведение
.button.keep-redaction.flex.gap-x-3(@click="createMedicalCard(clientId)") .button.keep-redaction.flex.gap-x-3(@click="createMedicalCard")
.icon-star-off.icon .icon-star-off.icon
span Мед. карта span Мед. карта
.button.delete.flex.gap-x-3( .button.delete.flex.gap-x-3(

View File

@@ -271,9 +271,7 @@ export default {
} }
if (action === "medical") { if (action === "medical") {
if (id) { if (id) {
fetchWrapper localStorage.setItem("medicalId", id);
.get(`medical_card/medical_history/${id}/detail/`)
.then((res) => this.saveDataMedicalHistory(res));
this.$router.push("medical-card"); this.$router.push("medical-card");
} else { } else {
this.titleModal = "Создать мед.карту"; this.titleModal = "Создать мед.карту";

View File

@@ -5,7 +5,7 @@
base-input( base-input(
:with-icon="true", :with-icon="true",
icon-position="left", icon-position="left",
v-model:value="searchClient", v-model="searchClient",
placeholder="Введите фамилию", placeholder="Введите фамилию",
@keyup.enter="searchLastName" @keyup.enter="searchLastName"
) )

View File

@@ -21,7 +21,6 @@
clients-action-popup( clients-action-popup(
v-if="isOpenPopup", v-if="isOpenPopup",
:open-change-data="openChangeData", :open-change-data="openChangeData",
:client-id="client.id",
:disabled-delete="!!deletedClientId && !rowOverlay", :disabled-delete="!!deletedClientId && !rowOverlay",
@delete-client="transmitDeleteClient", @delete-client="transmitDeleteClient",
:create-medical-card="transmitMedicalCard" :create-medical-card="transmitMedicalCard"

View File

@@ -3,7 +3,7 @@
.flex.flex-col.gap-y-6.w-full.px-4 .flex.flex-col.gap-y-6.w-full.px-4
.flex.flex-col.gap-y-4.w-full(v-for="info in additionalInfo" :key="info.id") .flex.flex-col.gap-y-4.w-full(v-for="info in additionalInfo" :key="info.id")
.flex.flex-col.gap-y-1 .flex.flex-col.gap-y-1
base-input(v-model:value="info.header" placeholder="Заголовок") base-input(v-model="info.header" placeholder="Заголовок")
.flex.px-4.py-3.description .flex.px-4.py-3.description
textarea.w-full.h-full.outline-0.resize-none(:value="info.description" @input="$emit('update:info.description', $event.target.value)" placeholder="Описание" style="py-10") textarea.w-full.h-full.outline-0.resize-none(:value="info.description" @input="$emit('update:info.description', $event.target.value)" placeholder="Описание" style="py-10")
.upload-wrapper.flex.flex-col.justify-center.items-center .upload-wrapper.flex.flex-col.justify-center.items-center

View File

@@ -1,67 +1,52 @@
<template lang="pug"> <template lang="pug">
.wrapper-addresses.flex.flex-col.flex-auto.h-full.gap-y-8.justify-between .wrapper-addresses.flex.flex-col.flex-auto.h-full.gap-y-8.justify-between
.flex.flex-col.gap-y-6.px-4 .flex.flex-col.gap-y-6.px-4
.flex.flex-col.col-start-1.col-end-3(class="gap-y-1.5") base-input.input-info(
span.text-sm.font-semibold Полный адрес v-model="addresses.full_address",
base-input.input-info( placeholder="Введите адрес целиком",
v-model:value="addresses.full_address", label="Полный адрес"
placeholder="Введите адрес целиком" )
)
.flex.items-center.justify-center.relative .flex.items-center.justify-center.relative
.line.absolute .line.absolute
span.text-sm.separator.px-2 или span.text-sm.separator.px-2 или
.grid.grid-cols-2.gap-y-6.gap-x-4 .grid.grid-cols-2.gap-y-6.gap-x-4
.flex.flex-col(class="gap-y-1.5") base-input.input-info(
.text-info.text-xxs.font-semibold Город disabled,
base-input.input-info( placeholder="Введите город",
disabled, v-model="addresses.city",
placeholder="Введите город", label=ород"
v-model:value="addresses.city", )
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" base-input.input-info(
) disabled,
.flex.flex-col(class="gap-y-1.5") placeholder="Введите область",
span.text-sm.font-semibold Область v-model="addresses.region",
base-input.input-info( label="Область"
disabled, )
placeholder="Введите область", base-input.input-info(
v-model:value="addresses.region", disabled,
placeholder="Введите улицу",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" v-model="addresses.street",
) label="Введите улицу"
.flex.flex-col(class="gap-y-1.5") )
span.text-sm.font-semibold Улица base-input.input-info(
base-input.input-info( disabled,
disabled, placeholder="Номер дома",
placeholder="Введите улицу", v-model="addresses.house_number",
v-model:value="addresses.street", label="Дом"
)
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" base-input.input-info(
) disabled,
.flex.flex-col(class="gap-y-1.5") placeholder="Номер квартиры",
span.text-sm.font-semibold Дом v-model="addresses.apartment_number",
base-input.input-info( label="Квартира"
disabled, )
placeholder="Номер дома", base-input.input-info(
v-model:value="addresses.house_number", disabled,
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" placeholder="000000",
) v-mask="'######'",
.flex.flex-col(class="gap-y-1.5") v-model="addresses.zip_code",
span.text-sm.font-semibold Квартира label="Индекс"
base-input.input-info( )
disabled,
placeholder="Номер квартиры",
v-model:value="addresses.apartment_number",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
)
.flex.flex-col(class="gap-y-1.5")
span.text-sm.font-semibold Индекс
base-input.input-info(
disabled,
placeholder="000000",
v-mask="'######'",
v-model:value="addresses.zip_code",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
)
.px-4 .px-4
base-button(@click="saveClient" :size="40") base-button(@click="saveClient" :size="40")
span.font-semibold Создать клиента span.font-semibold Создать клиента

View File

@@ -1,35 +1,29 @@
<template lang="pug"> <template lang="pug">
.wrapper-info.flex.flex-col.flex-auto.h-full.gap-y-8.justify-between .wrapper-info.flex.flex-col.flex-auto.h-full.gap-y-8.justify-between
.grid.grid-cols-2.gap-x-4.gap-y-6.px-4 .grid.grid-cols-2.gap-x-4.gap-y-6.px-4
.flex.flex-col(class="gap-y-1.5") base-custom-select.input-info(
span.text-sm Приоритет :items="priorityList",
base-custom-select( placeholder="Приоритет клиента",
:items="priorityList", v-model="basicInfo.priority",
placeholder="Приоритет клиента", label="Приоритет"
v-model="basicInfo.priority" )
) base-input-date.input-info(
.flex.flex-col(class="gap-y-1.5") v-model="basicInfo.birth_date",
span.text-sm Дата рождения label="Дата рождения"
base-input-date.input-info( )
v-model="basicInfo.birth_date", base-input.input-info(
) v-model="phone.username",
.flex.flex-col(class="gap-y-1.5") placeholder="+7 (915) 6449223",
span.text-sm Номер телефона v-mask="'+7 (###) ###-##-##'",
base-input.input-info( label="Номер телефона"
v-model:value="phone.username", )
placeholder="+7 (915) 6449223", base-input.input-info(
v-mask="'+7 (###) ###-##-##'", v-model="email.username",
:width-input="277" placeholder="user@yandex.ru",
) label="Email"
.flex.flex-col(class="gap-y-1.5") )
span.text-sm Email
base-input.input-info(
v-model:value="email.username",
placeholder="user@yandex.ru",
:width-input="277"
)
.flex.flex-col.col-start-1.col-end-3.w-100(class="gap-y-1.5") .flex.flex-col.col-start-1.col-end-3.w-100(class="gap-y-1.5")
span.text-sm Ссылки на соцсети span.text-sm.font-semibold.opacity-40.input-info Ссылки на соцсети
.flex(class="gap-x-1.5" v-for="network in basicInfo.contacts" :key="network.id") .flex(class="gap-x-1.5" v-for="network in basicInfo.contacts" :key="network.id")
base-adding-network( base-adding-network(
:list-adding-networks="networks.settings", :list-adding-networks="networks.settings",
@@ -100,7 +94,6 @@ export default {
background-color: var(--btn-blue-color) background-color: var(--btn-blue-color)
.input-info .input-info
color: var(--font-dark-blue-color) color: var(--font-dark-blue-color)
height: 40px
.obligatory .obligatory
color: var(--font-obligatory-color) color: var(--font-obligatory-color)
.add-network .add-network

View File

@@ -3,59 +3,45 @@
.flex.flex-col.gap-y-6.px-4 .flex.flex-col.gap-y-6.px-4
span.title-info.text-base.font-bold Паспортные данные span.title-info.text-base.font-bold Паспортные данные
.grid.grid-cols-2.gap-x-4.gap-y-6 .grid.grid-cols-2.gap-x-4.gap-y-6
.flex.flex-col(class="gap-y-1.5") base-input.input-info(
span.text-sm Серия и номер v-mask="'#### ######'",
base-input.input-info( v-model="identityDocument.pass.series_number",
v-mask="'#### ######'", placeholder="0000 000000",
v-model:value="identityDocument.pass.series_number", label="Серия и номер"
placeholder="0000 000000", )
:width-input="277" base-input.input-info(
) v-model="identityDocument.pass.issued_by_org",
.flex.flex-col(class="gap-y-1.5") placeholder="Точно как в паспорте",
span.text-sm Кем выдан label="Кем выдан"
base-input.input-info( )
v-model:value="identityDocument.pass.issued_by_org", base-input.input-info(
placeholder="Точно как в паспорте", v-mask="'###-###'",
:width-input="277" v-model="identityDocument.pass.issued_by_org_code",
) placeholder="000000",
.flex.flex-col(class="gap-y-1.5") label="Код подразделения"
span.text-sm Код подразделения )
base-input.input-info( base-input-date.input-info.h-10(
v-mask="'###-###'", v-model="identityDocument.pass.issued_by_date",
v-model:value="identityDocument.pass.issued_by_org_code", placeholder="Дата",
placeholder="000000", label="Дата выдачи"
:width-input="277" )
)
.flex.flex-col(class="gap-y-1.5")
span.text-sm Дата выдачи
base-input-date.input-info.h-10(
v-model="identityDocument.pass.issued_by_date",
placeholder="Дата",
:width-input="277"
)
.flex.flex-col.gap-y-6.px-4 .flex.flex-col.gap-y-6.px-4
span.title-info.text-base.font-bold СНИЛС и ИНН span.title-info.text-base.font-bold СНИЛС и ИНН
.grid.grid-cols-2.gap-x-4.gap-y-6 .grid.grid-cols-2.gap-x-4.gap-y-6
.flex.flex-col(class="gap-y-1.5") base-input.input-info(
span.text-sm Номер СНИЛС disabled,
base-input.input-info( v-mask="'###-###-### ##'",
disabled, v-model="identityDocument.snils.number",
v-mask="'###-###-### ##'", placeholder="000000000 00",
v-model:value="identityDocument.snils.number", label="Номер СНИЛС"
placeholder="000000000 00", )
:width-input="277", base-input.input-info(
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}" disabled,
) v-mask="'############'",
.flex.flex-col(class="gap-y-1.5") v-model="identityDocument.inn.number",
span.text-sm Номер ИНН placeholder="000000000000",
base-input.input-info( label="Номер ИНН"
disabled, )
v-mask="'############'",
v-model:value="identityDocument.inn.number",
placeholder="000000000000",
:width-input="277",
:style="{backgroundColor: 'var(--bg-disable-grey-color)'}"
)
.px-4 .px-4
base-button(@click="saveClient" :size="40") base-button(@click="saveClient" :size="40")
span.font-semibold Создать клиента span.font-semibold Создать клиента

View File

@@ -51,9 +51,6 @@ export default {
MedicalPolicyDocuments, MedicalPolicyDocuments,
BaseStepper, BaseStepper,
}, },
props: {
selectedClientId: String,
},
data() { data() {
return { return {
isBaseData: true, isBaseData: true,

View File

@@ -4,7 +4,7 @@
.font-semibold.text-smm ФИО пациента .font-semibold.text-smm ФИО пациента
base-input( base-input(
:width-input="200", :width-input="200",
v-model:value="patient.full_name" v-model="patient.full_name"
) )
.flex .flex
.flex-col .flex-col
@@ -17,7 +17,7 @@
.flex-col .flex-col
.font-semibold.text-smm Серия и номер .font-semibold.text-smm Серия и номер
base-input( base-input(
v-model:value="patient.seriesAndNumber", v-model="patient.seriesAndNumber",
disabled, disabled,
) )
.flex .flex
@@ -37,7 +37,7 @@
.font-semibold.text-smm ФИО Заказчика .font-semibold.text-smm ФИО Заказчика
base-input( base-input(
:width-input="200", :width-input="200",
v-model:value="patient.full_name" v-model="patient.full_name"
) )
.flex .flex
.flex-col .flex-col
@@ -50,7 +50,7 @@
.flex-col .flex-col
.font-semibold.text-smm Серия и номер .font-semibold.text-smm Серия и номер
base-input( base-input(
v-model:value="patient.seriesAndNumber", v-model="patient.seriesAndNumber",
disabled, disabled,
) )
.flex .flex
@@ -80,9 +80,15 @@ export default {
return { return {
patient: { patient: {
full_name: "", full_name: "",
doc_type: "", doc_type: {
id: null,
label: "",
},
seriesAndNumber: "2354 125423", seriesAndNumber: "2354 125423",
phone: {}, phone: {
id: null,
label: "",
},
}, },
}; };
}, },

View File

@@ -15,21 +15,21 @@
.input-date.flex.h-10.justify-center .input-date.flex.h-10.justify-center
base-input-date( base-input-date(
:width-input="200", :width-input="200",
v-model:value="signedDate" v-model="signedDate"
) )
.flex-col .flex-col
.font-semibold.text-smm Начало оказания услуг .font-semibold.text-smm Начало оказания услуг
.input-date.flex.h-10.justify-center .input-date.flex.h-10.justify-center
base-input-date( base-input-date(
:width-input="200", :width-input="200",
v-model:value="startDate" v-model="startDate"
) )
.flex-col .flex-col
.font-semibold.text-smm Окончание оказания услуг .font-semibold.text-smm Окончание оказания услуг
.input-date.flex.h-10.justify-center .input-date.flex.h-10.justify-center
base-input-date( base-input-date(
:width-input="200", :width-input="200",
v-model:value="endDate" v-model="endDate"
) )
.flex-col.w-full.my-6 .flex-col.w-full.my-6

View File

@@ -1,5 +1,5 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col.gap-y-6.justify-between(style="height: 500px") .flex.flex-col.gap-y-6.justify-between
.flex.flex-col.gap-y-6 .flex.flex-col.gap-y-6
span.font-bold.text-xl Договор span.font-bold.text-xl Договор
.flex.self-center .flex.self-center

View File

@@ -3,7 +3,7 @@
.corner .corner
.wrap.flex.flex-col.p-4.gap-y-4 .wrap.flex.flex-col.p-4.gap-y-4
.flex.flex-col.gap-y-1 .flex.flex-col.gap-y-1
base-input(:with-icon="true" v-model:value="newAdditionalData.header" icon-position="right" :max-length="140" placeholder="Заголовок") base-input(:with-icon="true" v-model="newAdditionalData.header" icon-position="right" :max-length="140" placeholder="Заголовок")
span.counter {{`${newAdditionalData.header.length}/140`}} span.counter {{`${newAdditionalData.header.length}/140`}}
.description.flex.px-4.py-3 .description.flex.px-4.py-3
textarea.w-full.h-full.outline-0.resize-none(:value="newAdditionalData.value" @input="$emit('update:newAdditionalData.value', $event.target.value)" placeholder="Описание" style="py-10") textarea.w-full.h-full.outline-0.resize-none(:value="newAdditionalData.value" @input="$emit('update:newAdditionalData.value', $event.target.value)" placeholder="Описание" style="py-10")

View File

@@ -1,7 +1,7 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col.gap-y-3 .flex.flex-col.gap-y-3
.flex.flex-col.gap-y-3.relative .flex.flex-col.gap-y-3.relative
base-input.text-smm(placeholder="Заголовок", v-model:value="title", :maxLength="40") base-input.text-smm(placeholder="Заголовок", v-model="title", :maxLength="40")
.text.flex.absolute.text-xsx.right-7.top-3 {{`${changeValue}/40`}} .text.flex.absolute.text-xsx.right-7.top-3 {{`${changeValue}/40`}}
.input-wrapper.flex.gap-x-2.px-4.box-border.w-max-fit.text-smm(class="py-2.5") .input-wrapper.flex.gap-x-2.px-4.box-border.w-max-fit.text-smm(class="py-2.5")
textarea.place-input.w-full.outline-0.not-italic.resize-none( textarea.place-input.w-full.outline-0.not-italic.resize-none(

View File

@@ -16,7 +16,7 @@
.flex.flex-col(class="gap-y-1.5") .flex.flex-col(class="gap-y-1.5")
.counter.font-semibold.text-smm ФИО .counter.font-semibold.text-smm ФИО
base-input( base-input(
v-model:value="patient", v-model="patient",
placeholder="Введите название для пакета документов" placeholder="Введите название для пакета документов"
) )
span.counter span.counter

View File

@@ -1,6 +1,6 @@
<template lang="pug"> <template lang="pug">
.flex.box-border.justify-between.items-center( .flex.box-border.justify-between.items-center(
:style="{ minWidth : width + 'px', maxWidth: width + 'px', padding: generateWidth ? '0px 16px' : '0px 10px' }", :style="{ width : width + 'px', padding: generateWidth ? '0px 16px' : '0px 10px' }",
:class="{width:generateWidth}" :class="{width:generateWidth}"
) )
span.text-sm(v-if="title") {{title}} span.text-sm(v-if="title") {{title}}

View File

@@ -1,6 +1,6 @@
<template lang="pug"> <template lang="pug">
.flex.box-border.px-4.items-center.w-full.text-sm( .flex.box-border.px-4.items-center.w-full.text-sm(
:style="{ minWidth : width + 'px', maxWidth : width + 'px' }" :style="{ width : width + 'px'}"
) )
span(v-if="!isOpenChange") {{ birthday }} span(v-if="!isOpenChange") {{ birthday }}
base-input-date.input.h-10( base-input-date.input.h-10(

View File

@@ -7,13 +7,13 @@
@mouseover="changeHover", @mouseover="changeHover",
@mouseleave="changeHover" @mouseleave="changeHover"
) {{maxValue}} ) {{maxValue}}
base-input( .email
v-if="isOpenChange", base-input(
:width-input="234", v-if="isOpenChange",
@click.stop, @click.stop,
v-model:value="value.email.username", v-model="value.email.username",
:placeholder="value.email.username" :placeholder="value.email.username"
) )
</template> </template>
<script> <script>
@@ -45,3 +45,8 @@ export default {
}, },
}; };
</script> </script>
<style lang="sass" scoped>
.email
width: 234px
</style>

View File

@@ -1,19 +1,17 @@
<template lang="pug"> <template lang="pug">
.flex.box-border.px-4.items-center.gap-x-3.w-full.text-sm( .flex.box-border.px-4.items-center.gap-x-3.w-full.text-sm(
:style="{ minWidth : width + 'px', maxWidth : width + 'px' }", :style="{ width : width + 'px'}",
) )
base-avatar(:size="36", :color="avatarColor", v-if="!photo") {{avatar}} base-avatar(:size="36", :color="avatarColor", v-if="!photo") {{avatar}}
base-avatar(:size="36", v-else) base-avatar(:size="36", v-else)
img.h-full.object-cover(:src="url + photo") img.h-full.object-cover(:src="url + photo")
span.font-semibold(v-if="!isOpenChange") {{value.fullName}} span.font-semibold(v-if="!isOpenChange") {{value.fullName}}
base-input( .name(v-if="isOpenChange")
v-if="isOpenChange", base-input(
@click.stop, @click.stop,
type="text", v-model="value.fullName",
v-model:value="value.fullName", placeholder="Фамилия Имя Отчество"
:width-input="300", )
placeholder="Фамилия Имя Отчество"
)
</template> </template>
<script> <script>
@@ -41,4 +39,6 @@ export default {
border-radius: 50% border-radius: 50%
background-color: var(--font-grey-color) background-color: var(--font-grey-color)
color: var(--font-dark-blue-color) color: var(--font-dark-blue-color)
.name
width: 300px
</style> </style>

View File

@@ -1,5 +1,5 @@
<template lang="pug"> <template lang="pug">
.network-cell.flex.box-border.px-4.items-center.w-full(:style="{ minWidth: width + 'px', maxWidth: width + 'px' }") .network-cell.flex.box-border.px-4.items-center.w-full(:style="{ width: width + 'px'}")
.flex.gap-x-1 .flex.gap-x-1
.text-xl.icon.relative( .text-xl.icon.relative(
v-for="network in getNetworks", v-for="network in getNetworks",

View File

@@ -1,16 +1,15 @@
<template lang="pug"> <template lang="pug">
.flex.box-border.px-4.items-center.w-full.text-sm(:style="{ minWidth : width + 'px', maxWidth : width + 'px' }") .flex.box-border.px-4.items-center.w-full.text-sm(:style="{ width : width + 'px' }")
span.text-sm( span.text-sm(
v-if="!isOpenChange" v-if="!isOpenChange"
) {{value.phone.username.replace(/\+7(\d{3})(\d{3})(\d{2})(\d{2})/, '+7 ($1) $2-$3-$4')}} ) {{value.phone.username.replace(/\+7(\d{3})(\d{3})(\d{2})(\d{2})/, '+7 ($1) $2-$3-$4')}}
base-input( .phone(v-if="isOpenChange")
v-if="isOpenChange", base-input(
@click.stop, @click.stop,
:width-input="154", v-model="value.phone.username",
v-model:value="value.phone.username", :placeholder="value.phone.username",
:placeholder="value.phone.username", v-mask="'+7 (###) ###-##-##'"
v-mask="'+7 (###) ###-##-##'" )
)
</template> </template>
<script> <script>
@@ -27,3 +26,8 @@ export default {
directives: { mask }, directives: { mask },
}; };
</script> </script>
<style lang="sass" scoped>
.phone
width: 158px
</style>

View File

@@ -1,10 +1,15 @@
<template lang="pug"> <template lang="pug">
.flex.box-border.px-4.items-center.w-full.gap-x-2(:style="{ minWidth : width + 'px', maxWidth : width + 'px' }") .flex.box-border.px-4.items-center.w-full.gap-x-2(:style="{ width : width + 'px'}")
.flex.gap-x-2.items-center(v-if="!isOpenChange") .flex.gap-x-2.items-center(v-if="!isOpenChange")
.dot.w-2.h-2(:style="{ backgroundColor: prioritySettings.settings.find((el) => el.text == value.priority).color }") .dot.w-2.h-2(:style="{ backgroundColor: prioritySettings.settings.find((el) => el.text == value.priority).color }")
span.text-sm(:style="{ color: prioritySettings.settings.find((el) => el.text == value.priority).color }") {{value.priority}} span.text-sm(:style="{ color: prioritySettings.settings.find((el) => el.text == value.priority).color }") {{value.priority}}
.flex.gap-x-2.text-sm(class="w-[164px]") .flex.gap-x-2.text-sm(class="w-[164px]")
base-select(v-if="isOpenChange", @click.stop :items="getPriorityList", v-model="value.priority") base-select(
v-if="isOpenChange",
@click.stop :items="getPriorityList",
v-model="value.priority",
textStyle="text-sm"
)
</template> </template>
<script> <script>

View File

@@ -53,7 +53,7 @@ export const column = [
name: "phone", name: "phone",
title: "Телефон", title: "Телефон",
iconHead: false, iconHead: false,
width: 170, width: 200,
}, },
{ {
name: "email", name: "email",

View File

@@ -9,19 +9,17 @@
.text-under.flex.not-italic.font-medium.text-base( .text-under.flex.not-italic.font-medium.text-base(
:style="{color: this.underTextColor}") Войдите в аккаунт, чтобы начать пользоваться сервисом «Астра». :style="{color: this.underTextColor}") Войдите в аккаунт, чтобы начать пользоваться сервисом «Астра».
.flex.flex-col.gap-y-5 .flex.flex-col.gap-y-5
.flex.flex-col.gap-y-6px base-input.font-medium(
.flex.non-italic.font-semibold.text-xss Логин :borderError="wrongData",
base-input.h-12.font-medium( v-model="user.username",
:style="{borderColor: wrongData ? this.redColor : ''}", placeholder="Введите ваш логин",
v-model:value="user.username", label="Логин"
type="text", )
placeholder="Введите ваш логин"
)
.flex.flex-col.gap-y-6px.relative .flex.flex-col.gap-y-6px.relative
.flex.non-italic.font-semibold.text-xss Пароль .flex.non-italic.font-semibold.text-sm.opacity-40 Пароль
base-input.h-12( base-input(
:style="{borderColor: wrongData ? this.redColor : ''}", :borderError="wrongData",
v-model:value="user.password", v-model="user.password",
:type="changeType", :type="changeType",
placeholder="Введите ваш пароль" placeholder="Введите ваш пароль"
) )

View File

@@ -1,10 +1,96 @@
<template lang="pug"> <template lang="pug">
.wrapper.flex.w-full.relative.mx-2 .wrapper.flex.w-full.relative.mx-2
.wrapper-medical.relative.flex.flex-col.px-6.py-6.h-full.w-full .wrapper-medical.relative.flex.flex-col.px-6.py-6.h-full.w-full
base-detail-info(:title="configData.identity_document.title" :height="configData.identity_document.height")
.flex.flex-col.gap-30px
base-detail-info(:title="configData.registration_address.title" :height="configData.registration_address.height")
base-detail-info(:title="configData.temporary_address.title" :height="configData.temporary_address.height")
.flex.flex-col.gap-2
base-detail-info(:title="configData.snils.title" :height="configData.snils.height")
base-detail-info(:title="configData.policy_number_series.title" :height="configData.policy_number_series.height")
base-detail-info(:title="configData.policy_organization.title" :height="configData.policy_organization.height")
.flex.flex-col.gap-4
base-detail-info(:title="configData.additional.title" :height="configData.additional.height")
base-detail-info(:title="configData.agreement_form.title" :height="configData.agreement_form.height")
</template> </template>
<script> <script>
export default { name: "MedicalCardWrapper" }; import BaseDetailInfo from "@/components/base/BaseDetailInfo.vue";
import { medicalDetailConfig } from "@/pages/medicalCard/utils/medicalConfig";
import { fetchWrapper } from "@/shared/fetchWrapper";
import BaseInput from "@/components/base/BaseInput.vue";
import ClientDetailInput from "@/pages/clients/components/ClientDetailInput.vue";
export default {
name: "MedicalCardWrapper",
components: { ClientDetailInput, BaseInput, BaseDetailInfo },
data() {
return {
configData: medicalDetailConfig,
medicalDataInit: {},
};
},
methods: {
saveDataMedical(data) {
const confidant = data ? data["confidant"] : undefined;
const pass = data
? data?.person?.identity_document?.find((el) => el.kind === "PASSPORT")
: null;
this.medicalDataInit = {
...data,
identity_document: {
...pass,
number_series: `${pass.series} ${pass.number}`,
},
registration_address: {
registration_address: data?.person?.address?.find(
(el) => !el["registration_flg"]
)?.join_adress,
},
temporary_address: {
temporary_address: data?.person?.address?.find(
(el) => !el["temporary_registration_flg"]
)?.join_adress,
},
snils: {
...data?.person["insurance_number"],
},
policy: {
...data?.person["insurance_policy"][0],
},
policy_organization: {
...data?.person["insurance_policy"][0],
},
additional: {
name_confidant: confidant
? `${confidant?.last_name} ${confidant?.last_name} ${confidant?.patronymic}`
: null,
phone_confidant: confidant?.contacts?.find(
(el) => el?.kind === "PHONE"
),
},
benefit_code: {
benefit_code: data?.benefit_code,
},
agreement_form: {
agreement: data?.agreement,
agreement_date: null,
},
};
},
async fetchDataMedicalCard() {
await fetchWrapper
.get(
`medical_card/medical_history/${localStorage.getItem(
"medicalId"
)}/detail/`
)
.then((res) => this.saveDataMedical(res));
},
},
mounted() {
this.fetchDataMedicalCard();
},
};
</script> </script>
<style lang="sass" scoped> <style lang="sass" scoped>
@@ -15,4 +101,17 @@ export default { name: "MedicalCardWrapper" };
.wrapper-medical .wrapper-medical
background-color: var(--default-white) background-color: var(--default-white)
height: calc(100vh - 64px) height: calc(100vh - 64px)
display: grid
grid-template-columns: 280px 292px 180px 360px 463px
gap: 16px
overflow: auto
&::-webkit-scrollbar
height: 4px
width: 4px
&::-webkit-scrollbar-track
background-color: rgba(211, 212, 220, 0.5)
border-radius: 8px
&::-webkit-scrollbar-thumb
border-radius: 8px
background-color: var(--btn-blue-color)
</style> </style>

View File

@@ -0,0 +1,128 @@
export const medicalDetailConfig = {
identity_document: {
height: 366,
title: "Паспортные данные",
fields: [
{
label: "number_series",
title: "Серия и номер",
type: "input",
copy: true,
},
{
label: "issued_by_org",
title: "Выдан",
type: "input",
},
{
label: "issued_by_org_code",
title: "Код подразделения",
type: "input",
},
{
label: "issued_by_date",
title: "Дата выдачи",
type: "data",
},
],
},
registration_address: {
height: 130,
title: "Адреес регистрации",
fields: [
{
label: "registration_address",
title: "Полный адрес",
type: "input",
},
],
},
temporary_address: {
height: 130,
title: "Адреес проживания",
fields: [
{
label: "temporary_address",
title: "Полный адрес",
type: "input",
},
],
},
snils: {
height: 108,
title: "СНИЛС",
fields: [
{
label: "insurance_number",
title: "Номер",
type: "input",
copy: true,
},
],
},
policy_number_series: {
height: 170,
title: "ПОЛИС",
fields: [
{
label: "series",
title: "Серия",
type: "input",
},
{
label: "number",
title: "Номер",
type: "input",
},
],
},
policy_organization: {
height: 111,
title: "Страховая организация",
fields: [
{
label: "organization",
title: "Название",
type: "input",
},
],
},
additional: {
height: 202,
title: "Дополнительная информация",
fields: [
{
label: "name_confidant",
title: "Доверенное лицо",
type: "input",
},
{
label: "phone_confidant",
title: "",
type: "input",
},
{
label: "benefit_code",
title: "Код категории льготы",
type: "input",
},
],
},
agreement_form: {
height: 163,
title:
"Информированное добровольное согласие на виды медицинских вмешательств, включенные в Перечень определенных видов медицинских вмешательств:",
fields: [
{
label: "agreement",
title: "Получено",
type: "check_box",
},
{
label: "agreement_date",
title: "Дата",
type: "date",
},
],
},
};

View File

@@ -7,28 +7,12 @@
.flex.pt-2 .flex.pt-2
.icon-cancel.close-icon.tesxt-xs.cursor-pointer(@click="closeForm") .icon-cancel.close-icon.tesxt-xs.cursor-pointer(@click="closeForm")
.flex.flex-col.gap-y-6 .flex.flex-col.gap-y-6
.flex.flex-col.gap-y-2 base-input-date(label="Дата")
span.text-smm.font-semibold Дата base-custom-select(v-model="currentEmployee", label="Текущий сотрудник")
base-input-date base-custom-select(v-model="currentEmployee", label="Замена сотрудника")
.flex.flex-col(class="gap-y-1.5")
span.text-smm.font-semibold Текущий сотрудник
base-custom-select.h-10(v-model="currentEmployee")
.flex.flex-col(class="gap-y-1.5")
span.text-smm.font-semibold Замена сотрудника
base-custom-select.h-10(v-model="currentEmployee")
.time-wrapper.flex.justify-center .time-wrapper.flex.justify-center
.flex.flex-col.py-14px.px-4.gap-y-14px.items-center base-input-time.px-4.item-input.text-base(label="Начало", v-model="timesShift.start_time")
.text-xxs.opacity-40.font-bold Начало base-input-time.px-4.item-input.text-base(label="Конец", v-model="timesShift.end_time")
base-input-time.item-input.text-base.select(
:width-input="40",
v-model:value="timesShift.start_time"
)
.flex.flex-col.py-14px.px-4.gap-y-14px.items-center
.text-xxs.opacity-40.font-bold Конец
base-input-time.item-input.text-base.select(
:width-input="40",
v-model:value="timesShift.end_time"
)
.flex.justify-center .flex.justify-center
base-button.font-semibold(:size="40") Сохранить base-button.font-semibold(:size="40") Сохранить
</template> </template>
@@ -59,9 +43,4 @@ export default {
box-shadow: var(--default-shadow) box-shadow: var(--default-shadow)
border-radius: 4px border-radius: 4px
z-index: 5 z-index: 5
.select
height: 40px
border: 1.5px solid var(--border-light-grey-color)
border-radius: 4px
</style> </style>

View File

@@ -2,12 +2,8 @@
.wrapper-bar.flex.flex-col.gap-y-4 .wrapper-bar.flex.flex-col.gap-y-4
.flex.px-5.py-5.w-full.justify-around.gap-x-4 .flex.px-5.py-5.w-full.justify-around.gap-x-4
.time-wrapper.flex.justify-between .time-wrapper.flex.justify-between
.flex.flex-col.items-center.py-14px.px-4.gap-y-14px base-input-time.py-14px.px-4(v-model="times.start_time", label="Начало")
.text.text-smm Начало base-input-time.py-14px.px-4(v-model="times.end_time", label="Конец")
base-input-time.select(v-model:value="times.start_time")
.flex.flex-col.items-center.py-14px.px-4.gap-y-14px
.text.span.text-smm Конец
base-input-time.select(v-model:value="times.end_time")
.status-wrapper.flex.flex-col .status-wrapper.flex.flex-col
.flex.justify-center.items-center.h-10 .flex.justify-center.items-center.h-10
span.font-semibold Статусы span.font-semibold Статусы
@@ -138,9 +134,4 @@ export default {
.graph-template .graph-template
width: 218px width: 218px
height: 40px height: 40px
.select
height: 40px
border: 1.5px solid var(--border-light-grey-color)
border-radius: 4px
</style> </style>

View File

@@ -28,6 +28,7 @@ module.exports = {
gap: { gap: {
"6px": "6px", "6px": "6px",
"11px": "11px", "11px": "11px",
"30px": "30px",
43: "43px", 43: "43px",
}, },
spacing: { spacing: {