Добавил превьюшки дхф и настройки сервера
All checks were successful
Deploy MES Core / deploy (push) Successful in 3m32s

This commit is contained in:
2026-04-02 23:52:04 +03:00
parent 9554d47301
commit cddbfeadde
14 changed files with 612 additions and 14 deletions

View File

@@ -25,7 +25,7 @@
{% endif %}
</div>
<form method="post" id="mainForm" class="card-body p-4">
<form method="post" enctype="multipart/form-data" id="mainForm" class="card-body p-4">
{% csrf_token %}
<input type="hidden" name="next" value="{{ back_url }}">
@@ -52,7 +52,7 @@
</div>
<div class="col-md-4">
<small class="text-muted d-block">Материал</small>
<strong>{{ item.task.material.name }}</strong>
<strong>{{ item.task.material.full_name|default:item.task.material.name }}</strong>
</div>
<div class="col-md-4">
<small class="text-muted d-block">План</small>
@@ -60,9 +60,67 @@
</div>
</div>
<div class="mb-4 d-flex gap-2">
{% if item.task.drawing_file %}<a href="{{ item.task.drawing_file.url }}" target="_blank" class="btn btn-outline-info btn-sm">DXF</a>{% endif %}
{% if item.task.extra_drawing %}<a href="{{ item.task.extra_drawing.url }}" target="_blank" class="btn btn-outline-danger btn-sm">PDF</a>{% endif %}
<div class="row g-3 mb-4 border-bottom border-secondary pb-3 text-body">
<div class="col-md-6">
<small class="text-muted d-block">Размер детали</small>
<strong>{{ item.task.size_value|default:"-" }}</strong>
</div>
<div class="col-md-6">
<small class="text-muted d-block">Габариты заготовки</small>
<strong>{{ item.task.blank_dimensions|default:"—" }}</strong>
</div>
</div>
<div class="mb-4">
<div class="small text-muted mb-2">Превью</div>
<div class="row g-3">
<div class="col-md-8">
<div class="border border-secondary rounded p-2" style="height: 200px; overflow: hidden;">
{% if item.task.preview_image %}
<img src="{{ item.task.preview_image.url }}" alt="Превью DXF" style="max-width:100%; max-height:100%; object-fit:contain; display:block; margin:0 auto;">
{% else %}
<div style="width:100%; height:100%;"></div>
{% endif %}
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<div class="d-flex align-items-center gap-2 mb-2">
{% if item.task.drawing_file %}
<a href="{{ item.task.drawing_file.url }}" target="_blank" class="btn btn-sm btn-outline-info p-1" title="DXF/STEP">
<i class="bi bi-file-earmark-code"></i>
</a>
{% else %}
<span class="btn btn-sm btn-outline-secondary p-1 disabled" title="DXF/STEP">
<i class="bi bi-file-earmark-code"></i>
</span>
{% endif %}
<div class="small text-muted">DXF/STEP</div>
</div>
{% if user_role == 'admin' %}
<input type="file" name="drawing_file" class="form-control border-secondary" accept=".dxf,.iges,.igs,.step,.stp">
{% endif %}
</div>
<div>
<div class="d-flex align-items-center gap-2 mb-2">
{% if item.task.extra_drawing %}
<a href="{{ item.task.extra_drawing.url }}" target="_blank" class="btn btn-sm btn-outline-danger p-1" title="PDF">
<i class="bi bi-file-pdf"></i>
</a>
{% else %}
<span class="btn btn-sm btn-outline-secondary p-1 disabled" title="PDF">
<i class="bi bi-file-pdf"></i>
</span>
{% endif %}
<div class="small text-muted">PDF</div>
</div>
{% if user_role == 'admin' %}
<input type="file" name="extra_drawing" class="form-control border-secondary" accept="application/pdf">
{% endif %}
</div>
</div>
</div>
</div>
<input type="hidden" name="status" id="id_status" value="{{ item.status }}">

View File

@@ -0,0 +1,72 @@
{% extends 'base.html' %}
{% load l10n %}
{% block content %}
<div class="card shadow border-secondary">
<div class="card-header border-secondary py-3 d-flex justify-content-between align-items-center">
<h3 class="text-accent mb-0"><i class="bi bi-tools me-2"></i>Обслуживание сервера</h3>
</div>
<div class="card-body">
<div class="text-muted small mb-3">
Здесь настраиваем и обслуживаем генерацию превью DXF (PNG) на сервере.
</div>
<div class="card border-secondary mb-3">
<div class="card-header border-secondary py-2">
<strong>DXF</strong>
</div>
<div class="card-body">
<form method="post" class="row g-3 align-items-end">
{% csrf_token %}
<div class="col-md-3">
<label class="small text-muted">Цвет превью</label>
<input type="color" name="line_color" class="form-control form-control-color border-secondary" value="{{ dxf_settings.line_color|default:'#006400'|slice:':7' }}">
</div>
<div class="col-md-3">
<label class="small text-muted">Толщина линии (коэфф.)</label>
<input type="number" step="0.1" min="0.1" name="lineweight_scaling" class="form-control border-secondary" value="{{ dxf_settings.lineweight_scaling|default_if_none:1.0|unlocalize }}">
</div>
<div class="col-md-3">
<label class="small text-muted">Мин. толщина (мм)</label>
<input type="number" step="0.05" min="0" name="min_lineweight" class="form-control border-secondary" value="{{ dxf_settings.min_lineweight|default_if_none:0.1|unlocalize }}">
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="keepColors" name="keep_original_colors" {% if dxf_settings.keep_original_colors %}checked{% endif %}>
<label class="form-check-label" for="keepColors">Оставить оригинальные цвета</label>
</div>
</div>
<div class="col-12 d-flex gap-2">
<button type="submit" class="btn btn-outline-accent" name="action" value="save_settings">
<i class="bi bi-save me-2"></i>Сохранить настройки
</button>
<button type="submit" class="btn btn-outline-accent" name="action" value="update_previews">
<i class="bi bi-arrow-repeat me-2"></i>Обновить превьюшки DXF
</button>
</div>
<div class="col-12">
<div class="text-muted small">
Пакетное обновление пробегает по сделкам в статусах «Зашла» и «В работе».
</div>
</div>
</form>
</div>
</div>
{% if messages %}
<div class="mt-3">
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">{{ message }}</div>
{% endfor %}
</div>
{% endif %}
</div>
</div>
{% endblock %}

View File

@@ -35,7 +35,7 @@
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-8">
<div class="col-12">
<label class="form-label small text-muted">{{ form.drawing_name.label }}</label>
{{ form.drawing_name }}
{% for e in form.drawing_name.errors %}<div class="text-danger small">{{ e }}</div>{% endfor %}
@@ -50,7 +50,7 @@
{{ form.size_value }}
{% for e in form.size_value.errors %}<div class="text-danger small">{{ e }}</div>{% endfor %}
</div>
<div class="col-md-8 d-flex align-items-end">
<div class="col-md-4 d-flex align-items-end">
<div class="form-check form-switch">
{{ form.is_bend }}
<label class="form-check-label ms-2">{{ form.is_bend.label }}</label>