djc-new/app/Admin/Controllers/PersonController.php

134 lines
7.0 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;
/**
* 人口管理
*
* @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', 'xl'),
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('120px')->copyable(),
amis()->TableColumn('name', __('admin.persons.name'))->width('150px')->copyable()->searchable(),
amis()->TableColumn('master_connect', __('admin.persons.master_connect'))->width('100px'),
amis()->TableColumn('master.name', __('admin.persons.master_name'))->width('150px')->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')),
amis()->TableColumn('age', __('admin.persons.age')),
amis()->TableColumn('now_address', __('admin.persons.now_address'))->copyable(),
amisMake()->Operation()->label(__('admin.actions'))->buttons([
$this->rowEditTypeButton('drawer', 'xl'),
])
]);
return $this->baseList($crud);
}
public function form(): Form
{
return $this->baseForm()->body([
amis()->Grid()->columns([
amis()->Wrapper()->body([
amis()->GroupControl()->mode('horizontal')->body([
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'),
]),
])->md(6),
amis()->Wrapper()->body([
])->md(6)
]),
]);
}
}