# CtrlHack. Тестовое задание Vue 2 ## Цель Разработать прототип решения для динамического обновления элементов веб-интерфейса с функцией протоколирования событий. ## Подготовка За основу взять стандартный проект **Vue 2** (создание через `vue cli`). Создать простейший интерфейс с элементами как на рисунке ниже: ``` ┌──────────────────────────────────────────────────────────────────────────────────┐ │ ┌──────────────┐ ┌───────────────┐ ┌──────────────────┐ ┌───────────────────┐ │ │ │input 1 │ │input 2 │ │input 3 │ │button 4 │ │ │ └──────────────┘ └───────────────┘ └──────────────────┘ └───────────────────┘ │ │ │ │ label 5 label 6 label 7 label 8 │ │ │ │ │DIV─9───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ ────10──────────────────────────────────────────────────────────────── │ │ │ │ │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ ``` Где: 1 - поле ввода "Цена" (price) 2 - поле ввода "Кол-во" (qty) 3 - поле ввода "Сумма" (amount) 4 - кнопка отправки данных 5 - лейбл, который отображает значение поля "Цена" (1) 6 - лейбл, который отображает значение поле "Кол-во" (2) 7 - лейбл, который отображает значение поля "Сумма" (3) 8 - лейбл, который отображает текущее состояние localStorage браузера 9 - область, в которой отображается информация о возникших событиях 10 - непосредственно информация возникающих событиях Типы событий для области (9): - изменение полей ввода (1,2,3) - нажатие кнопки (4) - получение результата после нажатия кнопки (4) ## Поведение - Пользователь вносит значения в поля ввода (1,2,3) в любом порядке - По мере изменения полей ввода осуществляется пересчёт значений полей ввода, при этом пересчитывается поле, которое менялось раньше двух других - Лейблы (5,6,7) отображают текущие значения полей ввода - При нажатии кнопки (4) в localStorage сохраняется информация о значении всех полей ввода, а также последовательный номер операции (nonce) - Соответствующие события отображаются в области (9) в порядке "новое сверху" - Лейбл (8) отображает текущее состояние localStorage в виде json ## Параметры реализации - Обновления полей ввода при перерасчете осуществляются с debounce 300мс (не чаще одного раза в 300мс) - Начальное значение номера операции nonce = 0 - При нажатии на кнопку (4): - результат возвращается с задержкой 1 секунда - если "Сумма" четное число, то данные сохраняются и возвращается сообщение "{success:true}" - если "Сумма" нечетное число, то данные не сохраняются и возвращается сообщение "{success:false}"