Описание реализации проекта:green_book:

image

Начальное состояние:white_check_mark:

Изначально все лифты находятся в состоянии покоя. Система спроектирована так, что количество этажей и число лифтовых шахт можно поменять, при этом размер лифтов и этажей пересчитается.

Кнопки находятся в неактивном состоянии.

Вызов лифта:white_check_mark:

При нажатии на неактивную кнопку вызова программа ищет ближайший свободный лифт, расположенный к вызванному этажу. Поиск свободных лифтов происходит слева направа(как на картинке)

image

Данные лифтовой системы обновляются.

Вызов нескольких этажей также обрабатывается:
image

Лифт движется со скоростью 1 этаж за секунду.

Остановка на этаже:white_check_mark:

При остановке на этаже лифт стоит 3 секунды и мигает:

image

Система кнопок:white_check_mark:

Представляет собой массив объектов со свойствами уровня и состояния вызова:

image

При вызове обновляется состояние вызова.

Очередь вызовов:white_check_mark:

Очередь реализована по принципу FIFO(First In First Out) - первый этаж в очереди будет обработан первым.
Очередь реализована через массив levelsQueue:

image

Кнопки при добавлении этажа в очередь подсвечиваются активным цветом.
Повторное нажатие активной кнопки не добавляет ее в очередь и не изменяет её активного цвета. По прибытии лифта на этаж кнопка "отпускается".

Алгоритм поиска ближайшего лифта:white_check_mark:

Логика функции поиска ближайшего лифта findFreeClosestShaft вынесена в отдельный файл,т.к. довольно большая:

image

С помощью функции Array.prototype.reduce выбирается наиболее близкий свободный лифт. Обязательные условия - лифт должен быть свободен и расстояние между этажом и лифтом должно быть минимальным. Если на этаже уже есть лифт - вызов пропускается.
Если свободный лифт не найден, возвращается объект со свойствами gap со значением макисмального этажа и allBusy со значение true, если все лифты заняты. В таком случае вызов помещается в очередь levelsQueue.

Запоминание состояние системы после перезагрузки и закрытии страницы:red_circle:

Реализовано частично
Система запоминает позицию лифта при beforeunload событии страницы, если лифт приехал на этаж и находится либо в состоянии покоя, либо мигает:

image

При перезагрузке/закрытие и открытии страницы система лифтов не возобновляет движение:no_entry:
Также имеется костыль недочет при изменении параметров системы(если отключить localStorage, число лифтов и кнопок можно менять в файле state.js):

image

Как уже упоминалось ранее, система расширяема: параметры shafts и levels меняются в файлах state.js и App.vue`.
Покажу еще несколько примеров:
image

image

image

Получение проекта с удаленного Git-репозитория:computer:

Создание локального Git-репозитория

git init

Клонирование удаленного Git-репозитория

git clone https://github.com/wouldRewind/TrueConfTest.git

Установка необходимых пакетов

npm install

Компиляция проекта и отслеживание изменений

npm run start

Сборка

npm run build