Fix add employee pc
This commit is contained in:
parent
66902a64de
commit
e1d0faa1a4
@ -134,7 +134,7 @@
|
|||||||
|
|
||||||
<h3>Ответственные сотрудники за сделку</h3>
|
<h3>Ответственные сотрудники за сделку</h3>
|
||||||
<div class="flex w-full flex-wrap">
|
<div class="flex w-full flex-wrap">
|
||||||
<EmployeeCard v-for="employee in selectedEmployees" :key="employee.id" :employee="employee" :url="url" @remove="removeEmployee" />
|
<EmployeeCard v-for="employee in selectedEmployees" :key="employee.id" :employee="employee" :url="url" :locked="isWhoWork(employee.id)" @remove="removeEmployee" />
|
||||||
<div class="sm:w-1/2 md:w-1/3 lg:w-1/4">
|
<div class="sm:w-1/2 md:w-1/3 lg:w-1/4">
|
||||||
<button @click="openModalDealManager" class="w-full h-full p-5 rounded flex flex-col items-center justify-center add-employee-button">
|
<button @click="openModalDealManager" class="w-full h-full p-5 rounded flex flex-col items-center justify-center add-employee-button">
|
||||||
<img src="@/shared/assets/icons/plus-green.svg" alt="Добавить сотрудника">
|
<img src="@/shared/assets/icons/plus-green.svg" alt="Добавить сотрудника">
|
||||||
@ -659,7 +659,7 @@ async function loadDealData(dealId) {
|
|||||||
|
|
||||||
// Обработка сотрудников
|
// Обработка сотрудников
|
||||||
if (employeesRes.data) {
|
if (employeesRes.data) {
|
||||||
selectedEmployees.value = employeesRes.data.map(emp => ({
|
manualEmployees.value = employeesRes.data.map(emp => ({
|
||||||
...emp,
|
...emp,
|
||||||
fullName: `${emp.last_name} ${emp.first_name} ${emp.middle_name}` || emp.fio,
|
fullName: `${emp.last_name} ${emp.first_name} ${emp.middle_name}` || emp.fio,
|
||||||
}));
|
}));
|
||||||
@ -701,7 +701,8 @@ function resetForm() {
|
|||||||
counter_agent_phone: '',
|
counter_agent_phone: '',
|
||||||
deal_date: null,
|
deal_date: null,
|
||||||
};
|
};
|
||||||
selectedEmployees.value = [];
|
requisitionEmployees.value = [];
|
||||||
|
manualEmployees.value = [];
|
||||||
selectedRequisitionSideOneId.value = null;
|
selectedRequisitionSideOneId.value = null;
|
||||||
selectedRequisitionSideTwoId.value = null;
|
selectedRequisitionSideTwoId.value = null;
|
||||||
selectedObjectSideOneId.value = null;
|
selectedObjectSideOneId.value = null;
|
||||||
@ -930,8 +931,16 @@ onMounted(async () => {
|
|||||||
|
|
||||||
|
|
||||||
// Получение деталей выбранной заявки 1 стороны
|
// Получение деталей выбранной заявки 1 стороны
|
||||||
watch(selectedRequisitionSideOneId, async (newId) => {
|
watch(selectedRequisitionSideOneId, async (newId, oldId) => {
|
||||||
if (newId != null) {
|
if (newId != null) {
|
||||||
|
// Убираем who_work старой заявки стороны 1 из requisitionEmployees
|
||||||
|
if (oldId) {
|
||||||
|
const oldRequisition = originalRequisitionsList.value.find(r => r.id === oldId);
|
||||||
|
if (oldRequisition?.who_work) {
|
||||||
|
requisitionEmployees.value = requisitionEmployees.value.filter(e => e.id !== oldRequisition.who_work);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
console.log('watch selectedRequisitionSideOneId:' + newId)
|
console.log('watch selectedRequisitionSideOneId:' + newId)
|
||||||
try {
|
try {
|
||||||
await fetchRequisitionSideOneDetails(`/requisitions/${newId}`);
|
await fetchRequisitionSideOneDetails(`/requisitions/${newId}`);
|
||||||
@ -939,8 +948,8 @@ watch(selectedRequisitionSideOneId, async (newId) => {
|
|||||||
selectedRequisitionSideOne.value = requisitionSideOneDetails.value;
|
selectedRequisitionSideOne.value = requisitionSideOneDetails.value;
|
||||||
deal.value.side_one_requisition_id = newId;
|
deal.value.side_one_requisition_id = newId;
|
||||||
|
|
||||||
// Добавляем who_work только при создании сделки
|
// Добавляем who_work заявки стороны 1
|
||||||
if (newDealReqId.value && requisitionSideOneDetails.value.who_work) {
|
if (requisitionSideOneDetails.value.who_work) {
|
||||||
await addResponsibleEmployee(requisitionSideOneDetails.value.who_work);
|
await addResponsibleEmployee(requisitionSideOneDetails.value.who_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -974,6 +983,12 @@ watch(selectedRequisitionSideTwoId, async (newId, oldId) => {
|
|||||||
selectedObjectSideTwoId.value = null;
|
selectedObjectSideTwoId.value = null;
|
||||||
selectedObjectSideTwo.value = null;
|
selectedObjectSideTwo.value = null;
|
||||||
deal.value.side_two_object_id = null;
|
deal.value.side_two_object_id = null;
|
||||||
|
|
||||||
|
// Убираем who_work старой заявки стороны 2 из requisitionEmployees
|
||||||
|
const oldRequisition = originalRequisitionsList.value.find(r => r.id === oldId);
|
||||||
|
if (oldRequisition?.who_work) {
|
||||||
|
requisitionEmployees.value = requisitionEmployees.value.filter(e => e.id !== oldRequisition.who_work);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newId) {
|
if (newId) {
|
||||||
@ -985,6 +1000,11 @@ watch(selectedRequisitionSideTwoId, async (newId, oldId) => {
|
|||||||
if (requisitionSideTwoDetails.value.object_id) {
|
if (requisitionSideTwoDetails.value.object_id) {
|
||||||
selectedObjectSideTwoId.value = requisitionSideTwoDetails.value.object_id;
|
selectedObjectSideTwoId.value = requisitionSideTwoDetails.value.object_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Добавляем who_work заявки стороны 2 в selectedEmployees
|
||||||
|
if (requisitionSideTwoDetails.value.who_work) {
|
||||||
|
await addResponsibleEmployee(requisitionSideTwoDetails.value.who_work);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Установка клиента в deal для стороны 2
|
// Установка клиента в deal для стороны 2
|
||||||
@ -1070,7 +1090,23 @@ watch(selectedObjectSideTwoId, async (newId) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Логика для управления модальным окном и выбранными сотрудниками
|
// Логика для управления модальным окном и выбранными сотрудниками
|
||||||
const selectedEmployees = ref([]);
|
const requisitionEmployees = ref([]);
|
||||||
|
const manualEmployees = ref([]);
|
||||||
|
|
||||||
|
const selectedEmployees = computed(() => {
|
||||||
|
return [...requisitionEmployees.value, ...manualEmployees.value];
|
||||||
|
});
|
||||||
|
|
||||||
|
const isWhoWork = (employeeId) => {
|
||||||
|
return requisitionEmployees.value.some(e => e.id === employeeId);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Исключаем who_work заявок из списка выбора сотрудников
|
||||||
|
const filteredEmployeesList = computed(() => {
|
||||||
|
const excludeIds = requisitionEmployees.value.map(e => e.id);
|
||||||
|
if (excludeIds.length === 0) return employeesList.value;
|
||||||
|
return employeesList.value.filter(emp => !excludeIds.includes(emp.id));
|
||||||
|
});
|
||||||
|
|
||||||
const openModalDealManager = () => {
|
const openModalDealManager = () => {
|
||||||
console.log('[openModalDealManager] Открываем EmployeeAddModal через DynamicDialog')
|
console.log('[openModalDealManager] Открываем EmployeeAddModal через DynamicDialog')
|
||||||
@ -1089,20 +1125,21 @@ const openModalDealManager = () => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
employees: employeesList.value,
|
employees: filteredEmployeesList.value,
|
||||||
selected: selectedEmployees.value
|
selected: manualEmployees.value
|
||||||
},
|
},
|
||||||
onClose: (opt) => {
|
onClose: (opt) => {
|
||||||
console.log('[DynamicDialog] EmployeeAddModal закрыт:', opt?.data)
|
console.log('[DynamicDialog] EmployeeAddModal закрыт:', opt?.data)
|
||||||
if (opt?.data) {
|
if (opt?.data) {
|
||||||
selectedEmployees.value = opt.data;
|
manualEmployees.value = opt.data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
const removeEmployee = (employeeId) => {
|
const removeEmployee = (employeeId) => {
|
||||||
selectedEmployees.value = selectedEmployees.value.filter(e => e.id !== employeeId);
|
if (isWhoWork(employeeId)) return;
|
||||||
|
manualEmployees.value = manualEmployees.value.filter(e => e.id !== employeeId);
|
||||||
};
|
};
|
||||||
|
|
||||||
const selectedDocs = ref([]);
|
const selectedDocs = ref([]);
|
||||||
@ -1478,33 +1515,28 @@ const closeModel = () => {
|
|||||||
|
|
||||||
|
|
||||||
async function addResponsibleEmployee(userId) {
|
async function addResponsibleEmployee(userId) {
|
||||||
// Проверяем, что список сотрудников загружен
|
|
||||||
if (!employeesList.value || employeesList.value.length === 0) {
|
if (!employeesList.value || employeesList.value.length === 0) {
|
||||||
console.warn('Список сотрудников не загружен!');
|
console.warn('Список сотрудников не загружен!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ищем сотрудника
|
|
||||||
const employee = employeesList.value.find(emp => emp.id === userId);
|
const employee = employeesList.value.find(emp => emp.id === userId);
|
||||||
|
if (!employee) return;
|
||||||
|
|
||||||
if (!employee) {
|
if (requisitionEmployees.value.some(e => e.id === userId)) return;
|
||||||
return;
|
|
||||||
|
const empData = {
|
||||||
|
...employee,
|
||||||
|
fullName: `${employee.last_name} ${employee.first_name}` || employee.fio,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Если сотрудник уже в manualEmployees — переносим в requisitionEmployees
|
||||||
|
const manualIdx = manualEmployees.value.findIndex(e => e.id === userId);
|
||||||
|
if (manualIdx >= 0) {
|
||||||
|
manualEmployees.value.splice(manualIdx, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверяем дублирование
|
requisitionEmployees.value = [...requisitionEmployees.value, empData];
|
||||||
if (selectedEmployees.value.some(e => e.id === userId)) {
|
|
||||||
console.log('Сотрудник уже добавлен');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Добавляем сотрудника
|
|
||||||
selectedEmployees.value = [
|
|
||||||
...selectedEmployees.value,
|
|
||||||
{
|
|
||||||
...employee,
|
|
||||||
fullName: `${employee.last_name} ${employee.first_name}` || employee.fio,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({ closeModel });
|
defineExpose({ closeModel });
|
||||||
|
|||||||
@ -14,6 +14,8 @@
|
|||||||
:maxSelectedLabels="3"
|
:maxSelectedLabels="3"
|
||||||
:filter="true"
|
:filter="true"
|
||||||
>
|
>
|
||||||
|
<template #chip></template>
|
||||||
|
<template #removetokenicon></template>
|
||||||
<template #dropdownicon>
|
<template #dropdownicon>
|
||||||
<DropdownIcon />
|
<DropdownIcon />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button @click="$emit('remove', employee.id)" class="ml-auto mt-2 px-4 py-2 rounded">
|
<button v-if="!locked" @click="$emit('remove', employee.id)" class="ml-auto mt-2 px-4 py-2 rounded">
|
||||||
<!-- <img src="@/shared/assets/icons/trash.svg" alt="Удалить" class="w-6 h-6">-->
|
<!-- <img src="@/shared/assets/icons/trash.svg" alt="Удалить" class="w-6 h-6">-->
|
||||||
<span class="simple-button delete" title="Удалить"><i class="jw-action-icon-delete"></i></span>
|
<span class="simple-button delete" title="Удалить"><i class="jw-action-icon-delete"></i></span>
|
||||||
</button>
|
</button>
|
||||||
@ -37,6 +37,10 @@ export default {
|
|||||||
url: {
|
url: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
locked: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user