From 7f88707bf21722545d6f7745aa1c6a2cebba082f Mon Sep 17 00:00:00 2001
From: vine_liutk <961510893@qq.com>
Date: Wed, 21 Feb 2024 16:49:27 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=B6=E5=AE=9A=E4=BA=BA=E5=8F=A3=E6=93=8D?=
=?UTF-8?q?=E4=BD=9C=E6=A1=86=E6=9E=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/Admin/Controllers/PersonController.php | 218 ++++++++++++++++-----
app/Admin/bootstrap.php | 11 +-
app/Models/Filters/PersonFilter.php | 4 +
app/Models/Person.php | 1 +
app/Traits/CustomActionTrait.php | 19 +-
5 files changed, 200 insertions(+), 53 deletions(-)
diff --git a/app/Admin/Controllers/PersonController.php b/app/Admin/Controllers/PersonController.php
index 659d7d1..13465ce 100644
--- a/app/Admin/Controllers/PersonController.php
+++ b/app/Admin/Controllers/PersonController.php
@@ -32,6 +32,10 @@ class PersonController extends AdminController
$crud = $this->baseCRUD()->tableLayout('fixed')
->headerToolbar([
$this->createTypeButton('drawer', '', '50%'),
+ amis()->DialogAction()->icon('fa fa-add')->label('合户')->dialog(
+ amis()->Dialog()->title('合户')->body($this->mergeMasterForm())->size('lg')
+ ),
+
amis('reload')->align('right'),
amis('filter-toggler')->align('right'),
])
@@ -176,46 +180,7 @@ class PersonController extends AdminController
amis()->SelectControl('domicile', __('admin.persons.domicile'))->options(Keyword::where('parent_key', 'domicile')->pluck('name', 'id')->toArray())->clearable(true)->required(),
]),
amis()->GroupControl()->mode('horizontal')->body([
- amis()->PickerControl('master', __('admin.persons.master'))
- ->multiple(false)
- ->valueField('id')
- ->labelField('name')
- ->size('lg')
- ->source([
- 'method' => 'get',
- 'url' => admin_url('persons?_action=getData&state=1&perPage=10'),
- 'data' => [
- 'name'=>'${master_name}',
- 'idcard'=>'${master_idcard}'
- ]
- ])
- ->pickerSchema(
- [
- 'mode' => 'table',
- 'name' => 'monitor_list',
- 'headerToolbar' => amis()->form()
- ->wrapWithPanel(false)
- ->className('text-right')
- ->target('monitor_list')
- ->mode('inline')
- ->body([
- amis()->TextControl('master_idcard', __('admin.persons.idcard'))->size('md'),
- amis()->TextControl('master_name', __('admin.persons.name'))->size('md')->addOn(
- amis('submit')->label(__('admin.search'))->level('primary')
- ),
- ]),
- 'columns' => [
- amis()->TableColumn('domicile_code', __('admin.persons.domicile_code'))->width('120px')->copyable(),
- amis()->TableColumn('name', __('admin.persons.name'))->width('150px')->copyable(),
- amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable(),
- amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([
- "1"=>"男",
- "2"=>"女",
- "*"=> '其他:${gender}'
- ]),
- ]
- ]
- )->description('输入 户主姓名 进行筛选,忽略则为添加户主')->disabledOn('this.id > 0'),
+ $this->masterPicker('master', '', '输入 户主姓名 进行筛选,忽略则为添加户主')->disabledOn('this.id > 0'),
amis()->TextControl('master_connect', __('admin.persons.master_connect'))->required(),
]),
]),
@@ -243,22 +208,185 @@ class PersonController extends AdminController
public function detail()
{
- $form = amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal')
+ $form = amisMake()->form()->title('')->panelClassName('border-r border-t-0 border-b-0 border-l-0')->mode('horizontal')
->static(true)->actions([])
->body([
amis()->FieldSetControl()->title('基本信息')->body([
amis()->GroupControl()->body([
- Components::make()->cropImageControl('avatar', __('admin.persons.avatar')),
+ amis()->Image()->type('static-image')->name('avatar')->label( __('admin.persons.avatar'))->height('80px')->width('80px')->thumbMode('cover'),
]),
amis()->GroupControl()->body([
- amis()->TextControl('name', __('admin.persons.name'))->required(),
- amis()->TextControl('used_name', __('admin.persons.used_name')),
+ amis()->StaticExactControl('name', __('admin.persons.name'))->copyable(['content'=>'${name}']),
+ amis()->StaticExactControl('used_name', __('admin.persons.used_name')),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('idcard', __('admin.persons.idcard'))->copyable(['content'=>'${idcard}']),
+ amis()->RadiosControl('gender', __('admin.persons.gender'))->options([
+ '1'=>'男', '2'=>'女'
+ ]),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('birthday', __('admin.persons.birthday')),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('age', __('admin.persons.age')),
+ amis()->StaticExactControl('origin_complete_address', __('admin.persons.origin_complete_address')),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('card_complete_address', __('admin.persons.card_complete_address')),
+ amis()->StaticExactControl('now_address', __('admin.persons.now_address')),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('nation', __('admin.persons.nation'))->type('static-mapping')->map(
+ Keyword::where('parent_key', 'nation')->pluck('name', 'id')->toArray()),
+ amis()->StaticExactControl('political_face', __('admin.persons.political_face'))->type('static-mapping')->map(
+ Keyword::where('parent_key', 'political_face')->pluck('name', 'id')->toArray()),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('educational_level', __('admin.persons.educational_level'))->type('static-mapping')->map(
+ Keyword::where('parent_key', 'educational_level')->pluck('name', 'id')->toArray()),
+ amis()->StaticExactControl('marry_state', __('admin.persons.marry_state'))->type('static-mapping')->map(
+ Keyword::where('parent_key', 'marry_state')->pluck('name', 'id')->toArray()),
+ ]),
+ ]),
+ amis()->FieldSetControl()->title('其他信息')->className('mt-10')->body([
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('military_service_status', __('admin.persons.military_service_status'))->type('static-mapping')->map(
+ Keyword::where('parent_key', 'military_service_status')->pluck('name', 'id')->toArray()),
+ amis()->StaticExactControl('is_voter', __('admin.persons.is_voter'))->type('static-mapping')->map(
+ ['0'=>'否','1'=>'是','*'=>'未知']),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('job', __('admin.persons.job')),
+ amis()->StaticExactControl('health', __('admin.persons.health')),
+ ]),
+ amis()->GroupControl()->body([
+ amis()->StaticExactControl('phone', __('admin.persons.phone')),
+ amis()->StaticExactControl('remark', __('admin.persons.remark')),
]),
]),
]);
return amisMake()->Grid()->columns([
- amis()->Column()->body($form)->md(6)
+ amis()->Column()->body($form)->md(6),
+ amis()->Column()->body([
+ amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal')
+ ->static(true)->actions([])
+ ->body([
+ amis()->FieldSetControl()->title('户籍信息')->body([
+ amisMake()->CRUDTable()->affixHeader(false)
+ ->title('')
+ ->itemBadge([//行角标
+ 'text' => __('admin.persons.master'),
+ 'mode' => 'ribbon',
+ 'position' => 'top-left',
+ 'badgeLevel' => 'danger',
+ 'visibleOn' => '${is_master > 0}',
+ 'size' => 15
+ ])
+ ->api(admin_url('persons?_action=getData&master[name]=${master.name}'))
+ ->columns([
+ amis()->TableColumn('name', __('admin.persons.name'))->copyable(),
+ amis()->TableColumn('master_connect', __('admin.persons.master_connect')),
+ amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable(),
+ amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([
+ "1"=>"男",
+ "2"=>"女",
+ "*"=> '其他:${gender}'
+ ]),
+ ])
+ ])
+ ])
+ ])->md(6),
]);
}
+
+
+ public function detailActions()
+ {
+ return [
+ //变更户主
+ //迁移
+ //迁出
+ //死亡
+ //返回
+ amis()->Button()->actionType('confirm')->label(__('admin.back'))->primary()
+ ];
+ }
+
+ /**
+ * 合户
+ */
+ public function mergeMasterForm()
+ {
+ return amis()->form()->title('')->body([
+
+ amis()->GroupControl()->body([
+ $this->masterPicker('master', '', '输入 户主姓名 进行筛选'),
+ $this->masterPicker('to_master', '待合并户', '输入 户主姓名 进行筛选'),
+ ]),
+ amis()->Divider(),
+
+ ]);
+ }
+
+ public function doMergeMaster(){
+
+ }
+
+ /**
+ * 分户
+ */
+ public function splitMasterForm()
+ {
+
+ }
+
+ public function doSplitMaster(){
+
+ }
+
+ private function masterPicker($name = 'master', $label = '', $description = '')
+ {
+ return amis()->PickerControl($name, $label ?:__('admin.persons.master'))
+ ->multiple(false)
+ ->valueField('id')
+ ->labelField('name')
+ ->size('lg')
+ ->source([
+ 'method' => 'get',
+ 'url' => admin_url('persons?_action=getData&state=1&is_master=1&perPage=10'),
+ 'data' => [
+ 'name'=>'${master_name}',
+ 'idcard'=>'${master_idcard}'
+ ]
+ ])
+ ->pickerSchema(
+ [
+ 'mode' => 'table',
+ 'name' => 'monitor_list',
+ 'headerToolbar' => amis()->form()
+ ->wrapWithPanel(false)
+ ->className('text-right')
+ ->target('monitor_list')
+ ->mode('inline')
+ ->body([
+ amis()->TextControl('master_idcard', __('admin.persons.idcard'))->size('md'),
+ amis()->TextControl('master_name', __('admin.persons.name'))->size('md')->addOn(
+ amis('submit')->label(__('admin.search'))->level('primary')
+ ),
+ ]),
+ 'columns' => [
+ amis()->TableColumn('domicile_code', __('admin.persons.domicile_code'))->width('120px')->copyable(),
+ amis()->TableColumn('name', __('admin.persons.name'))->width('150px')->copyable(),
+ amis()->TableColumn('idcard', __('admin.persons.idcard'))->copyable(),
+ amis()->TableColumn('gender', __('admin.persons.gender'))->type('mapping')->map([
+ "1"=>"男",
+ "2"=>"女",
+ "*"=> '其他:${gender}'
+ ]),
+ ]
+ ]
+ )->description($description);
+ }
}
\ No newline at end of file
diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php
index c316651..6dc2f91 100644
--- a/app/Admin/bootstrap.php
+++ b/app/Admin/bootstrap.php
@@ -2,8 +2,9 @@
use Slowlyo\OwlAdmin\Admin;
-// Admin::styles([
-// '.cxd-Panel-heading { border-width: 0; background: #4080ffc7 !important; }',
-// // '.cxd-Panel {box-shadow: none; }',
-// '.cxd-Panel-title { color:white;font-size: 16px; }'
-// ]);
\ No newline at end of file
+Admin::styles([
+ '.cxd-Crud {border-width: 0 ;}',
+ // '.cxd-Panel-heading { border-width: 0; background: #4080ffc7 !important; }',
+ // // '.cxd-Panel {box-shadow: none; }',
+ // '.cxd-Panel-title { color:white;font-size: 16px; }'
+]);
\ No newline at end of file
diff --git a/app/Models/Filters/PersonFilter.php b/app/Models/Filters/PersonFilter.php
index 68cea14..e3cb3f8 100644
--- a/app/Models/Filters/PersonFilter.php
+++ b/app/Models/Filters/PersonFilter.php
@@ -76,4 +76,8 @@ class PersonFilter extends ModelFilter
return $this->whereBetween('birthday', $birthday);
}
+
+ public function isMaster($isMaster){
+ return $this->where('is_master', $isMaster);
+ }
}
diff --git a/app/Models/Person.php b/app/Models/Person.php
index a82aaed..695fd7c 100644
--- a/app/Models/Person.php
+++ b/app/Models/Person.php
@@ -39,6 +39,7 @@ class Person extends Model
$person->origin_province_id = $originProvince?->id ?? 0;
$person->origin_city_id = $originCity?->id ?? 0;
$person->origin_area_id = $originArea?->id ?? 0;
+ $person->origin_complete_address = ($originProvince?->name ?? '未知').'-'.($originCity?->name ?? '未知').'-'.($originArea?->name ?? '未知');
}
if($person->card_city_code){
list($cardProvince, $cardCity, $cardArea) = Zone::codeToZone($person->card_city_code);
diff --git a/app/Traits/CustomActionTrait.php b/app/Traits/CustomActionTrait.php
index cb7b57e..0a01c13 100644
--- a/app/Traits/CustomActionTrait.php
+++ b/app/Traits/CustomActionTrait.php
@@ -117,13 +117,26 @@ trait CustomActionTrait
}else{
$drawer->size($size);
}
+ //补充详情操作按钮扩展
+ try{
+ $actions = $this->detailActions();
+ }catch(\BadMethodCallException $e){
+ $actions = [];
+ }
+ $drawer->actions($actions);
$button = DrawerAction::make()->drawer($drawer);
break;
case 'dialog':
- $button = DialogAction::make()->dialog(
- Dialog::make()->title(__('admin.show'))->body($this->detail('$id'))->size($size)
- );
+ //补充详情操作按钮扩展
+ $dialog = Dialog::make()->title(__('admin.show'))->body($this->detail('$id'))->size($size);
+ try{
+ $actions = $this->detailActions();
+ }catch(\BadMethodCallException $e){
+ $actions = [];
+ }
+ $dialog->actions($actions);
+ $button = DialogAction::make()->dialog($dialog);
break;
default:
$button = LinkAction::make()->link($this->getShowPath());