generated from liutk/owl-admin-base
添加人口管理查看
parent
6c787ec15f
commit
acef8246e8
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 人口管理
|
||||||
|
*
|
||||||
|
* @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([
|
||||||
|
|
||||||
|
]))
|
||||||
|
->columns([
|
||||||
|
amis()->TableColumn('domicile_code', __('admin.persons.domicile_code'))->width('100px')->copyable(),
|
||||||
|
amis()->TableColumn('name', __('admin.persons.name'))->width('150px')->copyable(),
|
||||||
|
amis()->TableColumn('master_connect', __('admin.persons.master_connect'))->width('100px'),
|
||||||
|
amis()->TableColumn('master.name', __('admin.persons.master_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}'
|
||||||
|
]),
|
||||||
|
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([
|
||||||
|
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -38,6 +38,8 @@ Route::group([
|
||||||
|
|
||||||
$router->resource('article_categories', \App\Admin\Controllers\ArticleCategoryController::class);
|
$router->resource('article_categories', \App\Admin\Controllers\ArticleCategoryController::class);
|
||||||
|
|
||||||
|
$router->resource('persons', \App\Admin\Controllers\PersonController::class);
|
||||||
|
|
||||||
|
|
||||||
//数据管理
|
//数据管理
|
||||||
$router->resource('financial_cate', \App\Admin\Controllers\KeywordController::class);
|
$router->resource('financial_cate', \App\Admin\Controllers\KeywordController::class);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use EloquentFilter\ModelFilter;
|
||||||
|
|
||||||
|
class PersonFilter extends ModelFilter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 身份证
|
||||||
|
*/
|
||||||
|
public function idcard($idcard)
|
||||||
|
{
|
||||||
|
return $this->where('idcard', $idcard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,10 +2,49 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use EloquentFilter\Filterable;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
|
|
||||||
class Person extends Model
|
class Person extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
use Filterable;
|
||||||
|
|
||||||
|
protected $table = 'persons';
|
||||||
|
|
||||||
|
protected $appends = ['age', 'now_address'];
|
||||||
|
|
||||||
|
protected function serializeDate(\DateTimeInterface $date)
|
||||||
|
{
|
||||||
|
return $date->format('Y-m-d H:i:s');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeSort($q)
|
||||||
|
{
|
||||||
|
$q->orderBy('id', 'asc');
|
||||||
|
}
|
||||||
|
|
||||||
|
//户主
|
||||||
|
public function master()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(static::class, 'master_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
//年龄
|
||||||
|
protected function age():Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: fn($value) => $this->birthday ? Carbon::parse($this->birthday)->diffInYears(now()).'岁' : "未知",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function nowAddress(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: fn($value) => $this->house_complete_address ? : $this->real_address,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Admin;
|
||||||
|
|
||||||
|
use App\Models\Person;
|
||||||
|
use App\Models\Filters\PersonFilter;
|
||||||
|
use App\Traits\UploadTrait;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method Person getModel()
|
||||||
|
* @method Person|\Illuminate\Database\Query\Builder query()
|
||||||
|
*/
|
||||||
|
class PersonService extends BaseService
|
||||||
|
{
|
||||||
|
use UploadTrait;
|
||||||
|
|
||||||
|
protected string $modelName = Person::class;
|
||||||
|
|
||||||
|
protected string $modelFilterName = PersonFilter::class;
|
||||||
|
|
||||||
|
protected array $withRelationships = ['master'];
|
||||||
|
|
||||||
|
protected bool $modelSortAble = true;
|
||||||
|
}
|
||||||
|
|
@ -56,6 +56,7 @@ return new class extends Migration
|
||||||
|
|
||||||
$table->unsignedBigInteger('domicile')->nullable()->comment('户籍类型');
|
$table->unsignedBigInteger('domicile')->nullable()->comment('户籍类型');
|
||||||
$table->string('domicile_code')->nullable()->comment('户籍编号');
|
$table->string('domicile_code')->nullable()->comment('户籍编号');
|
||||||
|
$table->unsignedBigInteger('master_id')->nullable()->default(0)->comment('户主ID');
|
||||||
$table->unsignedTinyInteger('is_master')->default(0)->comment('是否户主');
|
$table->unsignedTinyInteger('is_master')->default(0)->comment('是否户主');
|
||||||
$table->string('master_connect')->nullable()->default('')->comment('户主关系');
|
$table->string('master_connect')->nullable()->default('')->comment('户主关系');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,7 @@ class PersonSeeder extends Seeder
|
||||||
|
|
||||||
'domicile'=> Keyword::where('parent_key', 'domicile')->where('oid', $person->houseHoldTypeId)->value('id'),
|
'domicile'=> Keyword::where('parent_key', 'domicile')->where('oid', $person->houseHoldTypeId)->value('id'),
|
||||||
'domicile_code' => $person->houseHoldNumber,
|
'domicile_code' => $person->houseHoldNumber,
|
||||||
|
'master_id' => $person->houseHoldMasterId,
|
||||||
'is_master' => $person->houseHoldMasterRelative == '户主' ? 1:0,
|
'is_master' => $person->houseHoldMasterRelative == '户主' ? 1:0,
|
||||||
'master_connect' => $person->houseHoldMasterRelative ?: null,
|
'master_connect' => $person->houseHoldMasterRelative ?: null,
|
||||||
|
|
||||||
|
|
@ -119,7 +120,7 @@ class PersonSeeder extends Seeder
|
||||||
if($person->courtId){
|
if($person->courtId){
|
||||||
$houseCompleteAddress = '';
|
$houseCompleteAddress = '';
|
||||||
$housingEstate = Keyword::where('parent_key', 'housing_estate')->where('oid', $person->courtId)->first();
|
$housingEstate = Keyword::where('parent_key', 'housing_estate')->where('oid', $person->courtId)->first();
|
||||||
$building = Keyword::where('parent_key', 'like', '$housing_estate%')->where('oid', $person->buildingId ?:0)->first();
|
$building = Keyword::where('parent_key', 'like', 'housing_estate%')->where('oid', $person->buildingId ?:0)->first();
|
||||||
if($housingEstate){
|
if($housingEstate){
|
||||||
$_person['housing_estate'] = $housingEstate->id;
|
$_person['housing_estate'] = $housingEstate->id;
|
||||||
$houseCompleteAddress .= $housingEstate->name;
|
$houseCompleteAddress .= $housingEstate->name;
|
||||||
|
|
@ -133,10 +134,14 @@ class PersonSeeder extends Seeder
|
||||||
if($houseCompleteAddress){
|
if($houseCompleteAddress){
|
||||||
$_person['house_complete_address'] = $houseCompleteAddress;
|
$_person['house_complete_address'] = $houseCompleteAddress;
|
||||||
}
|
}
|
||||||
$_person['real_address'] = $person->addr2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$_person['real_address'] = $person->addr2;
|
||||||
|
|
||||||
// $newPersons[] = $_person;
|
// $newPersons[] = $_person;
|
||||||
|
if($_person['is_master']){
|
||||||
|
$_person['master_id'] = $person->id;
|
||||||
|
}
|
||||||
DB::table('persons')->insert($_person);
|
DB::table('persons')->insert($_person);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -338,4 +338,15 @@ return [
|
||||||
'is_show' => '展示',
|
'is_show' => '展示',
|
||||||
'is_recommend' => '推荐'
|
'is_recommend' => '推荐'
|
||||||
],
|
],
|
||||||
|
'persons' => [
|
||||||
|
'name' => '姓名',
|
||||||
|
'domicile_code' => '户籍编号',
|
||||||
|
'master_connect' => '关系',
|
||||||
|
'master_name' => '户主姓名',
|
||||||
|
'idcard' =>'身份证号',
|
||||||
|
'gender' => '性别',
|
||||||
|
'birthday' => '出生日期',
|
||||||
|
'age' => '年龄',
|
||||||
|
'now_address' => '现住址',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue