Обзор
Последние события
| {{ c[1] }} | ||
|---|---|---|
| {{ dt(e.time) }} | {{ e.gen_name }} {{ e.location_name || 'не привязан' }} |
|
| {{ S.ff.region || S.ff.loc || S.ff.board || S.ff.type ? 'По выбранному событий нет' : 'Событий пока нет' }} | ||
{{ curPlace.name }}
{{ KIND[curPlace.kind] }}{{ curPlace.region_name ? ' · регион ' + curPlace.region_name : '' }}{{ curPlace.address ? ' · ' + curPlace.address : '' }}Новые генераторы
найдены в туннеле, ещё не привязаны к месту{{ S.view.title }}
{{ S.devices.length }} {{ plural(S.devices.length) }}Поиск: «{{ S.view.q }}»
найдено {{ S.devices.length }}Генераторы
{{ d.gen_name || 'Генератор' }}
{{ m.gen_name || 'Генератор' }}
переехалЖурнал перемещений
| Дата | Генератор | Переместил | Откуда | Куда | Отъезд: моточасы / топливо | Прибытие: моточасы / топливо |
|---|---|---|---|---|---|---|
| {{ dt(m.time) }} | {{ m.gen_name }} № {{ m.gen_serial || '—' }} |
{{ m.user_name || '—' }} | {{ m.kind==='added' ? '—' : m.from_name }} {{ m.note }} |
{{ m.to_name }} | первое место{{ f(m.dep_hours) }} ч · {{ fuelTxt(m.dep_fuel) }} {{ dt(m.dep_time) }} — |
{{ f(m.arr_hours) }} ч · {{ fuelTxt(m.arr_fuel) }} {{ dt(m.arr_time) }}
не подключалсяожидается подключение |
| Записей о перемещениях нет | ||||||
Уведомления в Telegram
Получать сообщения
О генераторах ваших мест: {{ zoneText }}. Генератор переехал — сообщения о нём переходят к новому месту.
Сообщения в обычное время
Тихие часы
В выбранные дни и часы приходят только те сообщения, которые вы отметите ниже.
{{ S.ntab==='region' ? 'Свои сообщения для всех генераторов региона' : 'Свои сообщения для всех генераторов магазина' }} — если нужно больше или меньше, чем в «Общих». Генератор берёт ближайшую настройку: свою, затем магазина, затем региона, затем общую.
Если по конкретному генератору нужно больше или меньше сообщений, чем по его магазину, региону или в «Общих».
Техническое обслуживание
ТО — каждые {{ S.me.service.hours }} моточасов или раз в {{ S.me.service.months }} мес., что наступит раньше (для генератора можно задать свой интервал). «Скоро» — осталось меньше {{ S.me.service.soon_hours }} ч или {{ S.me.service.soon_days }} дней. «Требуется» — срок прошёл или контроллер сам сообщает «требуется обслуживание». Пока ТО не отмечено, срок считается по моточасам: следующее ТО — на ближайшем кратном интервалу.
| Генератор | Моточасы | Последнее ТО | Следующее | Состояние | |
|---|---|---|---|---|---|
| {{ d.gen_name || 'Генератор' }} {{ d.location_name || '—' }}{{ d.gen_serial ? ' · № ' + d.gen_serial : '' }} |
{{ d.svc.hours == null ? '—' : f(d.svc.hours) + ' ч' }} | {{ d.svc.last_time ? dDay(d.svc.last_time) + ' · ' + f(d.svc.last_hours) + ' ч' : 'не отмечено' }} | {{ svcNext(d.svc) }} | {{ SVC[d.svc.state][0] }} сигнал контроллера |
|
| Генераторов не найдено | |||||
Пользователи
| ФИО / логин | Группа | Регионы и магазины | Контакты | Telegram | Последний вход | |
|---|---|---|---|---|---|---|
{{ u.name }} @{{ u.login }} |
{{ u.group }} свои права: +{{ u.perms_add.length }} / −{{ u.perms_del.length }} |
{{ zoneOf(u) }} | {{ u.phone }} {{ u.email }} — |
{{ u.tg_name }}— | {{ dt(u.last_login) }} | |
| Никого не найдено | ||||||
Каждый видит генераторы только своих магазинов и регионов. Права пользователя — права его группы плюс личные поправки. Менять можно только своих подчинённых и выдавать только те права, которые есть у вас.
Генераторы (временные)
Эти генераторы переданы вам на время — например, на отпуск или болезнь коллеги. После указанной даты они пропадут из списка сами.
{{ t.gen_name || 'Генератор' }}
до {{ dDay(t.until - 1) }}Замены
Генераторы сотрудника на время передаются другому — на отпуск, болезнь, командировку. У основного сотрудника ничего не отнимается. {{ can('delegate') ? '' : 'Ваше предложение вступит в силу, когда его подтвердит руководитель.' }} Насовсем — назначьте магазины в карточке пользователя.
| Чьи → кому | Генераторы | Срок | Состояние | |
|---|---|---|---|---|
| {{ d.from_name }} → {{ d.to_name }} {{ d.created_by === d.from_login && d.status === 'proposed' ? 'предложил' : 'назначил' }}: {{ d.by_name }} {{ d.note }} |
{{ g.gen_name || 'Генератор' }} · {{ g.location_name || '—' }} |
{{ dDay(d.since) }} — {{ dDay(d.until - 1) }} {{ d.notify ? 'с сообщениями в Telegram' : 'без сообщений' }} |
{{ DSTATE[d.state][0] }} | |
| Замен пока не было | ||||
Почта и бот
Почта для писем
{{ S.site.mail.configured ? 'настроена' : 'не настроена' }}С этого ящика сайт отправляет данные для входа новым пользователям и новые пароли. Для Gmail, Яндекса и Mail.ru нужен не обычный пароль, а пароль приложения (создаётся в настройках безопасности ящика).
Права групп
Пользователь получает права своей группы. Отдельному пользователю права можно добавить или убрать в его карточке. У администраторов — всегда все права.
| Право | {{ g.name }} |
|---|---|
| {{ sec.name }} | |
| {{ p[2] }} |
Регионы и магазины
Создайте регион, откройте его и создайте в нём магазины — или перенесите сюда магазины из других регионов. Региональный администратор видит все магазины своих регионов.
{{ regSel.id === 'none' ? 'Магазины без региона' : 'Регион «' + regSel.name + '»' }}
| Магазин | Тип | Адрес | Генераторов | |
|---|---|---|---|---|
| {{ l.name }} | {{ KIND[l.kind] }} | {{ l.address || '—' }} | {{ l.total }} | |
| Магазинов нет | ||||
Журнал изменений
{{ isAdmin ? 'Все изменения на сайте.' : 'Ваши изменения и изменения ваших подчинённых.' }}
| Когда | Кто | Что сделал | Было → стало |
|---|---|---|---|
| {{ dt(a.time) }} | {{ a.user_name }} @{{ a.login }} |
{{ a.text }} | {{ r[0] }}: {{ r[1] }} → {{ r[2] }} |
| Записей нет | |||
Названия аварий
Контроллер генератора сообщает аварии номерами (0–255) в трёх группах: останов, сброс нагрузки, предупреждение; номер одинаков во всех группах. Здесь каждому номеру даётся понятное название. Часть номеров — входы контроллера: их смысл зависит от подключения конкретного генератора, поэтому для модели генератора (или типа контроллера) можно завести свою таблицу. Остальные модели используют стандартную таблицу.
| Таблица | Модели | Названий | |
|---|---|---|---|
| {{ t.name }} стандартная | все остальные {{ m }} |
{{ Object.keys(t.bits||{}).length }} |