制定人口操作框架

main
vine_liutk 2024-02-21 16:49:27 +08:00
parent 764ce7b300
commit 7f88707bf2
5 changed files with 200 additions and 53 deletions

View File

@ -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"=>"<span class='label label-info'>男</span>",
"2"=>"<span class='label label-success'>女</span>",
"*"=> '其他:${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"=>"<span class='label label-info'>男</span>",
"2"=>"<span class='label label-success'>女</span>",
"*"=> '其他:${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"=>"<span class='label label-info'>男</span>",
"2"=>"<span class='label label-success'>女</span>",
"*"=> '其他:${gender}'
]),
]
]
)->description($description);
}
}

View File

@ -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; }'
// ]);
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; }'
]);

View File

@ -76,4 +76,8 @@ class PersonFilter extends ModelFilter
return $this->whereBetween('birthday', $birthday);
}
public function isMaster($isMaster){
return $this->where('is_master', $isMaster);
}
}

View File

@ -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);

View File

@ -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());