Загрузка...
Заявки
➕ Новая заявка
| № | Название | Клиент | Исполнитель | Статус | Действия |
|---|---|---|---|---|---|
| {{ t.ticket_number }} | {{ t.title }} | {{ clientName(t.client_id) }} | {{ userName(t.assignee_id) }} | {{ t.status === 'new' ? 'Новая' : (t.status === 'in_progress' ? 'В работе' : 'Завершена') }} |
|
Дашборд
Новые заявки
{{ stats.tickets.new }}
В работе
{{ stats.tickets.in_progress }}
Завершено за месяц
{{ stats.tickets.completed_this_month }}
Мало на складе
{{ stats.inventory.low_stock_count }}
Выручка за месяц
{{ stats.money.revenue_this_month }} ₽
Услуги (часы × ставка)
{{ stats.money.services_this_month }} ₽
Материалы
{{ stats.money.materials_this_month }} ₽
Топ мастеров за месяц
| Мастер | Часы | Начислено |
|---|---|---|
| {{ e.full_name }} | {{ e.hours }} | {{ e.earned }} ₽ |
| Нет данных за этот месяц | ||
Склад
➕ Новый товар на склад
| Наименование | Артикул | Категория | Остаток | Цена |
|---|---|---|---|---|
| {{ item.name }} | {{ item.sku || '-' }} | {{ categoryName(item.category_id) }} | {{ item.quantity_in_stock }} {{ item.unit }}⚠ мин {{ item.min_stock }}нет в наличии | {{ item.unit_price }} ₽ |
|
⏳ загрузка остатков по местам…
нет остатков по местам хранения
Остатки по местам хранения
🏪 {{ b.warehouse_name }}
{{ b.qty }} {{ item.unit }}
⇄ перемещено {{ invMoveFlash.qty }} {{ invMoveFlash.unit }} → {{ invMoveFlash.to_name }}
⇄ из «{{ moveForm.from_name }}» ({{ moveForm.from_qty }} {{ moveForm.unit }}) в:
{{ moveForm.unit }}
Максимум {{ moveForm.from_qty }} {{ moveForm.unit }}
|
||||
🗄️ Склады и остатки по местам
Операционный взгляд по всем местам хранения расходников
Клиенты
➕ Новый клиент
| Компания | ИНН | Контакт | Телефон | Договор | Баланс | Действия |
|---|---|---|---|---|---|---|
| {{ c.company_name }} | {{ c.inn || '-' }} | {{ c.contact_person || '-' }} | {{ c.phone || '-' }} | {{ c.contract_no || '-' }} | — {{ c.balance_1c.toLocaleString('ru-RU',{maximumFractionDigits:2}) }} ₽ {{ c.balance_1c.toLocaleString('ru-RU',{maximumFractionDigits:2}) }} ₽ |
Карточка: {{ clientCard.company_name }}
Редактирование клиента
Договор: {{ clientCard.contract_no || '—' }} | ИНН: {{ clientCard.inn || '—' }} | Баланс 1С: {{ clientCard.balance_1c.toLocaleString('ru-RU',{maximumFractionDigits:2}) }} ₽ (обновлено {{ new Date(clientCard.balance_updated_at).toLocaleString('ru-RU') }})
🚗 Автопарк ({{ clientVehicles.length }})
👤 Контакты ({{ clientContacts.length }} / 5)
Заявки: {{ ticketsModal.company_name }} ({{ clientTickets.length }})
| № | Название | Статус | Создана |
|---|---|---|---|
| {{ t.ticket_number }} | {{ t.title }} | {{ t.status === 'new' ? 'Новая' : (t.status === 'in_progress' ? 'В работе' : 'Завершена') }} | {{ new Date(t.created_at).toLocaleDateString('ru-RU') }} |
{{ ticketDetail.title }}
{{ clientName(ticketDetail.client_id) }} · {{ userName(ticketDetail.assignee_id) }}
Напишите первое — его увидят и диспетчер, и мастер.
🛰 Оборудование
➕ Новая единица оборудования
| Серийник | Тип | Пломба | Статус / локация |
|---|---|---|---|
| Ничего не найдено | |||
| {{ u.serial }} | {{ typeName(u.type_id) }}{{ u.model_id ? ' · ' + modelName(u.model_id) : '' }} | {{ u.seal_no || '—' }} | {{ statusLabel(u.status) }} {{ unitLocation(u) }} |
{{ equipCard.serial }}
{{ typeName(equipCard.type_id) }}{{ equipCard.model_id ? ' · ' + modelName(equipCard.model_id) : '' }} · пломба {{ equipCard.seal_no || '—' }}
{{ statusLabel(equipCard.status) }} · {{ unitLocation(equipCard) }}📜 История перемещений ({{ equipMoves.length }})
Отчёты
📅 Период отчёта
📄 Акты выполненных работ
Черновики актов и печать по формам
| № акта | Тип | Дата | Заказчик | ТС | Статус | |
|---|---|---|---|---|---|---|
| {{a.act_number}} | {{actTypeLabel(a.act_type)}} | {{a.act_date?a.act_date.slice(0,10):'—'}} | {{a.client_company||'—'}} | {{[a.vehicle_brand,a.vehicle_plate].filter(Boolean).join(' ')||'—'}} | {{a.status}} | ⚙ Оборудование |
| Загрузка… | ||||||
| Актов пока нет | ||||||
Пользователи
➕ Новый пользователь
| ФИО | Роль | Ставка ₽/ч | Действия | |
|---|---|---|---|---|
| {{ u.full_name }} | {{ u.email }} |