Merge pull request #98 from dderbentsov/UC-43

WIP Поправила поля ввода даты
This commit is contained in:
Daria Golova
2022-11-02 20:59:44 +03:00
committed by GitHub
10 changed files with 167 additions and 54 deletions

View File

@@ -1,7 +1,7 @@
<template lang="pug"> <template lang="pug">
.header-wrapper.flex.justify-center.box-border.py-2.pl-4_75px.pr-6 .header-wrapper.flex.justify-center.box-border.py-2.pl-4_75px.pr-6
.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
//- .charge-person-container //- .charge-person-container
//- header-active-client-panel(:info="chargePersonInfo") //- header-active-client-panel(:info="chargePersonInfo")
@@ -10,8 +10,8 @@
button.header-buttons.flex.justify-center.items-center.mr-8.p-0 button.header-buttons.flex.justify-center.items-center.mr-8.p-0
.icon-bell.text-xxl .icon-bell.text-xxl
.flex.justify-centflexer.items-center .flex.justify-centflexer.items-center
base-avatar(:size="32").mr-2 base-avatar.mr-2(:size="32")
img(:src="avatarSrc") img(:src="avatarSrc", alt="Avatar")
button.header-buttons button.header-buttons
.icon-down-arrow.text-xxs.flex.justify-center.items-center.p-0 .icon-down-arrow.text-xxs.flex.justify-center.items-center.p-0
</template> </template>

View File

@@ -1,23 +1,23 @@
<template lang="pug"> <template lang="pug">
.calendar-container.flex .calendar-container.flex
calendar-sidebar(@width="changeWidth" calendar-sidebar(
:team-data="employeesData" @width="changeWidth"
:open-form-create="openFormCreateEvent") :team-data="employeesData"
:open-form-create="openFormCreateEvent"
)
calendar-schedule( calendar-schedule(
:owners-data="employeesData" :owners-data="employeesData"
:current-date="currentDate" :current-date="currentDate"
:time-information="timeInformation" :time-information="timeInformation"
:events-data="eventsData" :events-data="eventsData"
:members-data="membersData"
:sidebar-width="sidebarWidth" :sidebar-width="sidebarWidth"
:close-form-create-event="closeFormCreateEvent"
:is-open-form="isOpenForm"
@previous-date="switchPreviousDate" @previous-date="switchPreviousDate"
@next-date="switchNextDate" @next-date="switchNextDate"
@selected-layout="changeCalendarLayout" @selected-layout="changeCalendarLayout"
) @open-change-form="openFormCreateEvent"
calendar-form-add-event(
v-if="isOpenForm"
:close-form="closeFormCreateEvent"
:owners-data="employeesData"
:members-data="membersData"
) )
</template> </template>
@@ -82,7 +82,6 @@ export default {
changeWidth(value) { changeWidth(value) {
this.sidebarWidth = value; this.sidebarWidth = value;
}, },
openFormCreateEvent() { openFormCreateEvent() {
this.isOpenForm = true; this.isOpenForm = true;
}, },

View File

@@ -1,13 +1,13 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col( .flex.flex-col(
:style="backgroundExtendedWidth" :style="backgroundExtendedWidth"
) )
.flex.flex-col .flex.flex-col
.line-wrapper .line-wrapper
.line.flex.items-center( .line.flex.items-center(
v-for="hour in timeCoil" v-for="hour in timeCoil"
:key="hour" :key="hour"
) )
.middle-line .middle-line
</template> </template>

View File

@@ -4,7 +4,7 @@
v-for="hour in timeCoil" v-for="hour in timeCoil"
:key="hour" :key="hour"
:class="currentHourStyle(hour)" :class="currentHourStyle(hour)"
) {{ hour }} ) {{ hour }}
</template> </template>
<script> <script>

View File

@@ -3,7 +3,11 @@
.header.flex.items-center.justify-between.py-2.px-6.top-0 .header.flex.items-center.justify-between.py-2.px-6.top-0
.flex.items-center .flex.items-center
base-avatar.mr-2(:size="32", :color="ownerData.color") base-avatar.mr-2(:size="32", :color="ownerData.color")
img(:src="ownerData.avatar" alt="Team member" v-if="ownerData.avatar") img(
:src="ownerData.avatar"
alt="Team member"
v-if="ownerData.avatar"
)
span(v-if="!ownerData.avatar") {{ defaultAvatar }} span(v-if="!ownerData.avatar") {{ defaultAvatar }}
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")
@@ -14,7 +18,8 @@
:key="event.id" :key="event.id"
:ownerEvent="event" :ownerEvent="event"
:style="eventCardPosition(event.start, event.end)" :style="eventCardPosition(event.start, event.end)"
) @selected-event="transmitEventData"
)
</template> </template>
<script> <script>
@@ -79,6 +84,9 @@ export default {
top: `${position}px`, top: `${position}px`,
}; };
}, },
transmitEventData(eventData) {
this.$emit("selected-event", eventData);
},
}, },
}; };
</script> </script>

