basePage()->css($this->css())->body([ amis()->Grid()->className('mb-1')->columns([ $this->frameworkInfo()->set('md', 5), amis()->Flex()->items([ $this->pieChart(), $this->cube(), ]), ]), amis()->Grid()->columns([ $this->lineChart()->set('md', 8), amis()->Flex()->className('h-full')->items([ $this->clock() ])->direction('column'), ]), ]); return $this->response()->success($page); } public function clock() { /** @noinspection all */ return amis()->Card()->className('h-full bg-blingbling mb-4')->header(['title' => 'Clock'])->body([ amis()->Custom() ->name('clock') ->html('
') ->onMount( << { clock.innerHTML = (new Date()).toLocaleTimeString(); requestAnimationFrame(tick); }; tick(); const clockDate = document.getElementById('clock-date'); clockDate.innerHTML = (new Date()).toLocaleDateString(); JS ), ]); } public function frameworkInfo() { $link = function ($label, $link) { return amis()->Action() ->level('link') ->className('text-lg font-semibold') ->label($label) ->set('blank', true) ->actionType('url') ->link($link); }; return amis()->Card()->className('h-96')->body( amis()->Wrapper()->className('h-full')->body([ amis()->Flex() ->className('h-full') ->direction('column') ->justify('center') ->alignItems('center') ->items([ amis()->Image()->src(url(Admin::config('admin.logo'))), amis()->Wrapper()->className('text-3xl mt-9 font-bold')->body(Admin::config('admin.name')), amis()->Flex()->className('w-full mt-5')->justify('center')->items([ $link('Official website', 'https://owladmin.com'), ]), ]), ]) ); } public function pieChart() { return amis()->Card()->className('h-96')->body( amis()->Chart()->height(350)->config([ 'backgroundColor' => '', 'tooltip' => ['trigger' => 'item'], 'legend' => ['bottom' => 0, 'left' => 'center'], 'series' => [ [ 'name' => 'Access From', 'type' => 'pie', 'radius' => ['40%', '70%'], 'avoidLabelOverlap' => false, 'itemStyle' => ['borderRadius' => 10, 'borderColor' => '#fff', 'borderWidth' => 2], 'label' => ['show' => false, 'position' => 'center'], 'emphasis' => [ 'label' => [ 'show' => true, 'fontSize' => '40', 'fontWeight' => 'bold', ], ], 'labelLine' => ['show' => false], 'data' => [ ['value' => 1048, 'name' => 'Search Engine'], ['value' => 735, 'name' => 'Direct'], ['value' => 580, 'name' => 'Email'], ['value' => 484, 'name' => 'Union Ads'], ['value' => 300, 'name' => 'Video Ads'], ], ], ], ]) ); } public function lineChart() { $randArr = function () { $_arr = []; for ($i = 0; $i < 7; $i++) { $_arr[] = rand(50, 200); } return $_arr; }; $random1 = $randArr(); $random2 = $randArr(); $chart = amis()->Chart()->height(380)->className('h-96')->config([ 'backgroundColor' => '', 'title' => ['text' => 'Users Behavior'], 'tooltip' => ['trigger' => 'axis'], 'xAxis' => [ 'type' => 'category', 'boundaryGap' => false, 'data' => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ], 'yAxis' => ['type' => 'value'], 'grid' => ['left' => '7%', 'right' => '3%', 'top' => 60, 'bottom' => 30,], 'legend' => ['data' => ['Visits', 'Bounce Rate']], 'series' => [ [ 'name' => 'Visits', 'data' => $random1, 'type' => 'line', 'areaStyle' => [], 'smooth' => true, 'symbol' => 'none', ], [ 'name' => 'Bounce Rate', 'data' => $random2, 'type' => 'line', 'areaStyle' => [], 'smooth' => true, 'symbol' => 'none', ], ], ]); return amis()->Card()->className('clear-card-mb')->body($chart); } public function cube() { return amis()->Card()->className('h-96 ml-4 w-8/12')->body( amis()->Html()->html( << .cube-box{ height: 300px; display: flex; align-items: center; justify-content: center; } .cube { width: 100px; height: 100px; position: relative; transform-style: preserve-3d; animation: rotate 10s linear infinite; } .cube:after { content: ''; width: 100%; height: 100%; box-shadow: 0 0 50px rgba(0, 0, 0, 0.2); position: absolute; transform-origin: bottom; transform-style: preserve-3d; transform: rotateX(90deg) translateY(50px) translateZ(-50px); background-color: rgba(0, 0, 0, 0.1); } .cube div { background-color: rgba(64, 158, 255, 0.7); position: absolute; width: 100%; height: 100%; border: 1px solid rgb(27, 99, 170); box-shadow: 0 0 60px rgba(64, 158, 255, 0.7); } .cube div:nth-child(1) { transform: translateZ(-50px); animation: shade 10s -5s linear infinite; } .cube div:nth-child(2) { transform: translateZ(50px) rotateY(180deg); animation: shade 10s linear infinite; } .cube div:nth-child(3) { transform-origin: right; transform: translateZ(50px) rotateY(270deg); animation: shade 10s -2.5s linear infinite; } .cube div:nth-child(4) { transform-origin: left; transform: translateZ(50px) rotateY(90deg); animation: shade 10s -7.5s linear infinite; } .cube div:nth-child(5) { transform-origin: bottom; transform: translateZ(50px) rotateX(90deg); background-color: rgba(0, 0, 0, 0.7); } .cube div:nth-child(6) { transform-origin: top; transform: translateZ(50px) rotateX(270deg); } @keyframes rotate { 0% { transform: rotateX(-15deg) rotateY(0deg); } 100% { transform: rotateX(-15deg) rotateY(360deg); } } @keyframes shade { 50% { background-color: rgba(0, 0, 0, 0.7); } }
HTML ) ); } private function css(): array { /** @noinspection all */ return [ '.clear-card-mb' => [ 'margin-bottom' => '0 !important', ], '.cxd-Image' => [ 'border' => '0', ], '.bg-blingbling' => [ 'color' => '#fff', 'background' => 'linear-gradient(to bottom right, #2C3E50, #FD746C, #FF8235, #ffff1c, #92FE9D, #00C9FF, #a044ff, #e73827)', 'background-repeat' => 'no-repeat', 'background-size' => '1000% 1000%', 'animation' => 'gradient 60s ease infinite', ], '@keyframes gradient' => [ '0%{background-position:0% 0%} 50%{background-position:100% 100%} 100%{background-position:0% 0%}', ], '.bg-blingbling .cxd-Card-title' => [ 'color' => '#fff', ], ]; } }