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'), ]) ->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')->type('mapping')->map([ "0"=>"未入住", "1"=>"已入住", "*"=> '其他:${live_in}' ])->label('状态')->sortable(), TableColumn::make()->name('created_at')->label(__('admin.created_at'))->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ amisMake()->LinkAction()->label('入住')->icon('fa fa-plus')->link('live-in-do?oldman_id=${id}')->level('link')->hiddenOn('this.live_in == 1'), amisMake()->LinkAction()->label('续住')->icon('fa fa-plus')->link('live-continue-do?oldman_id=${id}')->level('link')->hiddenOn('this.live_in == 0'), $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); //处理下 if($data->avliable_at){ //续住时的开始时间 $data->offsetSet('start_at', Carbon::parse($data->avliable_at)->addSecond()->format('Y-m-d')); } } 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 liveFeelist(Request $request) { return $this->response()->success([ 'rows'=> $this->service->makeFeelist(ConstFlow::TYPE_IN, $request->input()), ]); } public function exitFeelist(Request $request) { return $this->response()->success([ 'rows'=> $this->service->makeFeelist(ConstFlow::TYPE_EXIT, array_merge($request->input(), [ 'oldman_id' => $request->input('oldman_id', 0) ])), ]); } /** * 费用表单 * */ 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' : $request->input('start_at', null); $endDay = $dateRange ? explode(',', $dateRange)[1].' 23:59:59' : $request->input('end_at', 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($type.'['.$fee->key.']', $fee->name)->description(amis('tpl')->tpl('根据当前护理等级,建议费用为:'.$_feeValue)); } return $this->response()->success($feeArr); } /** * 已缴费明细清单 */ public function liveConstFlow(Request $request) { $page = []; $oldMan = Oldmen::find($request->input('oldman_id', 0)); if($oldMan){ $flowList = ConstFlow::where('oldman_id', $oldMan->id) ->whereIn('const_type', [ConstFlow::TYPE_IN, ConstFlow::TYPE_CONTINUE]) ->whereBetween('start_at', [$oldMan->live_in_at, $oldMan->avliable_at])//开始时间在用户这段时间内的清单 ->get(); $tableList = []; foreach($flowList as $flow){ $_feeInfo = $_bonusInfo = $_addInfo = $_delInfo = ''; foreach($flow->extends as $_feeKey => $_feeArr){ $_money = 0; switch($_feeKey){ case 'live_fee': case 'continue_fee': foreach($_feeArr as $k => $v){ $_fee = Keyword::where('key', $k)->first(); $_feeInfo.= '【'.$_fee->name.'】'.$v.'元,'; $_money = bcadd($_money, $v, 2); } $_feeInfo = mb_substr($_feeInfo, 0, -1); $_feeInfo = $_money.'元:'.$_feeInfo; break; case 'bonds_fee': foreach($_feeArr as $k => $v){ $_fee = Keyword::where('key', $k)->first(); $_bonusInfo.= '【'.$_fee->name.'】'.$v.'元,'; $_money = bcadd($_money, $v, 2); } $_bonusInfo = mb_substr($_bonusInfo, 0, -1); $_bonusInfo = $_money.'元:'.$_bonusInfo; break; case 'add_fee': foreach($_feeArr as $k => $_fee){ $_addInfo.= '【'.$_fee["name"].'】'.$_fee["fee"].'元,'; $_money = bcadd($_money, $_fee["fee"], 2); } $_addInfo = mb_substr($_addInfo, 0, -1); $_addInfo = $_money.'元:'.$_addInfo; break; case 'del_fee': foreach($_feeArr as $k => $_fee){ $_delInfo.= '【'.$_fee["name"].'】-'.$_fee["fee"].'元,'; $_money = bcsub($_money, $_fee["fee"], 2); } $_delInfo = mb_substr($_delInfo, 0, -1); $_delInfo = $_money.'元:'.$_delInfo; break; } } $tableList[] = [ 'type' => ConstFlow::typeMap()[$flow->const_type],//类别 'money'=> $flow->money,//金额(含保证金) 'date_range' => Carbon::parse($flow->start_at)->format('Y-m-d').' 至 '.Carbon::parse($flow->end_at)->format('Y-m-d'),//时间区间 'flow_at'=>$flow->created_at->format('Y-m-d H:i:s'),//办理时间 'fee_info'=>$_feeInfo,//费用明细, 'bonus_info'=>$_bonusInfo, 'add_info'=>$_addInfo,//收费项 'del_info'=>$_delInfo,//抵扣项 ]; } $page = amisMake()->table() ->className('m-b-none')->columnsTogglable(false) ->data([ 'rows' => $tableList ]) ->source('${rows}') ->footable([ 'expand'=>'first' ])->columns([ amisMake()->TableColumn()->name('type')->label('缴费类型'), amisMake()->TableColumn()->name('money')->label('缴费金额'), amisMake()->TableColumn()->name('flow_at')->label('办理时间'), amisMake()->TableColumn()->name('date_range')->label('有效时间')->breakpoint("*"), amisMake()->TableColumn()->name('fee_info')->label('费用明细')->breakpoint("*"), amisMake()->TableColumn()->name('bonus_info')->label('保证金')->breakpoint("*"), amisMake()->TableColumn()->name('add_info')->label('附加-收费项')->breakpoint("*"), amisMake()->TableColumn()->name('del_info')->label('附加-抵扣项')->breakpoint("*"), ]); } return $this->response()->success($page); } }