完善首页
parent
c8c4b65aff
commit
4162e6946e
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Admin;
|
namespace App\Admin;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use App\Models\Keyword;
|
use App\Models\Keyword;
|
||||||
use Slowlyo\OwlAdmin\Renderers\BaseRenderer;
|
use Slowlyo\OwlAdmin\Renderers\BaseRenderer;
|
||||||
|
|
||||||
|
|
@ -109,7 +110,7 @@ class Components extends BaseRenderer {
|
||||||
$tips.= '<br/> {a'.$i.'}: {c'.$i.'}'.($item['unit'] ?? '');
|
$tips.= '<br/> {a'.$i.'}: {c'.$i.'}'.($item['unit'] ?? '');
|
||||||
//纵坐标
|
//纵坐标
|
||||||
$yAxisData[] = [
|
$yAxisData[] = [
|
||||||
'name'=>$item['name'].($item['unit'] ?? ''),
|
// 'name'=>$item['unit'] ?? '',
|
||||||
'type' =>'value',
|
'type' =>'value',
|
||||||
'axisTick' => true,
|
'axisTick' => true,
|
||||||
'alignTicks' => true,
|
'alignTicks' => true,
|
||||||
|
|
@ -128,6 +129,8 @@ class Components extends BaseRenderer {
|
||||||
'name' => $item['name'] ?? '',
|
'name' => $item['name'] ?? '',
|
||||||
'data' => $item['data'] ?? [],
|
'data' => $item['data'] ?? [],
|
||||||
'type' => $item['type'] ?? 'line',
|
'type' => $item['type'] ?? 'line',
|
||||||
|
// 'smooth'=> true,
|
||||||
|
// 'symbol'=>'none',
|
||||||
'yAxisIndex' => $i,
|
'yAxisIndex' => $i,
|
||||||
];
|
];
|
||||||
switch($item['type']){
|
switch($item['type']){
|
||||||
|
|
@ -164,6 +167,8 @@ class Components extends BaseRenderer {
|
||||||
'grid' => [
|
'grid' => [
|
||||||
'left' => '8%',
|
'left' => '8%',
|
||||||
'right' => '8%',
|
'right' => '8%',
|
||||||
|
'top' => 60,
|
||||||
|
'bottom' => 30
|
||||||
],
|
],
|
||||||
'xAxis' => [
|
'xAxis' => [
|
||||||
'type' => 'category',
|
'type' => 'category',
|
||||||
|
|
@ -176,9 +181,39 @@ class Components extends BaseRenderer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成饼状图config
|
* 生成饼状图config
|
||||||
* -todo
|
*
|
||||||
*/
|
*/
|
||||||
public function chartPieConfig(){
|
public function chartPieConfig($title, $data){
|
||||||
return ;
|
return [
|
||||||
|
'title' => [
|
||||||
|
'text' => $title,
|
||||||
|
],
|
||||||
|
"tooltip" => [//提示
|
||||||
|
'trigger'=>'item',
|
||||||
|
],
|
||||||
|
"legend" => [
|
||||||
|
"bottom"=> '0',
|
||||||
|
"left" => 'center',
|
||||||
|
],
|
||||||
|
"series" => [
|
||||||
|
"name" => $title,
|
||||||
|
"type" => 'pie',
|
||||||
|
"avoidLabelOverlap" => false,
|
||||||
|
"itemStyle" => [
|
||||||
|
"borderRadius"=> 10,
|
||||||
|
"borderColor"=>'#fff',
|
||||||
|
"borderWidth" => 2,
|
||||||
|
],
|
||||||
|
"label" => [
|
||||||
|
"show"=>true,
|
||||||
|
// "position"=>'center',
|
||||||
|
"formatter" => '{b} {d}%',
|
||||||
|
],
|
||||||
|
"labelLive"=>[
|
||||||
|
"show"=>false,
|
||||||
|
],
|
||||||
|
"data" => $data,
|
||||||
|
]
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -14,6 +14,12 @@ use Slowlyo\OwlAdmin\Renderers\Custom;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Wrapper;
|
use Slowlyo\OwlAdmin\Renderers\Wrapper;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
||||||
|
use App\Admin\Components;
|
||||||
|
use App\Models\Oldmen;
|
||||||
|
use App\Models\ConstFlow;
|
||||||
|
use App\Models\Keyword;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use DB;
|
||||||
|
|
||||||
class HomeController extends AdminController
|
class HomeController extends AdminController
|
||||||
{
|
{
|
||||||
|
|
@ -109,7 +115,21 @@ JS
|
||||||
Image::make()->src(url(config('admin.logo'))),
|
Image::make()->src(url(config('admin.logo'))),
|
||||||
Wrapper::make()->className('text-3xl mt-9')->body(config('admin.name')),
|
Wrapper::make()->className('text-3xl mt-9')->body(config('admin.name')),
|
||||||
Flex::make()->className('w-64 mt-5')->justify('space-around')->items([
|
Flex::make()->className('w-64 mt-5')->justify('space-around')->items([
|
||||||
|
Action::make()
|
||||||
|
->level('link')
|
||||||
|
->label('客人入住')
|
||||||
|
->actionType('url')
|
||||||
|
->link('live-in-do'),
|
||||||
|
Action::make()
|
||||||
|
->level('link')
|
||||||
|
->label('客人续住')
|
||||||
|
->actionType('url')
|
||||||
|
->link('live-continue-do'),
|
||||||
|
Action::make()
|
||||||
|
->level('link')
|
||||||
|
->label('退住结算')
|
||||||
|
->actionType('url')
|
||||||
|
->link('live-exit-do'),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
])
|
])
|
||||||
|
|
@ -118,60 +138,43 @@ JS
|
||||||
|
|
||||||
public function pieChart(): Card
|
public function pieChart(): Card
|
||||||
{
|
{
|
||||||
|
$lvList = Keyword::getByParentKey('nurse_lv')->pluck('name', 'value');
|
||||||
|
$listData = Oldmen::select(DB::raw('`nurse_lv`, count(`id`) as num'))->where('live_in', Oldmen::STATUS_LIVE)->groupBy('nurse_lv')->get()->keyBy('nurse_lv')->toArray();
|
||||||
|
$data = [];
|
||||||
|
foreach($lvList as $lv=>$name){
|
||||||
|
$data[] = [
|
||||||
|
"name"=>$name, "value"=>$listData[$lv]['num'] ?? 0
|
||||||
|
];
|
||||||
|
}
|
||||||
return Card::make()->className('h-96')->body(
|
return Card::make()->className('h-96')->body(
|
||||||
Chart::make()->height(350)->config("{
|
Chart::make()->height(350)->config(Components::make()->chartPieConfig('当前护理占比', $data))
|
||||||
title:{ text: '护理占比', },
|
|
||||||
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(): Card
|
public function lineChart(): Card
|
||||||
{
|
{
|
||||||
$randArr = function () {
|
$endDay = now()->format('Y-m-d');
|
||||||
$_arr = [];
|
$startDay = now()->subDays(7)->format('Y-m-d');
|
||||||
for ($i = 0; $i < 7; $i++) {
|
|
||||||
$_arr[] = random_int(10, 200);
|
|
||||||
}
|
|
||||||
return '[' . implode(',', $_arr) . ']';
|
|
||||||
};
|
|
||||||
|
|
||||||
$random1 = $randArr();
|
$data = [];
|
||||||
$random2 = $randArr();
|
list($day, $diffDays, $xKeys) = $this->makeChartXkeys($startDay, $endDay);
|
||||||
|
|
||||||
$chart = Chart::make()->config("{
|
$listData = ConstFlow::select(DB::raw('DATE_FORMAT(`start_at`, "%Y-%m-%d") as ymd, count(`oldman_id`) as num'))
|
||||||
title:{ text: '入住情况', },
|
->where('const_type', ConstFlow::TYPE_IN)->whereBetween('start_at', [$startDay.' 00:00:00', $endDay.' 23:59:59'])->groupBy('ymd')->get()->keyBy('ymd')->toArray();
|
||||||
tooltip: { trigger: 'axis' },
|
|
||||||
xAxis: { type: 'category', boundaryGap: false, data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },
|
foreach($xKeys as $key){
|
||||||
yAxis: { type: 'value' },
|
$data[] = $listData[$key]['num'] ?? 0;
|
||||||
grid:{ left: '7%', right:'3%', top: 60, bottom: 30, },
|
}
|
||||||
legend: { data: ['访问量','注册量'] },
|
|
||||||
series: [
|
$chart = amisMake()->Chart()->config(Components::make()->chartLineBarConfig('入住情况', $xKeys, [
|
||||||
{ name: '入住量', data: {$random1}, type: 'line', areaStyle: {}, smooth: true, symbol: 'none', },
|
[
|
||||||
{ name:'注册量', data: {$random2}, type: 'line', areaStyle: {}, smooth: true, symbol: 'none', },
|
'name'=> '入住情况',
|
||||||
]}");
|
'type'=>'line',
|
||||||
|
'data' => $data,
|
||||||
|
'color' => '#3491fa',
|
||||||
|
'unit' => '人'
|
||||||
|
]
|
||||||
|
]));
|
||||||
|
|
||||||
return Card::make()->height(380)->className('h-96')->body($chart);
|
return Card::make()->height(380)->className('h-96')->body($chart);
|
||||||
}
|
}
|
||||||
|
|
@ -257,4 +260,40 @@ HTML
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据时间,处理X轴横坐标
|
||||||
|
*/
|
||||||
|
private function makeChartXkeys($startTime = null, $endTime = null){
|
||||||
|
$diffDays = 0;
|
||||||
|
$day = date('Y-m-d');
|
||||||
|
$xKeys = [];
|
||||||
|
if($startTime && $endTime){
|
||||||
|
if($startTime == $endTime){//查询某一天
|
||||||
|
$day = $startTime;
|
||||||
|
}else{
|
||||||
|
$startDay = Carbon::parse($startTime);
|
||||||
|
$endDay = Carbon::parse($endTime);
|
||||||
|
$diffDays = $startDay->diffInDays($endDay, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$xKeys = [];
|
||||||
|
if($diffDays){
|
||||||
|
for ($i = 0; $i<=$diffDays; $i++) {
|
||||||
|
$xKeys[] =(clone $startDay)->addDays($i)->startOfDay()->format('Y-m-d');
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//调整截至到当前小时
|
||||||
|
$h = 23;
|
||||||
|
if($day == date('Y-m-d')){
|
||||||
|
$h = date('H');
|
||||||
|
}
|
||||||
|
for ($i = 0; $i < ($h+1); $i++) {
|
||||||
|
$xKeys[] = str_pad($i, 2, '0', STR_PAD_LEFT).':00';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array($day, $diffDays, $xKeys);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,8 @@ class OldmenController extends AdminController
|
||||||
->columns([
|
->columns([
|
||||||
// TableColumn::make()->name('id')->label('ID')->sortable(),
|
// TableColumn::make()->name('id')->label('ID')->sortable(),
|
||||||
TableColumn::make()->name('name')->label('姓名'),
|
TableColumn::make()->name('name')->label('姓名'),
|
||||||
TableColumn::make()->name('age')->label('年龄')->sortable(),
|
TableColumn::make()->name('age')->label('年龄'),
|
||||||
|
TableColumn::make()->name('birthday')->label('生日'),
|
||||||
TableColumn::make()->name('card_no')->label('身份证')->copyable(true),
|
TableColumn::make()->name('card_no')->label('身份证')->copyable(true),
|
||||||
TableColumn::make()->name('floor_name')->label('楼栋'),
|
TableColumn::make()->name('floor_name')->label('楼栋'),
|
||||||
TableColumn::make()->name('nurse_lv')->type('mapping')->map(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->label('护理等级')->className('text-primary')->sortable(),
|
TableColumn::make()->name('nurse_lv')->type('mapping')->map(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->label('护理等级')->className('text-primary')->sortable(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue