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' => '现住址', + ], ];