Merge branch 'master' into UC-54
This commit is contained in:
12437
package-lock.json
generated
12437
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -25,9 +25,19 @@
|
|||||||
--font-obligatory-color: #ff0000
|
--font-obligatory-color: #ff0000
|
||||||
--bg-event-box-color: rgba(37, 40, 80, 0.1)
|
--bg-event-box-color: rgba(37, 40, 80, 0.1)
|
||||||
--bg-event-green-color: #24d07d
|
--bg-event-green-color: #24d07d
|
||||||
|
--bg-event-green-color-0: #cdf0e5
|
||||||
|
--bg-event-green-color-1: #92e8be
|
||||||
--bg-event-red-color: #e93131
|
--bg-event-red-color: #e93131
|
||||||
|
--bg-event-red-color-0: #f8c1c1
|
||||||
|
--bg-event-red-color-1: #f49898
|
||||||
--bg-event-yellow-color: #e5e931
|
--bg-event-yellow-color: #e5e931
|
||||||
|
--bg-event-yellow-color-0: #f8f9c2
|
||||||
|
--bg-event-yellow-color-1: #f2f498
|
||||||
--bg-event-blue-color: #3ba3ee
|
--bg-event-blue-color: #3ba3ee
|
||||||
|
--bg-event-blue-color-0: #c5e4fa
|
||||||
|
--bg-event-blue-color-1: #93cdf6
|
||||||
|
--bg-event-default-hover-color: #d9e1f9
|
||||||
|
--border-event-default-color: #b3c3f3
|
||||||
--light-grey-bg-color: #f8f9fa
|
--light-grey-bg-color: #f8f9fa
|
||||||
--btn-green-color: rgba(60, 217, 75, 1)
|
--btn-green-color: rgba(60, 217, 75, 1)
|
||||||
--btn-light-green-color: rgba(60, 217, 75, 0.2)
|
--btn-light-green-color: rgba(60, 217, 75, 0.2)
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.flex.flex-col.w-full.h-full.gap-y-2
|
.flex.flex-col.w-full.h-full.gap-y-2
|
||||||
the-header
|
the-header(
|
||||||
|
:is-open-page-form="isOpenPageForm",
|
||||||
|
@is-open-header-form="changeHeaderFormState"
|
||||||
|
)
|
||||||
.flex.flex-auto
|
.flex.flex-auto
|
||||||
the-sidebar
|
the-sidebar
|
||||||
router-view
|
router-view(
|
||||||
|
:is-open-header-form="isOpenHeaderForm",
|
||||||
|
@is-open-page-form="changePageFormState",
|
||||||
|
)
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -13,5 +19,19 @@ import TheSidebar from "@/components/TheSidebar";
|
|||||||
export default {
|
export default {
|
||||||
name: "LoggedInLayout",
|
name: "LoggedInLayout",
|
||||||
components: { TheHeader, TheSidebar },
|
components: { TheHeader, TheSidebar },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isOpenPageForm: false,
|
||||||
|
isOpenHeaderForm: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changePageFormState(value) {
|
||||||
|
this.isOpenPageForm = value;
|
||||||
|
},
|
||||||
|
changeHeaderFormState(value) {
|
||||||
|
this.isOpenHeaderForm = value;
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.header-wrapper.relative.flex.justify-center.box-border.py-2.pl-4_75px.pr-6
|
.header-wrapper.relative.flex.justify-center.box-border.py-2.pl-4_75px.pr-6
|
||||||
base-client-form-create.right-6(v-if="isOpenCreate", @blure="isOpenCreate=false", :close-form="closeFormCreate")
|
base-client-form-create.right-0.top-16(v-if="isOpenCreate", @blure="isOpenCreate=false", :close-form="closeFormCreate")
|
||||||
.flex.items-center.box-border.cursor-pointer.mr-auto
|
.flex.items-center.box-border.cursor-pointer.mr-auto
|
||||||
img.logo-img.mr-29_25px(src="@/assets/images/logo.svg", alt="Logo")
|
img.logo-img.mr-29_25px(src="@/assets/images/logo.svg", alt="Logo")
|
||||||
header-inputs
|
header-inputs
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
:size="40",
|
:size="40",
|
||||||
right-icon="icon-person",
|
right-icon="icon-person",
|
||||||
:icon-right-size="18",
|
:icon-right-size="18",
|
||||||
@click="isOpenCreate=true"
|
@click="changeFormState"
|
||||||
)
|
)
|
||||||
button.header-buttons.flex.justify-center.items-center.mr-8.p-0(@click="logout")
|
button.header-buttons.flex.justify-center.items-center.mr-8.p-0(@click="logout")
|
||||||
.icon-bell.text-xxl
|
.icon-bell.text-xxl
|
||||||
@@ -34,6 +34,12 @@ import BaseClientFormCreate from "@/components/base/BaseClientFormCreate";
|
|||||||
export default {
|
export default {
|
||||||
name: "TheHeader",
|
name: "TheHeader",
|
||||||
components: { HeaderInputs, BaseAvatar, BaseButton, BaseClientFormCreate },
|
components: { HeaderInputs, BaseAvatar, BaseButton, BaseClientFormCreate },
|
||||||
|
props: {
|
||||||
|
isOpenPageForm: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
avatarSrc: img,
|
avatarSrc: img,
|
||||||
@@ -47,11 +53,16 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
closeFormCreate() {
|
closeFormCreate() {
|
||||||
this.isOpenCreate = false;
|
this.isOpenCreate = false;
|
||||||
|
this.$emit("is-open-header-form", this.isOpenCreate);
|
||||||
},
|
},
|
||||||
logout() {
|
logout() {
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
this.$router.push("/login");
|
this.$router.push("/login");
|
||||||
},
|
},
|
||||||
|
changeFormState() {
|
||||||
|
this.isOpenCreate = !this.isOpenPageForm;
|
||||||
|
this.$emit("is-open-header-form", this.isOpenCreate);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
@width="changeWidth"
|
@width="changeWidth"
|
||||||
:team-data="employeesData"
|
:team-data="employeesData"
|
||||||
:open-form-create="openFormCreateEvent"
|
:open-form-create="openFormCreateEvent"
|
||||||
:event-type="eventType"
|
:event-types="eventTypes"
|
||||||
)
|
)
|
||||||
calendar-schedule(
|
calendar-schedule(
|
||||||
:owners-data="employeesData"
|
:owners-data="employeesData"
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
:sidebar-width="sidebarWidth"
|
:sidebar-width="sidebarWidth"
|
||||||
:close-form-create-event="closeFormCreateEvent"
|
:close-form-create-event="closeFormCreateEvent"
|
||||||
:is-open-form="isOpenForm"
|
:is-open-form="isOpenForm"
|
||||||
|
:event-types="eventTypes"
|
||||||
@previous-date="switchPreviousDate"
|
@previous-date="switchPreviousDate"
|
||||||
@next-date="switchNextDate"
|
@next-date="switchNextDate"
|
||||||
@selected-layout="changeCalendarLayout"
|
@selected-layout="changeCalendarLayout"
|
||||||
@@ -36,6 +37,12 @@ export default {
|
|||||||
CalendarSidebar,
|
CalendarSidebar,
|
||||||
CalendarFormAddEvent,
|
CalendarFormAddEvent,
|
||||||
},
|
},
|
||||||
|
props: {
|
||||||
|
isOpenHeaderForm: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
sidebarWidth: "72px",
|
sidebarWidth: "72px",
|
||||||
@@ -49,7 +56,7 @@ export default {
|
|||||||
employeesData: [],
|
employeesData: [],
|
||||||
isOpenForm: false,
|
isOpenForm: false,
|
||||||
membersData: [],
|
membersData: [],
|
||||||
eventType: [
|
eventTypes: [
|
||||||
{ id: 1, label: "Встреча", color: "var(--bg-event-green-color)" },
|
{ id: 1, label: "Встреча", color: "var(--bg-event-green-color)" },
|
||||||
{ id: 2, label: "Планерка", color: "var(--bg-event-red-color)" },
|
{ id: 2, label: "Планерка", color: "var(--bg-event-red-color)" },
|
||||||
{ id: 3, label: "Интервью", color: "var(--bg-event-yellow-color)" },
|
{ id: 3, label: "Интервью", color: "var(--bg-event-yellow-color)" },
|
||||||
@@ -93,16 +100,21 @@ export default {
|
|||||||
this.sidebarWidth = value;
|
this.sidebarWidth = value;
|
||||||
},
|
},
|
||||||
openFormCreateEvent() {
|
openFormCreateEvent() {
|
||||||
this.isOpenForm = true;
|
this.isOpenForm = !this.isOpenHeaderForm;
|
||||||
|
this.$emit("is-open-page-form", this.isOpenForm);
|
||||||
},
|
},
|
||||||
closeFormCreateEvent() {
|
closeFormCreateEvent() {
|
||||||
this.isOpenForm = false;
|
this.isOpenForm = false;
|
||||||
|
this.$emit("is-open-page-form", this.isOpenForm);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchPersonsData();
|
this.fetchPersonsData();
|
||||||
this.fetchEventsData();
|
this.fetchEventsData();
|
||||||
},
|
},
|
||||||
|
beforeUnmount() {
|
||||||
|
this.closeFormCreateEvent();
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
v-for="event in dayEvents"
|
v-for="event in dayEvents"
|
||||||
:key="event.id"
|
:key="event.id"
|
||||||
:ownerEvent="event"
|
:ownerEvent="event"
|
||||||
|
:event-types="eventTypes"
|
||||||
:style="eventCardPosition(event.start, event.end)"
|
:style="eventCardPosition(event.start, event.end)"
|
||||||
@selected-event="transmitEventData"
|
@selected-event="transmitEventData"
|
||||||
)
|
)
|
||||||
@@ -38,6 +39,7 @@ export default {
|
|||||||
dayEvents: Array,
|
dayEvents: Array,
|
||||||
dayEndTime: Number,
|
dayEndTime: Number,
|
||||||
dayStartTime: Number,
|
dayStartTime: Number,
|
||||||
|
eventTypes: Array,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,20 +1,52 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.wrapper.flex.px-2.my-1.items-start.cursor-pointer(:style="cardHeight", @click="transmitEventData")
|
.wrapper.cursor-pointer.my-1.relative(
|
||||||
.header.flex.justify-between.items-center
|
@click="transmitEventData",
|
||||||
.header-text
|
:style="themeColors",
|
||||||
span.inline-block.align-middle.font-bold.text-base.mr-4 {{ eventTime }}
|
:class="cardTheme"
|
||||||
span.inline-block.align-middle.font-medium.text-base {{ eventMember }}
|
)
|
||||||
|
.card.flex.px-2(
|
||||||
|
:class="{'py-6px flex-col': longCard}",
|
||||||
|
:style="cardHeight"
|
||||||
|
)
|
||||||
|
.header.flex.justify-between.items-center(:class="{'items-start': longCard}")
|
||||||
|
.header-text
|
||||||
|
span.inline-block.align-middle.font-bold.text-base.mr-4 {{ eventTime }}
|
||||||
|
span.inline-block.align-middle.font-medium.text-base {{ eventMember }}
|
||||||
|
.details-count.flex.justify-center.items-center.text-xxs.font-medium(v-if="someDetailsShown") {{ `+${detailsCount}` }}
|
||||||
|
.body.flex.text-xxs.font-medium(v-if="longCard")
|
||||||
|
.col.mr-22px
|
||||||
|
ul
|
||||||
|
li.mt-2(v-for="elem in descriptionColumns.leftColumn" :key="elem") {{ elem }}
|
||||||
|
.col
|
||||||
|
ul
|
||||||
|
li.mt-2(v-for="elem in descriptionColumns.rightColumn" :key="elem") {{ elem }}
|
||||||
|
calendar-event-description-card.right-0(
|
||||||
|
v-if="isActive"
|
||||||
|
:style="descriptionCardPosition"
|
||||||
|
:owner-event="this.ownerEvent"
|
||||||
|
:event-types="this.eventTypes"
|
||||||
|
)
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import CalendarEventDescriptionCard from "./CalendarEventDescriptionCard.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "CalendarEventCard",
|
name: "CalendarEventCard",
|
||||||
|
components: { CalendarEventDescriptionCard },
|
||||||
props: {
|
props: {
|
||||||
ownerEvent: Object,
|
ownerEvent: Object,
|
||||||
|
eventTypes: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
pixelsPerHour: 62,
|
pixelsPerHour: 62,
|
||||||
|
isActive: false,
|
||||||
|
someDetailsShown: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -53,6 +85,103 @@ export default {
|
|||||||
height: `${this.calculateCardHeight - 8}px`,
|
height: `${this.calculateCardHeight - 8}px`,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
cardTheme() {
|
||||||
|
return {
|
||||||
|
"active-theme": this.isActive,
|
||||||
|
"default-theme": !this.isActive,
|
||||||
|
"long-card": this.longCard,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
themeColors() {
|
||||||
|
switch (this.ownerEvent.kind) {
|
||||||
|
case this.eventTypes[0].label:
|
||||||
|
return {
|
||||||
|
"--bg-color": "var(--bg-event-green-color-0)",
|
||||||
|
"--bg-active": this.eventTypes[0].color,
|
||||||
|
"--bg-hover": "var(--bg-event-green-color-1)",
|
||||||
|
"--font-color": "var(--font-black-color)",
|
||||||
|
"--font-active-color": "var(--default-white)",
|
||||||
|
"--count-color": this.eventTypes[0].color,
|
||||||
|
};
|
||||||
|
case this.eventTypes[1].label:
|
||||||
|
return {
|
||||||
|
"--bg-color": "var(--bg-event-red-color-0)",
|
||||||
|
"--bg-active": this.eventTypes[1].color,
|
||||||
|
"--bg-hover": "var(--bg-event-red-color-1)",
|
||||||
|
"--font-color": "var(--font-black-color)",
|
||||||
|
"--font-active-color": "var(--default-white)",
|
||||||
|
"--count-color": this.eventTypes[1].color,
|
||||||
|
};
|
||||||
|
case this.eventTypes[2].label:
|
||||||
|
return {
|
||||||
|
"--bg-color": "var(--bg-event-yellow-color-0)",
|
||||||
|
"--bg-active": this.eventTypes[2].color,
|
||||||
|
"--bg-hover": "var(--bg-event-yellow-color-1)",
|
||||||
|
"--font-color": "var(--font-black-color)",
|
||||||
|
"--font-active-color": "var(--font-black-color)",
|
||||||
|
"--count-color": "var(--font-black-color)",
|
||||||
|
};
|
||||||
|
case this.eventTypes[3].label:
|
||||||
|
return {
|
||||||
|
"--bg-color": "var(--bg-event-blue-color-0)",
|
||||||
|
"--bg-active": this.eventTypes[3].color,
|
||||||
|
"--bg-hover": "var(--bg-event-blue-color-1)",
|
||||||
|
"--font-color": "var(--font-black-color)",
|
||||||
|
"--font-active-color": "var(--default-white)",
|
||||||
|
"--count-color": this.eventTypes[3].color,
|
||||||
|
};
|
||||||
|
default:
|
||||||
|
return {
|
||||||
|
"--bg-color": "var(--default-white)",
|
||||||
|
"--bg-active": "var(--btn-blue-color)",
|
||||||
|
"--bg-hover": "var(--bg-event-default-hover-color)",
|
||||||
|
"--font-color": "var(--font-black-color)",
|
||||||
|
"--font-active-color": "var(--default-white)",
|
||||||
|
"--border-color": "#b3c3f3",
|
||||||
|
"--border-active-color": "var(--btn-blue-color)",
|
||||||
|
"--count-color": "var(--btn-blue-color)",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
description() {
|
||||||
|
return this.ownerEvent.description
|
||||||
|
? this.ownerEvent.description.split(", ")
|
||||||
|
: [];
|
||||||
|
},
|
||||||
|
descriptionColumns() {
|
||||||
|
let leftCol = [],
|
||||||
|
rightCol = [],
|
||||||
|
heightParts = parseInt((this.calculateCardHeight - 8) / 23);
|
||||||
|
if (this.ownerEvent.description && heightParts > 1) {
|
||||||
|
let n = heightParts;
|
||||||
|
for (let i = 0; i < n * 2 - 2; i++) {
|
||||||
|
if (!this.description[i]) break;
|
||||||
|
i % 2 === 0
|
||||||
|
? leftCol.push(this.description[i])
|
||||||
|
: rightCol.push(this.description[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
leftColumn: leftCol,
|
||||||
|
rightColumn: rightCol,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
longCard() {
|
||||||
|
return parseInt((this.calculateCardHeight - 8) / 23) > 1 ? true : false;
|
||||||
|
},
|
||||||
|
detailsCount() {
|
||||||
|
let columnsLength =
|
||||||
|
this.descriptionColumns.leftColumn.length +
|
||||||
|
this.descriptionColumns.rightColumn.length,
|
||||||
|
remainingDetails = this.description.length - columnsLength;
|
||||||
|
if (!remainingDetails) this.changeDetailsShown();
|
||||||
|
return remainingDetails;
|
||||||
|
},
|
||||||
|
descriptionCardPosition() {
|
||||||
|
return {
|
||||||
|
top: `calc(${this.cardHeight.height} + 8px)`,
|
||||||
|
};
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
trimTime(time) {
|
trimTime(time) {
|
||||||
@@ -62,22 +191,96 @@ export default {
|
|||||||
return `${object.last_name} ${object.first_name} ${object.patronymic}`;
|
return `${object.last_name} ${object.first_name} ${object.patronymic}`;
|
||||||
},
|
},
|
||||||
transmitEventData() {
|
transmitEventData() {
|
||||||
|
this.changeTheme();
|
||||||
this.$emit("selected-event", this.ownerEvent);
|
this.$emit("selected-event", this.ownerEvent);
|
||||||
},
|
},
|
||||||
|
changeTheme() {
|
||||||
|
this.isActive = !this.isActive;
|
||||||
|
},
|
||||||
|
changeDetailsShown() {
|
||||||
|
this.someDetailsShown = false;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
.wrapper
|
.wrapper
|
||||||
width: calc(100% - 8px)
|
|
||||||
height: 23px
|
|
||||||
border-radius: 4px
|
|
||||||
background-color: var(--bg-event-yellow-color)
|
|
||||||
color: var(--font-black-color)
|
|
||||||
position: absolute
|
position: absolute
|
||||||
z-index: 3
|
z-index: 3
|
||||||
|
width: calc(100% - 8px)
|
||||||
|
height: 23px
|
||||||
|
|
||||||
|
.default-theme
|
||||||
|
.card
|
||||||
|
background-color: var(--bg-color)
|
||||||
|
border: 2px solid var(--border-color)
|
||||||
|
border-left: 4px solid var(--bg-active)
|
||||||
|
.header-text, .body
|
||||||
|
color: var(--font-color)
|
||||||
|
.details-count
|
||||||
|
background-color: var(--bg-active)
|
||||||
|
color: var(--font-active-color)
|
||||||
|
li:before
|
||||||
|
background-color: var(--font-color)
|
||||||
|
|
||||||
|
.active-theme
|
||||||
|
.card
|
||||||
|
background-color: var(--bg-active)
|
||||||
|
border: 2px solid var(--border-active-color)
|
||||||
|
border-left: 4px solid var(--bg-active)
|
||||||
|
.header-text, .body
|
||||||
|
color: var(--font-active-color)
|
||||||
|
.details-count
|
||||||
|
background-color: var(--default-white)
|
||||||
|
color: var(--count-color)
|
||||||
|
li:before
|
||||||
|
background-color: var(--font-active-color)
|
||||||
|
|
||||||
|
.card
|
||||||
|
border-radius: 4px
|
||||||
|
min-height: 23px
|
||||||
|
&:hover
|
||||||
|
background-color: var(--bg-hover)
|
||||||
|
border: 2px solid var(--border-color)
|
||||||
|
border-left: 4px solid var(--bg-active)
|
||||||
|
&:hover .header-text
|
||||||
|
color: var(--font-color)
|
||||||
|
&:hover .details-count
|
||||||
|
background-color: var(--bg-active)
|
||||||
|
color: var(--font-active-color)
|
||||||
|
&:hover .body
|
||||||
|
color: var(--font-color)
|
||||||
|
&:hover li:before
|
||||||
|
background-color: var(--font-color)
|
||||||
|
|
||||||
.header
|
.header
|
||||||
width: 100%
|
width: 100%
|
||||||
|
|
||||||
|
.details-count
|
||||||
|
width: 24px
|
||||||
|
height: 16px
|
||||||
|
border-radius: 16px
|
||||||
|
|
||||||
|
.col
|
||||||
|
max-width: calc(462px/2 - 22px)
|
||||||
|
|
||||||
|
ul
|
||||||
|
list-style-type: none
|
||||||
|
margin: 0
|
||||||
|
padding: 0
|
||||||
|
|
||||||
|
li
|
||||||
|
overflow: hidden
|
||||||
|
text-overflow: ellipsis
|
||||||
|
white-space: nowrap
|
||||||
|
|
||||||
|
li:before
|
||||||
|
content: ''
|
||||||
|
display: inline-block
|
||||||
|
height: 8px
|
||||||
|
width: 8px
|
||||||
|
border-radius: 50%
|
||||||
|
background-color : var(--font-black-color)
|
||||||
|
margin-right: 4px
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
.wrapper.px-4.pt-14px.pb-4.font-medium
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "CalendarEventDescriptionCard",
|
||||||
|
props: {
|
||||||
|
ownerEvent: Object,
|
||||||
|
eventTypes: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
.wrapper
|
||||||
|
width: 426px
|
||||||
|
background-color: var(--default-white)
|
||||||
|
border-radius: 4px
|
||||||
|
color: var(--font-black-color)
|
||||||
|
box-shadow: var(--default-shadow)
|
||||||
|
</style>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.flex.flex-col.gap-y-6.pt-6.pb-7.px-8.event-form.absolute.right-2.bottom-14
|
.flex.flex-col.gap-y-6.pt-6.pb-7.px-8.event-form.absolute.right-0.bottom-14
|
||||||
.flex.justify-between
|
.flex.justify-between
|
||||||
span.title.text-xl.font-bold {{!selectedEventData.id ? "Назначение события" : "Изменение события"}}
|
span.title.text-xl.font-bold {{!selectedEventData.id ? "Назначение события" : "Изменение события"}}
|
||||||
.flex.pt-2
|
.flex.pt-2
|
||||||
@@ -114,6 +114,12 @@ export default {
|
|||||||
return {};
|
return {};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
eventTypes: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
@next-date="nextDate"
|
@next-date="nextDate"
|
||||||
@selected-layout="selectedLayout"
|
@selected-layout="selectedLayout"
|
||||||
)
|
)
|
||||||
.schedule-body
|
.schedule-body(@scroll="changeScrollingState", ref="scheduleBody")
|
||||||
|
.hiding-container.fixed(v-if="isScrolling")
|
||||||
.column-wrapper.flex.ml-20(:style="columnWrapperWidth")
|
.column-wrapper.flex.ml-20(:style="columnWrapperWidth")
|
||||||
calendar-column(
|
calendar-column(
|
||||||
v-for="(owner, index) in filteredOwners"
|
v-for="(owner, index) in filteredOwners"
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
:day-start-time="validateStartTime"
|
:day-start-time="validateStartTime"
|
||||||
:day-end-time="validateEndTime"
|
:day-end-time="validateEndTime"
|
||||||
:style="columnSize"
|
:style="columnSize"
|
||||||
|
:event-types="eventTypes"
|
||||||
@selected-event="writeEventData"
|
@selected-event="writeEventData"
|
||||||
)
|
)
|
||||||
.flex.w-full.relative
|
.flex.w-full.relative
|
||||||
@@ -48,6 +50,7 @@
|
|||||||
:owners-data="ownersData"
|
:owners-data="ownersData"
|
||||||
:members-data="membersData"
|
:members-data="membersData"
|
||||||
:selected-event-data="selectedEvent"
|
:selected-event-data="selectedEvent"
|
||||||
|
:event-types="eventTypes"
|
||||||
@clear-selected-event-data="clearSelectedEvent"
|
@clear-selected-event-data="clearSelectedEvent"
|
||||||
@update-events="transmitUpdateEvents"
|
@update-events="transmitUpdateEvents"
|
||||||
)
|
)
|
||||||
@@ -103,6 +106,12 @@ export default {
|
|||||||
},
|
},
|
||||||
closeFormCreateEvent: Function,
|
closeFormCreateEvent: Function,
|
||||||
isOpenForm: Boolean,
|
isOpenForm: Boolean,
|
||||||
|
eventTypes: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -115,6 +124,7 @@ export default {
|
|||||||
columnHeaderHeight: 48,
|
columnHeaderHeight: 48,
|
||||||
defaultColumnWidth: 470,
|
defaultColumnWidth: 470,
|
||||||
selectedEvent: {},
|
selectedEvent: {},
|
||||||
|
isScrolling: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -315,6 +325,17 @@ export default {
|
|||||||
transmitUpdateEvents() {
|
transmitUpdateEvents() {
|
||||||
this.$emit("update-events");
|
this.$emit("update-events");
|
||||||
},
|
},
|
||||||
|
changeScrollingState(e) {
|
||||||
|
this.isScrolling = e.target.scrollTop !== 0;
|
||||||
|
},
|
||||||
|
showCuttentTime() {
|
||||||
|
this.$nextTick(() =>
|
||||||
|
this.$refs["scheduleBody"].scrollTo({
|
||||||
|
top: `${this.lineIndicatorLocation.top.slice(0, -2) - 240}`,
|
||||||
|
behavior: "smooth",
|
||||||
|
})
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
currentTime() {
|
currentTime() {
|
||||||
@@ -339,6 +360,7 @@ export default {
|
|||||||
this.changeCurrentTime();
|
this.changeCurrentTime();
|
||||||
this.timeCoilInitialization();
|
this.timeCoilInitialization();
|
||||||
this.startTimer();
|
this.startTimer();
|
||||||
|
this.showCuttentTime();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -346,6 +368,7 @@ export default {
|
|||||||
this.changeCurrentTime();
|
this.changeCurrentTime();
|
||||||
this.timeCoilInitialization();
|
this.timeCoilInitialization();
|
||||||
this.startTimer();
|
this.startTimer();
|
||||||
|
this.showCuttentTime();
|
||||||
},
|
},
|
||||||
beforeUnmount() {
|
beforeUnmount() {
|
||||||
this.stopTimer();
|
this.stopTimer();
|
||||||
@@ -355,6 +378,7 @@ export default {
|
|||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
.schedule
|
.schedule
|
||||||
|
border-top-left-radius: 4px
|
||||||
position: relative
|
position: relative
|
||||||
border-top-left-radius: 4px
|
border-top-left-radius: 4px
|
||||||
background-color: var(--default-white)
|
background-color: var(--default-white)
|
||||||
@@ -389,4 +413,20 @@ export default {
|
|||||||
height: calc(100vh - 56px - 8px - 56px)
|
height: calc(100vh - 56px - 8px - 56px)
|
||||||
overflow-y: auto
|
overflow-y: auto
|
||||||
overflow-x: auto
|
overflow-x: auto
|
||||||
|
&::-webkit-scrollbar
|
||||||
|
width: 8px
|
||||||
|
height: 8px
|
||||||
|
&::-webkit-scrollbar-track
|
||||||
|
background-color: var(--bg-ligth-blue-color)
|
||||||
|
border-radius: 4px
|
||||||
|
&::-webkit-scrollbar-thumb
|
||||||
|
border-radius: 4px
|
||||||
|
background-color: var(--btn-blue-color-2)
|
||||||
|
|
||||||
|
.hiding-container
|
||||||
|
width: 80px
|
||||||
|
height: 48px
|
||||||
|
top: calc(56px * 2 + 8px)
|
||||||
|
background-color: var(--default-white)
|
||||||
|
z-index: 6
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
@click="openFormCreate",
|
@click="openFormCreate",
|
||||||
v-else
|
v-else
|
||||||
) Создать событие
|
) Создать событие
|
||||||
calendar-sidebar-event(:is-open="isOpen", :event-type="eventType")
|
calendar-sidebar-event(:is-open="isOpen", :event-type="eventTypes")
|
||||||
calendar-sidebar-teammate(:team-data="teamData", :is-open="isOpen")
|
calendar-sidebar-teammate(:team-data="teamData", :is-open="isOpen")
|
||||||
.button-wrapper.flex.justify-center.mb-23px
|
.button-wrapper.flex.justify-center.mb-23px
|
||||||
base-button(
|
base-button(
|
||||||
@@ -34,8 +34,8 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import BaseButton from "@/components/base/BaseButton";
|
import BaseButton from "@/components/base/BaseButton";
|
||||||
import CalendarSidebarEvent from "./cells/CalendarSidebarEvent.vue";
|
import CalendarSidebarEvent from "./CalendarSidebarEvent.vue";
|
||||||
import CalendarSidebarTeammate from "./cells/CalendarSidebarTeammate.vue";
|
import CalendarSidebarTeammate from "./CalendarSidebarTeammate.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "CalendarSidebar",
|
name: "CalendarSidebar",
|
||||||
@@ -47,7 +47,7 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
teamData: Array,
|
teamData: Array,
|
||||||
openFormCreate: Function,
|
openFormCreate: Function,
|
||||||
eventType: Array,
|
eventTypes: Array,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
clients-wrapper
|
clients-wrapper(@is-open-client-add-form="transmitPageFormState")
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -7,5 +7,10 @@ import ClientsWrapper from "@/pages/clients/components/ClientsWrapper";
|
|||||||
export default {
|
export default {
|
||||||
name: "TheClients",
|
name: "TheClients",
|
||||||
components: { ClientsWrapper },
|
components: { ClientsWrapper },
|
||||||
|
methods: {
|
||||||
|
transmitPageFormState(value) {
|
||||||
|
this.$emit("is-open-page-form", value);
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,35 +1,74 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.section-wrapper.flex.flex-col.h-fit.cursor-pointer(@dblclick="openInterfaceChange" :class="{click:isOpenChange}" :style="{ flexDirection:settings[section].rowFlex&&'row', width : settings[section].width + 'px', height : settings[section].height+'px'}")
|
.section-wrapper.flex.flex-col.h-fit.cursor-pointer(
|
||||||
|
:style="{ flexDirection:settings[section].rowFlex&&'row', width : settings[section].width + 'px', height : settings[section].height+'px'}"
|
||||||
|
)
|
||||||
.section-header.flex.items-center.justify-between.pl-4.pr-3(:class="{small:settings[section].rowFlex}")
|
.section-header.flex.items-center.justify-between.pl-4.pr-3(:class="{small:settings[section].rowFlex}")
|
||||||
span.text-sm.font-semibold.whitespace-nowrap {{settings[section].title}}
|
span.text-sm.font-semibold.whitespace-nowrap {{settings[section].title}}
|
||||||
.flex.items-center.gap-x-8(v-if="isOpenChange")
|
.flex.items-center.gap-x-8
|
||||||
base-button(v-if="isChange" @click="saveChange" :confirm="true" :rounded="true" :outlined="true" :size="20")
|
base-button(
|
||||||
|
v-if="isChange",
|
||||||
|
@click="saveChange",
|
||||||
|
confirm,
|
||||||
|
rounded,
|
||||||
|
outlined,
|
||||||
|
:size="20"
|
||||||
|
)
|
||||||
.icon-ok.text-xsm(class="pt-[3px]")
|
.icon-ok.text-xsm(class="pt-[3px]")
|
||||||
.edit.icon-edit.cursor-pointer.text-sm(v-if="!isChange" @click="changeClientData")
|
.edit.icon-edit.cursor-pointer.text-sm(
|
||||||
|
v-if="!isChange",
|
||||||
|
@click="changeClientData"
|
||||||
|
)
|
||||||
.flex.relative
|
.flex.relative
|
||||||
base-button(v-if="settings[section].addFile" @click="openAddingWrap" :rounded="true" :outlined="true" :added="true" :size="24")
|
base-button(
|
||||||
|
v-if="settings[section].addFile",
|
||||||
|
@click="openAddingWrap",
|
||||||
|
:rounded="true",
|
||||||
|
:outlined="true",
|
||||||
|
:added="true",
|
||||||
|
:size="24"
|
||||||
|
)
|
||||||
.icon-plus(class="pt-[2px]")
|
.icon-plus(class="pt-[2px]")
|
||||||
table-adding-new-doc(v-if="section === 'docs' && isOpenAddingWrap" :add-new-doc="addNewDoc" :save-docs="saveDocs" :new-docs="docData")
|
table-adding-new-doc(
|
||||||
table-adding-new-additional(v-if="section === 'additional' && isOpenAddingWrap" :new-additional-data="additionalData" :add-new-additional="addDocAdditional" :save-additional="saveDocs" )
|
v-if="section === 'docs' && isOpenAddingWrap",
|
||||||
|
:add-new-doc="addNewDoc",
|
||||||
|
:save-docs="saveDocs",
|
||||||
|
:new-docs="docData"
|
||||||
|
)
|
||||||
|
table-adding-new-additional(
|
||||||
|
v-if="section === 'additional' && isOpenAddingWrap"
|
||||||
|
:new-additional-data="additionalData",
|
||||||
|
:add-new-additional="addDocAdditional",
|
||||||
|
:save-additional="saveDocs"
|
||||||
|
)
|
||||||
.section-body.w-full.flex.flex-col.px-4.pt-3.pb-4.gap-y-4
|
.section-body.w-full.flex.flex-col.px-4.pt-3.pb-4.gap-y-4
|
||||||
.flex.flex-col(v-for="(item, key) in sectionInfo" class="gap-y-1.5")
|
.flex.flex-col(v-for="(item, key) in sectionInfo" class="gap-y-1.5")
|
||||||
span.title-section.font-semibold.text-xs(v-if="settings[section].options") {{settings[section].options[key]}}
|
span.title-section.font-semibold.text-xs(v-if="settings[section].options") {{settings[section].options[key]}}
|
||||||
span.title-section.font-semibold.text-xs(v-if="item.header") {{item.header}}
|
span.title-section.font-semibold.text-xs(v-if="item.header") {{item.header}}
|
||||||
client-detail-input.text-sm.text-sm.w-max-fit(
|
client-detail-input.text-sm.text-sm.w-max-fit(
|
||||||
:sharp="settings[section].sharps[key]"
|
v-if="section!=='docs' && isChange",
|
||||||
v-if="section!=='docs' && isChange"
|
:style="{fontWeight:key === 'numba'&&600}",
|
||||||
:style="{fontWeight:key === 'numba'&&600}"
|
v-model:value="sectionInfo[key]",
|
||||||
v-model:value="sectionInfo[key]"
|
|
||||||
:width="settings[section].width"
|
:width="settings[section].width"
|
||||||
|
:sharp="settings[section].sharps[key]"
|
||||||
)
|
)
|
||||||
.copy.icon-copy.cursor-pointer(v-if="item.copy" @click="() => copyValue(item)")
|
.copy.icon-copy.cursor-pointer(
|
||||||
|
v-if="item.copy",
|
||||||
|
@click="() => copyValue(item)"
|
||||||
|
)
|
||||||
.flex(v-if="settings[section].options && !isChange")
|
.flex(v-if="settings[section].options && !isChange")
|
||||||
span.text-sm.w-fit(:style="{fontWeight:key === 'numba'&&600}") {{item}}
|
span.text-sm.w-fit(:style="{fontWeight:key === 'numba'&&600}") {{item}}
|
||||||
.copy.icon-copy.cursor-pointer.pl-4(v-if="key === 'numba'" @click="() => copyValue(item)")
|
.copy.icon-copy.cursor-pointer.pl-4(
|
||||||
|
v-if="key === 'numba'",
|
||||||
|
@click="() => copyValue(item)"
|
||||||
|
)
|
||||||
.flex(v-if="item.name && !isChange")
|
.flex(v-if="item.name && !isChange")
|
||||||
span.text-sm.w-fit {{item.title}}
|
span.text-sm.w-fit {{item.title}}
|
||||||
.flex.items-center(v-if="item.title")
|
.flex.items-center(v-if="item.title")
|
||||||
.icon-cancel.cancel.cursor-pointer.pr-3.text-xsm(v-if="isChange" :id="item.id" @click="(e) => deleteDoc(e)")
|
.icon-cancel.cancel.cursor-pointer.pr-3.text-xsm(
|
||||||
|
v-if="isChange",
|
||||||
|
:id="item.id",
|
||||||
|
@click="(e) => deleteDoc(e)"
|
||||||
|
)
|
||||||
span.text-sm {{item.title}}
|
span.text-sm {{item.title}}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -75,11 +114,10 @@ export default {
|
|||||||
copyValue(text) {
|
copyValue(text) {
|
||||||
navigator.clipboard.writeText(text);
|
navigator.clipboard.writeText(text);
|
||||||
},
|
},
|
||||||
openInterfaceChange() {
|
|
||||||
this.isOpenChange = !this.isOpenChange;
|
|
||||||
},
|
|
||||||
changeClientData() {
|
changeClientData() {
|
||||||
this.isChange = true;
|
if (!this.isOpenAddingWrap) {
|
||||||
|
this.isChange = true;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
saveChange() {
|
saveChange() {
|
||||||
this.isOpenChange = false;
|
this.isOpenChange = false;
|
||||||
@@ -91,7 +129,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
openAddingWrap() {
|
openAddingWrap() {
|
||||||
this.isOpenAddingWrap = true;
|
if (!this.isChange) {
|
||||||
|
this.isOpenAddingWrap = !this.isOpenAddingWrap;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
addNewDoc(e) {
|
addNewDoc(e) {
|
||||||
this.docData = [...this.docData, ...e.target.files];
|
this.docData = [...this.docData, ...e.target.files];
|
||||||
|
|||||||
@@ -43,9 +43,11 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
openFormCreateClient() {
|
openFormCreateClient() {
|
||||||
this.isOpenFormCreate = true;
|
this.isOpenFormCreate = true;
|
||||||
|
this.$emit("is-open-client-add-form", this.isOpenFormCreate);
|
||||||
},
|
},
|
||||||
closeFormCreateClient() {
|
closeFormCreateClient() {
|
||||||
this.isOpenFormCreate = false;
|
this.isOpenFormCreate = false;
|
||||||
|
this.$emit("is-open-client-add-form", this.isOpenFormCreate);
|
||||||
this.fetchDataClients();
|
this.fetchDataClients();
|
||||||
},
|
},
|
||||||
saveDataClients(data) {
|
saveDataClients(data) {
|
||||||
@@ -79,6 +81,9 @@ export default {
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.fetchDataClients();
|
this.fetchDataClients();
|
||||||
},
|
},
|
||||||
|
beforeUnmount() {
|
||||||
|
this.closeFormCreateClient();
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.row-wrapper.flex.flex-col.w-full
|
.row-wrapper.flex.flex-col.w-full
|
||||||
.row-body.flex.w-full.cursor-pointer(:id="id" @dblclick="(e) => openDetailInfo(e)")
|
.row-body.flex.w-full.cursor-pointer(:id="id" @click="(e) => openDetailInfo(e)")
|
||||||
.check-box.flex.justify-center.items-center
|
.check-box.flex.justify-center.items-center
|
||||||
clients-table-checkbox(:id="id" :check="check" :is-check="isCheck")
|
clients-table-checkbox(:id="id" :check="check" :is-check="isCheck")
|
||||||
table-cell-body-name(:value="dataClient" :avatar="dataClient.avatar" :avatar-color="dataClient.color" :is-open-change="isOpenChange" :width="columnBody.find(el => el.name === 'fullName').width")
|
table-cell-body-name(:value="dataClient" :avatar="dataClient.avatar" :avatar-color="dataClient.color" :is-open-change="isOpenChange" :width="columnBody.find(el => el.name === 'fullName').width")
|
||||||
@@ -192,7 +192,8 @@ export default {
|
|||||||
.find((el) => el.name === "priority")
|
.find((el) => el.name === "priority")
|
||||||
["settings"].find((el) => el.text === e.target.id).priority;
|
["settings"].find((el) => el.text === e.target.id).priority;
|
||||||
},
|
},
|
||||||
closeChangeData() {
|
closeChangeData(e) {
|
||||||
|
e.stopPropagation();
|
||||||
this.isOpenChange = false;
|
this.isOpenChange = false;
|
||||||
this.postUpdateClient();
|
this.postUpdateClient();
|
||||||
this.postContactsClient();
|
this.postContactsClient();
|
||||||
@@ -272,6 +273,7 @@ export default {
|
|||||||
this.dataAttachments = [...this.dataDetail, ...data];
|
this.dataAttachments = [...this.dataDetail, ...data];
|
||||||
},
|
},
|
||||||
deleteDoc(e) {
|
deleteDoc(e) {
|
||||||
|
e.stopPropagation();
|
||||||
this.dataAttachments = this.dataAttachments.filter(
|
this.dataAttachments = this.dataAttachments.filter(
|
||||||
(el) => el.id !== e.target.id
|
(el) => el.id !== e.target.id
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.wrapper.flex.w-full.relative.mx-6
|
.wrapper.flex.w-full.relative.mx-6
|
||||||
clients-table(:open-form-create="openFormCreateClient")
|
clients-table(@is-open-client-add-form="transmitPageFormState")
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -14,11 +14,8 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
openFormCreateClient() {
|
transmitPageFormState(value) {
|
||||||
this.isOpenForm = true;
|
this.$emit("is-open-client-add-form", value);
|
||||||
},
|
|
||||||
closeFormCreateClient() {
|
|
||||||
this.isOpenForm = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
span или перетащите их сюда
|
span или перетащите их сюда
|
||||||
.flex.flex-col
|
.flex.flex-col
|
||||||
span.name-doc.py-2.px-3(v-for="doc in newDocs") {{doc.name}}
|
span.name-doc.py-2.px-3(v-for="doc in newDocs") {{doc.name}}
|
||||||
base-button(@click="saveDocs" :size="40")
|
base-button(@click="" :size="40")
|
||||||
span.font-semibold Добавить
|
span.font-semibold Добавить
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ module.exports = {
|
|||||||
"14px": "14px",
|
"14px": "14px",
|
||||||
"15px": "15px",
|
"15px": "15px",
|
||||||
"19px": "19px",
|
"19px": "19px",
|
||||||
|
"22px": "22px",
|
||||||
"23px": "23px",
|
"23px": "23px",
|
||||||
"29_25px": "29.25px",
|
"29_25px": "29.25px",
|
||||||
"45px": "45px",
|
"45px": "45px",
|
||||||
|
|||||||
Reference in New Issue
Block a user