Merge pull request #131 from dderbentsov/UC-43

WIP Исправлена ошибка запросов, сделано удаление
This commit is contained in:
Daria Golova
2022-11-15 20:30:36 +03:00
committed by GitHub
10 changed files with 198 additions and 63 deletions

View File

@@ -1,7 +1,7 @@
<template lang="pug"> <template lang="pug">
button.base-button.text-base( button.base-button.text-base(
:disabled="disabled", :disabled="disabled",
:class="{'rounded': rounded, 'outlined': outlined, 'secondary': secondary, 'confirm': confirm, 'added': added}" :class="{'rounded': rounded, 'outlined': outlined, 'outlined-red': outlinedRed, 'secondary': secondary, 'confirm': confirm, 'added': added}"
:style="{height: size + 'px', minWidth: size + 'px'}" :style="{height: size + 'px', minWidth: size + 'px'}"
) )
.button-container .button-container
@@ -25,6 +25,7 @@ export default {
props: { props: {
confirm: Boolean, confirm: Boolean,
outlined: Boolean, outlined: Boolean,
outlinedRed: Boolean,
added: Boolean, added: Boolean,
rounded: Boolean, rounded: Boolean,
disabled: Boolean, disabled: Boolean,
@@ -84,21 +85,38 @@ export default {
.outlined .outlined
background-color: var(--default-white) background-color: var(--default-white)
border: 1px solid var(--btn-blue-color) border: 1.5px solid var(--btn-blue-color)
color: var(--btn-blue-color) color: var(--btn-blue-color)
&:active &:active
background-color: var(--default-white) background-color: var(--default-white)
border: 1px solid var(--font-dark-blue-color) border: 1.5px solid var(--font-dark-blue-color)
color: var(--font-dark-blue-color) color: var(--font-dark-blue-color)
&:hover &:hover
background-color: var(--default-white) background-color: var(--default-white)
border: 1px solid var(--btn-blue-color-hover) border: 1.5px solid var(--btn-blue-color-hover)
color: var(--btn-blue-color-hover) color: var(--btn-blue-color-hover)
&:disabled, &[disabled] &:disabled, &[disabled]
background-color: var(--default-white) background-color: var(--default-white)
border: 1px solid var(--btn-blue-color-1) border: 1.5px solid var(--btn-blue-color-1)
color: var(--btn-blue-color-1) color: var(--btn-blue-color-1)
.outlined-red
background-color: var(--default-white)
border: 1.5px solid var(--border-red-color)
color: var(--border-red-color)
&:active
background-color: var(--default-white)
border: 1.5px solid var(--bg-event-red-color)
color: var(--bg-event-red-color)
&:hover
background-color: var(--default-white)
border: 1.5px solid var(--bg-event-red-color-1)
color: var(--bg-event-red-color-1)
&:disabled, &[disabled]
background-color: var(--default-white)
border: 1.5px solid var(--bg-event-red-color-0)
color: var(--bg-event-red-color-0)
.added .added
border: 2px solid var(--btn-blue-color) border: 2px solid var(--btn-blue-color)
&:hover &:hover

View File

@@ -4,7 +4,7 @@
.base-content(v-click-outside="clickOutside") .base-content(v-click-outside="clickOutside")
.base-header .base-header
.header-title.text {{ title }} .header-title.text {{ title }}
.icon-cancel(@click="value = false") .icon-cancel.text-sm(@click="value = false")
slot slot
</template> </template>
@@ -56,7 +56,7 @@ export default {
width: 100vw width: 100vw
height: 100vh height: 100vh
.base-content .base-content
padding: 32px padding: 32px 40px
background-color: var(--default-white) background-color: var(--default-white)
box-shadow: 4px 4px 8px rgba(9, 10, 21, 0.1), -4px -4px 8px rgba(9, 10, 21, 0.1) box-shadow: 4px 4px 8px rgba(9, 10, 21, 0.1), -4px -4px 8px rgba(9, 10, 21, 0.1)
border-radius: 4px border-radius: 4px
@@ -65,7 +65,7 @@ export default {
font-weight: 700 font-weight: 700
font-size: 20px font-size: 20px
line-height: 23px line-height: 23px
color: var(--font-dark-blue-color)
.base-header .base-header
display: flex display: flex
justify-content: space-between justify-content: space-between

View File

@@ -13,18 +13,36 @@
:events-data="eventsData" :events-data="eventsData"
:members-data="membersData" :members-data="membersData"
:sidebar-width="sidebarWidth" :sidebar-width="sidebarWidth"
:close-form-create-event="closeFormCreateEvent"
:is-open-form="isOpenForm"
:event-types="eventTypes" :event-types="eventTypes"
:change-form-was-closed="changeFormWasClosed" :change-form-was-closed="changeFormWasClosed"
@previous-date="switchPreviousDate" @previous-date="switchPreviousDate"
@next-date="switchNextDate" @next-date="switchNextDate"
@selected-layout="changeCalendarLayout" @selected-layout="changeCalendarLayout"
@open-change-form="openFormCreateEvent" @open-change-form="openFormCreateEvent"
@reset-change-form="resetChangeFormState"
@selected-event="writeEventData"
@delete-event="openModal"
)
calendar-form-add-event(
v-if="isOpenForm"
:close-form="closeFormCreateEvent"
:owners-data="employeesData"
:members-data="membersData"
:selected-event-data="selectedEvent"
:event-types="eventTypes"
@clear-selected-event-data="clearSelectedEvent"
@update-events="fetchEventsData" @update-events="fetchEventsData"
@close-change-form="setChangeFormState" @close-change-form="setChangeFormState"
@reset-change-form="resetChangeFormState"
) )
base-modal(
v-model="showModal"
title="Удаление события"
)
calendar-delete-modal(
:event-types="eventTypes"
:owner-event="selectedEvent"
:close-modal="changeShowModal"
)
</template> </template>
<script> <script>
@@ -32,17 +50,25 @@ import { fetchWrapper } from "../../shared/fetchWrapper.js";
import * as moment from "moment/moment"; import * as moment from "moment/moment";
import CalendarSchedule from "./components/CalendarSchedule.vue"; import CalendarSchedule from "./components/CalendarSchedule.vue";
import CalendarSidebar from "./components/CalendarSidebar.vue"; import CalendarSidebar from "./components/CalendarSidebar.vue";
import CalendarFormAddEvent from "./components/CalendarFormAddEvent.vue";
import BaseModal from "@/components/base/BaseModal.vue";
import CalendarDeleteModal from "./components/CalendarDeleteModal.vue";
export default { export default {
name: "TheCalendar", name: "TheCalendar",
components: { components: {
CalendarSchedule, CalendarSchedule,
CalendarSidebar, CalendarSidebar,
CalendarFormAddEvent,
BaseModal,
CalendarDeleteModal,
}, },
data() { data() {
return { return {
sidebarWidth: "72px", sidebarWidth: "72px",
calendarLayout: "", calendarLayout: "",
currentDate: moment(), currentDate: moment(),
selectedEvent: {},
showModal: false,
timeInformation: { timeInformation: {
dayStartTime: "08:00", dayStartTime: "08:00",
dayEndTime: "20:00", dayEndTime: "20:00",
@@ -89,7 +115,7 @@ export default {
}, },
fetchEventsData() { fetchEventsData() {
fetchWrapper fetchWrapper
.get("registry/event/") .get("registry/event/?limit=20")
.then((res) => this.saveEventsData(res)); .then((res) => this.saveEventsData(res));
}, },
changeWidth(value) { changeWidth(value) {
@@ -107,6 +133,28 @@ export default {
resetChangeFormState() { resetChangeFormState() {
this.changeFormWasClosed = false; this.changeFormWasClosed = false;
}, },
writeEventData(eventData) {
this.selectedEvent = eventData;
this.openFormCreateEvent();
},
clearSelectedEvent() {
this.selectedEvent = {};
},
openModal(eventData) {
this.selectedEvent = eventData;
this.showModal = true;
},
changeShowModal() {
this.showModal = false;
},
},
watch: {
showModal: function () {
if (this.showModal === false) {
this.setChangeFormState();
this.clearSelectedEvent();
}
},
}, },
mounted() { mounted() {
this.fetchPersonsData(); this.fetchPersonsData();

View File

@@ -23,6 +23,7 @@
:change-form-was-closed="changeFormWasClosed" :change-form-was-closed="changeFormWasClosed"
@selected-event="transmitEventData" @selected-event="transmitEventData"
@reset-change-form="transmitResetChangeForm" @reset-change-form="transmitResetChangeForm"
@delete-event="transmitDeleteEvent"
) )
</template> </template>
@@ -96,6 +97,9 @@ export default {
transmitResetChangeForm() { transmitResetChangeForm() {
this.$emit("reset-change-form"); this.$emit("reset-change-form");
}, },
transmitDeleteEvent(eventData) {
this.$emit("delete-event", eventData);
},
}, },
}; };
</script> </script>

View File

@@ -0,0 +1,58 @@
<template lang="pug">
.flex.flex-col.mb-1.mt-4
span.font-medium.text-base.modal-text.mb-3 Вы действительно хотите удалить это событие?
.card-container
calendar-event-description-card(
disabled,
:event-types="eventTypes",
:owner-event="ownerEvent"
)
.flex.gap-x-3.mt-6.font-semibold
base-button(
outlined,
:size=40,
@click="closeModal"
) Отменить
base-button(
outlined-red,
:size=40,
@click="deleteEvent"
) Удалить
</template>
<script>
import { fetchWrapper } from "@/shared/fetchWrapper.js";
import BaseButton from "@/components/base/BaseButton.vue";
import CalendarEventDescriptionCard from "./CalendarEventDescriptionCard.vue";
export default {
name: "CalendarDeleteModal",
components: { CalendarEventDescriptionCard, BaseButton },
props: {
ownerEvent: Object,
eventTypes: {
type: Array,
default() {
return [];
},
},
closeModal: Function,
},
methods: {
deleteEvent() {
fetchWrapper.del(`registry/event/${this.ownerEvent.id}/delete/`);
this.closeModal();
},
},
};
</script>
<style lang="sass" scoped>
.modal-text
color: var(--font-grey-color)
.card-container
width: 374px
height: 82px
border-radius: 4px
border: 1px solid var(--border-light-grey-color-1)
</style>

View File

@@ -25,11 +25,9 @@
:style="descriptionCardPosition" :style="descriptionCardPosition"
:owner-event="ownerEvent" :owner-event="ownerEvent"
:event-types="eventTypes" :event-types="eventTypes"
:event-time="eventTime"
:event-member="eventMember"
:description="description"
@selected-event="transmitEventData" @selected-event="transmitEventData"
@close-description-card="closeDescriptionCard" @close-description-card="closeDescriptionCard"
@delete-event="transmitDeleteEvent"
) )
</template> </template>
@@ -210,6 +208,9 @@ export default {
this.$emit("selected-event", this.ownerEvent); this.$emit("selected-event", this.ownerEvent);
this.hideDescriptionCard(); this.hideDescriptionCard();
}, },
transmitDeleteEvent() {
this.$emit("delete-event", this.ownerEvent);
},
hideDescriptionCard() { hideDescriptionCard() {
this.isOpenDescriptionCard = false; this.isOpenDescriptionCard = false;
}, },

View File

@@ -1,20 +1,21 @@
<template lang="pug"> <template lang="pug">
.wrapper.px-4.pt-14px.pb-4.font-medium.cursor-auto( .wrapper.px-4.pt-14px.pb-4.font-medium.cursor-auto(
:style="typeColor", :style="typeColor",
v-click-outside="close" v-click-outside="close",
:class="{'shadow': !disabled}"
) )
.flex.justify-between.items-center.mb-2 .flex.justify-between.items-center.mb-2
.flex .flex
span.inline-block.font-bold.text-base.mr-3.mt-2px {{ eventTime }} span.inline-block.font-bold.text-base.mr-3.mt-2px {{ eventTime }}
.type.text-xxs.px-14px.py-1(v-if="isCertainType") .type.text-xxs.px-14px.py-1(v-if="isCertainType")
span.type-text {{ ownerEvent.kind }} span.type-text {{ ownerEvent.kind }}
.right-side.flex.gap-x-4.text-sm .right-side.flex.gap-x-4.text-sm(v-if="!disabled")
.icon-basket.flex.items-center.cursor-pointer .icon-basket.flex.items-center.cursor-pointer(@click="transmitDeleteEvent")
.icon-edit.flex.items-center.cursor-pointer(@click="transmitEventData") .icon-edit.flex.items-center.cursor-pointer(@click="transmitEventData")
.icon-cancel.text-xxs.flex.items-center.cursor-pointer(@click="close") .icon-cancel.text-xxs.flex.items-center.cursor-pointer(@click="close")
.body.mr-6 .body.mr-6
span.text-base {{ eventMember }} span.text-base {{ eventMember }}
.flex.text-xxs.mt-4.justify-between .flex.text-xxs.mt-4.justify-between(v-if="!disabled")
.column .column
ul ul
li(v-for="elem in description" :key="elem") {{ elem }} li(v-for="elem in description" :key="elem") {{ elem }}
@@ -31,15 +32,10 @@ export default {
return []; return [];
}, },
}, },
eventTime: { disabled: {
type: String, type: Boolean,
default: "", default: false,
}, },
eventMember: {
type: String,
default: "",
},
description: Array,
}, },
data() { data() {
return { return {
@@ -74,6 +70,26 @@ export default {
return {}; return {};
} }
}, },
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);
},
description() {
return this.ownerEvent.description
? this.ownerEvent.description.split(", ")
: [];
},
}, },
methods: { methods: {
changeType() { changeType() {
@@ -82,8 +98,17 @@ export default {
transmitEventData() { transmitEventData() {
this.$emit("selected-event"); this.$emit("selected-event");
}, },
transmitDeleteEvent() {
this.$emit("delete-event");
},
close() { close() {
this.$emit("close-description-card"); if (!this.disabled) this.$emit("close-description-card");
},
trimTime(time) {
return time.slice(11, -4);
},
composeFullName(object) {
return `${object.last_name} ${object.first_name} ${object.patronymic}`;
}, },
}, },
}; };
@@ -93,8 +118,10 @@ export default {
.wrapper .wrapper
height: auto !important height: auto !important
background-color: var(--default-white) background-color: var(--default-white)
color: var(--font-dark-blue-color)
.shadow
border-radius: 4px border-radius: 4px
color: var(--font-black-color)
box-shadow: var(--default-shadow) box-shadow: var(--default-shadow)
.type .type

View File

@@ -1,5 +1,5 @@
<template lang="pug"> <template lang="pug">
.flex.flex-col.gap-y-6.pt-6.pb-7.px-8.event-form.fixed.right-0.bottom-4 .flex.flex-col.gap-y-6.pt-6.pb-7.px-8.event-form.fixed.right-0.bottom-4(v-click-outside="clearForm")
.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
@@ -225,7 +225,7 @@ export default {
label: this.trimOwnerName(last_name, first_name, patronymic), label: this.trimOwnerName(last_name, first_name, patronymic),
}, },
id: rest.id, id: rest.id,
role: rest.role, role: rest?.role || this.EMPLOYEE_TYPE,
}; };
} }
return { return {
@@ -254,7 +254,7 @@ export default {
label: this.trimMemberName(last_name, first_name, patronymic), label: this.trimMemberName(last_name, first_name, patronymic),
}, },
id: rest.id, id: rest.id,
role: rest.role, role: rest?.role || this.MEMBER_TYPE,
}; };
} }
return { return {

View File

@@ -22,8 +22,9 @@
:style="columnSize" :style="columnSize"
:event-types="eventTypes" :event-types="eventTypes"
:change-form-was-closed="changeFormWasClosed" :change-form-was-closed="changeFormWasClosed"
@selected-event="writeEventData" @selected-event="transmitEventData"
@reset-change-form="transmitResetChangeForm" @reset-change-form="transmitResetChangeForm"
@delete-event="transmitDeleteEvent"
) )
.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
@@ -46,17 +47,6 @@
: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"
:event-types="eventTypes"
@clear-selected-event-data="clearSelectedEvent"
@update-events="transmitUpdateEvents"
@close-change-form="transmitCloseChangeForm"
)
</template> </template>
<script> <script>
@@ -65,7 +55,6 @@ 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: {
@@ -73,7 +62,6 @@ export default {
CalendarBackground, CalendarBackground,
CalendarClockColumn, CalendarClockColumn,
CalendarColumn, CalendarColumn,
CalendarFormAddEvent,
}, },
props: { props: {
changeFormWasClosed: Boolean, changeFormWasClosed: Boolean,
@@ -108,8 +96,6 @@ export default {
return []; return [];
}, },
}, },
closeFormCreateEvent: Function,
isOpenForm: Boolean,
eventTypes: { eventTypes: {
type: Array, type: Array,
default() { default() {
@@ -127,7 +113,6 @@ export default {
pixelsPerHour: 62, pixelsPerHour: 62,
columnHeaderHeight: 48, columnHeaderHeight: 48,
defaultColumnWidth: 470, defaultColumnWidth: 470,
selectedEvent: {},
isScrolling: false, isScrolling: false,
}; };
}, },
@@ -319,19 +304,6 @@ export default {
}); });
return filteredArray; return filteredArray;
}, },
writeEventData(eventData) {
this.selectedEvent = eventData;
this.$emit("open-change-form");
},
clearSelectedEvent() {
this.selectedEvent = {};
},
transmitUpdateEvents() {
this.$emit("update-events");
},
transmitCloseChangeForm() {
this.$emit("close-change-form");
},
changeScrollingState(e) { changeScrollingState(e) {
this.isScrolling = e.target.scrollTop !== 0; this.isScrolling = e.target.scrollTop !== 0;
}, },
@@ -346,6 +318,12 @@ export default {
transmitResetChangeForm() { transmitResetChangeForm() {
this.$emit("reset-change-form"); this.$emit("reset-change-form");
}, },
transmitEventData(eventData) {
this.$emit("selected-event", eventData);
},
transmitDeleteEvent(eventData) {
this.$emit("delete-event", eventData);
},
}, },
watch: { watch: {
currentTime() { currentTime() {

View File

@@ -12,7 +12,8 @@ function handleRequest(method, url, headers, attempts, body) {
})(); })();
}) })
.then((res) => { .then((res) => {
return res.json(); if (res._bodyText) return res.json();
return res.ok;
}) })
.catch((err) => { .catch((err) => {
console.log(err); console.log(err);