| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- @extends('layouts.app')
- @section('content')
- <div class="container-fluid">
- <div class="row">
- <div class="col-12">
- <h2>{{ $spare_part ? 'Редактирование запчасти' : 'Создание запчасти' }}</h2>
- @if($spare_part && hasRole('admin'))
- <div class="mb-3">
- <label class="form-label">Загрузить изображение</label>
- <form action="{{ route('spare_parts.upload_image', $spare_part) }}"
- method="POST"
- enctype="multipart/form-data"
- id="imageUploadForm">
- @csrf
- <input type="file" name="image" class="form-control" accept="image/*">
- <button type="submit" class="btn btn-sm btn-primary mt-2">Загрузить</button>
- </form>
- </div>
- @endif
- <form action="{{ $spare_part ? route('spare_parts.update', $spare_part) : route('spare_parts.store') }}"
- method="POST">
- @csrf
- @if($spare_part)
- @method('PUT')
- @endif
- <input type="hidden" name="previous_url" value="{{ $previous_url ?? url()->previous() }}">
- <div class="row">
- {{-- Левая колонка --}}
- <div class="col-md-6">
- @if($spare_part && $spare_part->image)
- <div class="mb-3">
- <img src="{{ $spare_part->image }}" alt="{{ $spare_part->article }}" class="img-fluid" style="max-width: 200px;">
- </div>
- @endif
- <div class="mb-3">
- <label for="article" class="form-label">Артикул <span class="text-danger">*</span></label>
- <input type="text"
- class="form-control"
- id="article"
- name="article"
- value="{{ old('article', $spare_part->article ?? '') }}"
- {{ hasRole('admin') ? '' : 'readonly' }}
- required>
- </div>
- <div class="mb-3">
- <label for="used_in_maf" class="form-label">Где используется</label>
- <input type="text"
- class="form-control"
- id="used_in_maf"
- name="used_in_maf"
- value="{{ old('used_in_maf', $spare_part->used_in_maf ?? '') }}"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- </div>
- <div class="mb-3">
- <label for="note" class="form-label">Примечание</label>
- <textarea class="form-control"
- id="note"
- name="note"
- rows="3"
- {{ hasRole('admin') ? '' : 'readonly' }}>{{ old('note', $spare_part->note ?? '') }}</textarea>
- </div>
- </div>
- {{-- Правая колонка --}}
- <div class="col-md-6">
- @if(hasRole('admin'))
- <div class="mb-3">
- <label for="purchase_price" class="form-label">Цена закупки (руб.)</label>
- <input type="number"
- class="form-control"
- id="purchase_price"
- name="purchase_price"
- step="0.01"
- value="{{ old('purchase_price', $spare_part->purchase_price ?? '') }}">
- </div>
- @endif
- <div class="mb-3">
- <label for="customer_price" class="form-label">Цена для заказчика (руб.)</label>
- <input type="number"
- class="form-control"
- id="customer_price"
- name="customer_price"
- step="0.01"
- value="{{ old('customer_price', $spare_part->customer_price ?? '') }}"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- </div>
- <div class="mb-3">
- <label for="expertise_price" class="form-label">Цена экспертизы (руб.)</label>
- <input type="number"
- class="form-control"
- id="expertise_price"
- name="expertise_price"
- step="0.01"
- value="{{ old('expertise_price', $spare_part->expertise_price ?? '') }}"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- </div>
- <div class="mb-3">
- <label for="tsn_number" class="form-label">№ по ТСН</label>
- <input type="text"
- class="form-control"
- id="tsn_number"
- name="tsn_number"
- value="{{ old('tsn_number', $spare_part->tsn_number ?? '') }}"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- <div class="form-text" id="tsn_number_hint"></div>
- </div>
- <div class="mb-3" id="tsn_description_block" style="display: none;">
- <label for="tsn_number_description" class="form-label">Расшифровка № по ТСН</label>
- <input type="text"
- class="form-control"
- id="tsn_number_description"
- name="tsn_number_description"
- placeholder="Введите расшифровку для нового номера"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- <div class="form-text text-muted">Расшифровка будет сохранена в справочник при сохранении запчасти</div>
- </div>
- <div class="mb-3">
- <label for="pricing_code" class="form-label">Шифр расценки</label>
- <input type="text"
- class="form-control"
- id="pricing_code"
- name="pricing_code"
- value="{{ old('pricing_code', $spare_part->pricing_code ?? '') }}"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- <div class="form-text" id="pricing_code_hint"></div>
- </div>
- <div class="mb-3" id="pricing_code_description_block" style="display: none;">
- <label for="pricing_code_description" class="form-label">Расшифровка шифра расценки</label>
- <input type="text"
- class="form-control"
- id="pricing_code_description"
- name="pricing_code_description"
- placeholder="Введите расшифровку для нового шифра"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- <div class="form-text text-muted">Расшифровка будет сохранена в справочник при сохранении запчасти</div>
- </div>
- <div class="mb-3">
- <label for="min_stock" class="form-label">Минимальный остаток</label>
- <input type="number"
- class="form-control"
- id="min_stock"
- name="min_stock"
- value="{{ old('min_stock', $spare_part->min_stock ?? 0) }}"
- {{ hasRole('admin') ? '' : 'readonly' }}>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="col-12">
- @if(hasRole('admin'))
- <button type="submit" class="btn btn-success">Сохранить</button>
- @endif
- <a href="{{ $previous_url ?? route('spare_parts.index') }}" class="btn btn-secondary">Назад</a>
- @if($spare_part && hasRole('admin'))
- <button type="button" class="btn btn-danger float-end" data-bs-toggle="modal" data-bs-target="#deleteModal">
- Удалить
- </button>
- @endif
- </div>
- </div>
- </form>
- </div>
- </div>
- </div>
- @if($spare_part && hasRole('admin'))
- {{-- Модальное окно удаления --}}
- <div class="modal fade" id="deleteModal" tabindex="-1">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">Подтверждение удаления</h5>
- <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
- </div>
- <div class="modal-body">
- Вы действительно хотите удалить запчасть "{{ $spare_part->article }}"?
- </div>
- <div class="modal-footer">
- <form action="{{ route('spare_parts.destroy', $spare_part) }}" method="POST">
- @csrf
- @method('DELETE')
- <button type="submit" class="btn btn-danger">Удалить</button>
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
- </form>
- </div>
- </div>
- </div>
- </div>
- @endif
- @push('scripts')
- <script>
- $(document).ready(function() {
- @if(hasRole('admin'))
- // Автозаполнение для № по ТСН
- $('#tsn_number').on('input', function() {
- const code = $(this).val().trim();
- if (code.length > 0) {
- $.get('{{ route('pricing_codes.get_description') }}', {
- type: 'tsn_number',
- code: code
- }, function(data) {
- if (data.description) {
- $('#tsn_number_hint').html('<i class="bi bi-info-circle text-success"></i> ' + data.description).removeClass('text-danger').addClass('text-success');
- $('#tsn_description_block').hide();
- $('#tsn_number_description').val('');
- } else {
- $('#tsn_number_hint').html('<i class="bi bi-exclamation-triangle text-warning"></i> Расшифровка не найдена').removeClass('text-success').addClass('text-warning');
- $('#tsn_description_block').show();
- }
- });
- } else {
- $('#tsn_number_hint').text('');
- $('#tsn_description_block').hide();
- }
- });
- // Автозаполнение для шифра расценки
- $('#pricing_code').on('input', function() {
- const code = $(this).val().trim();
- if (code.length > 0) {
- $.get('{{ route('pricing_codes.get_description') }}', {
- type: 'pricing_code',
- code: code
- }, function(data) {
- if (data.description) {
- $('#pricing_code_hint').html('<i class="bi bi-info-circle text-success"></i> ' + data.description).removeClass('text-danger').addClass('text-success');
- $('#pricing_code_description_block').hide();
- $('#pricing_code_description').val('');
- } else {
- $('#pricing_code_hint').html('<i class="bi bi-exclamation-triangle text-warning"></i> Расшифровка не найдена').removeClass('text-success').addClass('text-warning');
- $('#pricing_code_description_block').show();
- }
- });
- } else {
- $('#pricing_code_hint').text('');
- $('#pricing_code_description_block').hide();
- }
- });
- // Триггер при загрузке страницы
- $('#tsn_number').trigger('input');
- $('#pricing_code').trigger('input');
- @endif
- });
- </script>
- @endpush
- @endsection
|