完善首页

develop
vine_liutk 2023-06-09 16:20:46 +08:00
parent c8c4b65aff
commit 4162e6946e
3 changed files with 127 additions and 52 deletions

View File

@ -2,6 +2,7 @@
namespace App\Admin;
use Carbon\Carbon;
use App\Models\Keyword;
use Slowlyo\OwlAdmin\Renderers\BaseRenderer;
@ -109,7 +110,7 @@ class Components extends BaseRenderer {
$tips.= '<br/> {a'.$i.'}: {c'.$i.'}'.($item['unit'] ?? '');
//纵坐标
$yAxisData[] = [
'name'=>$item['name'].($item['unit'] ?? ''),
// 'name'=>$item['unit'] ?? '',
'type' =>'value',
'axisTick' => true,
'alignTicks' => true,
@ -128,6 +129,8 @@ class Components extends BaseRenderer {
'name' => $item['name'] ?? '',
'data' => $item['data'] ?? [],
'type' => $item['type'] ?? 'line',
// 'smooth'=> true,
// 'symbol'=>'none',
'yAxisIndex' => $i,
];
switch($item['type']){
@ -164,6 +167,8 @@ class Components extends BaseRenderer {
'grid' => [
'left' => '8%',
'right' => '8%',
'top' => 60,
'bottom' => 30
],
'xAxis' => [
'type' => 'category',
@ -176,9 +181,39 @@ class Components extends BaseRenderer {
/**
* 生成饼状图config
* -todo
*
*/
public function chartPieConfig(){
return ;
public function chartPieConfig($title, $data){
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,
]
];
}
}

View File

@ -14,6 +14,12 @@ use Slowlyo\OwlAdmin\Renderers\Custom;
use Slowlyo\OwlAdmin\Renderers\Wrapper;
use Illuminate\Http\Resources\Json\JsonResource;
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
{
@ -109,7 +115,21 @@ JS
Image::make()->src(url(config('admin.logo'))),
Wrapper::make()->className('text-3xl mt-9')->body(config('admin.name')),
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
{
$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(
Chart::make()->height(350)->config("{
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' }
]
}
]
}")
Chart::make()->height(350)->config(Components::make()->chartPieConfig('当前护理占比', $data))
);
}
public function lineChart(): Card
{
$randArr = function () {
$_arr = [];
for ($i = 0; $i < 7; $i++) {
$_arr[] = random_int(10, 200);
}
return '[' . implode(',', $_arr) . ']';
};
$endDay = now()->format('Y-m-d');
$startDay = now()->subDays(7)->format('Y-m-d');
$random1 = $randArr();
$random2 = $randArr();
$data = [];
list($day, $diffDays, $xKeys) = $this->makeChartXkeys($startDay, $endDay);
$chart = Chart::make()->config("{
title:{ text: '入住情况', },
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: ['访问量','注册量'] },
series: [
{ name: '入住量', data: {$random1}, type: 'line', areaStyle: {}, smooth: true, symbol: 'none', },
{ name:'注册量', data: {$random2}, type: 'line', areaStyle: {}, smooth: true, symbol: 'none', },
]}");
$listData = ConstFlow::select(DB::raw('DATE_FORMAT(`start_at`, "%Y-%m-%d") as ymd, count(`oldman_id`) as num'))
->where('const_type', ConstFlow::TYPE_IN)->whereBetween('start_at', [$startDay.' 00:00:00', $endDay.' 23:59:59'])->groupBy('ymd')->get()->keyBy('ymd')->toArray();
foreach($xKeys as $key){
$data[] = $listData[$key]['num'] ?? 0;
}
$chart = amisMake()->Chart()->config(Components::make()->chartLineBarConfig('入住情况', $xKeys, [
[
'name'=> '入住情况',
'type'=>'line',
'data' => $data,
'color' => '#3491fa',
'unit' => '人'
]
]));
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);
}
}

View File

@ -51,7 +51,8 @@ class OldmenController extends AdminController
->columns([
// TableColumn::make()->name('id')->label('ID')->sortable(),
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('floor_name')->label('楼栋'),
TableColumn::make()->name('nurse_lv')->type('mapping')->map(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->label('护理等级')->className('text-primary')->sortable(),