完善首页
parent
c8c4b65aff
commit
4162e6946e
|
|
@ -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,
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue