Fix add employee pc
This commit is contained in:
parent
66902a64de
commit
e1d0faa1a4
@ -134,7 +134,7 @@
|
||||
|
||||
<h3>Ответственные сотрудники за сделку</h3>
|
||||
<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">
|
||||
<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="Добавить сотрудника">
|
||||
@ -659,7 +659,7 @@ async function loadDealData(dealId) {
|
||||
|
||||
// Обработка сотрудников
|
||||
if (employeesRes.data) {
|
||||
selectedEmployees.value = employeesRes.data.map(emp => ({
|
||||
manualEmployees.value = employeesRes.data.map(emp => ({
|
||||
...emp,
|
||||
fullName: `${emp.last_name} ${emp.first_name} ${emp.middle_name}` || emp.fio,
|
||||
}));
|
||||
@ -701,7 +701,8 @@ function resetForm() {
|
||||
counter_agent_phone: '',
|
||||
deal_date: null,
|
||||
};
|
||||
selectedEmployees.value = [];
|
||||
requisitionEmployees.value = [];
|
||||
manualEmployees.value = [];
|
||||
selectedRequisitionSideOneId.value = null;
|
||||
selectedRequisitionSideTwoId.value = null;
|
||||
selectedObjectSideOneId.value = null;
|
||||
@ -930,8 +931,16 @@ onMounted(async () => {
|
||||
|
||||
|
||||
// Получение деталей выбранной заявки 1 стороны
|
||||
watch(selectedRequisitionSideOneId, async (newId) => {
|
||||
watch(selectedRequisitionSideOneId, async (newId, oldId) => {
|
||||
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)
|
||||
try {
|
||||
await fetchRequisitionSideOneDetails(`/requisitions/${newId}`);
|
||||
@ -939,8 +948,8 @@ watch(selectedRequisitionSideOneId, async (newId) => {
|
||||
selectedRequisitionSideOne.value = requisitionSideOneDetails.value;
|
||||
deal.value.side_one_requisition_id = newId;
|
||||
|
||||
// Добавляем who_work только при создании сделки
|
||||
if (newDealReqId.value && requisitionSideOneDetails.value.who_work) {
|
||||
// Добавляем who_work заявки стороны 1
|
||||
if (requisitionSideOneDetails.value.who_work) {
|
||||
await addResponsibleEmployee(requisitionSideOneDetails.value.who_work);
|
||||
}
|
||||
|
||||
@ -974,6 +983,12 @@ watch(selectedRequisitionSideTwoId, async (newId, oldId) => {
|
||||
selectedObjectSideTwoId.value = null;
|
||||
selectedObjectSideTwo.value = 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) {
|
||||
@ -985,6 +1000,11 @@ watch(selectedRequisitionSideTwoId, async (newId, oldId) => {
|
||||
if (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
|
||||
@ -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 = () => {
|
||||
console.log('[openModalDealManager] Открываем EmployeeAddModal через DynamicDialog')
|
||||
@ -1089,20 +1125,21 @@ const openModalDealManager = () => {
|
||||
}
|
||||
},
|
||||
data: {
|
||||
employees: employeesList.value,
|
||||
selected: selectedEmployees.value
|
||||
employees: filteredEmployeesList.value,
|
||||
selected: manualEmployees.value
|
||||
},
|
||||
onClose: (opt) => {
|
||||
console.log('[DynamicDialog] EmployeeAddModal закрыт:', opt?.data)
|
||||
if (opt?.data) {
|
||||
selectedEmployees.value = opt.data;
|
||||
manualEmployees.value = opt.data;
|
||||
}
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
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([]);
|
||||
@ -1478,33 +1515,28 @@ const closeModel = () => {
|
||||
|
||||
|
||||
async function addResponsibleEmployee(userId) {
|
||||
// Проверяем, что список сотрудников загружен
|
||||
if (!employeesList.value || employeesList.value.length === 0) {
|
||||
console.warn('Список сотрудников не загружен!');
|
||||
return;
|
||||
}
|
||||
|
||||
// Ищем сотрудника
|
||||
const employee = employeesList.value.find(emp => emp.id === userId);
|
||||
if (!employee) return;
|
||||
|
||||
if (!employee) {
|
||||
return;
|
||||
}
|
||||
if (requisitionEmployees.value.some(e => e.id === userId)) return;
|
||||
|
||||
// Проверяем дублирование
|
||||
if (selectedEmployees.value.some(e => e.id === userId)) {
|
||||
console.log('Сотрудник уже добавлен');
|
||||
return;
|
||||
}
|
||||
|
||||
// Добавляем сотрудника
|
||||
selectedEmployees.value = [
|
||||
...selectedEmployees.value,
|
||||
{
|
||||
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];
|
||||
}
|
||||
|
||||
defineExpose({ closeModel });
|
||||
|
||||
@ -14,6 +14,8 @@
|
||||
:maxSelectedLabels="3"
|
||||
:filter="true"
|
||||
>
|
||||
<template #chip></template>
|
||||
<template #removetokenicon></template>
|
||||
<template #dropdownicon>
|
||||
<DropdownIcon />
|
||||
</template>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
</a>
|
||||
</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">-->
|
||||
<span class="simple-button delete" title="Удалить"><i class="jw-action-icon-delete"></i></span>
|
||||
</button>
|
||||
@ -37,6 +37,10 @@ export default {
|
||||
url: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
locked: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user