generated from liutk/owl-admin-base
256 lines
16 KiB
PHP
256 lines
16 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
|
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
|
use App\Services\Admin\PersonService;
|
|
use App\Traits\CustomActionTrait;
|
|
use App\Models\Keyword;
|
|
use App\Admin\Components;
|
|
use Slowlyo\OwlAdmin\Renderers\Drawer;
|
|
use Slowlyo\OwlAdmin\Renderers\Dialog;
|
|
use Slowlyo\OwlAdmin\Renderers\DrawerAction;
|
|
use Slowlyo\OwlAdmin\Renderers\DialogAction;
|
|
use Slowlyo\OwlAdmin\Renderers\LinkAction;
|
|
|
|
/**
|
|
* 人口管理
|
|
*
|
|
* @property PersonService $service
|
|
*/
|
|
class PersonController extends AdminController
|
|
{
|
|
use CustomActionTrait;
|
|
|
|
protected string $serviceName = PersonService::class;
|
|
|
|
public function list(): Page
|
|
{
|
|
$crud = $this->baseCRUD()->tableLayout('fixed')
|
|
->headerToolbar([
|
|
$this->createTypeButton('drawer', '', '50%'),
|
|
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()->TextControl('master.name', __('admin.persons.master_name'))->placeholder(__('admin.persons.master_name')),
|
|
// amis()->TextControl('name', __('admin.persons.name'))->placeholder(__('admin.persons.name')),
|
|
// amis()->TextControl('idcard', __('admin.persons.idcard'))->placeholder(__('admin.persons.idcard')),
|
|
]),
|
|
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),
|
|
]),
|
|
]))
|
|
->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"=>"<span class='label label-info'>男</span>",
|
|
"2"=>"<span class='label label-success'>女</span>",
|
|
"*"=> '其他:${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', __('admin.persons.nation'))->options(Keyword::where('parent_key', 'nation')->pluck('name', 'id')->toArray())->clearable(true)->required()->searchable(),
|
|
amis()->SelectControl('political_face', __('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', __('admin.persons.educational_level'))->options(Keyword::where('parent_key', 'educational_level')->pluck('name', 'id')->toArray())->clearable(true)->required(),
|
|
amis()->SelectControl('marry_state', __('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', __('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', __('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'),
|
|
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-0')->mode('horizontal')
|
|
->static(true)->actions([])
|
|
->body([
|
|
amis()->FieldSetControl()->title('基本信息')->body([
|
|
amis()->GroupControl()->body([
|
|
Components::make()->cropImageControl('avatar', __('admin.persons.avatar')),
|
|
]),
|
|
amis()->GroupControl()->body([
|
|
amis()->TextControl('name', __('admin.persons.name'))->required(),
|
|
amis()->TextControl('used_name', __('admin.persons.used_name')),
|
|
]),
|
|
]),
|
|
]);
|
|
|
|
return amisMake()->Grid()->columns([
|
|
amis()->Column()->body($form)->md(6)
|
|
]);
|
|
}
|
|
} |