This commit is contained in:
2022-02-23 20:39:05 +00:00
parent 14eeff67ef
commit a793b3a5f5
4 changed files with 273 additions and 73 deletions

View File

@@ -3,11 +3,45 @@ const role = authorizationroles.AUTHORIZATION_ROLES;
export default { export default {
registry: [ registry: [
{ {
id: "dash-today-reminders-wo", id: "dash-today-reminders",
roles: [role.Tech, role.TechRestricted], roles: [
role.BizAdmin,
role.BizAdminRestricted,
role.ServiceRestricted,
role.Service,
role.InventoryRestricted,
role.Inventory,
role.Accounting,
role.Tech,
role.TechRestricted,
role.OpsAdmin,
role.OpsAdminRestricted,
role.Sales,
role.SalesRestricted
],
title: "ReminderList", title: "ReminderList",
type: "GzDashTodayReminders" type: "GzDashTodayReminders"
}, },
{
id: "dash-today-reviews",
roles: [
role.BizAdmin,
role.BizAdminRestricted,
role.ServiceRestricted,
role.Service,
role.InventoryRestricted,
role.Inventory,
role.Accounting,
role.Tech,
role.TechRestricted,
role.OpsAdmin,
role.OpsAdminRestricted,
role.Sales,
role.SalesRestricted
],
title: "ReviewList",
type: "GzDashTodayReviews"
},
{ {
id: "dash-today-scheduled-wo", id: "dash-today-scheduled-wo",
roles: [role.Tech, role.TechRestricted], roles: [role.Tech, role.TechRestricted],

View File

@@ -62,8 +62,18 @@ export default {
}, },
computed: {}, computed: {},
created() {
//console.log("reminders-created");
},
updated() {
//console.log("reminders-updated");
},
beforeUpdate() {
//console.log("reminders-beforeUpdate");
},
async mounted() { async mounted() {
//must be called from mounted to have refs available //must be called from mounted to have refs available
//console.log("reminders-mounted");
await this.getDataFromApi(); await this.getDataFromApi();
}, },
methods: { methods: {
@@ -80,6 +90,7 @@ export default {
}, },
async getDataFromApi() { async getDataFromApi() {
//console.log("reminders-getdata");
let now = new Date(); let now = new Date();
//set now for the calendar to trigger a refresh //set now for the calendar to trigger a refresh

View File

@@ -0,0 +1,149 @@
<template>
<gz-dash
icon="$ayiCalendarCheck"
:show-more-button="false"
:update-frequency="65000"
:error-message="errorMessage"
v-bind="$attrs"
@dash-refresh="getDataFromApi()"
v-on="$listeners"
>
<template slot="main">
<v-calendar
ref="rvwcalendar"
color="primary"
type="day"
hide-header
:now="now"
:interval-count="intervalCount"
:first-time="startAt"
:events="events"
:event-color="getEventColor"
:locale="languageName"
@click:event="showEvent"
>
<template v-slot:event="{ event, eventSummary }">
<div>
<!-- eslint-disable vue/no-v-html -->
<span
:class="event.textColor + '--text'"
v-html="eventSummary()"
/><v-icon v-if="!event.editable" x-small :color="event.textColor">
$ayiLock</v-icon
>
</div>
</template>
</v-calendar>
</template>
</gz-dash>
</template>
<script>
import GzDash from "./dash-base.vue";
export default {
components: {
GzDash
},
props: {
maxListItems: { type: Number, default: 10 }
},
data() {
return {
events: [],
errorMessage: null,
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12(),
startAt: "00:00",
intervalCount: 24,
now: null
};
},
computed: {},
async mounted() {
//must be called from mounted to have refs available
await this.getDataFromApi();
},
methods: {
getEventColor(event) {
return event.color;
},
showEvent({ nativeEvent, event }) {
nativeEvent.stopPropagation();
window.$gz.eventBus.$emit("openobject", {
type: event.type,
id: event.id
});
},
async getDataFromApi() {
let now = new Date();
//set now for the calendar to trigger a refresh
//if this doesn't work then need to trigger the change event: https://vuetifyjs.com/en/api/v-calendar/#events
this.now = now.toLocaleString("sv-SE", {
timeZone: this.timeZoneName
});
this.$refs.rvwcalendar.scrollToTime({
hour: now.getHours(),
minute: 0
});
try {
this.errorMessage = null;
const now = window.$gz.locale.nowUTC8601String(this.timeZoneName);
const res = await window.$gz.api.post("schedule/personal", {
view: 1,
dark: this.$store.state.darkMode,
start: window.$gz.locale.addDurationToUTC8601String(now, {
hours: -24
}),
end: window.$gz.locale.addDurationToUTC8601String(now, { hours: 24 }),
wisu: false,
reviews: true,
reminders: false
});
if (res.error) {
this.errorMessage = res.error;
} else {
this.events.splice(0);
const timeZoneName = this.timeZoneName;
let i = res.data.length;
while (i--) {
const x = res.data[i];
this.events.push({
start: new Date(
new Date(x.start)
.toLocaleString("sv-SE", {
timeZone: timeZoneName
})
.replace(" ", "T")
).getTime(),
end: new Date(
new Date(x.end)
.toLocaleString("sv-SE", {
timeZone: timeZoneName
})
.replace(" ", "T")
).getTime(),
timed: true,
name: x.name,
color: x.color,
textColor: x.textColor,
type: x.type,
id: x.id,
editable: x.editable,
userId: x.userId
});
}
}
} catch (error) {
this.errorMessage = error.toString();
}
}
}
};
</script>

View File

@@ -1,9 +1,8 @@
<template> <template>
<div>
<v-row v-if="formState.ready"> <v-row v-if="formState.ready">
<gz-error :error-box-message="formState.errorBoxMessage"></gz-error> <gz-error :error-box-message="formState.errorBoxMessage"></gz-error>
<v-col cols="12">
<h2>DASHBOARD UNDER CONSTRUCTION</h2>
</v-col>
<v-col v-if="showSelector" cols="12"> <v-col v-if="showSelector" cols="12">
<v-dialog <v-dialog
v-model="showSelector" v-model="showSelector"
@@ -42,11 +41,8 @@
</v-card> </v-card>
</v-dialog> </v-dialog>
</v-col> </v-col>
<v-col v-if="!hasItems()" cols="12"> </v-row>
<v-btn outlined @click.native="showSelector = true">{{ <v-row>
$ay.t("Add")
}}</v-btn>
</v-col>
<v-col <v-col
v-for="(item, i) in effectiveView" v-for="(item, i) in effectiveView"
:key="i" :key="i"
@@ -58,6 +54,7 @@
> >
<component <component
:is="item.type" :is="item.type"
:ref="item.ref"
v-bind="item" v-bind="item"
:max-list-items="10" :max-list-items="10"
@dash-remove="dashRemove" @dash-remove="dashRemove"
@@ -68,7 +65,13 @@
> >
</component> </component>
</v-col> </v-col>
<v-col cols="12">
<v-btn outlined @click.native="showSelector = true">{{
$ay.t("Add")
}}</v-btn>
</v-col>
</v-row> </v-row>
</div>
</template> </template>
<script> <script>
@@ -81,6 +84,7 @@ import GzDashTestLineWidgetMonthlyTotalPrice from "../components/dash-test-line-
import GzDashTestDayCalendarWidget from "../components/dash-test-day-calendar-widget.vue"; import GzDashTestDayCalendarWidget from "../components/dash-test-day-calendar-widget.vue";
import GzDashTodayScheduledWo from "../components/dash-today-scheduled-wo.vue"; import GzDashTodayScheduledWo from "../components/dash-today-scheduled-wo.vue";
import GzDashTodayReminders from "../components/dash-today-reminders.vue"; import GzDashTodayReminders from "../components/dash-today-reminders.vue";
import GzDashTodayReviews from "../components/dash-today-reviews.vue";
export default { export default {
components: { components: {
@@ -89,7 +93,8 @@ export default {
GzDashTestLineWidgetMonthlyTotalPrice, GzDashTestLineWidgetMonthlyTotalPrice,
GzDashTestDayCalendarWidget, GzDashTestDayCalendarWidget,
GzDashTodayScheduledWo, GzDashTodayScheduledWo,
GzDashTodayReminders GzDashTodayReminders,
GzDashTodayReviews
}, },
data() { data() {
return { return {
@@ -139,9 +144,9 @@ export default {
} }
}, },
methods: { methods: {
hasItems: function() { // hasItems: function() {
return this.effectiveView && this.effectiveView.length > 0; // return this.effectiveView && this.effectiveView.length > 0;
}, // },
dashMoveStart: function(id) { dashMoveStart: function(id) {
this.move("start", id); this.move("start", id);
}, },
@@ -204,6 +209,7 @@ export default {
}, },
addItem: function(item) { addItem: function(item) {
this.showSelector = false; this.showSelector = false;
item.ref = "db" + Date.now();
this.effectiveView.push(item); this.effectiveView.push(item);
this.saveView(); this.saveView();
}, },