Merge pull request #58 from dderbentsov/UC-24
WIP Сделала карточку и фильтрацию событий по дате
This commit is contained in:
111
server.js
111
server.js
@@ -255,8 +255,8 @@ export function clientsServer() {
|
|||||||
results: [
|
results: [
|
||||||
{
|
{
|
||||||
id: "6faa6bb6-1de6-422c-a401-1b35cd455303",
|
id: "6faa6bb6-1de6-422c-a401-1b35cd455303",
|
||||||
start: "2022-10-20T20:23:49Z",
|
start: "2022-10-24T20:23:49Z",
|
||||||
end: "2022-10-20T21:23:53Z",
|
end: "2022-10-24T21:23:53Z",
|
||||||
kind: "call",
|
kind: "call",
|
||||||
subkind: null,
|
subkind: null,
|
||||||
description: "",
|
description: "",
|
||||||
@@ -296,10 +296,53 @@ export function clientsServer() {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "6faa6bb6-1de6-422c-a401-1b35cd455303",
|
||||||
|
start: "2022-10-24T15:23:49Z",
|
||||||
|
end: "2022-10-24T16:23:53Z",
|
||||||
|
kind: "call",
|
||||||
|
subkind: null,
|
||||||
|
description: "",
|
||||||
|
location: null,
|
||||||
|
members: [
|
||||||
|
{
|
||||||
|
id: "f7648f9a-e824-4bb3-a260-2b32dae9bc74",
|
||||||
|
person: {
|
||||||
|
id: "98dd401c-2b7b-4d9a-9159-720c74d8b23v",
|
||||||
|
last_name: "Захарченко",
|
||||||
|
first_name: "Юлия",
|
||||||
|
patronymic: "Николаевна",
|
||||||
|
},
|
||||||
|
role: null,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
employees: [
|
||||||
|
{
|
||||||
|
id: "f941a0c6-c750-4f79-92c0-d7a19354e422",
|
||||||
|
employee: {
|
||||||
|
id: "db541a67-e836-481f-a653-6325de7c567e",
|
||||||
|
last_name: "Захарова",
|
||||||
|
first_name: "Ольга",
|
||||||
|
patronymic: "Александровна",
|
||||||
|
},
|
||||||
|
role: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "f941a0c6-c750-4f79-92c0-d7a19354e422",
|
||||||
|
employee: {
|
||||||
|
id: "db831a14-e836-481f-a653-6325de7c311e",
|
||||||
|
last_name: "Жмыхов",
|
||||||
|
first_name: "Егор",
|
||||||
|
patronymic: "Сергеевич",
|
||||||
|
},
|
||||||
|
role: "owner",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "7faa7bb7-2de6-422c-a401-1b35cd455303",
|
id: "7faa7bb7-2de6-422c-a401-1b35cd455303",
|
||||||
start: "2022-10-20T10:00:00Z",
|
start: "2022-10-23T10:00:00Z",
|
||||||
end: "2022-10-20T11:10:00Z",
|
end: "2022-10-23T11:10:00Z",
|
||||||
kind: "call",
|
kind: "call",
|
||||||
subkind: null,
|
subkind: null,
|
||||||
description: "",
|
description: "",
|
||||||
@@ -315,6 +358,16 @@ export function clientsServer() {
|
|||||||
},
|
},
|
||||||
role: null,
|
role: null,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "a9239f9a-e824-4bb3-a260-2b32dae9bc76",
|
||||||
|
person: {
|
||||||
|
id: "15ff465c-2b7b-4d9a-9159-720c74d8b56d",
|
||||||
|
last_name: "Елесеевская",
|
||||||
|
first_name: "Татьяна",
|
||||||
|
patronymic: "Ивановна",
|
||||||
|
},
|
||||||
|
role: "primary",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
employees: [
|
employees: [
|
||||||
{
|
{
|
||||||
@@ -341,20 +394,20 @@ export function clientsServer() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "2faa7bb2-2de6-422c-a401-1b35cd455223",
|
id: "2faa7bb2-2de6-422c-a401-1b35cd455223",
|
||||||
start: "2022-10-20T10:00:00Z",
|
start: "2022-10-24T10:00:00Z",
|
||||||
end: "2022-10-20T11:10:00Z",
|
end: "2022-10-24T11:10:00Z",
|
||||||
kind: "call",
|
kind: "call",
|
||||||
subkind: null,
|
subkind: null,
|
||||||
description: "",
|
description: "",
|
||||||
location: null,
|
location: null,
|
||||||
members: [
|
members: [
|
||||||
{
|
{
|
||||||
id: "b0509f9a-e824-4bb3-a260-2b32dae9bc81",
|
id: "a9239f9a-e824-4bb3-a260-2b32dae9bc76",
|
||||||
person: {
|
person: {
|
||||||
id: "14ff401c-2b7b-4d9a-9159-720c74d8b23c",
|
id: "15ff465c-2b7b-4d9a-9159-720c74d8b56d",
|
||||||
last_name: "Гагарин",
|
last_name: "Елесеевская",
|
||||||
first_name: "Юрий",
|
first_name: "Татьяна",
|
||||||
patronymic: "Алексеевич",
|
patronymic: "Ивановна",
|
||||||
},
|
},
|
||||||
role: null,
|
role: null,
|
||||||
},
|
},
|
||||||
@@ -383,26 +436,36 @@ export function clientsServer() {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "6faa6bb2-1de4-425c-a401-1b35cd455303",
|
id: "2faa7bb2-2de6-422c-a401-1b35cd455223",
|
||||||
start: "2022-10-20T20:23:49Z",
|
start: "2022-10-24T10:00:00Z",
|
||||||
end: "2022-10-20T21:23:53Z",
|
end: "2022-10-24T11:10:00Z",
|
||||||
kind: "call",
|
kind: "call",
|
||||||
subkind: null,
|
subkind: null,
|
||||||
description: "",
|
description: "",
|
||||||
location: null,
|
location: null,
|
||||||
members: [
|
members: [
|
||||||
{
|
{
|
||||||
id: "b0509f9a-e824-4bb3-a260-2b32dae9bc81",
|
id: "a9239f9a-e824-4bb3-a260-2b32dae9bc76",
|
||||||
person: {
|
person: {
|
||||||
id: "14ff401c-2b7b-4d9a-9159-720c74d8b23c",
|
id: "15ff465c-2b7b-4d9a-9159-720c74d8b56d",
|
||||||
last_name: "Гагарин",
|
last_name: "Елесеевская",
|
||||||
first_name: "Юрий",
|
first_name: "Татьяна",
|
||||||
patronymic: "Алексеевич",
|
patronymic: "Ивановна",
|
||||||
},
|
},
|
||||||
role: null,
|
role: null,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
employees: [
|
employees: [
|
||||||
|
{
|
||||||
|
id: "f451a0c3-c734-4f73-91c2-d7a5674459e422",
|
||||||
|
employee: {
|
||||||
|
id: "dv841a15-e867-331f-a658-6325de7c311e",
|
||||||
|
last_name: "Коломойцев",
|
||||||
|
first_name: "Илья",
|
||||||
|
patronymic: "Петрович",
|
||||||
|
},
|
||||||
|
role: "owner",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "f941a0c6-c750-4f79-92c0-d7a19354e422",
|
id: "f941a0c6-c750-4f79-92c0-d7a19354e422",
|
||||||
employee: {
|
employee: {
|
||||||
@@ -413,16 +476,6 @@ export function clientsServer() {
|
|||||||
},
|
},
|
||||||
role: null,
|
role: null,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: "f941a0c6-c750-4f79-92c0-d7a19354e422",
|
|
||||||
employee: {
|
|
||||||
id: "db831a14-e836-481f-a653-6325de7c311e",
|
|
||||||
last_name: "Жмыхов",
|
|
||||||
first_name: "Егор",
|
|
||||||
patronymic: "Сергеевич",
|
|
||||||
},
|
|
||||||
role: null,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
:key="owner.id"
|
:key="owner.id"
|
||||||
:owner-data="owner"
|
:owner-data="owner"
|
||||||
:style="calculateColumnPosition(index)"
|
:style="calculateColumnPosition(index)"
|
||||||
|
:day-events="filterEventsByOwner(owner)"
|
||||||
)
|
)
|
||||||
.header(:style="backgroundExtendedWidth")
|
.header(:style="backgroundExtendedWidth")
|
||||||
.body.flex.flex-col(
|
.body.flex.flex-col(
|
||||||
@@ -29,6 +30,8 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
hoursArray: Array,
|
hoursArray: Array,
|
||||||
eventsData: Array,
|
eventsData: Array,
|
||||||
|
currentDate: Object,
|
||||||
|
sidebarWidth: String,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -91,11 +94,19 @@ export default {
|
|||||||
(previous, subsequent) => Boolean(subsequent.id) - Boolean(previous.id)
|
(previous, subsequent) => Boolean(subsequent.id) - Boolean(previous.id)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
filteredEventsByDate() {
|
||||||
|
return this.eventsData.filter(
|
||||||
|
({ start }) =>
|
||||||
|
start.slice(0, 10) === this.currentDate.format("YYYY-MM-DD")
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
calculateColumnPosition(elemIndex) {
|
calculateColumnPosition(elemIndex) {
|
||||||
|
let deductible = parseInt(this.sidebarWidth.slice(0, -2), 10) - 72;
|
||||||
if (this.ownersArrayLength < 4) {
|
if (this.ownersArrayLength < 4) {
|
||||||
this.columnWidth = this.backgroundWidth / this.ownersArrayLength;
|
this.columnWidth =
|
||||||
|
(this.backgroundWidth - deductible) / this.ownersArrayLength;
|
||||||
return {
|
return {
|
||||||
width: `${this.columnWidth}px`,
|
width: `${this.columnWidth}px`,
|
||||||
height: `${this.backgroundHeight}px`,
|
height: `${this.backgroundHeight}px`,
|
||||||
@@ -116,6 +127,18 @@ export default {
|
|||||||
(item) => JSON.stringify(item) === JSON.stringify(object)
|
(item) => JSON.stringify(item) === JSON.stringify(object)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
filterEventsByOwner(owner) {
|
||||||
|
let filteredArray = [];
|
||||||
|
this.filteredEventsByDate.forEach((item) => {
|
||||||
|
let foundEvent = item.employees.find(
|
||||||
|
(elem) =>
|
||||||
|
JSON.stringify(elem.employee) === JSON.stringify(owner) &&
|
||||||
|
elem.role === "owner"
|
||||||
|
);
|
||||||
|
if (foundEvent) filteredArray.push(item);
|
||||||
|
});
|
||||||
|
return filteredArray;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.calculateBackgroundWidth();
|
this.calculateBackgroundWidth();
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export default {
|
|||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
.current-time
|
.current-time
|
||||||
color: var(--time-indicator-color)
|
color: var(--bg-event-red-color)
|
||||||
|
|
||||||
.calendar-clock-column
|
.calendar-clock-column
|
||||||
width: 80px
|
width: 80px
|
||||||
|
|||||||
@@ -6,16 +6,23 @@
|
|||||||
span.owner-name.font-medium.text-base.mr-6 {{ ownerName }}
|
span.owner-name.font-medium.text-base.mr-6 {{ ownerName }}
|
||||||
img.icon-wrapper.cursor-pointer(src="@/assets/icons/lock.svg")
|
img.icon-wrapper.cursor-pointer(src="@/assets/icons/lock.svg")
|
||||||
base-doc-ok-button
|
base-doc-ok-button
|
||||||
div
|
.px-1
|
||||||
|
calendar-event-card(
|
||||||
|
v-for="event in dayEvents"
|
||||||
|
:key="event.id"
|
||||||
|
:ownerEvent="event"
|
||||||
|
)
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import BaseDocOkButton from "@/components/base/buttons/BaseDocOkButton.vue";
|
import BaseDocOkButton from "@/components/base/buttons/BaseDocOkButton.vue";
|
||||||
|
import CalendarEventCard from "./CalendarEventCard.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "CalendarColumn",
|
name: "CalendarColumn",
|
||||||
components: { BaseDocOkButton },
|
components: { BaseDocOkButton, CalendarEventCard },
|
||||||
props: {
|
props: {
|
||||||
ownerData: Object,
|
ownerData: Object,
|
||||||
|
dayEvents: Array,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
ownerName() {
|
ownerName() {
|
||||||
|
|||||||
55
src/pages/calendar/components/CalendarEventCard.vue
Normal file
55
src/pages/calendar/components/CalendarEventCard.vue
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
.wrapper.flex.px-2.my-1.cursor-pointer
|
||||||
|
.header.flex.justify-between.items-center
|
||||||
|
.header-text
|
||||||
|
span.inline-block.align-middle.font-bold.text-base.mr-4 {{ eventTime }}
|
||||||
|
span.inline-block.align-middle.font-medium.text-base {{ eventMember }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "CalendarEventCard",
|
||||||
|
props: {
|
||||||
|
ownerEvent: Object,
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
eventTime() {
|
||||||
|
return `${this.trimTime(this.ownerEvent.start)} - ${this.trimTime(
|
||||||
|
this.ownerEvent.end
|
||||||
|
)}`;
|
||||||
|
},
|
||||||
|
eventMember() {
|
||||||
|
let membersArray = this.ownerEvent.members;
|
||||||
|
if (membersArray.length > 1) {
|
||||||
|
let primaryMember = membersArray.find(
|
||||||
|
(elem) => elem.role === "primary"
|
||||||
|
);
|
||||||
|
return this.composeFullName(primaryMember.person);
|
||||||
|
}
|
||||||
|
return this.composeFullName(membersArray[0].person);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
trimTime(time) {
|
||||||
|
return time.slice(11, -4);
|
||||||
|
},
|
||||||
|
composeFullName(object) {
|
||||||
|
return `${object.last_name} ${object.first_name} ${object.patronymic}`;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
.wrapper
|
||||||
|
width: 100%
|
||||||
|
height: 23px
|
||||||
|
border-radius: 4px
|
||||||
|
background-color: var(--bg-event-yellow-color)
|
||||||
|
color: var(--font-black-color)
|
||||||
|
position: relative
|
||||||
|
z-index: 2
|
||||||
|
|
||||||
|
.header
|
||||||
|
width: 100%
|
||||||
|
</style>
|
||||||
@@ -16,8 +16,10 @@
|
|||||||
:day-end-time="validateEndTime"
|
:day-end-time="validateEndTime"
|
||||||
)
|
)
|
||||||
calendar-background(
|
calendar-background(
|
||||||
|
:current-date="currentDate"
|
||||||
:hours-array="hoursArray"
|
:hours-array="hoursArray"
|
||||||
:events-data="eventsData"
|
:events-data="eventsData"
|
||||||
|
:sidebar-width="sidebarWidth"
|
||||||
)
|
)
|
||||||
.time-circle-indicator.left-74px(
|
.time-circle-indicator.left-74px(
|
||||||
v-if="isShownIndicator"
|
v-if="isShownIndicator"
|
||||||
|
|||||||
Reference in New Issue
Block a user