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 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 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 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 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 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 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 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 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"