From 76918f6b2cfc304f53cc7bcba89f464d1975d242 Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Mon, 4 Oct 2021 01:29:15 +0200 Subject: [PATCH] CEventsCalendar.ts calendarioeventi.ts CMySingleEvent.ts evento.ts --- docs/nuovo_componente.ts.old | 4 + package.json | 2 + public/images/noimg.png | Bin 0 -> 27444 bytes quasar.conf.js | 5 + quasar.extensions.json | 4 +- src/boot/calendar.ts | 8 + ...entsCalendar.ts.off => CEventsCalendar.ts} | 370 +++++++++------ ...tsCalendar.vue.off => CEventsCalendar.vue} | 441 +++++++++--------- src/components/CGridTableRec/CGridTableRec.ts | 2 +- .../CGridTableRec/CGridTableRec.vue | 2 +- src/components/CMyFieldDb/CMyFieldDb.vue | 2 +- src/components/CMySelect/CMySelect.ts | 18 +- src/components/CMySelect/CMySelect.vue | 8 +- .../CMySingleEvent/CMySingleEvent.ts | 95 ++++ .../CMySingleEvent/CMySingleEvent.ts.off | 85 ---- ...ingleEvent.vue.off2 => CMySingleEvent.vue} | 106 ++--- src/components/index.ts | 2 + src/db/static_data.ts | 31 ++ src/layouts/menuone/menuOne.ts | 4 +- src/mixins/mixin-users.ts | 2 +- .../calendarioeventi/calendarioeventi.scss | 0 src/root/calendarioeventi/calendarioeventi.ts | 21 + .../calendarioeventi/calendarioeventi.vue | 31 ++ src/root/evento/evento.scss | 86 ++++ src/root/evento/evento.ts | 145 ++++++ src/root/evento/evento.vue | 65 +++ src/router/route-config.ts | 2 +- src/store/CalendarStore.ts | 52 ++- src/store/Modules/tools.ts | 18 +- src/views/login/signup/signup.ts | 6 +- yarn.lock | 12 + 31 files changed, 1068 insertions(+), 561 deletions(-) create mode 100755 public/images/noimg.png create mode 100755 src/boot/calendar.ts rename src/components/CEventsCalendar/{CEventsCalendar.ts.off => CEventsCalendar.ts} (73%) rename src/components/CEventsCalendar/{CEventsCalendar.vue.off => CEventsCalendar.vue} (69%) create mode 100755 src/components/CMySingleEvent/CMySingleEvent.ts delete mode 100755 src/components/CMySingleEvent/CMySingleEvent.ts.off rename src/components/CMySingleEvent/{CMySingleEvent.vue.off2 => CMySingleEvent.vue} (63%) create mode 100755 src/root/calendarioeventi/calendarioeventi.scss create mode 100755 src/root/calendarioeventi/calendarioeventi.ts create mode 100755 src/root/calendarioeventi/calendarioeventi.vue create mode 100755 src/root/evento/evento.scss create mode 100755 src/root/evento/evento.ts create mode 100755 src/root/evento/evento.vue diff --git a/docs/nuovo_componente.ts.old b/docs/nuovo_componente.ts.old index 6587129c..45373221 100644 --- a/docs/nuovo_componente.ts.old +++ b/docs/nuovo_componente.ts.old @@ -4,6 +4,8 @@ import { useUserStore } from '@store/UserStore' import { useGlobalStore } from '@store/globalStore' import { useQuasar } from 'quasar' +import { getCurrentInstance } from 'vue' + export default defineComponent({ name: '', props: { @@ -35,6 +37,8 @@ export default defineComponent({ const userStore = useUserStore() const globalStore = useGlobalStore() + // const root = getCurrentInstance(); // same as ctx.root in component + return { } diff --git a/package.json b/package.json index 7c45771c..175612a4 100755 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "@quasar/extras": "^1.11.0", + "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.6", "@vue/compat": "^3.2.12", "@vue/compiler-sfc": "^3.2.12", "@vue/eslint-config-standard": "^6.1.0", @@ -73,6 +74,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.15.7", "@quasar/app": "^3.1.0", + "@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.6", "@types/bcryptjs": "^2.4.2", "@types/dotenv": "^8.2.0", "@types/googlemaps": "^3.43.3", diff --git a/public/images/noimg.png b/public/images/noimg.png new file mode 100755 index 0000000000000000000000000000000000000000..90926168425453fade7e31bcdeb3f44078c233c0 GIT binary patch literal 27444 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 DwJK>+ literal 0 HcmV?d00001 diff --git a/quasar.conf.js b/quasar.conf.js index 2a33e18c..2b9b56c5 100755 --- a/quasar.conf.js +++ b/quasar.conf.js @@ -42,6 +42,7 @@ module.exports = configure((ctx) => ({ // https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css css: [ 'app.scss', + // '~quasar-ui-qcalendar/src/css/calendar-day.sass' ], // https://github.com/quasarframework/quasar/tree/dev/extras @@ -88,6 +89,10 @@ module.exports = configure((ctx) => ({ vueCompiler: true, gzip: false, // gzip true analyze: false, // true + transpile: true, + transpileDependencies: [ + /quasar-ui-qcalendar[\\/]src/ + ], chainWebpack(chain, { isServer, isClient }) { chain.resolve.alias diff --git a/quasar.extensions.json b/quasar.extensions.json index 9e26dfee..e239c306 100644 --- a/quasar.extensions.json +++ b/quasar.extensions.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "@quasar/qcalendar": {} +} \ No newline at end of file diff --git a/src/boot/calendar.ts b/src/boot/calendar.ts new file mode 100755 index 00000000..85c92618 --- /dev/null +++ b/src/boot/calendar.ts @@ -0,0 +1,8 @@ +import { boot } from 'quasar/wrappers' +// @ts-ignore +import Plugin from '@quasar/quasar-ui-qcalendar/src/QCalendarDay.js' +// import '@quasar/quasar-ui-qcalendar/src/css/calendar-day.sass' + +export default boot(({ app }) => { + app.use(Plugin) +}) diff --git a/src/components/CEventsCalendar/CEventsCalendar.ts.off b/src/components/CEventsCalendar/CEventsCalendar.ts similarity index 73% rename from src/components/CEventsCalendar/CEventsCalendar.ts.off rename to src/components/CEventsCalendar/CEventsCalendar.ts index 586f71cc..04d12134 100755 --- a/src/components/CEventsCalendar/CEventsCalendar.ts.off +++ b/src/components/CEventsCalendar/CEventsCalendar.ts @@ -1,29 +1,30 @@ -import { defineComponent, ref, computed, PropType, reactive, watch } from 'vue' +import { defineComponent, ref, onMounted, onBeforeMount, computed, PropType, reactive, watch } from 'vue' import { useI18n } from '@src/boot/i18n' import { useUserStore } from '@store/UserStore' import { useGlobalStore } from '@store/globalStore' import { useQuasar } from 'quasar' import { colors, Screen, Platform, date } from 'quasar' -import { static_data } from '@src/db/static_data' -import translate from '@src/globalroutines/util' -import { lists } from '@store/Modules/lists' -import { EState, IBookedEvent, IBookedEventPage, IEvents, IMessage, IMessagePage, IOperators } from "model" +import { EState, IBookedEvent, IBookedEventPage, IEvents, IMessage, IMessagePage } from '@model' import { Logo } from '../logo' import { Footer } from '../Footer' import { CTitle } from '../CTitle' import { CImgText } from '../CImgText' import { CMyEditor } from '../CMyEditor' -import { CDateTime } from "@/components/CDateTime" +import { CDateTime } from '@/components/CDateTime' import { CMyAvatar } from '../CMyAvatar' -import { CMySingleEvent } from "@/components/CMySingleEvent" -import { CMyTeacher } from "@/components/CMyTeacher" +import { CMySingleEvent } from '@/components/CMySingleEvent' +import { CMyTeacher } from '@/components/CMyTeacher' import { CMySelect } from '../CMySelect' -import { tools } from "@store/Modules/tools" -import { costanti } from "@costanti" +import { tools } from '@store/Modules/tools' +import { costanti } from '@costanti' + +// import { stop, prevent, stopAndPrevent } from 'quasar/src/utils/event' import MixinEvents from '../../mixins/mixin-events' import { useCalendarStore } from '@store/CalendarStore' -import { toolsext } from "@store/Modules/toolsext" +import { func_tools, toolsext } from '@store/Modules/toolsext' +import { useMessageStore } from '@store/MessageStore' +import { static_data } from '@/db/static_data' export default defineComponent({ name: 'CEventsCalendar', @@ -38,11 +39,6 @@ export default defineComponent({ required: false, default: 0, }, - mybool: { - type: Boolean, - required: true, - default: false, - }, }, components: { Logo, @@ -54,20 +50,25 @@ export default defineComponent({ CDateTime, CMyAvatar, CMySingleEvent, - CMyTeacher + CMyTeacher, }, - setup(props, { emit, root }) { + setup(props, { emit }) { const $q = useQuasar() const { t } = useI18n() const userStore = useUserStore() const globalStore = useGlobalStore() const calendarStore = useCalendarStore() + const messageStore = useMessageStore() + + const resources = ref([]) + + const calendar = ref(null) const calendarView = ref('month') const selectedDate = ref('') const tabeditor = ref('details') const showPrev = ref(false) - const formDefault = ref( { + const formDefault = ref({ title: '', details: '', bodytext: '', @@ -77,7 +78,7 @@ export default defineComponent({ bgcolor: '#839ff2' }) - const formbookEventDefault = ref( { + const formbookEventDefault = ref({ userId: '', msgbooking: '', infoevent: '', @@ -90,7 +91,7 @@ export default defineComponent({ modified: false }) - const formAskForDefault = ref( { + const formAskForDefault = ref({ dest: { idapp: process.env.APP_ID, username: '' @@ -102,7 +103,7 @@ export default defineComponent({ message: '' }) - const dateFormatter = ref('') + const dateFormatter = ref(void 0) const titleFormatter: any = ref(null) const keyValue = ref(0) @@ -115,7 +116,7 @@ export default defineComponent({ { label: 'Month', value: 'month' } ]) const addEvent = ref(false) - const bookEventpage = ref( { + const bookEventpage = ref({ show: false, bookedevent: { userId: '', @@ -128,7 +129,7 @@ export default defineComponent({ state: EState.None }) - const askInfopage = ref( { + const askInfopage = ref({ show: false, msg: { message: '' @@ -136,21 +137,41 @@ export default defineComponent({ state: EState.None }) - const contextDay = ref(null) - const eventForm = ref( { ...formDefault }) - const bookEventForm = ref({ ...formbookEventDefault }) - const askInfoForm = ref( { ...formAskForDefault }) + const contextDay = ref(null) + const eventForm = ref({ + title: '', + details: '', + bodytext: '', + dateTimeStart: tools.getstrYYMMDDDateTime(tools.getDateNow()), + dateTimeEnd: tools.getstrYYMMDDDateTime(tools.getDateNow()), + icon: '', + bgcolor: '#839ff2' + }) + const bookEventForm = ref({ ...formbookEventDefault.value }) + const askInfoForm = ref({ + dest: { + idapp: process.env.APP_ID, + username: '' + }, + origin: { + idapp: process.env.APP_ID, + username: '' + }, + message: '' + }) const displayEvent = ref(false) - const myevent = ref(null) + const myevent = ref({}) // const events = [] const gmt = '' const dragging = ref(false) - const draggedEvent = ref(null) + const draggedEvent = ref({}) const ignoreNextSwipe = ref(false) const locale = computed(() => calendarStore.locale) - const { findEventIndex, UpdateDbByFields, isAlreadyBooked } = MixinEvents() + const { isShowPrice, getImgEvent, getStyleByEvent, isAlreadyBooked, getWhereIcon, getWhereName, + editable, getContribtypeById, getPrice, isEventEnabled, findEventIndex, UpdateDbByFields, + } = MixinEvents() function visuAllCal() { return props.mysingleevent === null @@ -181,14 +202,6 @@ export default defineComponent({ return calendarStore.theme } - function intervalStart() { - return calendarStore.intervalRange.min * (1 / calendarStore.intervalRangeStep) - } - - function intervalCount() { - return (calendarStore.intervalRange.max - calendarStore.intervalRange.min) * (1 / calendarStore.intervalRangeStep) - } - function containerStyle() { const styles = { height: '' } if (calendarView.value !== 'month' || (calendarView.value === 'month' && calendarStore.dayHeight === 0)) { @@ -200,14 +213,21 @@ export default defineComponent({ // convert the events into a map of lists keyed by date function eventsMap() { // console.log('eventsMap') - const map = {} - calendarStore.eventlist.forEach((myevent: IEvents) => (map[tools.getstrDateTime(myevent.dateTimeStart)] = map[tools.getstrDateTime(myevent.dateTimeStart)] || []).push(myevent)) + const map: {} = {} + calendarStore.eventlist.forEach((myevent: IEvents) => { + + const myind: string = tools.getstrDateTime(myevent.dateTimeStart) + // @ts-ignore + return (map[myind] = map[myind] || []).push(myevent) + }) return map } function addOrUpdateEvent() { - if (contextDay.value && contextDay.value.bgcolor) { - return t('dialog.update') + if (contextDay.value) { + if (contextDay.value && contextDay.value.bgcolor) { + return t('dialog.update') + } } return t('dialog.add') } @@ -259,9 +279,11 @@ export default defineComponent({ }) function mounted() { - root.$on('calendar:next', calendarNext) - root.$on('calendar:prev', calendarPrev) - root.$on('calendar:today', calendarToday) + /*if (root) { + root.$on('calendar:next', calendarNext) + root.$on('calendar:prev', calendarPrev) + root.$on('calendar:today', calendarToday) + }*/ SetToday() // calendarStore.eventlist = events @@ -279,9 +301,12 @@ export default defineComponent({ } function beforeDestroy() { + /* root.$off('calendar:next', calendarNext) root.$off('calendar:prev', calendarPrev) root.$off('calendar:today', calendarToday) + + */ } function showEvent(eventparam: IEvents) { @@ -293,7 +318,7 @@ export default defineComponent({ function selectEvent(eventparam: IEvents) { if (myevent.value === eventparam) - myevent.value = null + myevent.value = {} else myevent.value = eventparam @@ -312,19 +337,21 @@ export default defineComponent({ } function resetForm() { - eventForm.value = { ...formDefault } + eventForm.value = { ...formDefault.value } } function addEventMenu(day: any) { console.log('addeventmenu', day) - if (calendarView.value === 'scheduler' || calendarView.value === 'week-scheduler' || calendarView.value === 'month-scheduler' || !editable.value) { + if (calendarView.value === 'scheduler' || calendarView.value === 'week-scheduler' || calendarView.value === 'month-scheduler' || !editable) { return } resetForm() contextDay.value = { ...day.scope } - eventForm.value.dateTimeStart.value = tools.getstrYYMMDDDateTime(day.scope.timestamp.date + ' 21:00:00') - eventForm.value.dateTimeEnd.value = tools.getstrYYMMDDDateTime(day.scope.timestamp.date + ' 22:00:00') + if (eventForm.value) { + eventForm.value.dateTimeStart = tools.getstrYYMMDDDateTime(day.scope.timestamp.date + ' 21:00:00') + eventForm.value.dateTimeEnd = tools.getstrYYMMDDDateTime(day.scope.timestamp.date + ' 22:00:00') + } console.log('eventForm', eventForm) @@ -350,14 +377,14 @@ export default defineComponent({ bookEventForm.value.numpeopleDinner = 0 bookEventForm.value.numpeopleDinnerShared = 0 bookEventForm.value.booked = true - bookEventpage = EState.Creating + bookEventpage.value.state = EState.Creating - displayEvent = false + displayEvent.value = false bookEventpage.value.show = true // show dialog } } - function askForInfoEventMenu(eventparam) { + function askForInfoEventMenu(eventparam: any) { if (!userStore.isLogged || !userStore.my.verified_email) { // Visu right Toolbar to make SignIn globalStore.rightDrawerOpen = true @@ -368,7 +395,7 @@ export default defineComponent({ // $router.push('/signin') } else { console.log('askForInfoEventMenu') - askInfoForm.value = { ...formAskForDefault } + askInfoForm.value = { ...formAskForDefault.value } myevent.value = eventparam @@ -376,7 +403,7 @@ export default defineComponent({ message: '' } - askInfopage.value = EState.Creating + askInfopage.value.state = EState.Creating displayEvent.value = false askInfopage.value.show = true // show dialog @@ -414,9 +441,9 @@ export default defineComponent({ tools.CancelEvent($q, eventparam) } - function duplicateEvent(eventparam, numgg, numev = 1) { + function duplicateEvent(eventparam: any, numgg: number, numev = 1) { for (let i = 0; i < numev; ++i) { - globalStore.DuplicateRec({ table: tools.TABEVENTS, id: eventparam._id }).then((rec) => { + globalStore.DuplicateRec({ table: costanti.TABEVENTS, id: eventparam._id }).then((rec) => { if (rec) { rec.dateTimeStart = tools.addDays(new Date(rec.dateTimeStart), numgg * (i + 1)) rec.dateTimeEnd = tools.addDays(new Date(rec.dateTimeEnd), numgg * (i + 1)) @@ -425,12 +452,12 @@ export default defineComponent({ } }) } - // tools.ActionRecTable(this, lists.MenuAction.DUPLICATE_RECTABLE, tools.TABEVENTS, eventparam._id, eventparam, 'db.duplicatedrecord') + // tools.ActionRecTable(this, lists.MenuAction.DUPLICATE_RECTABLE, costanti.TABEVENTS, eventparam._id, eventparam, 'db.duplicatedrecord') } function formatDate(mydate: any) { - let d = void 0 + let d: any = void 0 if (mydate !== void 0) { d = new Date(mydate) @@ -444,7 +471,7 @@ export default defineComponent({ return [year, tools.padTime(month), tools.padTime(day)].join('-') } - function formatTime(mydate) { + function formatTime(mydate: any) { const d = mydate !== void 0 ? new Date(mydate) : new Date(), hours = '' + d.getHours(), minutes = '' + d.getMinutes() @@ -452,7 +479,7 @@ export default defineComponent({ return [tools.padTime(hours), tools.padTime(minutes)].join(':') } - function getDuration(dateTimeStart, dateTimeEnd, unit) { + function getDuration(dateTimeStart: Date, dateTimeEnd: Date, unit: any) { const start = new Date(dateTimeStart) const end = new Date(dateTimeEnd) const diff = date.getDateDiff(end, start, unit) @@ -460,35 +487,34 @@ export default defineComponent({ } function saveEvent() { - const self = this // ++Todo VALIDATE $refs.myevent if (true) { // close the dialog - self.addEvent = false - const form = { ...self.eventForm } + addEvent.value = false + const form = { ...eventForm.value } let update = false - if (self.contextDay._id) { + if (contextDay.value._id) { // an update update = true } else { // an add } - const data = { ...form } + const data: any = { ...form } // ++Save into the Database const mydatatosave = { id: data._id, - table: tools.TABEVENTS, + table: costanti.TABEVENTS, fieldsvalue: data } - if (update === true) { + if (update) { UpdateDbByFields($q, data, true, contextDay.value) } else { const mydataadd = { - table: tools.TABEVENTS, + table: costanti.TABEVENTS, data } @@ -496,8 +522,8 @@ export default defineComponent({ if (record) { tools.showPositiveNotif($q, t('db.recupdated')) - if (update === true) { - const index = self.findEventIndex(self.contextDay) + if (update) { + const index = findEventIndex(contextDay) if (index >= 0) { // @ts-ignore calendarStore.eventlist.splice(index, 1, { ...data }) @@ -512,22 +538,22 @@ export default defineComponent({ } else { tools.showNegativeNotif($q, t('db.recfailed')) // Undo... - const index = self.findEventIndex(self.contextDay) + const index = findEventIndex(contextDay) if (index >= 0) { // @ts-ignore - calendarStore.eventlist.splice(index, 1, { ...self.contextDay }) + calendarStore.eventlist.splice(index, 1, { ...contextDay }) } } }) } - self.contextDay = null + contextDay.value = null } } function EditBookEvent(myevent: IEvents) { - myevent = myevent - const bookedevent = calendarStore.getters.findEventBooked(myevent, false) + + const bookedevent: any = calendarStore.findEventBooked(myevent, false) console.log('bookedevent', bookedevent) @@ -543,33 +569,32 @@ export default defineComponent({ bookEventForm.value.datebooked = bookedevent.datebooked } - bookEventpage = EState.Modifying + bookEventpage.value.state = EState.Modifying bookEventpage.value.bookedevent = bookedevent bookEventpage.value.show = true } function sendMsg(myevent: IEvents) { - const self = this - askInfopage.show = false + askInfopage.value.show = false const data: IMessage = { source: { event_id: myevent._id, - infoevent: tools.gettextevent(this, myevent) + infoevent: tools.gettextevent(myevent) }, dest: { idapp: process.env.APP_ID, username: myevent.teacher }, - message: askInfoForm.message + message: askInfoForm.value.message } - MessageStore.SendMsgEvent(data).then((ris) => { - self.contextDay = null + messageStore.SendMsgEvent(data).then((ris) => { + contextDay.value = null if (ris) - tools.showPositiveNotif(self.$q, self.t('cal.sendmsg_sent')) + tools.showPositiveNotif($q, t('cal.sendmsg_sent')) else - tools.showNegativeNotif(self.$q, self.t('cal.sendmsg_error')) + tools.showNegativeNotif($q, t('cal.sendmsg_error')) }) } @@ -594,7 +619,7 @@ export default defineComponent({ msgbooking: bookEventForm.value.msgbooking, booked: bookEventForm.value.booked, datebooked: tools.getDateNow(), - modified: (bookEventpage.value !== EState.Creating) + modified: (bookEventpage.value.state !== EState.Creating) } BookEvent(data).then((ris) => { @@ -641,37 +666,33 @@ export default defineComponent({ } } - function handleSwipe({ evt, ...info }) { - if (dragging.value === false) { - if (info.dur >= 30 && ignoreNextSwipe.value === false) { - if (info.direction === 'right') { - calendarPrev() - } else if (info.direction === 'left') { - calendarNext() - } - } else { - ignoreNextSwipe.value = false - } - } - stopAndPrevent(evt) - } - - function onDragEnter(ev: any, eventparam) { + function onDragEnter(ev: any, eventparam: any) { + /* prevent(ev) + + */ } - function onDragStart(ev, eventparam) { + function onDragStart(ev: any, eventparam: any) { dragging.value = true draggedEvent.value = eventparam + /* stop(ev) + + */ } - function onDragEnd(ev, eventparam) { + + function onDragEnd(ev: any, eventparam: any) { + /* stopAndPrevent(ev) resetDrag() + + */ } - function onDragOver(ev, day, type) { + function onDragOver(ev: any, day: any, type: any) { + /* if (type === 'day') { stopAndPrevent(ev) return draggedEvent.value.dateTimeStart !== day.dateTimeStart @@ -679,29 +700,34 @@ export default defineComponent({ stopAndPrevent(ev) // return draggedEvent.value.date !== day.date && draggedEvent.value.time !== day.time return draggedEvent.value.dateTimeStart !== day.dateTimeStart - } + }*/ + } - function onDrop(ev, day, type) { + function onDrop(ev: any, day: any, type: any) { ev.preventDefault() ev.stopPropagation() console.log('day.dateTimeStart', day.dateTimeStart, day.date, 'day.time', day.time) if (type === 'day') { + // @ts-ignore draggedEvent.value.dateTimeStart = day.date + ' ' + tools.getstrTime(draggedEvent.value.dateTimeStart) + // @ts-ignore draggedEvent.value.dateTimeEnd = day.date + ' ' + tools.getstrTime(draggedEvent.value.dateTimeEnd) draggedEvent.value.side = void 0 } else if (type === 'interval') { const mins = date.getDateDiff(draggedEvent.value.dateTimeEnd, draggedEvent.value.dateTimeStart, 'minutes') + // @ts-ignore draggedEvent.value.dateTimeStart = day.date + ' ' + day.time + // @ts-ignore const mystart = new Date(draggedEvent.value.dateTimeStart) draggedEvent.value.dateTimeEnd = tools.addMinutes(mystart, mins) // draggedEvent.value.dateTimeEnd = day.dateTimeEnd // draggedEvent.value.time = day.time draggedEvent.value.side = void 0 } - // console.log('Start', draggedEvent.value.dateTimeStart, 'End', draggedEvent.value.dateTimeEnd) +// console.log('Start', draggedEvent.value.dateTimeStart, 'End', draggedEvent.value.dateTimeEnd) - // Save Date +// Save Date UpdateDbByFields($q, { _id: draggedEvent.value._id, dateTimeStart: draggedEvent.value.dateTimeStart, @@ -711,33 +737,33 @@ export default defineComponent({ } function resetDrag() { +// @ts-ignore draggedEvent.value = void 0 dragging.value = false if (Platform.is.desktop) { - ignoreNextSwipe = true + ignoreNextSwipe.value = true } } - async function BookEvent(eventparam: IBookedEvent) - { + async function BookEvent(eventparam: IBookedEvent) { return await calendarStore.BookEvent(eventparam) } - function createContribType(value) { + function createContribType(value: any) { console.log('createContribType', value) - tools.createNewRecord(this, 'contribtype', { label: value }).then((myrec) => { + tools.createNewRecord($q, 'contribtype', { label: value }).then((myrec) => { // console.log('myrec') calendarStore.contribtype.push(myrec) }) } - function getEventDate(eventparam) { + function getEventDate(eventparam: any) { const parts = eventparam.dateTimeStart.split('-') const mydate = new Date(parts[0], parts[1] - 1, parts[2]) - return dateFormatter.format(mydate) + return dateFormatter.value.format(mydate) } - function badgeClasses(eventparam, type) { + function badgeClasses(eventparam: any, type: any) { const cssColor = tools.isCssColor(eventparam.bgcolor) const isHeader = type === 'header' return { @@ -748,8 +774,8 @@ export default defineComponent({ } } - function badgeStyles(eventparam, type, timeStartPos, timeDurationHeight) { - const s = { color: '', top: '', height: '', opacity: 1 } + function badgeStyles(eventparam: any, type: any, timeStartPos: any, timeDurationHeight: any) { + const s = { color: '', top: '', height: '', opacity: 1, 'background-color': 'black', 'align-items': '' } if (tools.isCssColor(eventparam.bgcolor)) { s['background-color'] = eventparam.bgcolor @@ -771,34 +797,36 @@ export default defineComponent({ } function calendarNext() { - $refs.calendar.next() +// @ts-ignore + calendar.value.next() } function calendarPrev() { - $refs.calendar.prev() +// @ts-ignore + calendar.value.prev() } - function calendarToday(today) { - selectedDate = today + function calendarToday(today: any) { + selectedDate.value = today } function SetToday() { - root.$emit('calendar:today', formatDate(tools.getDateNow())) +// root.$emit('calendar:today', formatDate(tools.getDateNow())) } - function onChanged(data) { - // uncomment to see data in console - // let { start, end } = data - // console.log('onChanged:', start, end) + function onChanged(data: any) { +// uncomment to see data in console +// let { start, end } = data +// console.log('onChanged:', start, end) } - function onMoved(moved) { - // uncomment to see data in console - // console.log('onMoved:', moved) + function onMoved(moved: any) { +// uncomment to see data in console +// console.log('onMoved:', moved) } function getEventList() { - const mylist = calendarStore.eventlist.filter((rec) => (new Date(rec.dateTimeEnd) >= tools.getDateNowEvent())) + const mylist = calendarStore.eventlist.filter((rec: IEvents) => (new Date(rec.dateTimeEnd!) >= tools.getDateNowEvent())) if (props.showfirstN > 0) return mylist.slice(0, props.showfirstN) else @@ -807,7 +835,6 @@ export default defineComponent({ function getEvents(dt: any) { const eventsloc = [] - // console.log('dt', dt) for (let i = 0; i < calendarStore.eventlist.length; ++i) { let added = false @@ -840,20 +867,11 @@ export default defineComponent({ } } } - // if (eventsloc.length > 0) - // console.log('eventsloc', eventsloc) +// if (eventsloc.length > 0) +// console.log('eventsloc', eventsloc) return eventsloc } - function isEventEnabled(myevent: IEvents) { - // check if event is in the past - const datenow = tools.addDays(tools.getDateNow(), -1) - - // console.log('datenow', datenow, 'end', myevent.dateTimeEnd) - - return (new Date(myevent.dateTimeEnd) >= datenow) - } - function getTitleEv(event: IEvents) { return (!!event.short_tit) ? event.short_tit : event.title } @@ -862,14 +880,14 @@ export default defineComponent({ return event.title } + onMounted(mounted) + onBeforeMount(beforeMount) return { calendarView, selectedDate, tabeditor, showPrev, - - keyValue, weekdays, addEvent, @@ -886,6 +904,64 @@ export default defineComponent({ visuAllCal, title_cal, calendarStore, + eventsMap, + addOrUpdateEvent, + sendMsg, + calendar, + getEventList, + getEvents, + getTitleEv, + getLongTitleEv, + onChanged, + onMoved, + dayHeight, + theme, + containerStyle, + scrollerPopupStyle160, + hasModifiedBooking, + checkseinviaMsg, + getTitleBtnBooking, + onDragOver, + onDragEnd, + onDragStart, + onDragEnter, + adjustTimestamp, + saveBookEvent, + EditBookEvent, + saveEvent, + onDrop, + resourceDayClicked, + resourceClicked, + onDateChanged, + selectEvent, + showEvent, + addEventMenu, + addBookEventMenu, + askForInfoEventMenu, + clEvent, + deleteEvent, + duplicateEvent, + resources, + calendarPrev, + calendarNext, + badgeClasses, + badgeStyles, + tools, + globalStore, + getImgEvent, + getStyleByEvent, + isAlreadyBooked, + getWhereIcon, + getWhereName, + editable, + getContribtypeById, + getPrice, + isShowPrice, + isEventEnabled, + findEventIndex, + createContribType, + static_data, + editEvent, } } }) diff --git a/src/components/CEventsCalendar/CEventsCalendar.vue.off b/src/components/CEventsCalendar/CEventsCalendar.vue similarity index 69% rename from src/components/CEventsCalendar/CEventsCalendar.vue.off rename to src/components/CEventsCalendar/CEventsCalendar.vue index 042ec488..7acdbd64 100755 --- a/src/components/CEventsCalendar/CEventsCalendar.vue.off +++ b/src/components/CEventsCalendar/CEventsCalendar.vue @@ -36,21 +36,21 @@ + v-if="editable" flat round color="white" icon="delete" v-close-popup + @click="deleteEvent(myevent)"> + v-if="editable" flat round color="white" icon="edit" v-close-popup + @click="editEvent(myevent)"> + flat round color="white" icon="cancel" v-close-popup + @click="myevent = null; displayEvent = false"> + :src="getImgEvent(myevent)" + class="absolute-top" + style="height: 150px;" + :alt="myevent.title">
@@ -79,8 +79,8 @@ flat round color="white" icon="cancel" v-close-popup Località + :src="`../../public/images/avatar/` + getWhereIcon(myevent.wherecode)" + alt="Località"> @@ -96,22 +96,22 @@ flat round color="white" icon="cancel" v-close-popup
{{ $t('cal.when') }}: - +

+ size="md" type="a" :href="myevent.linkpdf" + target="_blank" rounded color="primary" icon="info" :label="$t('cal.showpdf')">

+ rounded v-if="!myevent.nobookable && static_data.functionality.BOOKING_EVENTS" + color="primary" @click="addBookEventMenu(myevent)" :disable="!isEventEnabled(myevent)" + :label="$t('cal.booking')"> @@ -123,7 +123,7 @@ rounded v-if="!myevent.nobookable && static_data.functionality.BOOKING_EVENTS" - {{ addOrUpdateEvent }} {{ $t('cal.event') }} + {{ addOrUpdateEvent() }} {{ $t('cal.event') }} @@ -134,25 +134,25 @@ rounded v-if="!myevent.nobookable && static_data.functionality.BOOKING_EVENTS" class="q-gutter-sm"> + :label="$t('event.typol')" v-model:value="eventForm.typol" optval="typol_code" + optlab="label" + :options="globalStore.disciplines" :useinput="false">
+ color="grey-1" v-model="eventForm.title" autofocus + debounce="1000" + :input-style="`background-color: ${eventForm.bgcolor} !important; color: white !important; font-weight: bold; `" + borderless rounded dense :label="$t('event.title')" + :rules="[v => v && v.length > 0 || $t('event.notempty')]">
@@ -177,11 +177,11 @@ color="grey-1" v-model="eventForm.title" autofocus
+ class="myflex" dense v-model="eventForm.img" + :label="$t('event.img')"> + class="myflex" dense v-model="eventForm.img_small" + :label="$t('event.img_small')">
@@ -203,8 +203,8 @@ class="myflex" dense v-model="eventForm.img_small" + class="myflex" dense v-model="eventForm.icon" + :label="$t('event.icon')">
@@ -238,58 +238,58 @@ class="myflex" dense v-model="eventForm.icon"
+ myclass="myflex" :label="$t('cal.teacher') + ' 1°'" + v-model:value="eventForm.teacher" + optval="username" :optlab="(item) => item.name + ' ' + item.surname" + :options="calendarStore.operators" :useinput="false"> + myclass="myflex" :label="$t('cal.teacher') + ' 2°'" + v-model:value="eventForm.teacher2" + optval="username" :optlab="(item) => item.name + ' ' + item.surname" + :options="calendarStore.operators" :useinput="false"> + myclass="myflex" :label="$t('cal.teacher') + ' 3°'" + v-model:value="eventForm.teacher3" + optval="username" :optlab="(item) => item.name + ' ' + item.surname" + :options="calendarStore.operators" :useinput="false"> + myclass="myflex" :label="$t('cal.teacher') + ' 4°'" + v-model:value="eventForm.teacher4" + optval="username" :optlab="(item) => item.name + ' ' + item.surname" + :options="calendarStore.operators" :useinput="false"> + :label="$t('cal.where')" v-model:value="eventForm.wherecode" optval="code" + optlab="placename" + :options="calendarStore.wheres" :useinput="false">
+ class="myflex wrap" dense v-model="eventForm.internal" + :label="$t('event.internal')"> + class="myflex wrap" dense v-model="eventForm.lunchAvailable" + :label="$t('event.lunchAvailable')"> + class="myflex wrap" dense v-model="eventForm.dinnerAvailable" + :label="$t('event.dinnerAvailable')"> + class="myflex wrap" dense v-model="eventForm.dinnerSharedAvailable" + :label="$t('event.dinnerSharedAvailable')"> + class="myflex wrap" dense v-model="eventForm.news" + :label="$t('event.news')"> + class="myflex wrap" dense v-model="eventForm.nobookable" + :label="$t('event.nobookable')"> + class="myflex wrap" dense v-model="eventForm.canceled" + :label="$t('event.canceled')">
@@ -300,42 +300,42 @@ class="myflex wrap" dense v-model="eventForm.canceled"
+ :label="$t('event.contribtype')" v-model:value="eventForm.contribtype" + optval="_id" optlab="label" + :useinput="false" + :newvaluefunc="createContribType" :options="calendarStore.contribtype">
+ dense type="number" v-model="eventForm.price" + :label="$t('event.price')"> + dense v-model="eventForm.infoafterprice" + :label="$t('event.infoafterprice')">
+ myclass="myflex" :label="$t('event.pagefooter') + ' 1°'" + v-model:value="eventForm.pagefooter" + style="min-width: 300px;" + :multiple="true" + optval="path" optlab="title" + :options="calendarStore.internalpages" :useinput="false">
+ class="myflex" dense v-model="eventForm.linkpage" + :label="$t('event.linkpage')"> + class="myflex" dense v-model="eventForm.linkpdf" + :label="$t('event.linkpdf')"> + class="myflex" dense v-model="eventForm.facebook" + :label="$t('event.facebook')">
@@ -360,10 +360,10 @@ class="myflex" dense v-model="eventForm.facebook" + :src="getImgEvent(myevent)" + class="absolute-top" + style="height: 200px;" + :alt="myevent.title">
@@ -375,7 +375,7 @@ class="myflex" dense v-model="eventForm.facebook"
{{ $t('cal.when') }}: - +
@@ -390,8 +390,8 @@ class="myflex" dense v-model="eventForm.facebook"
+ v-if="bookEventForm.booked" class="q-gutter-xs q-mx-xs" + style="min-width: 140px;">
{{ $t('cal.selnumpeopleLunch') }}
+ class="q-gutter-xs" + style="min-width: 140px; margin-left: 10px;">
+ v-if="myevent.dinnerSharedAvailable" class="q-px-xs centermydiv" + style="display: inline-flex; ">
{{ $t('cal.selnumpeopleDinnerShared') }}
@@ -442,9 +442,9 @@ v-if="myevent.dinnerSharedAvailable" class="q-px-xs centermydiv"
@@ -455,23 +455,23 @@ v-model="bookEventForm.msgbooking" :label="$t('cal.writemsg')+':'"

+ size="md" type="a" :href="myevent.linkpdf" + target="_blank" rounded color="primary" icon="info" :label="$t('cal.showpdf')">

+ v-if="bookEventpage.state === EState.Modifying" flat :label="$t('cal.cancelbooking')" + color="negative" + @click="tools.CancelBookingEvent($q, myevent, bookEventForm._id, true)"> + v-if="checkseinviaMsg" flat :label="$t('dialog.sendonlymsg')" color="primary" + @click="sendMsg(myevent)"> + v-else :label="getTitleBtnBooking" color="primary" @click="saveBookEvent(myevent)" + :disable="!(bookEventpage.state === EState.Creating || hasModifiedBooking)"> @@ -490,10 +490,10 @@ v-else :label="getTitleBtnBooking" color="primary" @click="saveBookEvent(myevent + :src="getImgEvent(myevent)" + class="absolute-top" + style="height: 150px;" + :alt="myevent.title">
@@ -505,16 +505,16 @@ v-else :label="getTitleBtnBooking" color="primary" @click="saveBookEvent(myevent
{{ $t('cal.when') }}: - +
+ v-model="askInfoForm.message" :label="$t('cal.writemsg')+':'" + autofocus debounce="500" type="textarea" + input-class="myinput-area"> @@ -524,8 +524,8 @@ v-model="askInfoForm.message" :label="$t('cal.writemsg')+':'" + flat :label="$t('dialog.sendmsg')" color="primary" + @click="sendMsg(myevent)"> @@ -534,7 +534,7 @@ flat :label="$t('dialog.sendmsg')" color="primary" - +
@@ -545,14 +545,16 @@ flat :label="$t('dialog.sendmsg')" color="primary" +
{{ title_cal }} + class="q-mr-xl q-toolbar__title nowrap text-blue">{{ title_cal() }}
- -