Merge branch 'UC-204' into 'master'

Resolve UC-204

See merge request andrusyakka/urban-couscous!272
This commit is contained in:
Vasiliy Gavrilin
2023-02-22 13:17:40 +00:00
9 changed files with 153 additions and 322 deletions

View File

@@ -1,22 +1,22 @@
<template lang="pug"> <template lang="pug">
.header-inputs-wrapper.flex.items-center.font-medium.text-base(:class="{ open: isOpen }") .header-inputs-wrapper.flex.items-center.font-medium.text-base
.select-container(@click="changeState", v-click-outside="closeOptions") q-select.w-40.pl-3.pr-2.selected(
.select-wrapper.flex.items-center.cursor-pointer.mx-4.my-2 v-model="selectedFilter",
.icon-wrapper.icon-search.flex.text-lg.justify-center.items-center :options="filters",
span.custom-input.select-input.inline-block.box-border.align-middle.pl-2.pr-1 {{ selectedFilter }} borderless,
.arrow.icon-down-arrow.text-xsm.mt-px.flex.justify-center.items-center dense
.options-wrapper.flex.flex-col.box-border.p-4.mt-1(v-if="isOpen") )
.option-list.cursor-pointer.flex.flex-row.mb-4( template(v-slot:selected)
v-for="filter in filters", span(:style="{color: 'var(--btn-blue-color)'}") {{ selectedFilter }}
:key="filter", @click="selectFilter(filter)" template(v-slot:prepend)
q-icon.pr-1(
name="app:icon-search",
size="18px",
:style="{color: 'var(--btn-blue-color)', opacity: '0.7'}"
) )
.icon-wrapper.mr-2.flex.justify-center
.icon-ok.text-xs.flex.justify-center.items-center(v-if="filter === selectedFilter")
.flex.items-center {{ filter }}
q-input.px-4( q-input.px-4(
type="text", type="text",
placeholder="Искать ...", placeholder="Искать ...",
:input-style="{color: 'var(--btn-blue-color)'}",
borderless, borderless,
square square
) )
@@ -24,10 +24,11 @@
<script> <script>
import BaseInput from "@/components/base/BaseInput"; import BaseInput from "@/components/base/BaseInput";
import BaseSelect from "@/components/base/BaseSelect";
export default { export default {
name: "HeaderInputs", name: "HeaderInputs",
components: { BaseInput }, components: { BaseInput, BaseSelect },
data() { data() {
return { return {
selectedFilter: "Календарь", selectedFilter: "Календарь",
@@ -36,80 +37,20 @@ export default {
}; };
}, },
methods: { methods: {
changeState() {
this.isOpen = !this.isOpen;
},
selectFilter(filter) { selectFilter(filter) {
this.selectedFilter = filter; this.selectedFilter = filter;
}, },
closeOptions() {
this.isOpen = false;
},
}, },
}; };
</script> </script>
<style lang="sass" scoped> <style lang="sass" scoped>
.open
.arrow
transform: rotate(180deg)
.header-inputs-wrapper .header-inputs-wrapper
height: 40px height: 40px
background-color: var(--default-white) background-color: var(--default-white)
border-radius: 4px border-radius: 4px
border: 1px solid var(--border-light-grey-color) border: 1px solid var(--border-light-grey-color)
.select-container .selected
border-right: 1px solid var(--border-light-grey-color) border-right: 1px solid var(--border-light-grey-color)
.icon-wrapper
width: 24px
height: 24px
.custom-input
border: none
outline: none
background-color: transparent
color: var(--btn-blue-color)
height: 100%
.select-wrapper
position: relative
z-index: 2
.select-input
width: 100px
.options-wrapper
width: 172px
background-color: var(--default-white)
color: var(--font-dark-blue-color)
border-radius: 4px
position: absolute
box-shadow: var(--default-shadow)
.search-input
&::placeholder
color: var(--font-grey-color)
.icon-search
color: var(--btn-blue-color)
opacity: 0.5
.option-list
&:last-child
margin: 0
&:hover
color: var(--btn-blue-color)
.arrow
color: var(--btn-blue-color)
.icon-down-arrow
width: 16px
height: 16px
.input-height
height: 38px
</style> </style>

View File

@@ -3,9 +3,12 @@
q-pagination( q-pagination(
v-model="value", v-model="value",
:max="max", :max="max",
:min="min",
:max-pages="maxPages", :max-pages="maxPages",
:size="`${size}px`",
:boundary-numbers="boundaryNumbers", :boundary-numbers="boundaryNumbers",
:direction-links="directionLinks" :direction-links="directionLinks",
@click="chCurrentPage"
) )
</template> </template>
@@ -18,6 +21,10 @@ export default {
default: 1, default: 1,
type: Number, type: Number,
}, },
min: {
default: 1,
type: Number,
},
maxPages: { maxPages: {
default: 6, default: 6,
type: Number, type: Number,
@@ -30,6 +37,12 @@ export default {
default: false, default: false,
type: Boolean, type: Boolean,
}, },
size: Number,
},
methods: {
chCurrentPage() {
this.$emit("st-current-page", this.value);
},
}, },
}; };
</script> </script>

