@@ -1841,6 +1872,102 @@ function screenRateTeam() {
${nav('home')}
`;
}
+/* ─── MY QUESTIONNAIRE (Assembler) ─── */
+function screenMyQuestionnaire() {
+ if (!window._qSaved) window._qSaved = false;
+ if (!window._qCar) window._qCar = 'yes';
+ if (!window._qTools) window._qTools = {drill:true,jigsaw:true,miter:false,plunge:false,hammer:false,grinder:false,router:false,vacuum:true};
+ if (!window._qFurn) window._qFurn = {corpus:true,upholstered:false,kitchen:true,office:true,premium:false};
+ if (!window._qZones) window._qZones = {center:true,north:true,south:false,east:false,west:false};
+
+ function chk(key, store, label, note) {
+ var on = window[store][key];
+ return '
';
+ }
+
+ var saved = window._qSaved;
+
+ return '
'
+ +''
+ +'
'
+
+ // Info banner
+ +'
'
+ +'
'
+ +'
Данные видны директору. При изменениях (новый инструмент, зона, тип мебели) — директор получит уведомление.
'
+ +'
'
+
+ // Instruments
+ +'
'
+ +'
Инструменты
'
+ +'
Отметьте что есть в наличии
'
+ + chk('drill', '_qTools', 'Дрель / шуруповёрт', null)
+ + chk('jigsaw', '_qTools', 'Лобзик', null)
+ + chk('miter', '_qTools', 'Торцовочная пила', 'для точных угловых срезов')
+ + chk('plunge', '_qTools', 'Погружная пила', 'для раскроя панелей и столешниц')
+ + chk('hammer', '_qTools', 'Перфоратор', null)
+ + chk('grinder', '_qTools', 'Болгарка', null)
+ + chk('router', '_qTools', 'Фрезер', 'для кромки и пазов')
+ + chk('vacuum', '_qTools', 'Строительный пылесос', null)
+ +'
'
+
+ // Furniture types
+ +'
'
+ +'
Типы мебели
'
+ + chk('corpus', '_qFurn', 'Корпусная (шкафы, стеллажи, комоды)', null)
+ + chk('upholstered', '_qFurn', 'Мягкая (диваны, кресла)', null)
+ + chk('kitchen', '_qFurn', 'Кухонные гарнитуры', null)
+ + chk('office', '_qFurn', 'Офисная мебель', null)
+ + chk('premium', '_qFurn', 'Премиальная / итальянская', 'влияет на категорию Кат.А')
+ +'
'
+
+ // Transport
+ +'
'
+ +'
Личный автомобиль
'
+ +'
'
+ +''
+ +''
+ +'
'
+ +'
'
+
+ // Work zones
+ +'
'
+ +'
Зона работы
'
+ +'
Комфортные районы
'
+ + chk('center', '_qZones', 'Центр города', null)
+ + chk('north', '_qZones', 'Север', null)
+ + chk('south', '_qZones', 'Юг', null)
+ + chk('east', '_qZones', 'Восток', null)
+ + chk('west', '_qZones', 'Запад / ЗАД', null)
+ +'
'
+
+ // Save button
+ +(saved
+ ? '
✓ Сохранено · Директор уведомлён
'
+ : '
'
+ )
+ +'
Последнее обновление: 22.05.2026 · 10:14
'
+ +'
'
+ + nav('profile')
+ +'
';
+}
+
/* ─── AVAILABILITY ─── */
function screenAvailability() {
const requests = [
diff --git a/docs/mockup_measurer.html b/docs/mockup_measurer.html
index b3e7635..ab9a7b1 100644
--- a/docs/mockup_measurer.html
+++ b/docs/mockup_measurer.html
@@ -194,9 +194,10 @@ const SCREENS = {
report_send: 'Отправка менеджеру',
report_done: 'Успех отправки',
history: 'История замеров',
- profile: 'Профиль замерщика',
- schedule: 'Расписание',
- accept_job: 'Входящая заявка',
+ profile: 'Профиль замерщика',
+ my_questionnaire: 'Моя анкета',
+ schedule: 'Расписание',
+ accept_job: 'Входящая заявка',
};
let cur = 'home';
@@ -268,7 +269,8 @@ function render(id) {
case 'report_send': return screenReportSend();
case 'report_done': return screenReportDone();
case 'history': return screenHistory();
- case 'profile': return screenProfile();
+ case 'profile': return screenProfile();
+ case 'my_questionnaire': return screenMyQuestionnaire();
case 'accept_job': return screenAcceptJob();
case 'schedule': return screenSchedule();
default: return '
Экран в разработке
';
@@ -919,6 +921,34 @@ function screenProfile() {