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