Chart.js.zip
Chart.js.zip
public/vendor/Chartjs
public ├───vendor │ └───Chart.jS │ │ * -> các file css, js của thư viện Chart.JSNumeralJS
numeral.min.js
vào thư mục public/vendor/numeraljs
public ├───vendor │ └───numeraljs │ │ numeraljs.min.js
Backend\BaoCaoController
php artisan make:controller Backend\BaoCaoController
routes/web.php
// Tạo route Báo cáo Đơn hàng Route::get('/admin/baocao/donhang', 'Backend\BaoCaoController@donhang')->name('backend.baocao.donhang'); Route::get('/admin/baocao/donhang/data', 'Backend\BaoCaoController@donhangData')->name('backend.baocao.donhang.data');
donhang()
:app\Http\Controllers\Backend\BaoCaoController.php
<?php namespace App\Http\Controllers\Backend; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use DB; class BaoCaoController extends Controller { /** * Action hiển thị view Báo cáo đơn hàng */ public function donhang() { return view('backend.reports.donhang'); } /** * Action AJAX get data cho báo cáo Đơn hàng */ public function donhangData(Request $request) { $parameter = [ 'tuNgay' => $request->tuNgay, 'denNgay' => $request->denNgay ]; // dd($parameter); $data = DB::select(' SELECT dh.dh_thoiGianDatHang as thoiGian , SUM(ctdh.ctdh_soLuong * ctdh.ctdh_donGia) as tongThanhTien FROM cusc_donhang dh JOIN cusc_chitietdonhang ctdh ON dh.dh_ma = ctdh.dh_ma WHERE dh.dh_thoiGianDatHang BETWEEN :tuNgay AND :denNgay GROUP BY dh.dh_thoiGianDatHang ', $parameter); return response()->json(array( 'code' => 200, 'data' => $data, )); } }
resources/views/backend/reports/donhang.blade.php
@extends('backend.layout.master') @section('title') Báo cáo Đơn hàng @endsection @section('feature-title') Báo cáo Đơn hàng @endsection @section('feature-description') Báo cáo Đơn hàng @endsection @section('content') <div class="row"> <div class="col-md-12"> <form method="get" action="#" enctype="multipart/form-data"> {{ csrf_field() }} <div class="form-group"> <label for="tuNgay">Từ ngày</label> <input type="text" class="form-control" id="tuNgay" name="tuNgay"> </div> <div class="form-group"> <label for="denNgay">Đến ngày</label> <input type="text" class="form-control" id="denNgay" name="denNgay"> </div> <button type="submit" class="btn btn-primary" id="btnLapBaoCao">Lập báo cáo</button> </form> </div> <div class="col-md-12"> <canvas id="chartOfobjChart" style="width: 100%;height: 400px;"></canvas> </div> </div> @endsection @section('custom-scripts') <!-- Các script dành cho thư viện Numeraljs --> <script src="{{ asset('vendor/numeraljs/numeral.min.js') }}"></script> <script> // Đăng ký tiền tệ VNĐ numeral.register('locale', 'vi', { delimiters: { thousands: ',', decimal: '.' }, abbreviations: { thousand: 'k', million: 'm', billion: 'b', trillion: 't' }, ordinal: function(number) { return number === 1 ? 'một' : 'không'; }, currency: { symbol: 'vnđ' } }); // Sử dụng locate vi (Việt nam) numeral.locale('vi'); </script> <!-- Các script dành cho thư viện ChartJS --> <script src="{{ asset('vendor/Chart.js/Chart.min.js') }}"></script> <script> $(document).ready(function() { var objChart; var $chartOfobjChart = document.getElementById("chartOfobjChart").getContext("2d"); $("#btnLapBaoCao").click(function(e) { e.preventDefault(); $.ajax({ url: '{{ route('backend.baocao.donhang.data') }}', type: "GET", data: { tuNgay: $('#tuNgay').val(), denNgay: $('#denNgay').val(), }, success: function(response) { var myLabels = []; var myData = []; $(response.data).each(function() { myLabels.push((this.thoiGian)); myData.push(this.tongThanhTien); }); myData.push(0); // creates a '0' index on the graph if (typeof $objChart !== "undefined") { $objChart.destroy(); } $objChart = new Chart($chartOfobjChart, { // The type of chart we want to create type: "bar", data: { labels: myLabels, datasets: [{ data: myData, borderColor: "#9ad0f5", backgroundColor: "#9ad0f5", borderWidth: 1 }] }, // Configuration options go here options: { legend: { display: false }, title: { display: true, text: "Báo cáo đơn hàng" }, scales: { xAxes: [{ scaleLabel: { display: true, labelString: 'Ngày nhận đơn hàng' } }], yAxes: [{ ticks: { callback: function(value) { return numeral(value).format('0,0 $') } }, scaleLabel: { display: true, labelString: 'Tổng thành tiền' } }] }, tooltips: { callbacks: { label: function(tooltipItem, data) { return numeral(tooltipItem.value).format('0,0 $') } } }, responsive: true, maintainAspectRatio: false, } }); } }); }); }); </script> @endsection
Cùng nhau học tập, khám phá các kiến thức nền tảng về Lập trình web, mobile, database nhé.
Nền tảng kiến thức - Hành trang tới tương lai hân hạnh phục vụ Quý khách!
Khám phá, trải nghiệm ngay
Vui lòng đăng nhập để gởi bình luận!
Đăng nhậpChưa có bình luận nào!