View File

@@ -1,8 +1,8 @@
<template lang="pug"> <template lang="pug">
div.icon-wrap.flex.items-center.justify-center.cursor-pointer.py-1.px-2( div.icon-wrap.flex.items-center.justify-center.cursor-pointer.py-1.px-2(
:class="{disable: !isChecked}" :class="{disable: !isChecked}"
@click="changeState" @click="changeState"
) )
.icon-doc-ok.text-xxl .icon-doc-ok.text-xxl
</template> </template>

View File

@@ -1,5 +1,5 @@
<template lang="pug"> <template lang="pug">
.wrapper.flex.px-2.my-1.items-start.cursor-pointer(:style="cardHeight") .wrapper.flex.px-2.my-1.items-start.cursor-pointer(:style="cardHeight", @click="transmitEventData")
.header.flex.justify-between.items-center .header.flex.justify-between.items-center
.header-text .header-text
span.inline-block.align-middle.font-bold.text-base.mr-4 {{ eventTime }} span.inline-block.align-middle.font-bold.text-base.mr-4 {{ eventTime }}
@@ -61,6 +61,9 @@ export default {
composeFullName(object) { composeFullName(object) {
return `${object.last_name} ${object.first_name} ${object.patronymic}`; return `${object.last_name} ${object.first_name} ${object.patronymic}`;
}, },
transmitEventData() {
this.$emit("selected-event", this.ownerEvent);
},
}, },
}; };
</script> </script>

View File

