diff --git a/app/Admin/Controllers/PersonController.php b/app/Admin/Controllers/PersonController.php index 659d7d1..13465ce 100644 --- a/app/Admin/Controllers/PersonController.php +++ b/app/Admin/Controllers/PersonController.php @@ -32,6 +32,10 @@ class PersonController extends AdminController $crud = $this->baseCRUD()->tableLayout('fixed') ->headerToolbar([ $this->createTypeButton('drawer', '', '50%'), + amis()->DialogAction()->icon('fa fa-add')->label('合户')->dialog( + amis()->Dialog()->title('合户')->body($this->mergeMasterForm())->size('lg') + ), + amis('reload')->align('right'), amis('filter-toggler')->align('right'), ]) @@ -176,46 +180,7 @@ class PersonController extends AdminController amis()->SelectControl('domicile', __('admin.persons.domicile'))->options(Keyword::where('parent_key', 'domicile')->pluck('name', 'id')->toArray())->clearable(true)->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ - amis()->PickerControl('master', __('admin.persons.master')) - ->multiple(false) - ->valueField('id') - ->labelField('name') - ->size('lg') - ->source([ - 'method' => 'get', - 'url' => admin_url('persons?_action=getData&state=1&perPage=10'), - 'data' => [ - 'name'=>'${master_name}', - 'idcard'=>'${master_idcard}' - ] - ]) - ->pickerSchema( - [ - 'mode' => 'table', - 'name' => 'monitor_list', - 'headerToolbar' => amis()->form() - ->wrapWithPanel(false) - ->className('text-right') - ->target('monitor_list') - ->mode('inline') - ->body([ - amis()->TextControl('master_idcard', __('admin.persons.idcard'))->size('md'), - amis()->TextControl('master_name', __('admin.persons.name'))->size('md')->addOn( - amis('submit')->label(__('admin.search'))->level('primary') - ), - ]), - 'columns' => [ - amis()->TableColumn('domicile_code', __('admin.persons.domicile_code'))->width('120px')->copyable(), - amis()->TableColumn('name', __('admin.persons.name'))->width('150px')->copyable(), - amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable(), - amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([ - "1"=>"", - "2"=>"", - "*"=> '其他:${gender}' - ]), - ] - ] - )->description('输入 户主姓名 进行筛选,忽略则为添加户主')->disabledOn('this.id > 0'), + $this->masterPicker('master', '', '输入 户主姓名 进行筛选,忽略则为添加户主')->disabledOn('this.id > 0'), amis()->TextControl('master_connect', __('admin.persons.master_connect'))->required(), ]), ]), @@ -243,22 +208,185 @@ class PersonController extends AdminController public function detail() { - $form = amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal') + $form = amisMake()->form()->title('')->panelClassName('border-r border-t-0 border-b-0 border-l-0')->mode('horizontal') ->static(true)->actions([]) ->body([ amis()->FieldSetControl()->title('基本信息')->body([ amis()->GroupControl()->body([ - Components::make()->cropImageControl('avatar', __('admin.persons.avatar')), + amis()->Image()->type('static-image')->name('avatar')->label( __('admin.persons.avatar'))->height('80px')->width('80px')->thumbMode('cover'), ]), amis()->GroupControl()->body([ - amis()->TextControl('name', __('admin.persons.name'))->required(), - amis()->TextControl('used_name', __('admin.persons.used_name')), + amis()->StaticExactControl('name', __('admin.persons.name'))->copyable(['content'=>'${name}']), + amis()->StaticExactControl('used_name', __('admin.persons.used_name')), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('idcard', __('admin.persons.idcard'))->copyable(['content'=>'${idcard}']), + amis()->RadiosControl('gender', __('admin.persons.gender'))->options([ + '1'=>'男', '2'=>'女' + ]), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('birthday', __('admin.persons.birthday')), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('age', __('admin.persons.age')), + amis()->StaticExactControl('origin_complete_address', __('admin.persons.origin_complete_address')), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('card_complete_address', __('admin.persons.card_complete_address')), + amis()->StaticExactControl('now_address', __('admin.persons.now_address')), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('nation', __('admin.persons.nation'))->type('static-mapping')->map( + Keyword::where('parent_key', 'nation')->pluck('name', 'id')->toArray()), + amis()->StaticExactControl('political_face', __('admin.persons.political_face'))->type('static-mapping')->map( + Keyword::where('parent_key', 'political_face')->pluck('name', 'id')->toArray()), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('educational_level', __('admin.persons.educational_level'))->type('static-mapping')->map( + Keyword::where('parent_key', 'educational_level')->pluck('name', 'id')->toArray()), + amis()->StaticExactControl('marry_state', __('admin.persons.marry_state'))->type('static-mapping')->map( + Keyword::where('parent_key', 'marry_state')->pluck('name', 'id')->toArray()), + ]), + ]), + amis()->FieldSetControl()->title('其他信息')->className('mt-10')->body([ + amis()->GroupControl()->body([ + amis()->StaticExactControl('military_service_status', __('admin.persons.military_service_status'))->type('static-mapping')->map( + Keyword::where('parent_key', 'military_service_status')->pluck('name', 'id')->toArray()), + amis()->StaticExactControl('is_voter', __('admin.persons.is_voter'))->type('static-mapping')->map( + ['0'=>'否','1'=>'是','*'=>'未知']), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('job', __('admin.persons.job')), + amis()->StaticExactControl('health', __('admin.persons.health')), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('phone', __('admin.persons.phone')), + amis()->StaticExactControl('remark', __('admin.persons.remark')), ]), ]), ]); return amisMake()->Grid()->columns([ - amis()->Column()->body($form)->md(6) + amis()->Column()->body($form)->md(6), + amis()->Column()->body([ + amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal') + ->static(true)->actions([]) + ->body([ + amis()->FieldSetControl()->title('户籍信息')->body([ + amisMake()->CRUDTable()->affixHeader(false) + ->title('') + ->itemBadge([//行角标 + 'text' => __('admin.persons.master'), + 'mode' => 'ribbon', + 'position' => 'top-left', + 'badgeLevel' => 'danger', + 'visibleOn' => '${is_master > 0}', + 'size' => 15 + ]) + ->api(admin_url('persons?_action=getData&master[name]=${master.name}')) + ->columns([ + amis()->TableColumn('name', __('admin.persons.name'))->copyable(), + amis()->TableColumn('master_connect', __('admin.persons.master_connect')), + amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable(), + amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([ + "1"=>"", + "2"=>"", + "*"=> '其他:${gender}' + ]), + ]) + ]) + ]) + ])->md(6), ]); } + + + public function detailActions() + { + return [ + //变更户主 + //迁移 + //迁出 + //死亡 + //返回 + amis()->Button()->actionType('confirm')->label(__('admin.back'))->primary() + ]; + } + + /** + * 合户 + */ + public function mergeMasterForm() + { + return amis()->form()->title('')->body([ + + amis()->GroupControl()->body([ + $this->masterPicker('master', '', '输入 户主姓名 进行筛选'), + $this->masterPicker('to_master', '待合并户', '输入 户主姓名 进行筛选'), + ]), + amis()->Divider(), + + ]); + } + + public function doMergeMaster(){ + + } + + /** + * 分户 + */ + public function splitMasterForm() + { + + } + + public function doSplitMaster(){ + + } + + private function masterPicker($name = 'master', $label = '', $description = '') + { + return amis()->PickerControl($name, $label ?:__('admin.persons.master')) + ->multiple(false) + ->valueField('id') + ->labelField('name') + ->size('lg') + ->source([ + 'method' => 'get', + 'url' => admin_url('persons?_action=getData&state=1&is_master=1&perPage=10'), + 'data' => [ + 'name'=>'${master_name}', + 'idcard'=>'${master_idcard}' + ] + ]) + ->pickerSchema( + [ + 'mode' => 'table', + 'name' => 'monitor_list', + 'headerToolbar' => amis()->form() + ->wrapWithPanel(false) + ->className('text-right') + ->target('monitor_list') + ->mode('inline') + ->body([ + amis()->TextControl('master_idcard', __('admin.persons.idcard'))->size('md'), + amis()->TextControl('master_name', __('admin.persons.name'))->size('md')->addOn( + amis('submit')->label(__('admin.search'))->level('primary') + ), + ]), + 'columns' => [ + amis()->TableColumn('domicile_code', __('admin.persons.domicile_code'))->width('120px')->copyable(), + amis()->TableColumn('name', __('admin.persons.name'))->width('150px')->copyable(), + amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable(), + amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([ + "1"=>"", + "2"=>"", + "*"=> '其他:${gender}' + ]), + ] + ] + )->description($description); + } } \ No newline at end of file diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php index c316651..6dc2f91 100644 --- a/app/Admin/bootstrap.php +++ b/app/Admin/bootstrap.php @@ -2,8 +2,9 @@ use Slowlyo\OwlAdmin\Admin; -// Admin::styles([ -// '.cxd-Panel-heading { border-width: 0; background: #4080ffc7 !important; }', -// // '.cxd-Panel {box-shadow: none; }', -// '.cxd-Panel-title { color:white;font-size: 16px; }' -// ]); \ No newline at end of file +Admin::styles([ + '.cxd-Crud {border-width: 0 ;}', + // '.cxd-Panel-heading { border-width: 0; background: #4080ffc7 !important; }', + // // '.cxd-Panel {box-shadow: none; }', + // '.cxd-Panel-title { color:white;font-size: 16px; }' +]); \ No newline at end of file diff --git a/app/Models/Filters/PersonFilter.php b/app/Models/Filters/PersonFilter.php index 68cea14..e3cb3f8 100644 --- a/app/Models/Filters/PersonFilter.php +++ b/app/Models/Filters/PersonFilter.php @@ -76,4 +76,8 @@ class PersonFilter extends ModelFilter return $this->whereBetween('birthday', $birthday); } + + public function isMaster($isMaster){ + return $this->where('is_master', $isMaster); + } } diff --git a/app/Models/Person.php b/app/Models/Person.php index a82aaed..695fd7c 100644 --- a/app/Models/Person.php +++ b/app/Models/Person.php @@ -39,6 +39,7 @@ class Person extends Model $person->origin_province_id = $originProvince?->id ?? 0; $person->origin_city_id = $originCity?->id ?? 0; $person->origin_area_id = $originArea?->id ?? 0; + $person->origin_complete_address = ($originProvince?->name ?? '未知').'-'.($originCity?->name ?? '未知').'-'.($originArea?->name ?? '未知'); } if($person->card_city_code){ list($cardProvince, $cardCity, $cardArea) = Zone::codeToZone($person->card_city_code); diff --git a/app/Traits/CustomActionTrait.php b/app/Traits/CustomActionTrait.php index cb7b57e..0a01c13 100644 --- a/app/Traits/CustomActionTrait.php +++ b/app/Traits/CustomActionTrait.php @@ -117,13 +117,26 @@ trait CustomActionTrait }else{ $drawer->size($size); } + //补充详情操作按钮扩展 + try{ + $actions = $this->detailActions(); + }catch(\BadMethodCallException $e){ + $actions = []; + } + $drawer->actions($actions); $button = DrawerAction::make()->drawer($drawer); break; case 'dialog': - $button = DialogAction::make()->dialog( - Dialog::make()->title(__('admin.show'))->body($this->detail('$id'))->size($size) - ); + //补充详情操作按钮扩展 + $dialog = Dialog::make()->title(__('admin.show'))->body($this->detail('$id'))->size($size); + try{ + $actions = $this->detailActions(); + }catch(\BadMethodCallException $e){ + $actions = []; + } + $dialog->actions($actions); + $button = DialogAction::make()->dialog($dialog); break; default: $button = LinkAction::make()->link($this->getShowPath());