From acef8246e8465ba696fd89caef7f2897340e3767 Mon Sep 17 00:00:00 2001
From: vine_liutk <961510893@qq.com>
Date: Mon, 19 Feb 2024 10:47:17 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=BA=E5=8F=A3=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E6=9F=A5=E7=9C=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/Admin/Controllers/PersonController.php | 63 +++++++++++++++++++
app/Admin/routes.php | 2 +
app/Models/Filters/PersonFilter.php | 17 +++++
app/Models/Person.php | 39 ++++++++++++
app/Services/Admin/PersonService.php | 25 ++++++++
.../2024_01_29_110440_create_people_table.php | 1 +
database/seeders/migrations/PersonSeeder.php | 9 ++-
lang/zh_CN/admin.php | 11 ++++
8 files changed, 165 insertions(+), 2 deletions(-)
create mode 100644 app/Admin/Controllers/PersonController.php
create mode 100644 app/Models/Filters/PersonFilter.php
create mode 100644 app/Services/Admin/PersonService.php
diff --git a/app/Admin/Controllers/PersonController.php b/app/Admin/Controllers/PersonController.php
new file mode 100644
index 0000000..111154c
--- /dev/null
+++ b/app/Admin/Controllers/PersonController.php
@@ -0,0 +1,63 @@
+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"=>"男",
+ "2"=>"女",
+ "*"=> '其他:${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([
+
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Admin/routes.php b/app/Admin/routes.php
index 19a9267..0763fbd 100644
--- a/app/Admin/routes.php
+++ b/app/Admin/routes.php
@@ -38,6 +38,8 @@ Route::group([
$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);
diff --git a/app/Models/Filters/PersonFilter.php b/app/Models/Filters/PersonFilter.php
new file mode 100644
index 0000000..26fc151
--- /dev/null
+++ b/app/Models/Filters/PersonFilter.php
@@ -0,0 +1,17 @@
+where('idcard', $idcard);
+ }
+}
diff --git a/app/Models/Person.php b/app/Models/Person.php
index 64089d2..1b433c8 100644
--- a/app/Models/Person.php
+++ b/app/Models/Person.php
@@ -2,10 +2,49 @@
namespace App\Models;
+use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
+use EloquentFilter\Filterable;
+use Illuminate\Database\Eloquent\Casts\Attribute;
class Person extends Model
{
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,
+ );
+ }
}
diff --git a/app/Services/Admin/PersonService.php b/app/Services/Admin/PersonService.php
new file mode 100644
index 0000000..6405994
--- /dev/null
+++ b/app/Services/Admin/PersonService.php
@@ -0,0 +1,25 @@
+unsignedBigInteger('domicile')->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->string('master_connect')->nullable()->default('')->comment('户主关系');
diff --git a/database/seeders/migrations/PersonSeeder.php b/database/seeders/migrations/PersonSeeder.php
index 6d7eb66..00b9734 100644
--- a/database/seeders/migrations/PersonSeeder.php
+++ b/database/seeders/migrations/PersonSeeder.php
@@ -78,6 +78,7 @@ class PersonSeeder extends Seeder
'domicile'=> Keyword::where('parent_key', 'domicile')->where('oid', $person->houseHoldTypeId)->value('id'),
'domicile_code' => $person->houseHoldNumber,
+ 'master_id' => $person->houseHoldMasterId,
'is_master' => $person->houseHoldMasterRelative == '户主' ? 1:0,
'master_connect' => $person->houseHoldMasterRelative ?: null,
@@ -119,7 +120,7 @@ class PersonSeeder extends Seeder
if($person->courtId){
$houseCompleteAddress = '';
$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){
$_person['housing_estate'] = $housingEstate->id;
$houseCompleteAddress .= $housingEstate->name;
@@ -133,10 +134,14 @@ class PersonSeeder extends Seeder
if($houseCompleteAddress){
$_person['house_complete_address'] = $houseCompleteAddress;
}
- $_person['real_address'] = $person->addr2;
}
+ $_person['real_address'] = $person->addr2;
+
// $newPersons[] = $_person;
+ if($_person['is_master']){
+ $_person['master_id'] = $person->id;
+ }
DB::table('persons')->insert($_person);
}
}
diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php
index 32f9128..4e79071 100644
--- a/lang/zh_CN/admin.php
+++ b/lang/zh_CN/admin.php
@@ -338,4 +338,15 @@ return [
'is_show' => '展示',
'is_recommend' => '推荐'
],
+ 'persons' => [
+ 'name' => '姓名',
+ 'domicile_code' => '户籍编号',
+ 'master_connect' => '关系',
+ 'master_name' => '户主姓名',
+ 'idcard' =>'身份证号',
+ 'gender' => '性别',
+ 'birthday' => '出生日期',
+ 'age' => '年龄',
+ 'now_address' => '现住址',
+ ],
];