diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 7cbc2c3..004e8ed 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,7 +2,11 @@ namespace App\Http\Controllers; +use App\Helpers\TDate; +use App\Models\Visitor; +use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class HomeController extends Controller { @@ -23,6 +27,25 @@ class HomeController extends Controller */ public function index() { - return view('home'); + + $visits = Visitor::where('created_at', '>=', Carbon::now()->subMonth()) + ->groupBy('date') + ->orderBy('date', 'DESC') + ->get(array( + DB::raw('Date(created_at) as date'), + DB::raw('COUNT(*) as "count"'), + DB::raw('SUM(visit) as "visits"'), + ))->toArray(); + $dates = range((count($visits) - 1) * -1, 0); + $dt = new TDate(); + array_walk($dates, function (&$item, $key) use ($dt) { + $x = strtotime($item . ' days'); + if (config('app.locale') == 'fa') { + $item = $dt->PDate('Y/m/d', $x); + } else { + $item = date('Y-m-d', $x); + } + }); + return view('home',compact('dates','visits')); } } diff --git a/database/factories/VisitorFactory.php b/database/factories/VisitorFactory.php index bd06c06..940b006 100644 --- a/database/factories/VisitorFactory.php +++ b/database/factories/VisitorFactory.php @@ -20,7 +20,7 @@ class VisitorFactory extends Factory { $displays = ['1920x1080', '1366x768', '1920x1080', '1366x768', '1280x1024', null, null]; - $displays_mobile = ['360x780', '430x932', '390x844', '375x667', '412x915', null, null]; + $displays_mobile = ['360x780', '430x932', '390x844', '375x667', '412x915', '428x926', null]; if (rand(0, 2) == 1) { $date = $this->faker->dateTimeBetween('-30 days', 'now'); } else { diff --git a/package.json b/package.json index fdaf8d9..ecf1ad3 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "vue": "^3.2.37" }, "dependencies": { + "chart.js": "^4.4.3", "leaflet": "^1.9.4", "remixicon": "^4.2.0", "sortablejs": "^1.15.2", diff --git a/resources/js/app.js b/resources/js/app.js index be24d01..ef60ffe 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -18,6 +18,7 @@ import { createApp } from 'vue'; import ToastPlugin from 'vue-toast-notification'; import {useToast} from 'vue-toast-notification'; import store from "./components/libs/store.js"; +import chartjs from 'chart.js/auto'; import './panel/raw.js'; import './panel/navbar.js'; import './panel/list-checkboxs.js'; @@ -27,6 +28,10 @@ import './panel/step-controller.js'; import './panel/product-upload-controller.js'; import './panel/setting-section-controller.js'; import './panel/sotable-controller.js'; +import './panel/prototypes.js'; + +window.chartjs = chartjs; +window.isPaintedChart = false; /** * Next, we will create a fresh Vue application instance. You may then begin diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index 3d3bce5..8916eef 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -7,6 +7,7 @@ import bootstrap from 'bootstrap/dist/js/bootstrap.bundle.min.js'; */ import axios from 'axios'; + window.axios = axios; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; @@ -34,7 +35,7 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; // }); // fixed tooptips -document.addEventListener('readystatechange',function () { +document.addEventListener('DOMContentLoaded',function () { [...document.querySelectorAll('[data-bs-toggle="tooltip"]')] .forEach(function (el) { let e = new bootstrap.Tooltip(el); diff --git a/resources/js/panel/prototypes.js b/resources/js/panel/prototypes.js new file mode 100644 index 0000000..10cb419 --- /dev/null +++ b/resources/js/panel/prototypes.js @@ -0,0 +1,17 @@ +/** + * + * @param key + * @param makeNumber [0 = nothing ,1 = integer, 2 = float] + * @returns {any[]} + */ +Array.prototype.subItem = function (key, makeNumber = 0) { + return this.map(item => { + if (makeNumber == 2){ + return parseFloat(item[key]); + }else if(makeNumber == 1){ + return parseInt(item[key]); + }else{ + return item[key]; + } + }); +}; diff --git a/resources/sass/panel/_common.scss b/resources/sass/panel/_common.scss index 9f7d200..8b5cde5 100644 --- a/resources/sass/panel/_common.scss +++ b/resources/sass/panel/_common.scss @@ -197,3 +197,12 @@ a.btn,a.action-btn,a.circle-btn{ [data-open-file]{ cursor: pointer; } + +.avatar-x64{ + background: $body-bg; + width: 64px; + height: 64px; + border-radius: 50%; + object-fit: cover; + border: 3px rgba($primary-color-panel,127) solid ; +} diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index cad9eb3..4065384 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -1,125 +1,200 @@ @extends('layouts.app') @section('content') -
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+
+
+
+
+ +
+
+ {{__("Welcome bak")}} +

+ {{auth()->user()->name}} +

+
+
+
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+ {{__("last month visits")}} +
+
+ +
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? + +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
-
-
-
- lorem -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
-
-
-
- lorem +
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Aliquam aspernatur, commodi consequatur deleniti dolor, - dolore ducimus ipsa laudantium magni natus nemo neque odit - officia perferendis provident suscipit ullam voluptas voluptate? +
+
+
+
+ lorem +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Aliquam aspernatur, commodi consequatur deleniti dolor, + dolore ducimus ipsa laudantium magni natus nemo neque odit + officia perferendis provident suscipit ullam voluptas voluptate? +
-
+@endsection + +@section('js-content') + @endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 7d3597c..aa5c82d 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -18,4 +18,5 @@
+@yield('js-content') @include('components.panel-footer') diff --git a/yarn.lock b/yarn.lock index a24e184..d6a4ba2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -127,6 +127,11 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@kurkle/color@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.2.tgz#5acd38242e8bde4f9986e7913c8fdf49d3aa199f" + integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw== + "@popperjs/core@^2.11.6": version "2.11.8" resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" @@ -345,6 +350,13 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" +chart.js@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.3.tgz#3b2e11e7010fefa99b07d0349236f5098e5226ad" + integrity sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw== + dependencies: + "@kurkle/color" "^0.3.0" + "chokidar@>=3.0.0 <4.0.0": version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"