View File

@@ -53,6 +53,14 @@ export default {
type: String, type: String,
default: "menu", default: "menu",
}, },
icon: {
type: String,
default: null,
},
size: {
type: Number,
default: 18,
},
disable: Boolean, disable: Boolean,
label: String, label: String,
}, },

View File

@@ -0,0 +1,79 @@
<template lang="pug">
q-stepper(
v-model="currentStep",
:color="color",
:flat="flat",
class="font-input",
animated
)
q-step.overflow-hidden(
v-for="step in steps",
:name="step.id",
:title="step.value",
:key="step.id",
:prefix="step.id + 1"
:done="currentStep > step.id"
)
slot
q-stepper-navigation.flex.justify-between
.flex
q-btn(
@click="prevStep",
v-if="currentStep !== 0",
outline,
no-caps,
label="Назад",
color="primary",
padding="8px 24px"
)
.flex
q-btn(
@click="nextStep",
v-if="currentStep < steps.length-1",
no-caps,
label="Далее",
color="primary",
padding="8px 24px"
)
q-btn(
@click="finish",
v-if="currentStep === steps.length-1",
no-caps,
:label="finishLabel",
color="primary",
padding="8px 24px"
)
</template>
<script>
export default {
name: "BaseStepperQuasar",
props: {
name: Number,
steps: Array,
currentStep: {
type: Number,
default: 0,
},
nextStep: Function,
prevStep: Function,
flat: {
type: Boolean,
default: false,
},
color: {
type: String,
default: "primary",
},
finishLabel: {
type: String,
default: "Завершить",
},
},
};
</script>
<style lang="sass" scoped>
.font-input
font-feature-settings: 'pnum' on, 'lnum' on
</style>

View File

