У меня есть кнопка, которая выполняет сохранение и печать. Я уже могу сохранить функцию store(), но не распечатать. Когда я имел в виду печать, это означало открытие диалогового окна печати переданных данных.
Вот моя кнопка:
Сохранить и распечатать Сохранить ReceiveItemsController.php
публичная функция index() { return view('receive-items.index', ['has_id' => false]); } публичная функция indexWithId($product_id) { return view('receive-items.index', ['product_id' => $product_id, 'has_id' => true]); } публичная функция create() { return view('receive-items.index'); } хранилище общедоступных функций (Запрос $ запрос) { $allow_print = правда; $product_ids = array_map('intval', $request->product_id); $qty_per_item = array_map('intval', $request->qty); ReceiveItems::create([ 'created_at' => Carbon::now()->метка времени, 'тип' => 'Получение', 'product_id' => $product_ids, 'no_of_items' => $request->no_of_items, 'qty_per_item' => $qty_per_item, 'итого' => $запрос->итого, 'оплата' => 'Уже оплачено' ]); $print_notification = массив( 'message' => 'Успешно сохранено! Печать сейчас...', 'тип оповещения' => 'успех' ); $success_notification = массив( 'message' => 'Новые товары успешно добавлены!', 'тип оповещения' => 'успех' ); $receive_items = $this->printVoucher($product_ids, $qty_per_item); if ($request->post('action_create') == 'save_and_print') { return view('receive-items.voucher', ['receive_items' => $receive_items,'allow_print' => $allow_print]); } elseif ($request->get('action_create') == 'save') { return redirect()->route('receive-items.index')->with($success_notification); } } общественная функция printVoucher($product_ids, $qty_per_item) { $items = []; foreach($product_ids as $product_item_no => $product_id) { $products = Product::where('id', '=', $product_id); $voucher_cost = $products->value('стоимость'); $items[] = массив( 'product_item_no' => $product_item_no + 1, 'product_id' => $product_id, 'product_name' => $products->value('name'), 'размер' => $products->value('размер'), 'qty_addend' => $qty_per_item[$product_item_no], 'voucher_cost' => $voucher_cost, 'ext_cost' => number_format($voucher_cost * $qty_per_item[$product_item_no], 2), ); } вернуть $элементы; } маршрут:
Route::post('/print/voucher', function() { return view('receive-items.voucher'); }); voucher.blade.php
Ваучер * { семейство шрифтов: Arial, Helvetica, без засечек; } HTML, тело { размер коробки: граница-коробка; маржа: 0; отступ: 20 пикселей; высота: 100%; размер шрифта: 13 пикселей; семейство шрифтов: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Символ" «, «Noto Color Emoji»; высота строки: 1,5; } ч4 { маржа-верх: 0; нижняя граница поля: 0,5рем; } п { маржа-верх: 0; поле-дно: 1рем; } сильный { шрифт-вес: жирнее; } изображение { вертикальное выравнивание: по середине; стиль границы: нет; } стол { граница-коллапс: коллапс; } й { выравнивание текста: наследовать; } h4, .h4 { нижняя граница поля: 0,5рем; вес шрифта: 500; высота строки: 1,2; } h4, .h4 { размер шрифта: 1,5рем; } .стол { ширина: 100%; поле-дно: 1рем; цвет: #212529; } .table th, .table td { отступ: 0,75рем; вертикальное выравнивание: сверху; border-top: 1px сплошной #dee2e6; } .table head th { вертикальное выравнивание: снизу; нижняя граница: 2 пикселя, сплошная #dee2e6; } .table tbody tbody { border-top: 2px сплошной #dee2e6; } /** * = утилиты **/ .border-0 { граница: нет !важно; } .mt-5 { маржа-топ: 3rem !важно; } .pr-0, .px-0 { отступ справа: 0 !важно; } .pl-0, .px-0 { отступ слева: 0 !важно; } .text-право { выравнивание текста: по правому краю !важно; } .text-центр { выравнивание текста: по центру! Важно; } .text-прописной { преобразование текста: верхний регистр !важно; } /** * = макет **/ .купон { положение: относительное; отображение: встроенный блок; переполнение: скрыто; радиус границы: 10 пикселей; } .купон-кон { положение: относительное; ширина: 324 пикселей; высота: 210 пикселей; } .coupon-con::before { содержание: ''; позиция: абсолютная; слева: -210 пикселей; дисплей: блок; ширина: 20 пикселей; высота: 20 пикселей; радиус границы: 50%; граница: 200 пикселей, сплошная #eee; клип: прямоугольник (0, авто, 210 пикселей, авто); } .coupon-con::after { содержание: ''; позиция: абсолютная; справа: -210 пикселей; дисплей: блок; ширина: 20 пикселей; высота: 20 пикселей; радиус границы: 50%; граница: 200 пикселей, сплошная #eee; клип: прямоугольник (0, авто, 210 пикселей, авто); } .cover-top { цвет фона: #eee; позиция: абсолютная; верх: 0; ширина: наследовать; высота: 75 пикселей; граница-верхний левый радиус: 10 пикселей; граница-верхний-правый-радиус: 10 пикселей; } .купон-btm { положение: относительное; ширина: 324 пикселей; высота: 110 пикселей; } .coupon-btm::before { содержание: ''; позиция: абсолютная; верх: -210 пикселей; слева: -210 пикселей; дисплей: блок; ширина: 20 пикселей; высота: 20 пикселей; радиус границы: 50%; граница: 200 пикселей, сплошная #eee; клип: прямоугольник (210 пикселей, авто, авто, авто); } .coupon-btm::after { содержание: ''; позиция: абсолютная; верх: -210 пикселей; справа: -210 пикселей; дисплей: блок; ширина: 20 пикселей; высота: 20 пикселей; радиус границы: 50%; граница: 200 пикселей, сплошная #eee; клип: прямоугольник (210 пикселей, авто, авто, авто); } .cover-btm { цвет фона: #eee; позиция: абсолютный; внизу: 0; ширина: наследовать; высота: 75 пикселей; граница-нижний-левый радиус: 10 пикселей; граница-нижний-правый-радиус: 10 пикселей; }
Элемент Кол-во. Стоимость Внутр. Стоимость {{-- Предметы --}} @foreach($receive_items как $item) {{ $item['product_item_no'] }}
{{ $item['product_name'] }} {{ $item['qty_addend'] }} {{ $item['voucher_cost'] }} {{ $item['ext_cost'] }} @endforeach Итого Получение ваучера
{{ $receive_items[0]['product_item_no'] }}
Дата ваучера
@if($allow_print) (функция() { окно.принт() })(); @endif
Этот код просто открывает voucher.blade.php с данными $received_items, но не открывает диалоговое окно печати. Может, с маршрутом что-то не так?
Любая помощь приветствуется.