FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
ameliabooking
/
assets
/
views
/
backend
/
parts
Edit File: DaysOff.vue
<template> <div class="am-days-off"> <div class="am-dialog-table"> <el-row :gutter="20" type="flex" align="middle" style="flex-wrap: wrap"> <el-col class="am-days-off__header"> <!-- Year Picker --> <el-date-picker v-model="filterDate" type="year" :clearable="false" :placeholder="$root.labels.pick_a_year" @change="filterDaysOff" /> <!-- /Year Picker --> <!-- Legend --> <div class="am-days-off__legend"> <div class="am-legend-repeat"><span class="type repeat"></span>{{ $root.labels.repeat_every_year }}</div> <div class="am-legend-once"><span class="type once"></span>{{ $root.labels.once_off }}</div> </div> <!-- /Legend --> </el-col> </el-row> </div> <!-- Employees Days Off --> <div class="am-employee-days-off"> <!-- Days Off Table --> <div class="am-dialog-table"> <!-- Days Off Title --> <h4 v-if="listedDaysOff.length > 0">{{ $root.labels.employee_days_off }}</h4> <!-- /Days Off Title --> <!-- Days Off Table Header --> <el-row :gutter="20" class="am-dialog-table-head days"> <el-col :span="12"><span>{{ $root.labels.date }}</span></el-col> <el-col :span="12"><span>{{ $root.labels.day_off_name }}</span></el-col> </el-row> <!-- /Days Off Table Header --> <!-- Day Off Row --> <el-row v-for="(dayOff, index) in yearDaysOff" :key="index" :gutter="20" type="flex" align="middle" class="am-day-off" style="flex-wrap: wrap" > <!-- Day Off Type and Date --> <el-col :xs="12" :sm="12" :md="12"> <span class="type" :class="{ 'repeat': dayOff.repeat, 'once': !dayOff.repeat }"></span> <el-tooltip effect="dark" :content="dayOff.startDate === dayOff.endDate ? getFrontedFormattedDate (dayOff.startDate) : getFrontedFormattedDate(dayOff.startDate) + ' - ' + getFrontedFormattedDate(dayOff.endDate)" placement="top-start" > <span> {{ dayOff.startDate === dayOff.endDate ? getFrontedFormattedDate (dayOff.startDate) : getFrontedFormattedDate(dayOff.startDate) + ' - ' + getFrontedFormattedDate(dayOff.endDate) }} </span> </el-tooltip> </el-col> <!-- /Day Off Type and Date --> <!-- Day Off Name --> <el-col :xs="12" :sm="12" :md="8" class="am-day-off__name-column"> <span :title="dayOff.name">{{ dayOff.name }}</span> </el-col> <!-- /Day Off Name --> <!-- Day Off Edit and Delete --> <el-col :xs="24" :sm="24" :md="4" class="align-right"> <div class="am-edit-element" @click="editDayOff(dayOff)"> <img :src="$root.getUrl + 'public/img/edit-pen.svg'"> </div> <div class="am-delete-element" @click="deleteDayOff(dayOff)"> <i class="el-icon-minus"></i> </div> </el-col> <!-- /Day Off Edit and Delete --> </el-row> <!-- /Day Off Row --> <!-- Add Day Off button --> <el-row> <el-col> <div class="am-add-element" @click="addDayOff"> <i class="el-icon-plus"></i><span class="am-add-day-off">{{ $root.labels.add_day_off }}</span> </div> </el-col> </el-row> <!-- /Add Day Off button --> </div> <!-- /Days Off Table --> <!-- Days Off Form --> <transition name="fade"> <div class="am-day-off-add" v-show="showDayOffForm"> <!-- Days Off Name --> <el-form :model="model" ref="model" :rules="rules" label-position="top" @submit.prevent="saveDayOff"> <el-form-item :label="$root.labels.day_off_name + ':'" prop="dayOffName"> <el-input v-model="model.dayOffName" auto-complete="off" :placeholder="$root.labels.add_day_off_placeholder" > </el-input> </el-form-item> <!-- Days Off Date --> <el-row :gutter="20"> <el-col :sm="24" class="v-calendar-column"> <el-form-item :label="$root.labels.date + ':'" prop="dayOffDates"> <v-date-picker v-model="model.dayOffDates" mode='range' input-class="el-input__inner" popover-visibility="focus" popover-direction="top" :popover-align="screenWidth < 768 ? 'center' : 'left'" :is-required=true :is-expanded=false :show-day-popover=false :tint-color='isCabinet ? $root.settings.customization.primaryColor : "#1A84EE"' :input-props='{class: "el-input__inner", readOnly: "readonly"}' :placeholder="$root.labels.pick_a_date_or_range" :formats="vCalendarFormats" > </v-date-picker> </el-form-item> </el-col> </el-row> <!-- Days Off Controls --> <el-row :gutter="20"> <!-- Days Off Repeat --> <el-col :sm="12"> <el-checkbox v-model="model.dayOffRepeat" class="am-semi-strong"> {{ $root.labels.days_off_repeat_yearly }} </el-checkbox> </el-col> <!-- Days Off Buttons --> <el-col :sm="12" class="align-right am-day-off-add-buttons"> <el-button size="small" @click="showDayOffForm = !showDayOffForm">{{ $root.labels.cancel }}</el-button> <el-button size="small" type="primary" @click="saveDayOff" class="am-dialog-create"> {{ $root.labels.days_off_add }} </el-button> </el-col> <!-- /Days Off Buttons --> </el-row> </el-form> </div> </transition> </div> <!-- Company Days Off --> <div class="am-company-days-off" v-if="listedDaysOff.length > 0"> <!-- Listed Days Off Table --> <div class="am-dialog-table"> <!-- Listed Days Off Table Header --> <h4>{{ $root.labels.company_days_off }}</h4> <el-row :gutter="20" class="am-dialog-table-head days"> <el-col :span="12"><span>{{ $root.labels.date }}</span></el-col> <el-col :span="12"><span>{{ $root.labels.day_off_name }}</span></el-col> </el-row> <!-- Listed Day Off Row --> <el-row v-for="(dayOff, index) in yearListedDaysOff" :key="index" :gutter="20" type="flex" align="middle" class="am-day-off" > <!-- Listed Day Off Type and Date --> <el-col :span="12"> <span class="type" :class="{ 'repeat': dayOff.repeat, 'once': !dayOff.repeat }"></span> <span> {{ dayOff.startDate === dayOff.endDate ? getFrontedFormattedDate (dayOff.startDate) : getFrontedFormattedDate(dayOff.startDate) + ' - ' + getFrontedFormattedDate(dayOff.endDate) }} </span> </el-col> <!-- Listed Day Off Name --> <el-col :span="8"> <span>{{ dayOff.name }}</span> </el-col> </el-row> <!-- Edit Company Days Off --> <el-row v-if="allowEditCompanyDaysOff"> <el-col :span="24"> <div class="am-add-element" @click="editCompanyDaysOffSettings">{{ $root.labels.edit_company_days_off }} </div> </el-col> </el-row> </div> </div> </div> </template> <script> import dateMixin from '../../../js/common/mixins/dateMixin' import imageMixin from '../../../js/common/mixins/imageMixin' import windowMixin from '../../../js/backend/mixins/windowMixin' export default { mixins: [ imageMixin, dateMixin, windowMixin ], props: { daysOff: { type: Array }, listedDaysOff: { default: () => [], type: Array }, allowEditCompanyDaysOff: { type: Boolean, default: true, required: false }, isCabinet: { type: Boolean, default: false, required: false } }, data () { return { editedDayOffIndex: -1, filterDate: this.$moment(), model: { dayOffDates: null, dayOffId: 0, dayOffName: '', dayOffRepeat: 0 }, rules: { dayOffName: [ {required: true, message: this.$root.labels.days_off_name_warning, trigger: 'submit'} ], dayOffDates: [ {required: true, message: this.$root.labels.days_off_date_warning, trigger: 'submit'} ] }, settings: this.daysOff.slice(0), showDayOffForm: false, yearDaysOff: [], yearListedDaysOff: [] } }, mounted () { this.filterDaysOff() }, methods: { editDayOff (dayOff) { this.model.dayOffId = dayOff.hasOwnProperty('id') ? dayOff.id : 0 this.model.dayOffName = dayOff.name this.model.dayOffDates = { start: this.$moment(dayOff.startDate, 'YYYY-MM-DD').toDate(), end: this.$moment(dayOff.endDate, 'YYYY-MM-DD').toDate() } this.model.dayOffRepeat = dayOff.repeat this.showDayOffForm = true this.editedDayOffIndex = this.settings.indexOf(dayOff) }, addDayOff () { this.editedDayOffIndex = -1 this.model.dayOffId = 0 this.model.dayOffName = '' this.model.dayOffRepeat = 0 this.model.dayOffDates = null this.showDayOffForm = true }, saveDayOff () { this.$refs.model.validate((valid) => { if (valid) { if (this.editedDayOffIndex !== -1) { this.settings.splice(this.editedDayOffIndex, 1, this.dayOff) } else { this.settings.push(this.dayOff) } // Clear validation on inputs this.$refs.model.clearValidate() this.showDayOffForm = false this.filterDate = this.$moment(this.dayOff.startDate, 'YYYY-MM-DD').toDate() this.filterDaysOff() this.$emit('changeDaysOff', this.settings) } else { return false } }) }, deleteDayOff (dayOff) { let index = this.settings.indexOf(dayOff) this.settings.splice(index, 1) this.filterDaysOff() this.$emit('changeDaysOff', this.settings) }, filter (list) { let $that = this let filteredByYear = list.filter(dayOff => $that.$moment(dayOff.startDate, 'YYYY-MM-DD').year() === $that.filterYear && !dayOff.repeat) let filteredByRepeat = list.filter(dayOff => dayOff.repeat) filteredByRepeat.forEach(function (dayOff, index) { if ($that.$moment(dayOff.startDate, 'YYYY-MM-DD').year() === $that.$moment(dayOff.endDate, 'YYYY-MM-DD').year()) { filteredByRepeat[index].endDate = $that.$moment(dayOff.endDate, 'YYYY-MM-DD').year($that.filterYear).format('YYYY-MM-DD') } else { filteredByRepeat[index].endDate = $that.$moment(dayOff.endDate, 'YYYY-MM-DD').year($that.filterYear + 1).format('YYYY-MM-DD') } filteredByRepeat[index].startDate = $that.$moment(dayOff.startDate, 'YYYY-MM-DD').year($that.filterYear).format('YYYY-MM-DD') }) let filtered = filteredByRepeat.concat(filteredByYear) return filtered.sort((a, b) => $that.$moment(a.startDate).diff(b.startDate)) }, editCompanyDaysOffSettings () { this.$emit('showCompanyDaysOffSettingsDialog') }, filterDaysOff () { this.yearDaysOff = this.filter(this.settings) this.yearListedDaysOff = this.filter(this.listedDaysOff) } }, computed: { filterYear () { return this.$moment(this.filterDate, 'YYYY-MM-DD').year() }, dayOff () { return { id: this.model.dayOffId, name: this.model.dayOffName, startDate: this.$moment(this.model.dayOffDates.start).format('YYYY-MM-DD'), endDate: this.$moment(this.model.dayOffDates.end).format('YYYY-MM-DD'), repeat: this.model.dayOffRepeat } } }, watch: { settings () { this.yearDaysOff = this.filter(this.settings) }, listedDaysOff () { this.yearListedDaysOff = this.filter(this.listedDaysOff) } } } </script>
Save
Back