@@ -1,147 +0,0 @@
<template lang="pug">
.flex.items-center.gap-2.text-base.w-full.justify-center
button.item.default-theme.flex.items-center.justify-center.pr-1(
@click="previousHandler",
:disabled="disabledPreviousButton"
)
.icon-down-arrow.arrow-left
button.item.flex.items-center.justify-center.transition.duration-100.ease-linear(
v-for="page, index in pageCount",
:key="index",
:id="page",
:class="currentPageStyle(page)",
:disabled="disabledMissingPages(page)"
@click="changeCurrentPage"
) {{ page }}
button.item.default-theme.flex.items-center.justify-center.pl-1(
@click="nextHandler",
:disabled="disabledNextButton"
)
.icon-down-arrow.arrow-right
</template>
<script>
export default {
name: "ClientTablePagination",
props: {
length: Number,
currentPage: Number,
totalVisible: {
type: Number,
default: 7,
},
paginationInfo: Object,
},
computed: {
pageCount() {
let countArray = [];
for (let i = 1; i <= this.paginationInfo.length; i++) {
countArray.push(i);
}
if (this.paginationInfo.length <= this.totalVisible) return countArray;
let incompleteCountArray = [];
if (
this.paginationInfo.currentPage <= 2 ||
this.paginationInfo.currentPage >=
countArray[this.paginationInfo.length - 2]
) {
countArray.forEach((elem, index, arr) => {
if (index <= 2 || index >= arr.length - 3)
incompleteCountArray.push(elem);
else if (!incompleteCountArray.includes("..."))
incompleteCountArray.push("...");
});
return incompleteCountArray;
}
if (this.paginationInfo.currentPage <= 4) {
countArray.forEach((elem, index, arr) => {
if (index <= 4 || index === arr.length - 1)
incompleteCountArray.push(elem);
else if (!incompleteCountArray.includes("..."))
incompleteCountArray.push("...");
});
return incompleteCountArray;
}
if (
this.paginationInfo.currentPage >=
countArray[this.paginationInfo.length - 4]
) {
countArray.forEach((elem, index, arr) => {
if (index === 0 || index >= arr.length - 5)
incompleteCountArray.push(elem);
else if (!incompleteCountArray.includes("..."))
incompleteCountArray.push("...");
});
return incompleteCountArray;
}
countArray.forEach((elem, index, arr) => {
if (index === 0) incompleteCountArray.push(elem, "...");
if (
index >= this.paginationInfo.currentPage - 2 &&
index <= this.paginationInfo.currentPage
)
incompleteCountArray.push(elem);
if (index === arr.length - 1) incompleteCountArray.push("...", elem);
});
return incompleteCountArray;
},
disabledNextButton() {
return this.paginationInfo.currentPage === this.paginationInfo.length;
},
disabledPreviousButton() {
return this.paginationInfo.currentPage === 1;
},
},
methods: {
currentPageStyle(number) {
if (number === this.paginationInfo.currentPage)
return {
"active-theme": true,
};
return {
"default-theme": true,
};
},
previousHandler() {
if (this.paginationInfo.currentPage !== 1) this.$emit("previous-page");
},
nextHandler() {
if (this.paginationInfo.currentPage !== this.paginationInfo.length)
this.$emit("next-page");
},
changeCurrentPage(e) {
this.$emit("set-current-page", parseInt(e.target.id));
},
disabledMissingPages(page) {
return isNaN(parseInt(page));
},
},
};
</script>
<style lang="sass" scoped>
.item
width: 32px
height: 32px
border-radius: 4px
&:disabled
opacity: 0.5
.default-theme
background-color: var(--default-white)
color: var(--font-black-color)
box-shadow: var(--pagination-item-shadow)
.active-theme
background-color: var(--btn-blue-color)
color: var(--default-white)
box-shadow: var(--pagination-current-item-shadow)
.arrow-left
transform: rotate(90deg)
color: var(--font-grey-color)
.arrow-right
transform: rotate(270deg)
color: var(--font-grey-color)
</style>

View File