@@ -19,17 +19,30 @@
.flex.gap-x-4.items-center .flex.gap-x-4.items-center
.icon-time.text-xl.icon .icon-time.text-xl.icon
.flex.gap-x-2.items-center .flex.gap-x-2.items-center
.time-input.flex.gap-x-2.px-4.py-2.items-center .time-input.flex.px-4.py-2.items-center
input.item-input.text-base.cursor-text( input.item-input.text-base.cursor-text(
v-model="start" v-model="startTime"
placeholder ="11:00" placeholder ="11:00"
) )
span span
.time-input.flex.gap-x-2.px-4.py-2.items-center .time-input.flex.px-4.py-2.items-center
input.item-input.text-base.cursor-text( input.item-input.text-base.cursor-text(
v-model="end" v-model="endTime"
placeholder ="12:30" placeholder ="12:30"
) )
.flex.items-center.ml-10
.flex.gap-x-2.items-center
.date-input.flex.px-4.py-2.items-center
input.item-input.text-base.cursor-text(
v-model="startDate"
placeholder ="2022-10-01"
)
span
.date-input.flex.px-4.py-2.items-center
input.item-input.text-base.cursor-text(
v-model="endDate"
placeholder ="2022-10-01"
)
.flex.gap-x-4.items-center .flex.gap-x-4.items-center
.icon-person.text-xl.icon .icon-person.text-xl.icon
base-select( base-select(
@@ -41,7 +54,7 @@
@changeInput="addMember" @changeInput="addMember"
placeholder="Выберите участника" placeholder="Выберите участника"
separator separator
) )
.flex.flex-col.gap-y-2 .flex.flex-col.gap-y-2
span.text-xs.opacity-40.font-bold.leading-3 Вид события span.text-xs.opacity-40.font-bold.leading-3 Вид события
base-select( base-select(
@@ -64,19 +77,25 @@
:icon-left-size="10" :icon-left-size="10"
id="addContact" id="addContact"
@click="(e)=>addContact(e)") @click="(e)=>addContact(e)")
.flex.gap-x-4.items-center(v-for="(contact, index) in listContacts" :key="index") .flex.gap-x-4.items-center(
v-for="(contact, index) in listContacts"
:key="index"
)
.icon-mail.text-xl.icon .icon-mail.text-xl.icon
.form-item.cursor-pointer.flex.gap-x-2.px-4.py-2.items-center .form-item.cursor-pointer.flex.gap-x-2.px-4.py-2.items-center
input.item-input.cursor-text.text-base(v-model="contacts" type="text" placeholder="E-mail") input.item-input.cursor-text.text-base(
v-model="contacts"
type="text"
placeholder="E-mail"
)
base-button.styled-button.text-base.font-semibold( base-button.styled-button.text-base.font-semibold(
:size="40" :size="40"
:disabled="disabledButton" :disabled="disabledButton"
@click="sendEventData" @click="sendEventData"
) Создать событие ) Создать событие
</template> </template>
<script> <script>
import * as moment from "moment/moment";
import BaseSelect from "@/components/base/OldBaseSelect"; import BaseSelect from "@/components/base/OldBaseSelect";
import BaseButton from "@/components/base/BaseButton"; import BaseButton from "@/components/base/BaseButton";
export default { export default {
@@ -96,12 +115,16 @@ export default {
return []; return [];
}, },
}, },
selectedEventData: {
type: Object,
default() {
return {};
},
},
}, },
data() { data() {
return { return {
listContacts: [1], listContacts: [1],
ownerSelectSize: 22,
kindEventSelectSize: 10,
memberSelectSize: 29, memberSelectSize: 29,
kindEvents: ["Встреча", "Планерка", "Интервью", "Важная работа"], kindEvents: ["Встреча", "Планерка", "Интервью", "Важная работа"],
eventData: {}, eventData: {},
@@ -110,13 +133,16 @@ export default {
role: null, role: null,
}, },
contacts: [], contacts: [],
start: "", startTime: "",
end: "", endTime: "",
employees: { employees: {
employee: null, employee: null,
role: "owner", role: "owner",
}, },
startDate: "",
endDate: "",
kind: "", kind: "",
id: null,
}; };
}, },
computed: { computed: {
@@ -160,14 +186,14 @@ export default {
return ""; return "";
}, },
eventStartTime() { eventStartTime() {
if (this.start) { if (this.startTime && this.startDate) {
return `${moment().format("YYYY-MM-DD")}T${this.start}:00Z`; return this.addDate(this.startDate, this.startTime);
} }
return ""; return "";
}, },
eventEndTime() { eventEndTime() {
if (this.end) { if (this.endTime && this.endDate) {
return `${moment().format("YYYY-MM-DD")}T${this.end}:00Z`; return this.addDate(this.endDate, this.endTime);
} }
return ""; return "";
}, },
@@ -183,6 +209,18 @@ export default {
} }
return true; return true;
}, },
ownerSelectSize() {
if (this.ownerName) {
return this.ownerName.split(" ").join("").length;
}
return 22;
},
kindEventSelectSize() {
if (this.kind) {
return this.kind.split(" ").join("").length;
}
return 10;
},
}, },
methods: { methods: {
chooseOptionOwner(e) { chooseOptionOwner(e) {
@@ -195,11 +233,9 @@ export default {
first_name: foundEmployee.first_name, first_name: foundEmployee.first_name,
patronymic: foundEmployee.patronymic, patronymic: foundEmployee.patronymic,
}; };
this.ownerSelectSize = this.ownerName.split(" ").join("").length;
}, },
chooseOptionTypeEvent(e) { chooseOptionTypeEvent(e) {
this.kind = e.target.id; this.kind = e.target.id;
this.kindEventSelectSize = this.kind.split(" ").join("").length;
}, },
chooseOptionMember(e) { chooseOptionMember(e) {
let foundMember = this.membersData.find( let foundMember = this.membersData.find(
@@ -238,14 +274,40 @@ export default {
}, },
sendEventData() { sendEventData() {
this.eventData = { this.eventData = {
start: this.eventStartTime, id: this.id,
end: this.eventEndTime, start: this.addDate(this.startTime, this.startDate),
end: this.addDate(this.endTime, this.endDate),
kind: this.kind, kind: this.kind,
employees: [this.employees], employees: [this.employees],
members: [this.members], members: [this.members],
}; };
this.closeForm(); this.closeForm();
}, },
addDate(time, data) {
return `${data}T${time}:00Z`;
},
trimTime(str) {
return str.slice(11, -4);
},
trimDate(str) {
return str.slice(0, 12);
},
},
mounted() {
this.id = this.selectedEventData.id || null;
this.startTime = this.trimTime(this.selectedEventData.start) || "";
this.endTime = this.trimTime(this.selectedEventData.end) || "";
this.kind = this.selectedEventData.kind || "";
this.employees = this.selectedEventData.employees[0] || {
employee: null,
role: "owner",
};
this.members = this.selectedEventData.members[0] || {
member: null,
role: null,
};
this.startDate = this.trimDate(this.selectedEventData.start);
this.endDate = this.trimDate(this.selectedEventData.end);
}, },
}; };
</script> </script>
@@ -281,6 +343,11 @@ export default {
border-radius: 4px border-radius: 4px
background-color: var(--bg-ligth-blue-color) background-color: var(--bg-ligth-blue-color)
.date-input
width: 120px
border-radius: 4px
background-color: var(--bg-ligth-blue-color)
.icon .icon
width: 24px width: 24px
height: 24px height: 24px

View File

@@ -3,11 +3,11 @@
button#day.py-2.px-3( button#day.py-2.px-3(
:class="dayLayoutState" :class="dayLayoutState"
@click="changeSelectedLayout" @click="changeSelectedLayout"
) День ) День
button#week.py-2.px-3( button#week.py-2.px-3(
:class="weekLayoutState" :class="weekLayoutState"
@click="changeSelectedLayout" @click="changeSelectedLayout"
) Неделя ) Неделя
</template> </template>
<script> <script>

