mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Automatic eslint fixes
This commit is contained in:
parent
b035020c6f
commit
25be5c9ea3
@ -1 +1 @@
|
|||||||
import './banner.scss';
|
import "./banner.scss";
|
||||||
|
@ -2,104 +2,108 @@ import {
|
|||||||
DateTime,
|
DateTime,
|
||||||
TranslatableString,
|
TranslatableString,
|
||||||
User,
|
User,
|
||||||
UserGroupOrUser
|
UserGroupOrUser,
|
||||||
} from "../../../../ChillMainBundle/Resources/public/types";
|
} from "../../../../ChillMainBundle/Resources/public/types";
|
||||||
import { Person } from "../../../../ChillPersonBundle/Resources/public/types";
|
import { Person } from "../../../../ChillPersonBundle/Resources/public/types";
|
||||||
|
|
||||||
export interface Motive {
|
export interface Motive {
|
||||||
type: "ticket_motive"
|
type: "ticket_motive";
|
||||||
id: number,
|
id: number;
|
||||||
active: boolean,
|
active: boolean;
|
||||||
label: TranslatableString
|
label: TranslatableString;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface TicketHistory<T extends string, D extends object> {
|
interface TicketHistory<T extends string, D extends object> {
|
||||||
event_type: T,
|
event_type: T;
|
||||||
at: DateTime,
|
at: DateTime;
|
||||||
by: User,
|
by: User;
|
||||||
data: D
|
data: D;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PersonHistory {
|
export interface PersonHistory {
|
||||||
type: "ticket_person_history",
|
type: "ticket_person_history";
|
||||||
id: number,
|
id: number;
|
||||||
startDate: DateTime,
|
startDate: DateTime;
|
||||||
endDate: null|DateTime,
|
endDate: null | DateTime;
|
||||||
person: Person,
|
person: Person;
|
||||||
removedBy: null,
|
removedBy: null;
|
||||||
createdBy: User|null,
|
createdBy: User | null;
|
||||||
createdAt: DateTime|null
|
createdAt: DateTime | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MotiveHistory {
|
export interface MotiveHistory {
|
||||||
type: "ticket_motive_history",
|
type: "ticket_motive_history";
|
||||||
id: number,
|
id: number;
|
||||||
startDate: null,
|
startDate: null;
|
||||||
endDate: null|DateTime,
|
endDate: null | DateTime;
|
||||||
motive: Motive,
|
motive: Motive;
|
||||||
createdBy: User|null,
|
createdBy: User | null;
|
||||||
createdAt: DateTime|null,
|
createdAt: DateTime | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Comment {
|
export interface Comment {
|
||||||
type: "ticket_comment",
|
type: "ticket_comment";
|
||||||
id: number,
|
id: number;
|
||||||
content: string,
|
content: string;
|
||||||
createdBy: User|null,
|
createdBy: User | null;
|
||||||
createdAt: DateTime|null,
|
createdAt: DateTime | null;
|
||||||
updatedBy: User|null,
|
updatedBy: User | null;
|
||||||
updatedAt: DateTime|null,
|
updatedAt: DateTime | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AddresseeHistory {
|
export interface AddresseeHistory {
|
||||||
type: "ticket_addressee_history",
|
type: "ticket_addressee_history";
|
||||||
id: number,
|
id: number;
|
||||||
startDate: DateTime|null,
|
startDate: DateTime | null;
|
||||||
addressee: UserGroupOrUser,
|
addressee: UserGroupOrUser;
|
||||||
endDate: DateTime|null,
|
endDate: DateTime | null;
|
||||||
removedBy: User|null,
|
removedBy: User | null;
|
||||||
createdBy: User|null,
|
createdBy: User | null;
|
||||||
createdAt: DateTime|null,
|
createdAt: DateTime | null;
|
||||||
updatedBy: User|null,
|
updatedBy: User | null;
|
||||||
updatedAt: DateTime|null,
|
updatedAt: DateTime | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AddresseeState {
|
export interface AddresseeState {
|
||||||
addressees: UserGroupOrUser[],
|
addressees: UserGroupOrUser[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PersonsState {
|
export interface PersonsState {
|
||||||
persons: Person[]
|
persons: Person[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateTicketState {}
|
export interface CreateTicketState {}
|
||||||
|
|
||||||
//interface AddPersonEvent extends TicketHistory<"add_person", PersonHistory> {};
|
//interface AddPersonEvent extends TicketHistory<"add_person", PersonHistory> {};
|
||||||
export interface AddCommentEvent extends TicketHistory<"add_comment", Comment> {};
|
export interface AddCommentEvent
|
||||||
export interface SetMotiveEvent extends TicketHistory<"set_motive", MotiveHistory> {};
|
extends TicketHistory<"add_comment", Comment> {}
|
||||||
|
export interface SetMotiveEvent
|
||||||
|
extends TicketHistory<"set_motive", MotiveHistory> {}
|
||||||
//interface AddAddressee extends TicketHistory<"add_addressee", AddresseeHistory> {};
|
//interface AddAddressee extends TicketHistory<"add_addressee", AddresseeHistory> {};
|
||||||
//interface RemoveAddressee extends TicketHistory<"remove_addressee", AddresseeHistory> {};
|
//interface RemoveAddressee extends TicketHistory<"remove_addressee", AddresseeHistory> {};
|
||||||
export interface AddresseesStateEvent extends TicketHistory<"addressees_state", AddresseeState> {};
|
export interface AddresseesStateEvent
|
||||||
export interface CreateTicketEvent extends TicketHistory<"create_ticket", CreateTicketState> {};
|
extends TicketHistory<"addressees_state", AddresseeState> {}
|
||||||
export interface PersonStateEvent extends TicketHistory<"persons_state", PersonsState> {};
|
export interface CreateTicketEvent
|
||||||
|
extends TicketHistory<"create_ticket", CreateTicketState> {}
|
||||||
|
export interface PersonStateEvent
|
||||||
|
extends TicketHistory<"persons_state", PersonsState> {}
|
||||||
|
|
||||||
export type TicketHistoryLine =
|
export type TicketHistoryLine =
|
||||||
/* AddPersonEvent */
|
/* AddPersonEvent */
|
||||||
CreateTicketEvent |
|
| CreateTicketEvent
|
||||||
AddCommentEvent |
|
| AddCommentEvent
|
||||||
SetMotiveEvent | /*AddAddressee | RemoveAddressee | */
|
| SetMotiveEvent /*AddAddressee | RemoveAddressee | */
|
||||||
AddresseesStateEvent |
|
| AddresseesStateEvent
|
||||||
PersonStateEvent;
|
| PersonStateEvent;
|
||||||
|
|
||||||
export interface Ticket {
|
export interface Ticket {
|
||||||
type: "ticket_ticket",
|
type: "ticket_ticket";
|
||||||
id: number,
|
id: number;
|
||||||
externalRef: string,
|
externalRef: string;
|
||||||
currentAddressees: UserGroupOrUser[],
|
currentAddressees: UserGroupOrUser[];
|
||||||
currentPersons: Person[],
|
currentPersons: Person[];
|
||||||
currentMotive: null|Motive,
|
currentMotive: null | Motive;
|
||||||
history: TicketHistoryLine[],
|
history: TicketHistoryLine[];
|
||||||
createdAt: DateTime|null,
|
createdAt: DateTime | null;
|
||||||
updatedBy: User|null,
|
updatedBy: User | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ export default defineComponent({
|
|||||||
const ticket = computed(() => store.getters.getTicket as Ticket);
|
const ticket = computed(() => store.getters.getTicket as Ticket);
|
||||||
|
|
||||||
const ticketHistory = computed(
|
const ticketHistory = computed(
|
||||||
() => store.getters.getDistinctAddressesHistory
|
() => store.getters.getDistinctAddressesHistory,
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
@ -8,7 +8,10 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form v-if="activeTab !== 'set_persons'" @submit.prevent="submitAction">
|
<form
|
||||||
|
v-if="activeTab !== 'set_persons'"
|
||||||
|
@submit.prevent="submitAction"
|
||||||
|
>
|
||||||
<add-comment-component
|
<add-comment-component
|
||||||
v-model="content"
|
v-model="content"
|
||||||
v-if="activeTab === 'add_comment'"
|
v-if="activeTab === 'add_comment'"
|
||||||
@ -44,7 +47,9 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</form>
|
</form>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<persons-selector-component @closeRequested="closeAllActions()" />
|
<persons-selector-component
|
||||||
|
@closeRequested="closeAllActions()"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -54,7 +59,9 @@
|
|||||||
<a :href="returnPath" class="btn btn-cancel">Annuler</a>
|
<a :href="returnPath" class="btn btn-cancel">Annuler</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-else class="nav-item p-2 go-back">
|
<li v-else class="nav-item p-2 go-back">
|
||||||
<a href="/fr/ticket/ticket/list" class="btn btn-cancel">Annuler</a>
|
<a href="/fr/ticket/ticket/list" class="btn btn-cancel"
|
||||||
|
>Annuler</a
|
||||||
|
>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item p-2">
|
<li class="nav-item p-2">
|
||||||
<button
|
<button
|
||||||
@ -176,40 +183,47 @@ export default defineComponent({
|
|||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const toast = inject("toast") as any;
|
const toast = inject("toast") as any;
|
||||||
const activeTab = ref(
|
const activeTab = ref(
|
||||||
"" as "" | "add_comment" | "set_motive" | "add_addressee" | "set_persons"
|
"" as
|
||||||
|
| ""
|
||||||
|
| "add_comment"
|
||||||
|
| "set_motive"
|
||||||
|
| "add_addressee"
|
||||||
|
| "set_persons",
|
||||||
);
|
);
|
||||||
|
|
||||||
const ticket = computed(() => store.getters.getTicket as Ticket);
|
const ticket = computed(() => store.getters.getTicket as Ticket);
|
||||||
const motives = computed(() => store.getters.getMotives as Motive[]);
|
const motives = computed(() => store.getters.getMotives as Motive[]);
|
||||||
const userGroups = computed(
|
const userGroups = computed(
|
||||||
() => store.getters.getUserGroups as UserGroup[]
|
() => store.getters.getUserGroups as UserGroup[],
|
||||||
);
|
);
|
||||||
const users = computed(() => store.getters.getUsers as User[]);
|
const users = computed(() => store.getters.getUsers as User[]);
|
||||||
|
|
||||||
const hasReturnPath = computed((): boolean => {
|
const hasReturnPath = computed((): boolean => {
|
||||||
const params = new URL(document.location.toString()).searchParams;
|
const params = new URL(document.location.toString()).searchParams;
|
||||||
return params.has('returnPath');
|
return params.has("returnPath");
|
||||||
});
|
});
|
||||||
|
|
||||||
const returnPath = computed((): string => {
|
const returnPath = computed((): string => {
|
||||||
const params = new URL(document.location.toString()).searchParams;
|
const params = new URL(document.location.toString()).searchParams;
|
||||||
const returnPath = params.get('returnPath');
|
const returnPath = params.get("returnPath");
|
||||||
|
|
||||||
if (null === returnPath) {
|
if (null === returnPath) {
|
||||||
throw new Error("there isn't any returnPath, please check the existence before");
|
throw new Error(
|
||||||
|
"there isn't any returnPath, please check the existence before",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnPath;
|
return returnPath;
|
||||||
})
|
});
|
||||||
|
|
||||||
const motive = ref(
|
const motive = ref(
|
||||||
ticket.value.currentMotive
|
ticket.value.currentMotive
|
||||||
? ticket.value.currentMotive
|
? ticket.value.currentMotive
|
||||||
: ({} as Motive)
|
: ({} as Motive),
|
||||||
);
|
);
|
||||||
const content = ref("" as Comment["content"]);
|
const content = ref("" as Comment["content"]);
|
||||||
const addressees = ref(
|
const addressees = ref(
|
||||||
ticket.value.currentAddressees as Array<UserGroupOrUser>
|
ticket.value.currentAddressees as UserGroupOrUser[],
|
||||||
);
|
);
|
||||||
|
|
||||||
async function submitAction() {
|
async function submitAction() {
|
||||||
@ -262,9 +276,9 @@ export default defineComponent({
|
|||||||
alert("Sera disponible plus tard");
|
alert("Sera disponible plus tard");
|
||||||
}
|
}
|
||||||
|
|
||||||
const closeAllActions = function() {
|
const closeAllActions = function () {
|
||||||
activeTab.value = "";
|
activeTab.value = "";
|
||||||
}
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
actionIcons: ref(store.getters.getActionIcons),
|
actionIcons: ref(store.getters.getActionIcons),
|
||||||
@ -287,7 +301,6 @@ export default defineComponent({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
.go-back {
|
.go-back {
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,33 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<span
|
<span
|
||||||
v-for="userGroup in userGroupLevels"
|
v-for="userGroup in userGroupLevels"
|
||||||
:key="userGroup.id"
|
:key="userGroup.id"
|
||||||
class="badge-user-group"
|
class="badge-user-group"
|
||||||
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
||||||
>
|
>
|
||||||
{{ userGroup.label.fr }}
|
{{ userGroup.label.fr }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<span
|
<span
|
||||||
v-for="userGroup in userGroups"
|
v-for="userGroup in userGroups"
|
||||||
:key="userGroup.id"
|
:key="userGroup.id"
|
||||||
class="badge-user-group"
|
class="badge-user-group"
|
||||||
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
:style="`background-color: ${userGroup.backgroundColor}; color: ${userGroup.foregroundColor};`"
|
||||||
>
|
>
|
||||||
{{ userGroup.label.fr }}
|
{{ userGroup.label.fr }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="users.length > 0" class="col-12">
|
<div v-if="users.length > 0" class="col-12">
|
||||||
<span class="badge-user">
|
<span class="badge-user">
|
||||||
<user-render-box-badge v-for="user in users" :key="user.id" :user="user"></user-render-box-badge>
|
<user-render-box-badge
|
||||||
</span>
|
v-for="user in users"
|
||||||
</div>
|
:key="user.id"
|
||||||
|
:user="user"
|
||||||
|
></user-render-box-badge>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@ -39,7 +43,7 @@ import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRen
|
|||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "AddresseeComponent",
|
name: "AddresseeComponent",
|
||||||
components: {UserRenderBoxBadge},
|
components: { UserRenderBoxBadge },
|
||||||
props: {
|
props: {
|
||||||
addressees: {
|
addressees: {
|
||||||
type: Array as PropType<UserGroupOrUser[]>,
|
type: Array as PropType<UserGroupOrUser[]>,
|
||||||
@ -52,22 +56,22 @@ export default defineComponent({
|
|||||||
props.addressees.filter(
|
props.addressees.filter(
|
||||||
(addressee) =>
|
(addressee) =>
|
||||||
addressee.type == "user_group" &&
|
addressee.type == "user_group" &&
|
||||||
addressee.excludeKey == ""
|
addressee.excludeKey == "",
|
||||||
) as UserGroup[]
|
) as UserGroup[],
|
||||||
);
|
);
|
||||||
const userGroupLevels = computed(
|
const userGroupLevels = computed(
|
||||||
() =>
|
() =>
|
||||||
props.addressees.filter(
|
props.addressees.filter(
|
||||||
(addressee) =>
|
(addressee) =>
|
||||||
addressee.type == "user_group" &&
|
addressee.type == "user_group" &&
|
||||||
addressee.excludeKey == "level"
|
addressee.excludeKey == "level",
|
||||||
) as UserGroup[]
|
) as UserGroup[],
|
||||||
);
|
);
|
||||||
const users = computed(
|
const users = computed(
|
||||||
() =>
|
() =>
|
||||||
props.addressees.filter(
|
props.addressees.filter(
|
||||||
(addressee) => addressee.type == "user"
|
(addressee) => addressee.type == "user",
|
||||||
) as User[]
|
) as User[],
|
||||||
);
|
);
|
||||||
return { userGroups, users, userGroupLevels };
|
return { userGroups, users, userGroupLevels };
|
||||||
},
|
},
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div class="mb-5 level-line">
|
<div class="mb-5 level-line">
|
||||||
<span
|
<span
|
||||||
v-for="userGroupItem in userGroups.filter(
|
v-for="userGroupItem in userGroups.filter(
|
||||||
(userGroup) => userGroup.excludeKey == 'level'
|
(userGroup) => userGroup.excludeKey == 'level',
|
||||||
)"
|
)"
|
||||||
:key="userGroupItem.id"
|
:key="userGroupItem.id"
|
||||||
class="m-2 as-user-group"
|
class="m-2 as-user-group"
|
||||||
@ -19,7 +19,7 @@
|
|||||||
v-model="userGroupLevel"
|
v-model="userGroupLevel"
|
||||||
@click="
|
@click="
|
||||||
Object.values(userGroupLevel).includes(
|
Object.values(userGroupLevel).includes(
|
||||||
userGroupItem.id
|
userGroupItem.id,
|
||||||
)
|
)
|
||||||
? (userGroupLevel = {})
|
? (userGroupLevel = {})
|
||||||
: (userGroupLevel = userGroupItem)
|
: (userGroupLevel = userGroupItem)
|
||||||
@ -37,7 +37,7 @@
|
|||||||
<div class="mb-2 level-line">
|
<div class="mb-2 level-line">
|
||||||
<span
|
<span
|
||||||
v-for="userGroupItem in userGroups.filter(
|
v-for="userGroupItem in userGroups.filter(
|
||||||
(userGroup) => userGroup.excludeKey == ''
|
(userGroup) => userGroup.excludeKey == '',
|
||||||
)"
|
)"
|
||||||
:key="userGroupItem.id"
|
:key="userGroupItem.id"
|
||||||
class="m-2"
|
class="m-2"
|
||||||
@ -93,10 +93,10 @@ import {
|
|||||||
User,
|
User,
|
||||||
UserGroup,
|
UserGroup,
|
||||||
UserGroupOrUser,
|
UserGroupOrUser,
|
||||||
} from "../../../../../../../ChillMainBundle/Resources/public/types";
|
} from "ChillMainAssets/types";
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
import AddPersons from "../../../../../../../ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue";
|
import AddPersons from "ChillPersonAssets/Resources/public/vuejs/_components/AddPersons.vue";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "AddresseeSelectorComponent",
|
name: "AddresseeSelectorComponent",
|
||||||
@ -124,18 +124,19 @@ export default defineComponent({
|
|||||||
const addressees = ref([...props.modelValue] as UserGroupOrUser[]);
|
const addressees = ref([...props.modelValue] as UserGroupOrUser[]);
|
||||||
const userGroups = [
|
const userGroups = [
|
||||||
...props.modelValue.filter(
|
...props.modelValue.filter(
|
||||||
(addressee) => addressee.type == "user_group"
|
(addressee) => addressee.type == "user_group",
|
||||||
),
|
),
|
||||||
] as UserGroup[];
|
] as UserGroup[];
|
||||||
|
|
||||||
const userGroupLevel = ref(
|
const userGroupLevel = ref(
|
||||||
userGroups.filter(
|
userGroups.filter(
|
||||||
(userGroup) => userGroup.excludeKey == "level"
|
(userGroup) => userGroup.excludeKey == "level",
|
||||||
)[0] as UserGroup | {}
|
)[0] as UserGroup | {},
|
||||||
);
|
);
|
||||||
const userGroup = ref(
|
const userGroup = ref(
|
||||||
userGroups.filter((userGroup) => userGroup.excludeKey == "") as
|
userGroups.filter(
|
||||||
| UserGroup[]
|
(userGroup) => userGroup.excludeKey == "",
|
||||||
|
) as UserGroup[],
|
||||||
);
|
);
|
||||||
const users = ref([
|
const users = ref([
|
||||||
...props.modelValue.filter((addressee) => addressee.type == "user"),
|
...props.modelValue.filter((addressee) => addressee.type == "user"),
|
||||||
@ -157,7 +158,7 @@ export default defineComponent({
|
|||||||
const { selected, modal } = datas;
|
const { selected, modal } = datas;
|
||||||
users.value = selected.map((selected: any) => selected.result);
|
users.value = selected.map((selected: any) => selected.result);
|
||||||
addressees.value = addressees.value.filter(
|
addressees.value = addressees.value.filter(
|
||||||
(addressee) => addressee.type === "user_group"
|
(addressee) => addressee.type === "user_group",
|
||||||
);
|
);
|
||||||
addressees.value = [...addressees.value, ...users.value];
|
addressees.value = [...addressees.value, ...users.value];
|
||||||
ctx.emit("update:modelValue", addressees.value);
|
ctx.emit("update:modelValue", addressees.value);
|
||||||
@ -180,14 +181,14 @@ export default defineComponent({
|
|||||||
function removeUser(user: User) {
|
function removeUser(user: User) {
|
||||||
users.value.splice(users.value.indexOf(user), 1);
|
users.value.splice(users.value.indexOf(user), 1);
|
||||||
addressees.value = addressees.value.filter(
|
addressees.value = addressees.value.filter(
|
||||||
(addressee) => addressee.id !== user.id
|
(addressee) => addressee.id !== user.id,
|
||||||
);
|
);
|
||||||
ctx.emit("update:modelValue", addressees.value);
|
ctx.emit("update:modelValue", addressees.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(userGroupLevel, (userGroupLevelAdd, userGroupLevelRem) => {
|
watch(userGroupLevel, (userGroupLevelAdd, userGroupLevelRem) => {
|
||||||
const index = addressees.value.indexOf(
|
const index = addressees.value.indexOf(
|
||||||
userGroupLevelRem as UserGroup
|
userGroupLevelRem as UserGroup,
|
||||||
);
|
);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
addressees.value.splice(index, 1);
|
addressees.value.splice(index, 1);
|
||||||
@ -200,10 +201,10 @@ export default defineComponent({
|
|||||||
const userGroupLevel = addressees.value.filter(
|
const userGroupLevel = addressees.value.filter(
|
||||||
(addressee) =>
|
(addressee) =>
|
||||||
addressee.type == "user_group" &&
|
addressee.type == "user_group" &&
|
||||||
addressee.excludeKey == "level"
|
addressee.excludeKey == "level",
|
||||||
) as UserGroup[];
|
) as UserGroup[];
|
||||||
const users = addressees.value.filter(
|
const users = addressees.value.filter(
|
||||||
(addressee) => addressee.type == "user"
|
(addressee) => addressee.type == "user",
|
||||||
) as UserGroup[];
|
) as UserGroup[];
|
||||||
addressees.value = [...users, ...userGroupLevel, ...userGroupAdd];
|
addressees.value = [...users, ...userGroupLevel, ...userGroupAdd];
|
||||||
ctx.emit("update:modelValue", addressees.value);
|
ctx.emit("update:modelValue", addressees.value);
|
||||||
|
@ -14,7 +14,10 @@
|
|||||||
|
|
||||||
<div class="col-md-6 col-sm-12">
|
<div class="col-md-6 col-sm-12">
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<span class="badge text-bg-chill-green text-white" style="font-size: 1rem;">
|
<span
|
||||||
|
class="badge text-bg-chill-green text-white"
|
||||||
|
style="font-size: 1rem"
|
||||||
|
>
|
||||||
{{ $t("banner.open") }}
|
{{ $t("banner.open") }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@ -38,7 +41,15 @@
|
|||||||
<h3 class="text-primary">
|
<h3 class="text-primary">
|
||||||
{{ $t("banner.concerned_patient") }}
|
{{ $t("banner.concerned_patient") }}
|
||||||
</h3>
|
</h3>
|
||||||
<on-the-fly v-for="person in ticket.currentPersons" :key="person.id" :type="person.type" :id="person.id" :buttonText="person.textAge" :displayBadge="'true' === 'true'" action="show"></on-the-fly>
|
<on-the-fly
|
||||||
|
v-for="person in ticket.currentPersons"
|
||||||
|
:key="person.id"
|
||||||
|
:type="person.type"
|
||||||
|
:id="person.id"
|
||||||
|
:buttonText="person.textAge"
|
||||||
|
:displayBadge="'true' === 'true'"
|
||||||
|
action="show"
|
||||||
|
></on-the-fly>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 col-sm-12">
|
<div class="col-md-6 col-sm-12">
|
||||||
<h3 class="text-primary">{{ $t("banner.speaker") }}</h3>
|
<h3 class="text-primary">{{ $t("banner.speaker") }}</h3>
|
||||||
@ -68,7 +79,7 @@ import AddresseeComponent from "./AddresseeComponent.vue";
|
|||||||
|
|
||||||
// Types
|
// Types
|
||||||
import { Ticket } from "../../../types";
|
import { Ticket } from "../../../types";
|
||||||
import {ISOToDatetime} from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
import { ISOToDatetime } from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
||||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@ -106,15 +117,15 @@ export default defineComponent({
|
|||||||
const timeDiff = Math.abs(today.value.getTime() - date.getTime());
|
const timeDiff = Math.abs(today.value.getTime() - date.getTime());
|
||||||
const daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24));
|
const daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24));
|
||||||
const hoursDiff = Math.floor(
|
const hoursDiff = Math.floor(
|
||||||
(timeDiff % (1000 * 3600 * 24)) / (1000 * 3600)
|
(timeDiff % (1000 * 3600 * 24)) / (1000 * 3600),
|
||||||
);
|
);
|
||||||
const minutesDiff = Math.floor(
|
const minutesDiff = Math.floor(
|
||||||
(timeDiff % (1000 * 3600)) / (1000 * 60)
|
(timeDiff % (1000 * 3600)) / (1000 * 60),
|
||||||
);
|
);
|
||||||
const secondsDiff = Math.floor((timeDiff % (1000 * 60)) / 1000);
|
const secondsDiff = Math.floor((timeDiff % (1000 * 60)) / 1000);
|
||||||
|
|
||||||
if (daysDiff < 1 && hoursDiff < 1 && minutesDiff < 1) {
|
if (daysDiff < 1 && hoursDiff < 1 && minutesDiff < 1) {
|
||||||
return `${t("banner.seconds", {count: secondsDiff})}`;
|
return `${t("banner.seconds", { count: secondsDiff })}`;
|
||||||
} else if (daysDiff < 1 && hoursDiff < 1) {
|
} else if (daysDiff < 1 && hoursDiff < 1) {
|
||||||
return `${t("banner.minutes", { count: minutesDiff })}`;
|
return `${t("banner.minutes", { count: minutesDiff })}`;
|
||||||
} else if (daysDiff < 1) {
|
} else if (daysDiff < 1) {
|
||||||
@ -125,7 +136,7 @@ export default defineComponent({
|
|||||||
"banner.hours",
|
"banner.hours",
|
||||||
{
|
{
|
||||||
count: hoursDiff,
|
count: hoursDiff,
|
||||||
}
|
},
|
||||||
)} ${t("banner.minutes", {
|
)} ${t("banner.minutes", {
|
||||||
count: minutesDiff,
|
count: minutesDiff,
|
||||||
})}`;
|
})}`;
|
||||||
|
@ -1,16 +1,13 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useStore } from "vuex";
|
||||||
import {useStore} from "vuex";
|
|
||||||
import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
|
import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
|
||||||
import {computed, inject, reactive} from "vue";
|
import { computed, inject, reactive } from "vue";
|
||||||
import {Ticket} from "../../../types";
|
import { Ticket } from "../../../types";
|
||||||
import {Person} from "../../../../../../../ChillPersonBundle/Resources/public/types"
|
import { Person } from "../../../../../../../ChillPersonBundle/Resources/public/types";
|
||||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
||||||
import {ToastPluginApi} from "vue-toast-notification";
|
import { ToastPluginApi } from "vue-toast-notification";
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<(e: "closeRequested") => void>();
|
||||||
(e: 'closeRequested'): void
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const toast = inject("toast") as ToastPluginApi;
|
const toast = inject("toast") as ToastPluginApi;
|
||||||
@ -19,44 +16,55 @@ const persons = computed(() => ticket.value.currentPersons);
|
|||||||
|
|
||||||
const addPersonsOptions = {
|
const addPersonsOptions = {
|
||||||
uniq: false,
|
uniq: false,
|
||||||
type: ['person'],
|
type: ["person"],
|
||||||
priority: null,
|
priority: null,
|
||||||
button: {
|
button: {
|
||||||
class: 'btn-submit',
|
class: "btn-submit",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const added: Person[] = reactive([]);
|
const added: Person[] = reactive([]);
|
||||||
const removed: Person[] = reactive([]);
|
const removed: Person[] = reactive([]);
|
||||||
|
|
||||||
const computeCurrentPersons = (initial: Person[], added: Person[], removed: Person[]): Person[] => {
|
const computeCurrentPersons = (
|
||||||
|
initial: Person[],
|
||||||
|
added: Person[],
|
||||||
|
removed: Person[],
|
||||||
|
): Person[] => {
|
||||||
for (let p of added) {
|
for (let p of added) {
|
||||||
if (initial.findIndex((element) => element.id === p.id) === -1) {
|
if (initial.findIndex((element) => element.id === p.id) === -1) {
|
||||||
initial.push(p);
|
initial.push(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return initial.filter((p) => removed.findIndex((element) => element.id === p.id) === -1);
|
return initial.filter(
|
||||||
}
|
(p) => removed.findIndex((element) => element.id === p.id) === -1,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const currentPersons = computed((): Person[] => {
|
const currentPersons = computed((): Person[] => {
|
||||||
return computeCurrentPersons(persons.value, added, removed);
|
return computeCurrentPersons(persons.value, added, removed);
|
||||||
})
|
});
|
||||||
|
|
||||||
const removePerson = (p: Person) => {
|
const removePerson = (p: Person) => {
|
||||||
removed.push(p);
|
removed.push(p);
|
||||||
}
|
};
|
||||||
|
|
||||||
const addNewEntity = (n: {modal: {showModal: boolean}, selected: Array<{result: Person}>}) => {
|
const addNewEntity = (n: {
|
||||||
|
modal: { showModal: boolean };
|
||||||
|
selected: { result: Person }[];
|
||||||
|
}) => {
|
||||||
n.modal.showModal = false;
|
n.modal.showModal = false;
|
||||||
for (let p of n.selected) {
|
for (let p of n.selected) {
|
||||||
added.push(p.result);
|
added.push(p.result);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const save = async function(): Promise<void> {
|
const save = async function (): Promise<void> {
|
||||||
try {
|
try {
|
||||||
await store.dispatch("setPersons", { persons: computeCurrentPersons(persons.value, added, removed) });
|
await store.dispatch("setPersons", {
|
||||||
|
persons: computeCurrentPersons(persons.value, added, removed),
|
||||||
|
});
|
||||||
toast.success("Patients concernés sauvegardés");
|
toast.success("Patients concernés sauvegardés");
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
console.error("error while saving", e);
|
console.error("error while saving", e);
|
||||||
@ -64,16 +72,25 @@ const save = async function(): Promise<void> {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
emit("closeRequested");
|
emit("closeRequested");
|
||||||
}
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<ul v-if="currentPersons.length > 0" class="person-list">
|
<ul v-if="currentPersons.length > 0" class="person-list">
|
||||||
<li v-for="person in currentPersons" :key="person.id">
|
<li v-for="person in currentPersons" :key="person.id">
|
||||||
<on-the-fly :type="person.type" :id="person.id" :buttonText="person.textAge" :displayBadge="'true' === 'true'" action="show"></on-the-fly>
|
<on-the-fly
|
||||||
<button type="button" class="btn btn-delete remove-person" @click="removePerson(person)"></button>
|
:type="person.type"
|
||||||
|
:id="person.id"
|
||||||
|
:buttonText="person.textAge"
|
||||||
|
:displayBadge="'true' === 'true'"
|
||||||
|
action="show"
|
||||||
|
></on-the-fly>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn btn-delete remove-person"
|
||||||
|
@click="removePerson(person)"
|
||||||
|
></button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p v-else class="chill-no-data-statement">Aucun patient</p>
|
<p v-else class="chill-no-data-statement">Aucun patient</p>
|
||||||
|
@ -1,18 +1,15 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {User} from "../../../../../../../ChillMainBundle/Resources/public/types";
|
import { User } from "../../../../../../../ChillMainBundle/Resources/public/types";
|
||||||
|
|
||||||
interface TicketHistoryCreateComponentConfig {
|
interface TicketHistoryCreateComponentConfig {
|
||||||
by: User
|
by: User;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<TicketHistoryCreateComponentConfig>();
|
const props = defineProps<TicketHistoryCreateComponentConfig>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<p>Ticket créé par {{ props.by.text }}</p>
|
<p>Ticket créé par {{ props.by.text }}</p>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss"></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<div class="history-header">
|
<div class="history-header">
|
||||||
<div class="description">
|
<div class="description">
|
||||||
<i :class="`${actionIcons[history_line.event_type]} me-1`"></i>
|
<i
|
||||||
|
:class="`${actionIcons[history_line.event_type]} me-1`"
|
||||||
|
></i>
|
||||||
<span>{{ explainSentence(history_line) }}</span>
|
<span>{{ explainSentence(history_line) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@ -17,7 +19,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span class="badge-user">
|
<span class="badge-user">
|
||||||
<user-render-box-badge :user="history_line.by"></user-render-box-badge>
|
<user-render-box-badge
|
||||||
|
:user="history_line.by"
|
||||||
|
></user-render-box-badge>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -42,18 +46,18 @@
|
|||||||
<ticket-history-create-component
|
<ticket-history-create-component
|
||||||
:by="history_line.by"
|
:by="history_line.by"
|
||||||
v-else-if="history_line.event_type == 'create_ticket'"
|
v-else-if="history_line.event_type == 'create_ticket'"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import {PropType, defineComponent, ref, computed} from "vue";
|
import { PropType, defineComponent, ref, computed } from "vue";
|
||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
import { DateTime } from "../../../../../../../ChillMainBundle/Resources/public/types";
|
import { DateTime } from "../../../../../../../ChillMainBundle/Resources/public/types";
|
||||||
import {TicketHistoryLine} from "../../../types";
|
import { TicketHistoryLine } from "../../../types";
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
import TicketHistoryPersonComponent from "./TicketHistoryPersonComponent.vue";
|
import TicketHistoryPersonComponent from "./TicketHistoryPersonComponent.vue";
|
||||||
@ -62,7 +66,7 @@ import TicketHistoryCommentComponent from "./TicketHistoryCommentComponent.vue";
|
|||||||
import TicketHistoryAddresseeComponent from "./TicketHistoryAddresseeComponent.vue";
|
import TicketHistoryAddresseeComponent from "./TicketHistoryAddresseeComponent.vue";
|
||||||
import TicketHistoryCreateComponent from "./TicketHistoryCreateComponent.vue";
|
import TicketHistoryCreateComponent from "./TicketHistoryCreateComponent.vue";
|
||||||
import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRenderBoxBadge.vue";
|
import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRenderBoxBadge.vue";
|
||||||
import {ISOToDatetime} from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
import { ISOToDatetime } from "../../../../../../../ChillMainBundle/Resources/public/chill/js/date";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "TicketHistoryListComponent",
|
name: "TicketHistoryListComponent",
|
||||||
@ -96,8 +100,8 @@ export default defineComponent({
|
|||||||
return "Nouveau motifs";
|
return "Nouveau motifs";
|
||||||
case "create_ticket":
|
case "create_ticket":
|
||||||
return "Ticket créé";
|
return "Ticket créé";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function formatDate(d: DateTime): string {
|
function formatDate(d: DateTime): string {
|
||||||
const date = ISOToDatetime(d.datetime);
|
const date = ISOToDatetime(d.datetime);
|
||||||
@ -110,7 +114,11 @@ export default defineComponent({
|
|||||||
return `${date.getDate()} ${month} ${date.getFullYear()}, ${date.toLocaleTimeString()}`;
|
return `${date.getDate()} ${month} ${date.getFullYear()}, ${date.toLocaleTimeString()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { actionIcons: ref(store.getters.getActionIcons), formatDate, explainSentence };
|
return {
|
||||||
|
actionIcons: ref(store.getters.getActionIcons),
|
||||||
|
formatDate,
|
||||||
|
explainSentence,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,7 +2,13 @@
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<ul class="persons-list">
|
<ul class="persons-list">
|
||||||
<li v-for="person in personHistory.persons" :key="person.id">
|
<li v-for="person in personHistory.persons" :key="person.id">
|
||||||
<on-the-fly :type="person.type" :id="person.id" :buttonText="person.textAge" :displayBadge="'true' === 'true'" action="show"></on-the-fly>
|
<on-the-fly
|
||||||
|
:type="person.type"
|
||||||
|
:id="person.id"
|
||||||
|
:buttonText="person.textAge"
|
||||||
|
:displayBadge="'true' === 'true'"
|
||||||
|
action="show"
|
||||||
|
></on-the-fly>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -12,7 +18,7 @@
|
|||||||
import { PropType, defineComponent } from "vue";
|
import { PropType, defineComponent } from "vue";
|
||||||
|
|
||||||
// Type
|
// Type
|
||||||
import {PersonsState} from "../../../types";
|
import { PersonsState } from "../../../types";
|
||||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly.vue";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
@ -1,28 +1,32 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<div class="btn-group" @click="handleClick">
|
<div class="btn-group" @click="handleClick">
|
||||||
<button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
<button
|
||||||
{{ $t('ticket.previous_tickets') }}
|
type="button"
|
||||||
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-chill-green">
|
class="btn btn-light dropdown-toggle"
|
||||||
{{ tickets.length }}
|
data-bs-toggle="dropdown"
|
||||||
<span class="visually-hidden">Tickets</span>
|
aria-expanded="false"
|
||||||
</span>
|
>
|
||||||
|
{{ $t("ticket.previous_tickets") }}
|
||||||
</button>
|
<span
|
||||||
|
class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-chill-green"
|
||||||
|
>
|
||||||
|
{{ tickets.length }}
|
||||||
|
<span class="visually-hidden">Tickets</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { PropType, defineComponent } from "vue";
|
||||||
import { PropType, defineComponent } from 'vue';
|
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
import { Ticket } from '../../../types';
|
import { Ticket } from "../../../types";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'TicketSelectorComponent',
|
name: "TicketSelectorComponent",
|
||||||
props: {
|
props: {
|
||||||
tickets: {
|
tickets: {
|
||||||
type: Object as PropType<Ticket[]>,
|
type: Object as PropType<Ticket[]>,
|
||||||
@ -31,10 +35,10 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
function handleClick() {
|
function handleClick() {
|
||||||
alert('Sera disponible plus tard')
|
alert("Sera disponible plus tard");
|
||||||
}
|
}
|
||||||
return { handleClick }
|
return { handleClick };
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,32 +1,31 @@
|
|||||||
import App from './App.vue';
|
import App from "./App.vue";
|
||||||
import {createApp} from "vue";
|
import { createApp } from "vue";
|
||||||
|
|
||||||
import { _createI18n } from "../../../../../../ChillMainBundle/Resources/public/vuejs/_js/i18n";
|
import { _createI18n } from "../../../../../../ChillMainBundle/Resources/public/vuejs/_js/i18n";
|
||||||
|
|
||||||
import VueToast from 'vue-toast-notification';
|
import VueToast from "vue-toast-notification";
|
||||||
import 'vue-toast-notification/dist/theme-sugar.css';
|
import "vue-toast-notification/dist/theme-sugar.css";
|
||||||
|
|
||||||
import { store } from "./store";
|
import { store } from "./store";
|
||||||
import messages from './i18n/messages';
|
import messages from "./i18n/messages";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface Window {
|
interface Window {
|
||||||
initialTicket: string
|
initialTicket: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const i18n = _createI18n(messages, false);
|
const i18n = _createI18n(messages, false);
|
||||||
|
|
||||||
const _app = createApp({
|
const _app = createApp({
|
||||||
template: '<app></app>',
|
template: "<app></app>",
|
||||||
});
|
});
|
||||||
|
|
||||||
_app
|
_app.use(store)
|
||||||
.use(store)
|
|
||||||
.use(i18n)
|
.use(i18n)
|
||||||
// Cant use this.$toast in components in composition API so we need to provide it
|
// Cant use this.$toast in components in composition API so we need to provide it
|
||||||
// Fix: with vue-toast-notification@^3
|
// Fix: with vue-toast-notification@^3
|
||||||
.use(VueToast).provide('toast', _app.config.globalProperties.$toast)
|
.use(VueToast)
|
||||||
.component('app', App)
|
.provide("toast", _app.config.globalProperties.$toast)
|
||||||
.mount('#ticketRoot');
|
.component("app", App)
|
||||||
|
.mount("#ticketRoot");
|
||||||
|
@ -3,15 +3,15 @@ import { State as MotiveStates, moduleMotive } from "./modules/motive";
|
|||||||
import { State as TicketStates, moduleTicket } from "./modules/ticket";
|
import { State as TicketStates, moduleTicket } from "./modules/ticket";
|
||||||
import { State as CommentStates, moduleComment } from "./modules/comment";
|
import { State as CommentStates, moduleComment } from "./modules/comment";
|
||||||
import { State as AddresseeStates, moduleAddressee } from "./modules/addressee";
|
import { State as AddresseeStates, moduleAddressee } from "./modules/addressee";
|
||||||
import { State as PersonsState, modulePersons} from "./modules/persons";
|
import { State as PersonsState, modulePersons } from "./modules/persons";
|
||||||
|
|
||||||
export type RootState = {
|
export interface RootState {
|
||||||
motive: MotiveStates;
|
motive: MotiveStates;
|
||||||
ticket: TicketStates;
|
ticket: TicketStates;
|
||||||
comment: CommentStates;
|
comment: CommentStates;
|
||||||
addressee: AddresseeStates;
|
addressee: AddresseeStates;
|
||||||
persons: PersonsState;
|
persons: PersonsState;
|
||||||
};
|
}
|
||||||
|
|
||||||
export const store = createStore<RootState>({
|
export const store = createStore<RootState>({
|
||||||
modules: {
|
modules: {
|
||||||
|
@ -13,14 +13,14 @@ import {
|
|||||||
} from "../../../../../../../../ChillMainBundle/Resources/public/types";
|
} from "../../../../../../../../ChillMainBundle/Resources/public/types";
|
||||||
|
|
||||||
export interface State {
|
export interface State {
|
||||||
userGroups: Array<UserGroup>;
|
userGroups: UserGroup[];
|
||||||
users: Array<User>;
|
users: User[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const moduleAddressee: Module<State, RootState> = {
|
export const moduleAddressee: Module<State, RootState> = {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
userGroups: [] as Array<UserGroup>,
|
userGroups: [] as UserGroup[],
|
||||||
users: [] as Array<User>,
|
users: [] as User[],
|
||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
getUserGroups(state) {
|
getUserGroups(state) {
|
||||||
@ -44,7 +44,7 @@ export const moduleAddressee: Module<State, RootState> = {
|
|||||||
fetchResults("/api/1.0/main/user-group.json").then(
|
fetchResults("/api/1.0/main/user-group.json").then(
|
||||||
(results) => {
|
(results) => {
|
||||||
commit("setUserGroups", results);
|
commit("setUserGroups", results);
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw e.name;
|
throw e.name;
|
||||||
@ -62,7 +62,7 @@ export const moduleAddressee: Module<State, RootState> = {
|
|||||||
|
|
||||||
async setAdressees(
|
async setAdressees(
|
||||||
{ commit },
|
{ commit },
|
||||||
datas: { ticketId: number; addressees: Array<UserGroupOrUser> }
|
datas: { ticketId: number; addressees: UserGroupOrUser[] },
|
||||||
) {
|
) {
|
||||||
const { ticketId, addressees } = datas;
|
const { ticketId, addressees } = datas;
|
||||||
try {
|
try {
|
||||||
@ -73,7 +73,7 @@ export const moduleAddressee: Module<State, RootState> = {
|
|||||||
addressees: addressees.map((addressee) => {
|
addressees: addressees.map((addressee) => {
|
||||||
return { id: addressee.id, type: addressee.type };
|
return { id: addressee.id, type: addressee.type };
|
||||||
}),
|
}),
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
commit("setTicket", result);
|
commit("setTicket", result);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
@ -9,30 +9,29 @@ import { RootState } from "..";
|
|||||||
import { Comment } from "../../../../types";
|
import { Comment } from "../../../../types";
|
||||||
|
|
||||||
export interface State {
|
export interface State {
|
||||||
comments: Array<Comment>;
|
comments: Comment[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const moduleComment: Module<State, RootState> = {
|
export const moduleComment: Module<State, RootState> = {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
comments: [] as Array<Comment>,
|
comments: [] as Comment[],
|
||||||
}),
|
}),
|
||||||
getters: {},
|
getters: {},
|
||||||
mutations: {},
|
mutations: {},
|
||||||
actions: {
|
actions: {
|
||||||
async createComment(
|
async createComment(
|
||||||
{ commit },
|
{ commit },
|
||||||
datas: { ticketId: number; content: Comment["content"] }
|
datas: { ticketId: number; content: Comment["content"] },
|
||||||
) {
|
) {
|
||||||
const { ticketId, content } = datas;
|
const { ticketId, content } = datas;
|
||||||
try {
|
try {
|
||||||
const result = await makeFetch(
|
const result = await makeFetch(
|
||||||
"POST",
|
"POST",
|
||||||
`/api/1.0/ticket/${ticketId}/comment/add`,
|
`/api/1.0/ticket/${ticketId}/comment/add`,
|
||||||
{ content }
|
{ content },
|
||||||
);
|
);
|
||||||
commit("setTicket", result);
|
commit("setTicket", result);
|
||||||
}
|
} catch (e: any) {
|
||||||
catch(e: any) {
|
|
||||||
throw e.name;
|
throw e.name;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -9,12 +9,12 @@ import { RootState } from "..";
|
|||||||
import { Motive } from "../../../../types";
|
import { Motive } from "../../../../types";
|
||||||
|
|
||||||
export interface State {
|
export interface State {
|
||||||
motives: Array<Motive>;
|
motives: Motive[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const moduleMotive: Module<State, RootState> = {
|
export const moduleMotive: Module<State, RootState> = {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
motives: [] as Array<Motive>,
|
motives: [] as Motive[],
|
||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
getMotives(state) {
|
getMotives(state) {
|
||||||
@ -30,7 +30,7 @@ export const moduleMotive: Module<State, RootState> = {
|
|||||||
async fetchMotives({ commit }) {
|
async fetchMotives({ commit }) {
|
||||||
try {
|
try {
|
||||||
const results = (await fetchResults(
|
const results = (await fetchResults(
|
||||||
"/api/1.0/ticket/motive.json"
|
"/api/1.0/ticket/motive.json",
|
||||||
)) as Motive[];
|
)) as Motive[];
|
||||||
commit("setMotives", results);
|
commit("setMotives", results);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
@ -40,7 +40,7 @@ export const moduleMotive: Module<State, RootState> = {
|
|||||||
|
|
||||||
async createMotive(
|
async createMotive(
|
||||||
{ commit },
|
{ commit },
|
||||||
datas: { ticketId: number; motive: Motive }
|
datas: { ticketId: number; motive: Motive },
|
||||||
) {
|
) {
|
||||||
const { ticketId, motive } = datas;
|
const { ticketId, motive } = datas;
|
||||||
try {
|
try {
|
||||||
@ -52,7 +52,7 @@ export const moduleMotive: Module<State, RootState> = {
|
|||||||
id: motive.id,
|
id: motive.id,
|
||||||
type: motive.type,
|
type: motive.type,
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
commit("setTicket", result);
|
commit("setTicket", result);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
@ -1,20 +1,21 @@
|
|||||||
import {
|
import { makeFetch } from "../../../../../../../../ChillMainBundle/Resources/public/lib/api/apiMethods";
|
||||||
makeFetch,
|
|
||||||
} from "../../../../../../../../ChillMainBundle/Resources/public/lib/api/apiMethods";
|
|
||||||
import { Person } from "../../../../../../../../ChillPersonBundle/Resources/public/types";
|
import { Person } from "../../../../../../../../ChillPersonBundle/Resources/public/types";
|
||||||
import { Module } from "vuex";
|
import { Module } from "vuex";
|
||||||
import { RootState } from "..";
|
import { RootState } from "..";
|
||||||
import {Ticket} from "../../../../types";
|
import { Ticket } from "../../../../types";
|
||||||
|
|
||||||
export interface State {};
|
export interface State {}
|
||||||
|
|
||||||
export const modulePersons: Module<State, RootState> = {
|
export const modulePersons: Module<State, RootState> = {
|
||||||
actions: {
|
actions: {
|
||||||
async setPersons(
|
async setPersons(
|
||||||
{ commit, rootState: RootState },
|
{ commit, rootState: RootState },
|
||||||
payload: { persons: Person[] }
|
payload: { persons: Person[] },
|
||||||
) {
|
) {
|
||||||
const persons = payload.persons.map((person: Person) => ({id: person.id, type: person.type}));
|
const persons = payload.persons.map((person: Person) => ({
|
||||||
|
id: person.id,
|
||||||
|
type: person.type,
|
||||||
|
}));
|
||||||
try {
|
try {
|
||||||
const result: Ticket = await makeFetch(
|
const result: Ticket = await makeFetch(
|
||||||
"POST",
|
"POST",
|
||||||
@ -28,5 +29,5 @@ export const modulePersons: Module<State, RootState> = {
|
|||||||
throw e.name;
|
throw e.name;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
@ -5,7 +5,7 @@ import { Ticket } from "../../../../types";
|
|||||||
|
|
||||||
export interface State {
|
export interface State {
|
||||||
ticket: Ticket;
|
ticket: Ticket;
|
||||||
action_icons: Object;
|
action_icons: object;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const moduleTicket: Module<State, RootState> = {
|
export const moduleTicket: Module<State, RootState> = {
|
||||||
@ -26,7 +26,7 @@ export const moduleTicket: Module<State, RootState> = {
|
|||||||
getters: {
|
getters: {
|
||||||
getTicket(state) {
|
getTicket(state) {
|
||||||
state.ticket.history = state.ticket.history.sort((a, b) =>
|
state.ticket.history = state.ticket.history.sort((a, b) =>
|
||||||
b.at.datetime.localeCompare(a.at.datetime)
|
b.at.datetime.localeCompare(a.at.datetime),
|
||||||
);
|
);
|
||||||
return state.ticket;
|
return state.ticket;
|
||||||
},
|
},
|
||||||
@ -39,9 +39,11 @@ export const moduleTicket: Module<State, RootState> = {
|
|||||||
(result, item) => {
|
(result, item) => {
|
||||||
const { datetime } = item.at;
|
const { datetime } = item.at;
|
||||||
if (
|
if (
|
||||||
!["add_addressee", "remove_addressee", "add_person"].includes(
|
![
|
||||||
item.event_type
|
"add_addressee",
|
||||||
)
|
"remove_addressee",
|
||||||
|
"add_person",
|
||||||
|
].includes(item.event_type)
|
||||||
) {
|
) {
|
||||||
result[datetime] = item;
|
result[datetime] = item;
|
||||||
return result;
|
return result;
|
||||||
@ -57,9 +59,9 @@ export const moduleTicket: Module<State, RootState> = {
|
|||||||
*/
|
*/
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
{} as any
|
{} as any,
|
||||||
);
|
);
|
||||||
return Object.values(addresseeHistory) as Array<Ticket["history"]>;
|
return Object.values(addresseeHistory) as Ticket["history"][];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user