@@ -36,18 +36,14 @@
:created-client-name="createdClientName", :created-client-name="createdClientName",
@recover-client="clearDeletedRowId", @recover-client="clearDeletedRowId",
) )
client-table-pagination( base-pagination(
v-if="paginationInfo.length > 1" v-if="paginationInfo.length > 1"
:pagination-info="paginationInfo" :max="paginationInfo.length",
@previous-page="switchPreviousPage", :value="currentTablePage",
@next-page="switchNextPage", :size="18"
@set-current-page="changeCurrentTablePage" @st-current-page="changeCurrentTablePage",
directionLinks
) )
//- base-pagination(
//- :max="paginationInfo.length",
//- :value="currentTablePage",
//- directionLinks
//- )
base-modal( base-modal(
v-model="showModal", v-model="showModal",
:title="titleModal" :title="titleModal"
@@ -68,12 +64,13 @@ import ClientsTableHeader from "@/pages/clients/components/ClientsTableHeader";
import ClientsTableHat from "@/pages/clients/components/ClientsTableHat"; import ClientsTableHat from "@/pages/clients/components/ClientsTableHat";
import ClientsTableRow from "@/pages/clients/components/ClientsTableRow"; import ClientsTableRow from "@/pages/clients/components/ClientsTableRow";
import ClientsTableCheckbox from "@/pages/clients/components/ClientsTableCheckbox"; import ClientsTableCheckbox from "@/pages/clients/components/ClientsTableCheckbox";
import ClientTablePagination from "./ClientTablePagination.vue"; import BaseClientFormCreate from "@/components/base/BaseClientFormCreate";
import BaseModal from "@/components/base/BaseModal.vue"; import BaseModal from "@/components/base/BaseModal.vue";
import ClientTableModal from "./ClientTableModal.vue"; import ClientTableModal from "./ClientTableModal.vue";
import FormCreateMedicalCard from "@/pages/clients/components/FormCreateMedicalCard"; import FormCreateMedicalCard from "@/pages/clients/components/FormCreateMedicalCard";
import BaseLoader from "@/components/Loader/BaseLoader.vue"; import BaseLoader from "@/components/Loader/BaseLoader.vue";
import BasePagination from "@/components/base/BasePagination.vue"; import BasePagination from "@/components/base/BasePagination.vue";
export default { export default {
name: "ClientsTable", name: "ClientsTable",
components: { components: {
@@ -81,7 +78,7 @@ export default {
ClientsTableRow, ClientsTableRow,
ClientsTableHat, ClientsTableHat,
ClientsTableHeader, ClientsTableHeader,
ClientTablePagination, BaseClientFormCreate,
BaseModal, BaseModal,
ClientTableModal, ClientTableModal,
FormCreateMedicalCard, FormCreateMedicalCard,
@@ -250,12 +247,6 @@ export default {
} }
} }
}, },
switchPreviousPage() {
this.currentTablePage -= 1;
},
switchNextPage() {
this.currentTablePage += 1;
},
changeCurrentTablePage(value) { changeCurrentTablePage(value) {
this.currentTablePage = value; this.currentTablePage = value;
}, },

View File

@@ -39,8 +39,7 @@
mask="###-###-### ##", mask="###-###-### ##",
v-model="identityDocument.snils.number", v-model="identityDocument.snils.number",
placeholder="000000000 00", placeholder="000000000 00",
label="Номер СНИЛС", label="Номер СНИЛС"
outlined
) )
base-input( base-input(
disabled, disabled,
@@ -48,8 +47,7 @@
mask="############", mask="############",
v-model="identityDocument.inn.number", v-model="identityDocument.inn.number",
placeholder="000000000000", placeholder="000000000000",
label="Номер ИНН", label="Номер ИНН"
outlined
) )
</template> </template>

View File

