209 lines
9.3 KiB
PHP
209 lines
9.3 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use App\Models\Keyword;
|
|
use Slowlyo\OwlAdmin\Models\AdminSetting;
|
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
|
use Slowlyo\OwlAdmin\Renderers\TableColumn;
|
|
use Slowlyo\OwlAdmin\Renderers\TextControl;
|
|
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
|
use App\Services\Admin\OldmenService;
|
|
use Illuminate\Http\Request;
|
|
use App\Admin\Components;
|
|
use Carbon\Carbon;
|
|
|
|
/**
|
|
* @property OldmenService $service
|
|
*/
|
|
class OldmenController extends AdminController
|
|
{
|
|
protected string $serviceName = OldmenService::class;
|
|
|
|
protected string $pageTitle = '客人管理';
|
|
|
|
public function options(){
|
|
$list = $this->service->listQuery()->select(['id as value', 'name as label'])->get();
|
|
|
|
return $this->response()->success($list);
|
|
}
|
|
|
|
public function list(): Page
|
|
{
|
|
$crud = $this->baseCRUD()
|
|
->filterTogglable(false)
|
|
->headerToolbar([
|
|
$this->createButton(true, 'lg'),
|
|
...$this->baseHeaderToolBar(),
|
|
])
|
|
->filter(
|
|
$this->baseFilter()->body([
|
|
amisMake()->TextControl('name', '名称')->size('md'),
|
|
amisMake()->TextControl('card_no', '身份证')->size('md'),
|
|
amisMake()->TextControl('floor_name', '楼栋')->size('md'),
|
|
amisMake()->SelectControl('nurse_lv', '护理等级')->options(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->checkAll(true)->multiple(true)->size('md'),
|
|
amis('button')->label(__('admin.reset'))->actionType('clear-and-submit'),
|
|
amis('submit')->label(__('admin.search'))->level('primary'),
|
|
])->actions([])
|
|
)
|
|
->columns([
|
|
// TableColumn::make()->name('id')->label('ID')->sortable(),
|
|
TableColumn::make()->name('name')->label('姓名'),
|
|
TableColumn::make()->name('age')->label('年龄')->sortable(),
|
|
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(),
|
|
TableColumn::make()->name('client_name')->label('委托人'),
|
|
TableColumn::make()->name('client_phone')->label('委托人-手机号')->copyable(true),
|
|
TableColumn::make()->name('live_in_at')->label('入住时间')->type('datetime')->sortable(true),
|
|
TableColumn::make()->name('created_at')->label(__('admin.created_at'))->type('datetime')->sortable(true),
|
|
amisMake()->Operation()->label(__('admin.actions'))->buttons([
|
|
$this->rowEditButton(true, 'lg'),
|
|
$this->rowDeleteButton()
|
|
]),
|
|
]);
|
|
|
|
return $this->baseList($crud);
|
|
}
|
|
|
|
public function form(): Form
|
|
{
|
|
return $this->baseForm()->body([
|
|
amisMake()->FieldSetControl()->title('居住人信息')->collapsable(true)->body([
|
|
amisMake()->GroupControl()->body([
|
|
amisMake()->TextControl('name', '姓名')->required(true),
|
|
amisMake()->RadiosControl('sex', '性别')->options([
|
|
1=>'男',2=>'女'
|
|
])->required(true),
|
|
]),
|
|
amisMake()->GroupControl()->body([
|
|
amisMake()->TextControl('card_no', '身份证号码')->required(true),
|
|
amisMake()->DateControl('birthday', '出生日期')->format('YYYY-MM-DD')->required(true),
|
|
]),
|
|
amisMake()->InputCityControl('card_city_code', '地区选择')->placeholder('请选择城市地区')->searchable('true')->required(true),
|
|
amisMake()->GroupControl()->body([
|
|
amisMake()->TextControl('card_address', '详细地址')->required(true),
|
|
]),
|
|
|
|
amisMake()->GroupControl()->body([
|
|
amisMake()->TextControl('floor_name', '楼栋'),
|
|
amisMake()->TextControl('agreement_no', '协议号码'),
|
|
]),
|
|
amisMake()->RadiosControl('nurse_lv', '护理等级')->options(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->required(true)->disabledOn('data.live_in > 0'),
|
|
]),
|
|
amisMake()->FieldSetControl()->className('mt-10')->title('委托人信息')->collapsable(true)->body([
|
|
amisMake()->GroupControl()->body([
|
|
amisMake()->TextControl('client_name', '姓名')->required(true),
|
|
amisMake()->TextControl('client_phone', '手机号')->required(true),
|
|
]),
|
|
amisMake()->InputCityControl('client_city_code', '地区选择')->placeholder('请选择城市地区')->searchable('true')->required(true),
|
|
amisMake()->GroupControl()->body([
|
|
amisMake()->TextControl('client_address', '详细地址')->required(true),
|
|
]),
|
|
]),
|
|
]);
|
|
}
|
|
|
|
public function detail(): Form
|
|
{
|
|
return $this->baseDetail()->body([
|
|
TextControl::make()->static()->name('id')->label('ID'),
|
|
TextControl::make()->static()->name('created_at')->label(__('admin.created_at')),
|
|
TextControl::make()->static()->name('updated_at')->label(__('admin.updated_at'))
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取编辑页面
|
|
*
|
|
* @param $id
|
|
*
|
|
* @return JsonResponse|JsonResource
|
|
* @throws ContainerExceptionInterface
|
|
* @throws NotFoundExceptionInterface
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$this->isEdit = true;
|
|
|
|
if ($this->actionOfGetData()) {
|
|
$data = null;
|
|
if($id){
|
|
$data = $this->service->getEditData($id);
|
|
}
|
|
return $this->response()->success($data);
|
|
}
|
|
|
|
$form = amisMake()
|
|
->Card()
|
|
->className('base-form')
|
|
->header(['title' => __('admin.edit')])
|
|
->toolbar([$this->backButton()])
|
|
->body(
|
|
$this->form(true)->api($this->getUpdatePath())->initApi($this->getEditGetDataPath())
|
|
);
|
|
|
|
$page = $this->basePage()->body($form);
|
|
|
|
return $this->response()->success($page);
|
|
}
|
|
|
|
public function liveSchemaForm(Request $request)
|
|
{
|
|
$type = $request->input('type', 'live_fee');
|
|
$dateRange = $request->input('live_in_date', null);
|
|
$startDay = $dateRange ? explode(',', $dateRange)[0].' 00:00:00' : null;
|
|
$endDay = $dateRange ? explode(',', $dateRange)[1].' 23:59:59' : null;
|
|
|
|
if($startDay && $endDay){
|
|
$diffYears = Carbon::parse($startDay)->diffInYears($endDay);
|
|
$diffMonths = Carbon::parse($startDay)->addYears($diffYears)->diffInMonths($endDay);
|
|
$diffAbMonths = Carbon::parse($startDay)->diffInMonths($endDay);
|
|
$diffDays = Carbon::parse($startDay)->addYears($diffYears)->addMonths($diffMonths)->diffInDays($endDay);
|
|
$diffAbDays = Carbon::parse($startDay)->diffInDays($endDay);
|
|
}
|
|
|
|
$lv = $request->input('nurse_lv', 1);
|
|
$feeKey = Keyword::getByParentKey($type);
|
|
$feeKeyHelp = AdminSetting::whereIn('key', $feeKey?->pluck('key')->toArray())->pluck('values','key')->toArray();
|
|
foreach(Keyword::getByParentKey($type) as $fee)
|
|
{
|
|
$_feeValue = 0;
|
|
if(isset($feeKeyHelp[$fee->key])){
|
|
$_feeValues = [];
|
|
if($feeKeyHelp[$fee->key]['has_time'] == 2 && !empty($dateRange)){
|
|
array_map(function($item) use(&$_feeValues){
|
|
$_feeValues[$item['lv']][$item['time_type']] = $item['fee'];
|
|
}, $feeKeyHelp[$fee->key]['values']);
|
|
|
|
if(isset($_feeValues[$lv]['day'])){
|
|
//判断是否有设置年份
|
|
if(isset($_feeValues[$lv]['year'])){
|
|
$_feeValue += bcmul($diffYears, $_feeValues[$lv]['year'], 2);
|
|
if(isset($_feeValues[$lv]['month'])){
|
|
$_feeValue += bcmul($diffMonths, $_feeValues[$lv]['month'], 2);
|
|
$_feeValue += bcmul($diffDays, $_feeValues[$lv]['day'], 2);
|
|
}else{
|
|
$_feeValue += bcmul($diffAbDays, $_feeValues[$lv]['day'], 2);
|
|
}
|
|
}else{
|
|
if(isset($_feeValues[$lv]['month'])){
|
|
$_feeValue += bcmul($diffAbMonths, $_feeValues[$lv]['month'], 2);
|
|
}else{
|
|
$_feeValue += bcmul($diffAbDays, $_feeValues[$lv]['day'], 2);
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
$_feeValues = collect($feeKeyHelp[$fee->key]['values'] ?? [])->keyBy('lv')->toArray();
|
|
$_feeValue = $_feeValues[$lv]['fee'] ?? 0;
|
|
}
|
|
}
|
|
$feeArr[] = Components::make()->decimalControl($fee->key, $fee->name)->description(amis('tpl')->tpl('根据当前护理等级,建议费用为:'.$_feeValue));
|
|
}
|
|
|
|
return $this->response()->success($feeArr);
|
|
}
|
|
}
|