first commit

This commit is contained in:
2026-03-26 09:28:14 +07:00
commit fa46a144d8
20180 changed files with 2692766 additions and 0 deletions
@@ -0,0 +1,157 @@
@extends('backend.layout')
@section('content')
<script src="{{asset('libs/ckeditor/ckeditor.js')}}"></script>
@if(Session::has('success'))
<div class="alert alert-success">
{{ Session::get('success') }}
@php
Session::forget('success');
@endphp
</div>
@endif
@if(Session::has('errors'))
<div class="alert alert-danger">
{{ 'Có lỗi xảy ra (' . implode(', ', $errors->all(':message')) . ')'}}
@php
Session::forget('errors');
@endphp
</div>
@endif
<div class='card-header'>
<h1>{{$title ?? ''}}</h1>
</div>
<div class='card-body'>
<a class="btn btn-primary btn-custom right default" href="{{route('admin/prize')}}">Trở về danh sách</a><br>
<form enctype="multipart/form-data" action="{{route('admin/prize/update')}}" method="POST">
{{ csrf_field() }}
<input type="hidden" name="id" value="{{$data->id ?? 0}}" />
<button class="btn btn-primary btn-custom" type="submit">
@if (isset($data->id) && $data->id != '')
Cập nhật
@else
Thêm mới
@endif
</button>
<br>
<div class="row">
<div class="col-md-12">
<div class="custom-file">
<input type="file" name="prize_image" class="custom-file-input" id="upload-image">
<label class="upload-image-file-label" for="upload-image" id="upload-image-label">
<i class='fa fa-camera'></i>
</label>
<div class="imgPreview">
@if(isset($data->prize_image) && $data->prize_image != '')
<img src="{{asset('images/' . $data->prize_image)}}" />
@endif
</div>
<span class="text-danger" id="prize-image_ErrorMsg"></span>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="prize_name">Tên giải thưởng</label>
@php
$prize_name = $data->prize_name ?? '';
if (old('prize_name') != '') {
$prize_name = old('prize_name');
}
@endphp
<input class="form-control" id="prize_name" name="prize_name" value="{{$prize_name ?? ''}}" />
@if ($errors->has('prize_name'))
<span class="text-danger">{{ $errors->first('prize_name') }}</span>
@endif
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="prize_number">Số lượng giải thưởng</label>
@php
$prize_number = $data->prize_number ?? '';
if (old('prize_number') != '') {
$prize_number = old('prize_number');
}
@endphp
<input class="form-control" id="prize_number" name="prize_number" value="{{$prize_number ?? ''}}" />
@if ($errors->has('prize_number'))
<span class="text-danger">{{ $errors->first('prize_number') }}</span>
@endif
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="prize_order">STT giải thưởng</label>
@php
$prize_order = $data->prize_order ?? '';
if (old('prize_order') != '') {
$prize_order = old('prize_order');
}
@endphp
<input class="form-control" id="prize_order" name="prize_order" value="{{$prize_order ?? ''}}" />
@if ($errors->has('prize_order'))
<span class="text-danger">{{ $errors->first('prize_order') }}</span>
@endif
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="prize_status">Trạng thái</label>
@php
$prize_status = $data->prize_status ?? '';
if (old('prize_status') != '') {
$prize_status = old('prize_status');
}
@endphp
<select class="form-control" id="prize_status" name="prize_status">
<option value="">Chưa chọn</option>
<option value="1" {{isset($prize_status) && $prize_status == 1 ? 'selected' : ''}}>Hiển thị
</option>
<option value="0" {{isset($prize_status) && $prize_status == 0 ? 'selected' : ''}}>Ẩn</option>
</select>
@if ($errors->has('prize_status'))
<span class="text-danger">{{ $errors->first('prize_status') }}</span>
@endif
</div>
</div>
<div class="col-md-12" style="display: none;">
<div class="form-group">
<label for="prize_content">Nội dung giải thưởng</label>
@php
$prize_content = $data->prize_content ?? '';
if (old('prize_content') != '') {
$prize_content = old('prize_content');
}
@endphp
<textarea class="form-control" id="prize_content" name="prize_content"
rows="10">{{$prize_content ?? ''}}</textarea>
@if ($errors->has('prize_content'))
<span class="text-danger">{{ $errors->first('prize_content') }}</span>
@endif
</div>
</div>
</div>
<br>
<button class="btn btn-primary btn-custom" type="submit">
@if (isset($data->id) && $data->id != '')
Cập nhật
@else
Thêm mới
@endif
</button>
</form>
</div>
<script>
CKEDITOR.editorConfig = function (config) {
config.versionCheck = false;
};
var post_content = CKEDITOR.replace('prize_content', {
filebrowserBrowseUrl: '{{ asset('libs/ckfinder/ckfinder.html') }}',
filebrowserImageBrowseUrl: '{{ asset('libs/ckfinder/ckfinder.html?type=Images') }}',
filebrowserFlashBrowseUrl: '{{ asset('libs/ckfinder/ckfinder.html?type=Flash') }}',
filebrowserUploadUrl: '{{ asset('libs/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files') }}',
filebrowserImageUploadUrl: '{{ asset('libs/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images') }}',
filebrowserFlashUploadUrl: '{{ asset('libs/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash') }}'
});
post_content.config.height = 800;
</script>
@endsection
@@ -0,0 +1,73 @@
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// require '../../../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Danh sách');
$sheet->setCellValue('A1', 'STT');
$sheet->setCellValue('B1', 'HỌ TÊN');
$sheet->setCellValue('C1', 'SỐ ĐIỆN THOẠI');
$sheet->setCellValue('D1', 'NGHỀ NGHIỆP');
$sheet->setCellValue('E1', 'TÊN GIẢI THƯỞNG');
$sheet->setCellValue('F1', 'NGÀY QUAY SỐ');
$row = 1;// Initialize row counter
$stt = 1;
// $newsheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, str_replace("/", "-", $date));
// $spreadsheet->addSheet($newsheet, 0);
// $sheet->mergeCells('A' . $row . ':X' . $row);
$sheet->getStyle('A' . $row)->applyFromArray(array(
'font' => array(
'name' => 'Calibri',
'size' => 14,
'bold' => true
),
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
'wrapText' => true,
],
));
$row++;
foreach ($data as $item) {
$sheet->setTitle('DS Nhận Giải');
$sheet->setCellValue('A' . $row, $stt);
$sheet->setCellValue('B' . $row, $item->name ?? '');
$sheet->setCellValue('C' . $row, $item->phone ?? '');
$sheet->setCellValue('D' . $row, $item->job ?? '');
$sheet->setCellValue('E' . $row, $item->prize_name ?? '');
$sheet->setCellValue('F' . $row, $item->created_at != '' ? date_format(date_create($item->created_at), "d/m/Y H:i") : '');
$row++;
$stt++;
}
$sheet->getStyle('A1:F1')->applyFromArray(array(
'font' => array(
'name' => 'Calibri',
'size' => 14,
'bold' => true
)
));
$sheet->getStyle('A1:F' . $row - 1)->applyFromArray(array(
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['rgb' => '000000'],
],
]
));
foreach (range('A', 'F') as $column) {
$sheet->getColumnDimension($column)->setAutoSize(true);
}
$writer = new Xlsx($spreadsheet);
$fileName = "Danh sách nhận giải.xlsx";
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=\"$fileName\"");
$writer->save("php://output");
exit();
?>
@@ -0,0 +1,149 @@
@extends('backend.layout')
@section('content')
<link rel="stylesheet" href="{{asset('backend/css/jquery-ui.css')}}">
<link href="{{asset('backend/css/bootstrap-datepicker.css')}}" rel="stylesheet">
<script src="{{asset('backend/js/bootstrap-datepicker.js')}}"></script>
<script src="{{asset('backend/js/bootstrap-datepicker.vi.min.js')}}"></script>
<script src="{{asset('backend/js/jquery-ui.min.js')}}"></script>
<div class='card-header'>
<h1>{{$title ?? ''}}</h1>
</div>
<div class='card-body'>
<div class="row" style="padding: 1rem 0;">
<div class="col-md-2">
<label for="fromDateTime">Từ ngày</label>
<input type="text" id="fromDateTime" class="form-control datepicker" placeholder="dd/mm/yyyy"
value="{{ $fromdate }}" />
</div>
<div class="col-md-2">
<label for="toDateTime">Đến ngày</label>
<input type="text" id="toDateTime" class="form-control datepicker" placeholder="dd/mm/yyyy"
value="{{ $todate }}" />
</div>
<div class="col-md-2"><br>
<button type="button" class="btn btn-primary btn-custom" id="datetime_filter">Lọc dữ liệu</button>
<a id="excel_export" class="btn btn-primary btn-custom">Xuất excel</a>
</div>
</div>
@include('backend.prizeuser.table')
</div>
<script>
$(document).ready(function () {
$('#datetime_filter').on('click', function () {
let tungay = $('#fromDateTime').val();
let denngay = $('#toDateTime').val();
if ((tungay != '' && !isValidDDMMYYYY(tungay)) || (denngay != '' && !isValidDDMMYYYY(denngay))) {
alert('Ngày không đúng định dạng');
return;
}
let url = "{{ route('admin/prizeuser') }}?tungay=" + tungay + '&denngay=' + denngay;
window.location.href = url;
});
$('#excel_export').on('click', function(e) {
let fromdate = $('#fromDateTime').val();
let todate = $('#toDateTime').val();
let a = document.createElement("a");
a.href = "{{route('admin/prizeuser/export')}}?fromdate=" + fromdate +
'&todate=' + todate;
document.body.appendChild(a);
a.click();
});
});
function isValidDDMMYYYY(dateString) {
// Kiểm tra định dạng bằng regex
const regex = /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(\d{4})$/;
if (!regex.test(dateString)) {
return false; // Sai định dạng
}
// Tách ngày, tháng, năm
const parts = dateString.split('/');
const day = parseInt(parts[0], 10);
const month = parseInt(parts[1], 10);
const year = parseInt(parts[2], 10);
// Kiểm tra tháng hợp lệ (1-12)
if (month < 1 || month > 12) {
return false;
}
// Kiểm tra số ngày hợp lệ trong tháng
const daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Kiểm tra năm nhuận cho tháng 2
if (year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)) {
daysInMonth[2] = 29;
}
if (day < 1 || day > daysInMonth[month]) {
return false;
}
return true; // Định dạng hợp lệ và ngày tháng năm hợp lệ
}
function update_spined(user_id) {
var csrfToken = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url: "{{ route('updatespined') }}",
type: 'POST',
data: {
user_id: user_id,
_token: csrfToken // Bao gồm CSRF token
},
dataType: 'json', // Mong đợi dữ liệu trả về là JSON
success: function (response) {
if (response.success) {
alert('Thành công');
window.location.reload();
} else {
alert('Thất bại');
}
},
error: function (xhr, status, error) {
alert('Thất bại');
}
});
}
$(document).ready(function () {
$.datepicker.regional['vi'] = {
closeText: 'Đóng',
prevText: '&#x3c;Trước',
nextText: 'Tiếp&#x3e;',
currentText: 'Hôm nay',
monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
monthNamesShort: ['Th1', 'Th2', 'Th3', 'Th4', 'Th5', 'Th6',
'Th7', 'Th8', 'Th9', 'Th10', 'Th11', 'Th12'],
dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
weekHeader: 'Tu',
dateFormat: 'dd/mm/yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['vi']);
$(".datepicker").datepicker({
dateFormat: "dd/mm/yy",
weekStart: 0,
calendarWeeks: true,
autoclose: true,
todayHighlight: true,
rtl: true,
orientation: "auto"
// minDate: new Date()
});
});
</script>
@endsection
@@ -0,0 +1,48 @@
@php
$order_number = 0;
@endphp
<div class="container">
<table class="datatable table table-striped table-bordered" id="table">
<thead>
<tr>
<th class="text-center">STT</th>
<th>TÊN NGƯỜI DÙNG</th>
<th class="text-center">SỐ ĐIỆN THOẠI</th>
<th>ĐỊA CHỈ</th>
<th>BIẾT SIS</th>
<th>NGHỀ NGHIỆP</th>
<th>TÊN GIẢI THƯỞNG</th>
<th class="text-center">NGÀY QUAY THƯỞNG</th>
</tr>
</thead>
<tbody>
@foreach ($data as $item)
<tr>
<td class="text-center">{{++$order_number ?? ''}}</td>
<td>
<p>{{$item->name ?? ''}}</p>
<button class="btn btn-danger btn-custom" onclick="update_spined({{ $item->id ?? '' }})">Thêm lượt quay</button>
</td>
<td class="text-center">
{{$item->phone ?? ''}}
</td>
<td>
{{ $item->address ?? '' }}
</td>
<td>
{{ isset($item->known_sis) ? ($item->known_sis ? 'Có' : 'Không') : '' }}
</td>
<td>
{{ $item->job ?? '' }}
</td>
<td>
{{ $item->prize_name ?? '' }}
</td>
<td class="text-center">
{{ date_format(date_create($item->created_at),"d/m/Y H:i") }}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>