@@ -3,43 +3,18 @@
.flex.flex.flex-col.gap-y-6 .flex.flex.flex-col.gap-y-6
span.text-center.font-bold.text-xl Создание медицинской карты стоматологического пациента span.text-center.font-bold.text-xl Создание медицинской карты стоматологического пациента
.flex.self-center .flex.self-center
base-stepper( base-stepper-quasar(
:steps="steps", :steps="steps",
:currentStep="currentStep" :currentStep="currentStep",
) :next-step="nextStep",
component( :prev-step="prevStep",
v-bind:is="currentTabComponent", finishLabel="Создать медицинскую карту",
:client-detail="clientData", flat
)
.flex.justify-between
.flex
q-btn(
@click="prevStep",
v-if="currentStep !== 0",
outline,
no-caps,
label="Назад",
color="primary",
padding="8px 24px"
)
.flex
q-btn(
@click="nextStep",
v-if="currentStep < steps.length-1",
no-caps,
label="Далее",
color="primary",
padding="8px 24px"
)
q-btn(
@click="finish",
v-if="currentStep === steps.length-1",
no-caps,
label="Создать медицинскую карту",
style="width: 272px",
color="primary",
padding="8px 24px"
) )
component(
v-bind:is="currentTabComponent",
:client-detail="clientData"
)
</template> </template>
<script> <script>
@@ -48,8 +23,8 @@ import BaseSelect from "@/components/base/BaseSelect";
import MedicalBaseData from "@/pages/medicalCard/components/MedicalBaseData"; import MedicalBaseData from "@/pages/medicalCard/components/MedicalBaseData";
import MedicalIdentityDocuments from "@/pages/medicalCard/components/MedicalIdentityDocuments"; import MedicalIdentityDocuments from "@/pages/medicalCard/components/MedicalIdentityDocuments";
import MedicalPolicyDocuments from "@/pages/medicalCard/components/MedicalPolicyDocuments"; import MedicalPolicyDocuments from "@/pages/medicalCard/components/MedicalPolicyDocuments";
import BaseStepper from "@/components/base/BaseStepper.vue";
import { fetchWrapper } from "@/shared/fetchWrapper.js"; import { fetchWrapper } from "@/shared/fetchWrapper.js";
import BaseStepperQuasar from "@/components/base/BaseStepperQuasar";
export default { export default {
name: "FormCreateMedicalCard", name: "FormCreateMedicalCard",
@@ -59,7 +34,7 @@ export default {
MedicalBaseData, MedicalBaseData,
MedicalIdentityDocuments, MedicalIdentityDocuments,
MedicalPolicyDocuments, MedicalPolicyDocuments,
BaseStepper, BaseStepperQuasar,
}, },
props: { props: {
selectedClientId: String, selectedClientId: String,

View File

@@ -1,56 +1,29 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col.gap-y-6.justify-between .flex.flex-col.justify-between
.flex.flex-col.gap-y-6 span.font-bold.text-xl Договор
span.font-bold.text-xl Договор base-stepper-quasar(
.flex.self-center :currentStep="currentStep",
base-stepper( :steps="steps",
:steps="steps", :next-step="nextStep",
:currentStep="currentStep" :prev-step="prevStep",
) flat
component(v-bind:is="currentTabComponent") )
.flex.justify-between component(v-bind:is="currentTabComponent")
.flex
q-btn(
@click="prevStep",
v-if="currentStep !== 0",
outline,
no-caps,
label="Назад",
color="primary",
padding="8px 24px"
)
.flex
q-btn(
@click="nextStep",
v-if="currentStep < steps.length-1",
no-caps,
label="Далее",
color="primary",
padding="8px 24px"
)
q-btn(
@click="finish",
v-if="currentStep === steps.length-1",
no-caps,
label="Завершить",
color="primary",
padding="8px 24px"
)
</template> </template>
<script> <script>
import BaseStepper from "@/components/base/BaseStepper";
import AgreementCommon from "./FormsAgreementCreate/AgreementCommon"; import AgreementCommon from "./FormsAgreementCreate/AgreementCommon";
import AgreementPerson from "./FormsAgreementCreate/AgreementPerson"; import AgreementPerson from "./FormsAgreementCreate/AgreementPerson";
import AgreementServices from "./FormsAgreementCreate/AgreementServices"; import AgreementServices from "./FormsAgreementCreate/AgreementServices";
import BaseStepperQuasar from "@/components/base/BaseStepperQuasar";
export default { export default {
name: "StepperCreateAgreement", name: "StepperCreateAgreement",
components: { components: {
BaseStepper,
AgreementCommon, AgreementCommon,
AgreementPerson, AgreementPerson,
AgreementServices, AgreementServices,
BaseStepperQuasar,
}, },
data() { data() {
return { return {