changes 0328092025

This commit is contained in:
Simon Pocrnjič
2025-09-28 22:36:47 +02:00
parent b40ee9dcde
commit 7e8e0a479b
61 changed files with 4306 additions and 654 deletions
+225 -4
View File
@@ -15,6 +15,8 @@ const props = defineProps({
});
const showCreate = ref(false);
const showEdit = ref(false);
const editingId = ref(null);
const segmentOptions = ref([]);
const decisionOptions = ref([]);
@@ -26,8 +28,11 @@ onMounted(() => {
const form = useForm({
segment_id: null,
initial_decision_id: null,
asign_decision_id: null,
assign_decision_id: null,
complete_decision_id: null,
cancel_decision_id: null,
return_segment_id: null,
queue_segment_id: null,
});
const openCreate = () => {
@@ -46,6 +51,45 @@ const store = () => {
onSuccess: () => closeCreate(),
});
};
const editForm = useForm({
segment_id: null,
initial_decision_id: null,
assign_decision_id: null,
complete_decision_id: null,
cancel_decision_id: null,
return_segment_id: null,
queue_segment_id: null,
});
const openEdit = (row) => {
editingId.value = row.id;
editForm.segment_id = row.segment_id ?? row.segment?.id ?? null;
editForm.initial_decision_id = row.initial_decision_id ?? row.initial_decision?.id ?? row.initialDecision?.id ?? null;
editForm.assign_decision_id = row.assign_decision_id ?? row.assign_decision?.id ?? row.assignDecision?.id ?? null;
editForm.complete_decision_id = row.complete_decision_id ?? row.complete_decision?.id ?? row.completeDecision?.id ?? null;
editForm.cancel_decision_id = row.cancel_decision_id ?? row.cancel_decision?.id ?? row.cancelDecision?.id ?? null;
editForm.return_segment_id = row.return_segment_id ?? row.return_segment?.id ?? row.returnSegment?.id ?? null;
editForm.queue_segment_id = row.queue_segment_id ?? row.queue_segment?.id ?? row.queueSegment?.id ?? null;
showEdit.value = true;
};
const closeEdit = () => {
showEdit.value = false;
editingId.value = null;
editForm.reset();
editForm.clearErrors();
};
const update = () => {
if (!editingId.value) {
return;
}
editForm.put(route('settings.fieldjob.update', { setting: editingId.value }), {
preserveScroll: true,
onSuccess: () => closeEdit(),
});
};
</script>
<template>
@@ -100,7 +144,7 @@ const store = () => {
<InputLabel for="assignDecision" value="Assign Decision" />
<multiselect
id="assignDecision"
v-model="form.asign_decision_id"
v-model="form.assign_decision_id"
:options="decisionOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
@@ -108,7 +152,7 @@ const store = () => {
:append-to-body="true"
:custom-label="(opt) => (decisionOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="form.errors.asign_decision_id" class="mt-1" />
<InputError :message="form.errors.assign_decision_id" class="mt-1" />
</div>
<div class="mt-2">
@@ -125,6 +169,51 @@ const store = () => {
/>
<InputError :message="form.errors.complete_decision_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="cancelDecision" value="Cancel Decision" />
<multiselect
id="cancelDecision"
v-model="form.cancel_decision_id"
:options="decisionOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select cancel decision (optional)"
:append-to-body="true"
:custom-label="(opt) => (decisionOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="form.errors.cancel_decision_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="returnSegment" value="Return Segment" />
<multiselect
id="returnSegment"
v-model="form.return_segment_id"
:options="segmentOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select return segment (optional)"
:append-to-body="true"
:custom-label="(opt) => (segmentOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="form.errors.return_segment_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="queueSegment" value="Queue Segment" />
<multiselect
id="queueSegment"
v-model="form.queue_segment_id"
:options="segmentOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select queue segment (optional)"
:append-to-body="true"
:custom-label="(opt) => (segmentOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="form.errors.queue_segment_id" class="mt-1" />
</div>
</div>
<div class="flex justify-end gap-2 mt-6">
@@ -134,6 +223,126 @@ const store = () => {
</form>
</template>
</DialogModal>
<DialogModal :show="showEdit" @close="closeEdit">
<template #title>
Edit Field Job Setting
</template>
<template #content>
<form @submit.prevent="update">
<div class="grid grid-cols-1 gap-4">
<div>
<InputLabel for="edit-segment" value="Segment" />
<multiselect
id="edit-segment"
v-model="editForm.segment_id"
:options="segmentOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select segment"
:append-to-body="true"
:custom-label="(opt) => (segmentOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.segment_id" class="mt-1" />
</div>
<div>
<InputLabel for="edit-initialDecision" value="Initial Decision" />
<multiselect
id="edit-initialDecision"
v-model="editForm.initial_decision_id"
:options="decisionOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select initial decision"
:append-to-body="true"
:custom-label="(opt) => (decisionOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.initial_decision_id" class="mt-1" />
</div>
<div>
<InputLabel for="edit-assignDecision" value="Assign Decision" />
<multiselect
id="edit-assignDecision"
v-model="editForm.assign_decision_id"
:options="decisionOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select assign decision"
:append-to-body="true"
:custom-label="(opt) => (decisionOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.assign_decision_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="edit-completeDecision" value="Complete Decision" />
<multiselect
id="edit-completeDecision"
v-model="editForm.complete_decision_id"
:options="decisionOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select complete decision"
:append-to-body="true"
:custom-label="(opt) => (decisionOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.complete_decision_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="edit-cancelDecision" value="Cancel Decision" />
<multiselect
id="edit-cancelDecision"
v-model="editForm.cancel_decision_id"
:options="decisionOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select cancel decision (optional)"
:append-to-body="true"
:custom-label="(opt) => (decisionOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.cancel_decision_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="edit-returnSegment" value="Return Segment" />
<multiselect
id="edit-returnSegment"
v-model="editForm.return_segment_id"
:options="segmentOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select return segment (optional)"
:append-to-body="true"
:custom-label="(opt) => (segmentOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.return_segment_id" class="mt-1" />
</div>
<div class="mt-2">
<InputLabel for="edit-queueSegment" value="Queue Segment" />
<multiselect
id="edit-queueSegment"
v-model="editForm.queue_segment_id"
:options="segmentOptions.map(o=>o.id)"
:multiple="false"
:searchable="true"
placeholder="Select queue segment (optional)"
:append-to-body="true"
:custom-label="(opt) => (segmentOptions.find(o=>o.id===opt)?.name || '')"
/>
<InputError :message="editForm.errors.queue_segment_id" class="mt-1" />
</div>
</div>
<div class="flex justify-end gap-2 mt-6">
<button type="button" @click="closeEdit" class="px-4 py-2 rounded bg-gray-200 hover:bg-gray-300">Cancel</button>
<PrimaryButton :disabled="editForm.processing">Save</PrimaryButton>
</div>
</form>
</template>
</DialogModal>
<table class="min-w-full text-left text-sm">
<thead>
<tr class="border-b">
@@ -142,6 +351,10 @@ const store = () => {
<th class="py-2 pr-4">Initial Decision</th>
<th class="py-2 pr-4">Assign Decision</th>
<th class="py-2 pr-4">Complete Decision</th>
<th class="py-2 pr-4">Cancel Decision</th>
<th class="py-2 pr-4">Return Segment</th>
<th class="py-2 pr-4">Queue Segment</th>
<th class="py-2 pr-4">Actions</th>
</tr>
</thead>
<tbody>
@@ -149,8 +362,16 @@ const store = () => {
<td class="py-2 pr-4">{{ row.id }}</td>
<td class="py-2 pr-4">{{ row.segment?.name }}</td>
<td class="py-2 pr-4">{{ row.initial_decision?.name || row.initialDecision?.name }}</td>
<td class="py-2 pr-4">{{ row.asign_decision?.name || row.asignDecision?.name }}</td>
<td class="py-2 pr-4">{{ row.assign_decision?.name || row.assignDecision?.name }}</td>
<td class="py-2 pr-4">{{ row.complete_decision?.name || row.completeDecision?.name }}</td>
<td class="py-2 pr-4">{{ row.cancel_decision?.name || row.cancelDecision?.name }}</td>
<td class="py-2 pr-4">{{ row.return_segment?.name || row.returnSegment?.name }}</td>
<td class="py-2 pr-4">{{ row.queue_segment?.name || row.queueSegment?.name }}</td>
<td class="py-2 pr-4">
<button @click="openEdit(row)" class="px-3 py-1 rounded bg-indigo-600 text-white hover:bg-indigo-700">
Edit
</button>
</td>
</tr>
</tbody>
</table>