baseCRUD()->tableLayout('fixed') ->headerToolbar([ $this->createTypeButton('drawer', '', '50%'), amis()->DialogAction()->icon('fas fa-people-arrows')->iconClassName('text-white text-sm')->level('danger')->label('分户')->dialog( amis()->Dialog()->title(__('admin.persons.split_master'))->body($this->splitMasterForm())->size('lg') ), amis()->DialogAction()->icon('fas fa-users')->iconClassName('text-white text-sm')->level('success')->label('合户')->dialog( amis()->Dialog()->title('合户')->body($this->mergeMasterForm())->size('lg') ), amis('reload')->align('right'), amis('filter-toggler')->align('right'), ]) ->filter($this->baseFilter()->labelWidth('80px')->body([ amis()->GroupControl()->mode('horizontal')->body([ amis()->SelectControl('organized_body', __('admin.persons.organized_body'))->options(Keyword::where('parent_key', 'organized_body')->pluck('name', 'id')->toArray()) ->columnRatio(3)->clearable(true), amis()->NestedSelectControl('house_building', __('admin.persons.house_building'))->source(admin_url('api/keywords/tree-list?parent_name=housing_estate&has_owner=0'))->labelField('name')->valueField('id')->columnRatio(6)->clearable(true), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->SelectControl('state', __('admin.persons.state'))->options([ '1'=>'实有人口','2'=>'已死亡','3'=>'已迁出' ])->columnRatio(3)->clearable(true), amis()->DateRangeControl()->label(__('admin.persons.birthday'))->name('birthday')->valueFormat('YYYY-MM-DD')->columnRatio(6), ]), ])) ->itemBadge([//行角标 'text' => __('admin.persons.master'), 'mode' => 'ribbon', 'position' => 'top-left', 'badgeLevel' => 'danger', 'visibleOn' => '${is_master > 0}', 'size' => 15 ]) ->columns([ amis()->TableColumn('domicile_code', __('admin.persons.domicile_code'))->width('100px'), amis()->TableColumn('name', __('admin.persons.name'))->width('100px')->copyable()->searchable(), amis()->TableColumn('master_connect', __('admin.persons.master_connect'))->width('60px'), amis()->TableColumn('master.name', __('admin.persons.master_name'))->width('100px')->copyable()->searchable(), amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable()->searchable(), amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([ "1"=>"", "2"=>"", "*"=> '其他:${gender}' ])->filterable(['options'=>[ ['label'=>'男', 'value'=>1], ['label'=> '女', 'value'=>2] ]]), amis()->TableColumn('birthday', __('admin.persons.birthday'))->width('100px'), // amis()->TableColumn('age', __('admin.persons.age')), amis()->TableColumn('now_address', __('admin.persons.now_address'))->copyable(), amisMake()->Operation()->label(__('admin.actions'))->buttons([ $this->rowShowTypeButton('drawer', 'xl'), $this->rowEditTypeButton('drawer', '', '50%'), $this->rowDeleteButton(), ]) ]); return $this->baseList($crud); } public function form(): Form { return $this->baseForm()->body([ amis()->Grid()->columns([ amis()->Wrapper()->body([ amis()->FieldSetControl()->title('基本信息')->body([ amis()->GroupControl()->mode('horizontal')->body([ Components::make()->cropImageControl('avatar', __('admin.persons.avatar')), amis()->RadiosControl('type', __('admin.persons.type'))->options([ '11'=>'出生人口', '12'=>'迁入人口' ])->value('11')->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->TextControl('name', __('admin.persons.name'))->required(), amis()->TextControl('used_name', __('admin.persons.used_name')), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->TextControl('idcard', __('admin.persons.idcard'))->required()->id('person_idcard')->onEvent([ 'blur'=>[//自定义JS联动字段填写 'actions'=>[ [ "componentId" => "person_idcard", "actionType"=> "disabled" ], [ 'actionType'=>'custom', 'script' => 'var strBirthday=""; var idcard=event.data.value; if((/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(idcard))){ if(String(idcard).length == 18){ strBirthday = idcard.substr(6,4)+"/"+idcard.substr(10,2)+"/"+idcard.substr(12,2); } event.setData({...event.data, "birthday":new Date(strBirthday)}) }' ], [ 'actionType'=>'setValue', "componentId" => "person_birthday", "args" => [ 'value'=>'${birthday}' ], ], [ "componentId" => "person_idcard", "actionType"=> "enabled" ], ] ] ]), amis()->RadiosControl('gender', __('admin.persons.gender'))->options([ '1'=>'男', '2'=>'女' ])->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->DateControl('birthday', __('admin.persons.birthday'))->valueFormat('YYYY-MM-DD')->required()->id('person_birthday')->columnRatio(6), ]), amis()->GroupControl()->mode('horizontal')->body([ amisMake()->InputCityControl('origin_city_code', __('admin.persons.origin_city_code'))->placeholder('请选择城市地区')->itemClassName('w-52')->searchable('true')->required(true)->columnRatio(12), amis()->TextControl('origin_complete_address')->placeholder('若无法选择籍贯,可以手动填写籍贯'), ]), amis()->GroupControl()->mode('horizontal')->body([ amisMake()->InputCityControl('card_city_code', __('admin.persons.card_city_code'))->placeholder('请选择城市地区')->itemClassName('w-52')->searchable('true')->required(true)->columnRatio(12), amis()->TextControl('card_address')->placeholder('详细地址'), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->SelectControl('nation_id', __('admin.persons.nation'))->options(Keyword::where('parent_key', 'nation')->pluck('name', 'id')->toArray())->clearable(true)->required()->searchable(), amis()->SelectControl('political_face_id', __('admin.persons.political_face'))->options(Keyword::where('parent_key', 'political_face')->pluck('name', 'id')->toArray())->clearable(true)->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->SelectControl('educational_level_id', __('admin.persons.educational_level'))->options(Keyword::where('parent_key', 'educational_level')->pluck('name', 'id')->toArray())->clearable(true)->required(), amis()->SelectControl('marry_state_id', __('admin.persons.marry_state'))->options(Keyword::where('parent_key', 'marry_state')->pluck('name', 'id')->toArray())->clearable(true)->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->NestedSelectControl('house_building', __('admin.persons.house_building'))->source(admin_url('api/keywords/tree-list?parent_name=housing_estate&has_owner=0'))->labelField('name')->valueField('id')->onlyLeaf(true)->clearable(true), amis()->TextControl('house_number', __('admin.persons.house_number')), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->TextControl('real_address', __('admin.persons.real_address'))->placeholder('若无法选择小区,可以手动填写居住地址'), ]), ]), amis()->FieldSetControl()->title('户籍信息')->className('mt-10')->body([ amis()->GroupControl()->mode('horizontal')->body([ amis()->TextControl('domicile_code', __('admin.persons.domicile_code'))->required(), amis()->SelectControl('organized_body_id', __('admin.persons.organized_body'))->options(Keyword::where('parent_key', 'organized_body')->pluck('name', 'id')->toArray())->clearable(true)->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->SwitchControl('has_benefit', __('admin.persons.has_benefit'))->value(false)->required(), amis()->SelectControl('domicile_id', __('admin.persons.domicile'))->options(Keyword::where('parent_key', 'domicile')->pluck('name', 'id')->toArray())->clearable(true)->required(), ]), amis()->GroupControl()->mode('horizontal')->body([ $this->masterPicker('master', '', '输入 户主姓名 进行筛选,忽略则为添加户主')->disabledOn('this.id > 0'), amis()->TextControl('master_connect', __('admin.persons.master_connect'))->required(), ]), ]), amis()->FieldSetControl()->title('其他信息')->className('mt-10')->body([ amis()->GroupControl()->mode('horizontal')->body([ amis()->SelectControl('military_service_status', __('admin.persons.military_service_status'))->options(Keyword::where('parent_key', 'military_service_status')->pluck('name', 'id')->toArray())->clearable(true), amis()->SwitchControl('is_voter', __('admin.persons.is_voter'))->value(true), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->TextControl('job', __('admin.persons.job')), amis()->TextControl('health', __('admin.persons.health')), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->TextControl('phone', __('admin.persons.phone')), amis()->TextControl('remark', __('admin.persons.remark')), ]), ]), ])->md(12), // amis()->Wrapper()->body([ // ])->md(6) ]), ]); } public function detail() { $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([ amis()->Image()->type('static-image')->name('avatar')->label( __('admin.persons.avatar'))->height('80px')->width('80px')->thumbMode('cover'), ]), amis()->GroupControl()->body([ 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([ 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 [ //变更户主-todo amis()->DialogAction()->level('warning')->label('变更户主')->dialog( amis()->Dialog()->title('变更户主')->body()->size('lg') ), //迁移-todo amis()->DialogAction()->level('info')->label('迁移')->dialog( amis()->Dialog()->title('迁移')->body()->size('lg') ), //迁出-todo amis()->DialogAction()->level('success')->label('迁出')->dialog( amis()->Dialog()->title('迁出')->body()->size('lg') ), //死亡-todo amis()->DialogAction()->level('danger')->label('死亡')->dialog( amis()->Dialog()->title('死亡')->body()->size('lg') ), //返回 amis()->Button()->actionType('confirm')->label(__('admin.back'))->primary() ]; } /** * 合户-todo */ public function mergeMasterForm() { return amis()->form()->title('')->body([ amis()->GroupControl()->body([ $this->masterPicker('master', '', '输入 户主姓名 进行筛选'), $this->masterPicker('to_master', '待合并户', '输入 户主姓名 进行筛选'), ]), amis()->Divider(), ]); } public function doMergeMaster(Request $request){ } /** * 分户 */ public function splitMasterForm() { return amis()->form()->title('') ->api(admin_url('split_master')) ->body([ amis()->GroupControl()->body([ $this->masterPicker('split_master_id', '分户对象', '输入 户主姓名 进行筛选')->required(), ]), amis()->Divider(), amis()->Service() ->api(admin_url('persons?_action=getData&state=1&master[id]=${split_master_id}&perPage=10&no_master=1')) ->onEvent([ 'fetchInited' => [ 'actions' => [ [ 'actionType'=>'setValue', "componentId" => "new_master_arr", "args" => [ 'value'=>'${event.data.items}' ], ] ] ] ]) ->body( amis()->TableControl('new_master_arr', '分户情况')->columnsTogglable(false)->id('new_master_arr')->columns([ amis()->TableColumn('name', __('admin.persons.name'))->width('100px'), amis()->TableColumn('idcard', __('admin.persons.idcard')), amis()->TableColumn('master_connect', __('admin.persons.master_connect'))->width('60px'), amis()->CheckboxControl('is_split', '是否分户')->value(false), amis()->RadioControl('is_new_master', '新户主')->disabledOn('! is_split'), amis()->TextControl('new_master_connect', '新关系')->disabledOn('! is_split'), ])->required() ), amis()->Divider(), amis()->GroupControl()->body([ amis()->DateControl('splited_at', '分户日期')->valueFormat('YYYY-MM-DD')->required(), amis()->TextControl('split_reason', '分户原因')->required() ]), amis()->GroupControl()->body([ amis()->TextControl('phone', '联系方式')->required(), amis()->TextControl('remark', '备注') ]), ]); } public function doSplitMaster(Request $request) { $res = $this->service->splitMaster($request->input('split_master_id'), $request->input('new_master_arr'), $request->input()); return $this->autoResponse($res, '分户'); } 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); } }