начал работать с интерфейсом
All checks were successful
Deploy MES Core / deploy (push) Successful in 9s

This commit is contained in:
tertelius
2026-03-29 00:24:39 +03:00
parent f86f0bfcd4
commit a4ba577206
19 changed files with 561 additions and 14 deletions

View File

@@ -0,0 +1,65 @@
{% extends 'base.html' %}
{% block content %}
{% include 'shiftflow/partials/_filter.html' %}
{% if not selected_machines %}
<div class="alert alert-warning text-center mt-4">
<i class="bi bi-info-circle me-2"></i> Станки не выбраны. Выберите станки в фильтре для отображения позиций.
</div>
{% else %}
{% if in_work is not None %}
<h6 class="text-primary mt-4 fw-bold"><i class="bi bi-play-circle me-2"></i>В РАБОТЕ</h6>
<div class="table-responsive rounded border shadow-sm mb-4">
<table class="table table-hover align-middle mb-0">
<thead class="table-custom-header small fw-bold text-uppercase">
<tr>
<th style="width: 80px;">Сделка</th>
<th>Деталь / Чертеж</th>
<th>Материал</th>
<th class="text-center">План</th>
<th class="text-center">Факт</th>
{% if user_role in 'admin,technologist,master,operator' %}
<th class="text-end">Действия</th>
{% endif %}
</tr>
</thead>
<tbody>
{% for item in in_work %}
<tr>
<td class="small">{{ item.deal.number }}</td>
<td><strong>{{ item.drawing_name }}</strong> <small class="text-muted">({{ item.machine.name }})</small></td>
<td><span class="badge bg-secondary opacity-75">{{ item.material.name }}</span></td>
<td class="text-center fw-bold">{{ item.quantity_plan }}</td>
<td class="text-center" style="width: 100px;">
<input type="number" class="form-control form-control-sm text-center" value="{{ item.quantity_fact|default:0 }}" {% if user_role == 'clerk' %}readonly{% endif %}>
</td>
{% if user_role in 'admin,technologist,master,operator' %}
<td class="text-end">
<button class="btn btn-sm btn-outline-success"><i class="bi bi-check2-all"></i></button>
</td>
{% endif %}
</tr>
{% empty %}
<tr><td colspan="6" class="text-center py-4 text-muted small">Активных заданий нет</td></tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if backlog is not None %}
<h6 class="text-danger fw-bold"><i class="bi bi-exclamation-triangle me-2"></i>НЕДОДЕЛЫ (ХВОСТЫ)</h6>
<div class="table-responsive rounded border shadow-sm mb-4">
</div>
{% endif %}
{% if done_items is not None %}
<h6 class="text-success fw-bold"><i class="bi bi-check-circle me-2"></i>ЗАВЕРШЕНО</h6>
<div class="table-responsive rounded border shadow-sm">
</div>
{% endif %}
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,38 @@
{% extends 'base.html' %}
{% block content %}
<div class="card shadow bg-dark text-light border-secondary">
<div class="card-header border-secondary d-flex justify-content-between align-items-center">
<h3 class="text-accent mb-0">Реестр деталей</h3>
{% if user_role == 'admin' or user_role == 'technologist' %}
<button class="btn btn-sm btn-outline-accent">+ Добавить заказ</button>
{% endif %}
</div>
<div class="card-body">
<table class="table table-dark table-hover">
<thead>
<tr class="table-custom-header">
<th>ID</th>
<th>Наименование</th>
<th>Кол-во</th>
<th>Статус</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>{{ item.quantity }}</td>
<td><span class="badge bg-secondary">{{ item.status }}</span></td>
</tr>
{% empty %}
<tr>
<td colspan="4" class="text-center text-muted">Деталей пока нет</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends 'base.html' %}
{% block content %}
<div class="text-center">
<h1 class="text-accent mb-4 display-3 fw-bold">
<i class="bi bi-gear-fill me-3"></i>ShiftFlow
</h1>
<a href="{% url 'login' %}" class="btn btn-lg btn-outline-accent px-5 py-3 fw-bold shadow">
ВОЙТИ В СИСТЕМУ
</a>
</div>
{% endblock %}

View File

@@ -0,0 +1,45 @@
<div class="card border-secondary mb-3 shadow-sm">
<div class="card-body py-2">
<form method="get" id="filter-form" class="row g-2 align-items-center">
<input type="hidden" name="filtered" value="1"> <div class="col-md-4">
<div class="small text-muted mb-1 fw-bold">Станки:</div>
<div class="d-flex flex-wrap gap-1">
{% for m in machines %}
<div>
<input type="checkbox" class="btn-check" name="m_ids" id="m_{{ m.id }}" value="{{ m.id }}"
{% if m.id in selected_machines %}checked{% endif %} onchange="this.form.submit()">
<label class="btn btn-outline-accent btn-sm" for="m_{{ m.id }}">{{ m.name }}</label>
</div>
{% endfor %}
</div>
</div>
<div class="col-md-3">
<div class="small text-muted mb-1 fw-bold">Статус:</div>
<div class="d-flex flex-wrap gap-1">
<input type="checkbox" class="btn-check" name="statuses" id="s_work" value="work" {% if 'work' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
<label class="btn btn-outline-primary btn-sm" for="s_work">В работе</label>
<input type="checkbox" class="btn-check" name="statuses" id="s_partial" value="partial" {% if 'partial' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
<label class="btn btn-outline-danger btn-sm" for="s_partial">Недодел</label>
<input type="checkbox" class="btn-check" name="statuses" id="s_done" value="done" {% if 'done' in selected_statuses %}checked{% endif %} onchange="this.form.submit()">
<label class="btn btn-outline-success btn-sm" for="s_done">Завершено</label>
</div>
</div>
<div class="col-md-2">
<label class="small text-muted mb-1 fw-bold">С:</label>
<input type="date" name="start_date" class="form-control form-control-sm" value="{{ start_date }}" onchange="this.form.submit()">
</div>
<div class="col-md-2">
<label class="small text-muted mb-1 fw-bold">По:</label>
<input type="date" name="end_date" class="form-control form-control-sm" value="{{ end_date }}" onchange="this.form.submit()">
</div>
<div class="col-md-1 text-end mt-auto">
<a href="{% url 'registry' %}" class="btn btn-outline-secondary btn-sm w-100" title="Сбросить по умолчанию"><i class="bi bi-x-circle"></i></a>
</div>
</form>
</div>
</div>