View File

@@ -1,14 +1,14 @@
<template lang="pug"> <template lang="pug">
.schedule.ml-2( .schedule.ml-2(
:style="scheduleWidth" :style="scheduleWidth"
) )
calendar-header( calendar-header(
:current-date="currentDate" :current-date="currentDate"
:is-current-date="isCurrentDate" :is-current-date="isCurrentDate"
@previous-date="previousDate" @previous-date="previousDate"
@next-date="nextDate" @next-date="nextDate"
@selected-layout="selectedLayout" @selected-layout="selectedLayout"
) )
.schedule-body .schedule-body
.column-wrapper.flex.ml-20(:style="columnWrapperWidth") .column-wrapper.flex.ml-20(:style="columnWrapperWidth")
calendar-column( calendar-column(
@@ -19,6 +19,7 @@
:day-start-time="validateStartTime" :day-start-time="validateStartTime"
:day-end-time="validateEndTime" :day-end-time="validateEndTime"
:style="columnSize" :style="columnSize"
@selected-event="writeEventData"
) )
.flex.w-full.relative .flex.w-full.relative
.time-coil-wrapper.left-0.-mt-12.pt-9 .time-coil-wrapper.left-0.-mt-12.pt-9
@@ -40,7 +41,14 @@
calendar-background( calendar-background(
:time-coil="timeCoil" :time-coil="timeCoil"
:owners-count="ownersCount" :owners-count="ownersCount"
) )
calendar-form-add-event(
v-if="isOpenForm"
:close-form="closeFormCreateEvent"
:owners-data="ownersData"
:members-data="membersData"
:selected-event-data="selectedEvent"
)
</template> </template>
<script> <script>
@@ -49,6 +57,7 @@ import CalendarHeader from "./CalendarHeader.vue";
import CalendarBackground from "./CalendarBackground.vue"; import CalendarBackground from "./CalendarBackground.vue";
import CalendarClockColumn from "./CalendarClockColumn.vue"; import CalendarClockColumn from "./CalendarClockColumn.vue";
import CalendarColumn from "./CalendarColumn.vue"; import CalendarColumn from "./CalendarColumn.vue";
import CalendarFormAddEvent from "./CalendarFormAddEvent.vue";
export default { export default {
name: "CalendarSchedule", name: "CalendarSchedule",
components: { components: {
@@ -56,6 +65,7 @@ export default {
CalendarBackground, CalendarBackground,
CalendarClockColumn, CalendarClockColumn,
CalendarColumn, CalendarColumn,
CalendarFormAddEvent,
}, },
props: { props: {
currentDate: { currentDate: {
@@ -83,6 +93,14 @@ export default {
return []; return [];
}, },
}, },
membersData: {
type: Array,
default() {
return [];
},
},
closeFormCreateEvent: Function,
isOpenForm: Boolean,
}, },
data() { data() {
return { return {
@@ -94,6 +112,20 @@ export default {
pixelsPerHour: 62, pixelsPerHour: 62,
columnHeaderHeight: 48, columnHeaderHeight: 48,
defaultColumnWidth: 470, defaultColumnWidth: 470,
selectedEvent: {
id: null,
start: "",
end: "",
kind: "",
employees: {
employee: null,
role: "owner",
},
members: {
member: null,
role: null,
},
},
}; };
}, },
computed: { computed: {
@@ -284,6 +316,10 @@ export default {
}); });
return filteredArray; return filteredArray;
}, },
writeEventData(eventData) {
this.selectedEvent = eventData;
this.$emit("open-change-form");
},
}, },
watch: { watch: {
currentTime() { currentTime() {