- {COLUMNS.map(col => {
- const colTasks = tasks.filter(t => t.status === col.id)
- const Icon = col.icon
- return (
-
- {/* Column header */}
-
-
-
- {col.label}
-
-
- {colTasks.length}
-
-
-
- {/* Cards */}
-
- {colTasks.map(task => (
-
- ))}
- {colTasks.length === 0 && (
-
- )}
-
-
- )
- })}
+ {/* Tabs */}
+
+ {([
+ { id: 'tasks' as const, label: 'Задачи на сегодня', icon: ListChecks },
+ { id: 'plans' as const, label: 'Планы уборки', icon: Settings2 },
+ ]).map(t => (
+
+ ))}
+
+ {/* ── Tasks tab ── */}
+ {activeTab === 'tasks' && (
+
+ {COLUMNS.map(col => {
+ const colTasks = tasks.filter(t => t.status === col.id)
+ const Icon = col.icon
+ return (
+
+
+
+
{col.label}
+
+ {colTasks.length}
+
+
+
+ {colTasks.map(task => (
+
+ ))}
+ {colTasks.length === 0 && (
+
+ )}
+
+
+ )
+ })}
+
+ )}
+
+ {/* ── Plans tab ── */}
+ {activeTab === 'plans' && (
+
+
+ {/* Checkout cleaning */}
+
+
+
+
Уборка при выезде
+
+ Автоматически создавать задачу на уборку, как только гость освобождает номер
+
+
+
setP('checkoutAuto', !plans.checkoutAuto)} />
+
+ {plans.checkoutAuto && (
+
+
+
+
+ {([['high', 'Срочно'], ['normal', 'Обычный']] as const).map(([v, l]) => (
+
+ ))}
+
+
+
+
+
Инспекция после уборки
+
Создавать задачу проверки для старшей горничной
+
+
setP('checkoutInspection', !plans.checkoutInspection)} />
+
+
+ )}
+
+
+ {/* Daily cleaning */}
+
+
+
+
Ежедневная уборка
+
+ Регулярная уборка в номерах с проживающими гостями
+
+
+
setP('dailyEnabled', !plans.dailyEnabled)} />
+
+ {plans.dailyEnabled && (
+
+
+
+
+
+ {[1, 2, 3, 7].map(n => (
+
+ ))}
+
+
+
+
+
setP('dailyStartFromDay', Math.max(1, parseInt(e.target.value) || 1))}
+ />
+
+ Уборка начнётся на {plans.dailyStartFromDay}-й день проживания
+
+
+
+
+ )}
+
+
+ {/* On-demand cleaning */}
+
+
+
+
Уборка по запросу гостя
+
+ Гость может запросить уборку через QR-код или мобильное приложение
+
+
+
setP('onDemandEnabled', !plans.onDemandEnabled)} />
+
+ {plans.onDemandEnabled && (
+
+
+
+ {([['high', 'Срочно'], ['normal', 'Обычный'], ['low', 'Низкий']] as const).map(([v, l]) => (
+
+ ))}
+
+
+ )}
+
+
+ {/* Deep cleaning */}
+
+
+
+
Генеральная уборка
+
+ Глубокая уборка с чисткой мебели, мытьём окон и полной сменой постельного белья
+
+
+
setP('deepCleanEnabled', !plans.deepCleanEnabled)} />
+
+ {plans.deepCleanEnabled && (
+
+
+ setP('deepCleanEveryDays', Math.max(1, parseInt(e.target.value) || 7))}
+ />
+ дней
+
+ )}
+
+
+ {/* Inspection after cleaning */}
+
+
+
+
Проверка после уборки
+
+ После завершения любой уборки создавать задачу инспекции для старшей горничной
+
+
+
setP('inspectionAfterClean', !plans.inspectionAfterClean)} />
+
+
+
+ {/* Auto assign */}
+
+
+
+
Автоназначение горничной
+
+ Автоматически назначать ответственную горничную по расписанию смен (без этой опции — задачи назначаются вручную)
+
+
+
setP('autoAssign', !plans.autoAssign)} />
+
+
+
+
+
+
+
+ )}