mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-21 14:29:34 +00:00
[task overview] header
This commit is contained in:
1 parent
a630a360de
commit
288ff16e7d
7 files changed
+118
-11
No files matched your search
@@ -5,7 +5,36 @@
|
|||||||
"surname": "Glasnak",
|
"surname": "Glasnak",
|
||||||
"work_hours_from": "08:00",
|
"work_hours_from": "08:00",
|
||||||
"work_hours_to": "19:00",
|
"work_hours_to": "19:00",
|
||||||
"unscheduled_time": 123123123,
|
"unscheduled_times": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 30
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 40
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"time": 70
|
||||||
|
}
|
||||||
|
],
|
||||||
"dates": [
|
"dates": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
|
|||||||
@@ -32,4 +32,5 @@ th
|
|||||||
.border-select .v-input__control
|
.border-select .v-input__control
|
||||||
border: 1px solid #E5E5E5 !important
|
border: 1px solid #E5E5E5 !important
|
||||||
|
|
||||||
|
.min-h-100
|
||||||
|
min-height: 100%
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="vuecal__flex vuecal__cells vuecal__scrollable-body" :class="`${view.id}-view`" grow="grow" :wrap="!cellOrSplitMinWidth || !isWeekView" :column="!!cellOrSplitMinWidth">
|
<div class="vuecal__flex vuecal__cells vuecal__scrollable-body" :class="`${view.id}-view`" grow="grow" :wrap="!cellOrSplitMinWidth || !isWeekView" :column="!!cellOrSplitMinWidth">
|
||||||
<weekdays-headings v-if="cellOrSplitMinWidth && isWeekView" :transition-direction="transitionDirection" :week-days="weekDays" :switch-to-narrower-view="switchToNarrowerView" :style="cellOrSplitMinWidth ? `min-width: ${cellOrSplitMinWidth}px` : ''">
|
<weekdays-headings v-if="cellOrSplitMinWidth && isWeekView" :transition-direction="transitionDirection" :week-days="weekDays" :switch-to-narrower-view="switchToNarrowerView" :style="cellOrSplitMinWidth ? `min-width: ${cellOrSplitMinWidth}px` : ''" :unscheduledTime="unscheduledTime">
|
||||||
<template #weekday-heading="{ heading, view }" v-if="$slots['weekday-heading']">
|
<template #weekday-heading="{ heading, view }" v-if="$slots['weekday-heading']">
|
||||||
<slot name="weekday-heading" :heading="heading" :view="view"></slot>
|
<slot name="weekday-heading" :heading="heading" :view="view"></slot>
|
||||||
</template>
|
</template>
|
||||||
@@ -185,6 +185,7 @@ export default {
|
|||||||
// This prevents drag creation by mistake when you want to navigate.
|
// This prevents drag creation by mistake when you want to navigate.
|
||||||
dragToCreateThreshold: { type: Number, default: 15 },
|
dragToCreateThreshold: { type: Number, default: 15 },
|
||||||
editableEvents: { type: [Boolean, Object], default: false },
|
editableEvents: { type: [Boolean, Object], default: false },
|
||||||
|
unscheduledTime: { type: Array, default: [] },
|
||||||
events: { type: Array, default: () => [] },
|
events: { type: Array, default: () => [] },
|
||||||
eventsCountOnYearView: { type: Boolean, default: false },
|
eventsCountOnYearView: { type: Boolean, default: false },
|
||||||
eventsOnMonthView: { type: [Boolean, String], default: false },
|
eventsOnMonthView: { type: [Boolean, String], default: false },
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
$time-column-width: 3em;
|
$time-column-width: 3em;
|
||||||
$week-numbers-width: 3em;
|
$week-numbers-width: 3em;
|
||||||
$time-column-width-12: 4em; // twelve-hour clock shows am/pm.
|
$time-column-width-12: 4em; // twelve-hour clock shows am/pm.
|
||||||
$weekdays-headings-height: 2.8em;
|
$weekdays-headings-height: 4em;
|
||||||
$weekdays-headings-height-with-splits: 3.4em;
|
$weekdays-headings-height-with-splits: 3.4em;
|
||||||
$splits-headers-height: 1.5em;
|
$splits-headers-height: 1.5em;
|
||||||
|
|
||||||
|
|||||||
@@ -30,9 +30,14 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
transitionDirection: { type: String, default: 'right' },
|
transitionDirection: { type: String, default: 'right' },
|
||||||
weekDays: { type: Array, default: () => [] },
|
weekDays: { type: Array, default: () => [] },
|
||||||
switchToNarrowerView: { type: Function, default: () => {} }
|
switchToNarrowerView: { type: Function, default: () => {} },
|
||||||
|
unscheduledTime: { type: Array, default: [] }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// created() {
|
||||||
|
// console.log(this.weekDays)
|
||||||
|
// },
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
selectCell (date, DOMEvent) {
|
selectCell (date, DOMEvent) {
|
||||||
if (date.getTime() !== this.view.selectedDate.getTime()) {
|
if (date.getTime() !== this.view.selectedDate.getTime()) {
|
||||||
@@ -43,6 +48,9 @@ export default {
|
|||||||
cleanupHeading: heading => ({
|
cleanupHeading: heading => ({
|
||||||
label: heading.full,
|
label: heading.full,
|
||||||
date: heading.date,
|
date: heading.date,
|
||||||
|
unscheduledTime: heading.unscheduledTime,
|
||||||
|
name: heading.name,
|
||||||
|
initials: heading.initials,
|
||||||
...(heading.today ? { today: heading.today } : {})
|
...(heading.today ? { today: heading.today } : {})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -54,6 +62,10 @@ export default {
|
|||||||
let todayFound = false
|
let todayFound = false
|
||||||
const headings = this.weekDays.map((cell, i) => {
|
const headings = this.weekDays.map((cell, i) => {
|
||||||
const date = this.utils.date.addDays(this.view.startDate, this.vuecal.startWeekOnSunday ? i - 1 : i)
|
const date = this.utils.date.addDays(this.view.startDate, this.vuecal.startWeekOnSunday ? i - 1 : i)
|
||||||
|
let unscheduledTime = this.unscheduledTime[i].time ? this.unscheduledTime[i].time : 0
|
||||||
|
unscheduledTime = Math.floor(unscheduledTime / 60) + "," + String(unscheduledTime % 60)[0]
|
||||||
|
const name = this.unscheduledTime[i].name + " " + this.unscheduledTime[i].surname
|
||||||
|
const initials = this.unscheduledTime[i].name.charAt(0).toUpperCase() + this.unscheduledTime[i].surname.charAt(0).toUpperCase()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hide: cell.hide,
|
hide: cell.hide,
|
||||||
@@ -62,6 +74,9 @@ export default {
|
|||||||
// week days when does not fit on screen or with small/xsmall options.
|
// week days when does not fit on screen or with small/xsmall options.
|
||||||
small: cell.short || cell.label.substr(0, 3),
|
small: cell.short || cell.label.substr(0, 3),
|
||||||
xsmall: cell.short || cell.label.substr(0, 1),
|
xsmall: cell.short || cell.label.substr(0, 1),
|
||||||
|
unscheduledTime: unscheduledTime,
|
||||||
|
name: name,
|
||||||
|
initials: initials,
|
||||||
|
|
||||||
// Only for week view.
|
// Only for week view.
|
||||||
...(this.view.id === 'week' ? {
|
...(this.view.id === 'week' ? {
|
||||||
@@ -71,6 +86,8 @@ export default {
|
|||||||
} : {})
|
} : {})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
console.log(headings)
|
||||||
return headings
|
return headings
|
||||||
},
|
},
|
||||||
cellWidth () {
|
cellWidth () {
|
||||||
|
|||||||
@@ -10,19 +10,32 @@
|
|||||||
:onEventClick="taskClicked"
|
:onEventClick="taskClicked"
|
||||||
:editable-events="vueCalConfig.editing"
|
:editable-events="vueCalConfig.editing"
|
||||||
:events="calData.dates"
|
:events="calData.dates"
|
||||||
|
:unscheduledTime="calData.unscheduled_times"
|
||||||
:overlaps-per-time-step="false"
|
:overlaps-per-time-step="false"
|
||||||
:showTimeInCells="false"
|
:showTimeInCells="false"
|
||||||
:time-cell-height="200"
|
:time-cell-height="200"
|
||||||
:min-cell-width="300"
|
:min-cell-width="300"
|
||||||
@ready="scrollToYesterday"
|
@ready="onReady()"
|
||||||
@view-change="weekChanged"
|
@view-change="weekChanged"
|
||||||
@event-drop="eventMoved"
|
@event-drop="eventMoved"
|
||||||
>
|
>
|
||||||
<template v-slot:weekday-heading="{ heading }">
|
<template v-slot:weekday-heading="{ heading }">
|
||||||
<span class="d-flex align-center">
|
<div class="w-100 h-100 d-flex flex-column">
|
||||||
<img v-if="getHeadingDate(heading.date) == 'Dnes'" :src="require('./_img/home-icon.svg')" class="mr-2">
|
<span class="d-flex align-center">
|
||||||
<p>{{ getHeadingDate(heading.date) }}</p>
|
<img v-if="getHeadingDate(heading.date) == 'Dnes'" :src="require('./_img/home-icon.svg')" class="mr-2">
|
||||||
</span>
|
<p>{{ getHeadingDate(heading.date) }}</p>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div class="unscheduled-time d-flex align-center text-left">
|
||||||
|
<div class="unscheduled-time-initials d-flex align-center justify-center me-4">
|
||||||
|
<p>{{heading.initials}}</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p class="mb-0 mt-0 unscheduled-time-name">{{heading.name}}</p>
|
||||||
|
<h1 class="mb-0 mt-0">{{heading.unscheduledTime}} h</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:time-cell="{ hours, minutes }">
|
<template v-slot:time-cell="{ hours, minutes }">
|
||||||
@@ -97,6 +110,11 @@ export default {
|
|||||||
this.$emit('eventMoved', e)
|
this.$emit('eventMoved', e)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onReady() {
|
||||||
|
this.scrollToYesterday()
|
||||||
|
this.correctTimecolumnMargin()
|
||||||
|
},
|
||||||
|
|
||||||
scrollToYesterday() {
|
scrollToYesterday() {
|
||||||
if (!document.getElementsByClassName('yesterday-cell').length) return
|
if (!document.getElementsByClassName('yesterday-cell').length) return
|
||||||
|
|
||||||
@@ -105,6 +123,13 @@ export default {
|
|||||||
scrollContainer.scrollLeft = yesterdayCell.offsetLeft - scrollContainer.offsetLeft - 20
|
scrollContainer.scrollLeft = yesterdayCell.offsetLeft - scrollContainer.offsetLeft - 20
|
||||||
},
|
},
|
||||||
|
|
||||||
|
correctTimecolumnMargin() {
|
||||||
|
const heightOfDayHeader = document.getElementsByClassName('vuecal__heading')[0].clientHeight
|
||||||
|
console.log(heightOfDayHeader)
|
||||||
|
console.log(document.getElementsByClassName('vuecal__time-column')[0].style)
|
||||||
|
document.getElementsByClassName('vuecal__time-column')[0].style.marginTop = `${heightOfDayHeader}px`
|
||||||
|
},
|
||||||
|
|
||||||
getHeadingDate(value) {
|
getHeadingDate(value) {
|
||||||
const date = new Date(value)
|
const date = new Date(value)
|
||||||
|
|
||||||
@@ -178,6 +203,33 @@ export default {
|
|||||||
.vuecal__cell:before
|
.vuecal__cell:before
|
||||||
border: none
|
border: none
|
||||||
|
|
||||||
|
.vuecal__heading
|
||||||
|
height: fit-content
|
||||||
|
min-height: 100%
|
||||||
|
padding-right: 20px
|
||||||
|
|
||||||
|
.unscheduled-time
|
||||||
|
background: rgba(0, 0, 0, 0.04)
|
||||||
|
border-radius: 24px
|
||||||
|
padding: 10px 15px
|
||||||
|
margin-top: 10px
|
||||||
|
|
||||||
|
.unscheduled-time-name
|
||||||
|
font-weight: 400
|
||||||
|
font-size: 15px
|
||||||
|
|
||||||
|
.unscheduled-time-initials
|
||||||
|
width: 50px
|
||||||
|
height: 50px
|
||||||
|
background: #6200EE
|
||||||
|
border-radius: 50%
|
||||||
|
|
||||||
|
p
|
||||||
|
font-weight: 400
|
||||||
|
font-size: 20px
|
||||||
|
color: white
|
||||||
|
|
||||||
|
|
||||||
.vuecal__cells.week-view
|
.vuecal__cells.week-view
|
||||||
border-left: 1px solid rgba(0, 0, 0, .1)
|
border-left: 1px solid rgba(0, 0, 0, .1)
|
||||||
padding-left: 20px
|
padding-left: 20px
|
||||||
@@ -203,7 +255,7 @@ export default {
|
|||||||
flex-wrap: nowrap !important
|
flex-wrap: nowrap !important
|
||||||
|
|
||||||
.vuecal__cell
|
.vuecal__cell
|
||||||
padding: 10px 10px 10px 0px
|
padding: 10px 20px 10px 0px
|
||||||
|
|
||||||
.vuecal:not(.vuecal--day-view) .vuecal__cell--selected:not(.vuecal__cell--today) ,
|
.vuecal:not(.vuecal--day-view) .vuecal__cell--selected:not(.vuecal__cell--today) ,
|
||||||
.vuecal__cell--current:not(.vuecal__cell--today),
|
.vuecal__cell--current:not(.vuecal__cell--today),
|
||||||
|
|||||||
@@ -64,6 +64,13 @@ export default {
|
|||||||
delete event.ends_at
|
delete event.ends_at
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.timelineData.unscheduled_times.forEach(time => {
|
||||||
|
time.name = this.timelineData.name
|
||||||
|
time.surname = this.timelineData.surname
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(this.timelineData.unscheduled_times)
|
||||||
|
|
||||||
// format working hours
|
// format working hours
|
||||||
this.config.startHour = Number(this.timelineData.work_hours_from.split(':')[0]) - 1
|
this.config.startHour = Number(this.timelineData.work_hours_from.split(':')[0]) - 1
|
||||||
this.config.endHour = Number(this.timelineData.work_hours_to.split(':')[0]) + 1
|
this.config.endHour = Number(this.timelineData.work_hours_to.split(':')[0]) + 1
|
||||||
|
|||||||
Reference in new issue
Block a user