增加专家新增和编辑

main
liutk 2024-03-13 13:19:55 +08:00
parent f30c68bc09
commit d82f8bec23
11 changed files with 394 additions and 28 deletions

View File

@ -6,6 +6,7 @@ use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use App\Services\Admin\ManageService;
use App\Admin\Components;
/**
* 专家管理
@ -18,8 +19,11 @@ class ManageController extends AdminController
public function list(): Page
{
$crud = $this->baseCRUD()
->filterTogglable(false)
$crud = $this->baseCRUD()->tableLayout('fixed')
->headerToolbar([
amis()->LinkAction()->link(admin_url('/manages/create'))->label('新增')->icon('fa fa-add')->level('primary'),
...$this->baseHeaderToolBar(),
])
->columns([
amis()->TableColumn('id', 'ID')->sortable(),
amis()->TableColumn('name', '姓名'),
@ -48,27 +52,275 @@ class ManageController extends AdminController
return $this->baseList($crud);
}
public function createManage()
{
$wizard = amis()
->Card()
->header(['title' => __('admin.create')])
->toolbar([$this->backButton()])
->body(
amis()->Wizard()->className('min-h-screen')
->api($this->getStorePath())
->steps([
amis()->WizardStep()->title('基本信息')->body([
amis()->FieldSetControl()->title('基础资料')->body([
amis()->GroupControl()->mode('horizontal')->body([
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('name', '姓名')->required(true),
Components::make()->cropImageControl('avatar', '寸照')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('nation', '民族')->required(true),
amis()->RadiosControl('gender', '性别')->options([
'1'=>'男', '2'=>'女'
])->required(),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->DateControl('birthday', '出生年月')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('political_face', '政治面貌')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('educational_level', '学历学位')->required(true),
amis()->TextControl('company', '工作单位')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('strative_position', '行政职务')->required(true),
amis()->TextControl('technical_position', '专业技术职务')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('subject', '学科门类')->required(true),
amis()->TextControl('research_direction', '研究方向')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('address', '通讯地址(邮编)')->required(true),
amis()->TextControl('email', '个人邮箱')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('work_phone', '办公电话')->required(true),
amis()->TextControl('mobile_phone', '移动电话')->required(true),
]),
]),
amis()->FieldSetControl()->title('个人简历')->className('mt-10')->body([
amis()->TableControl('jobs', '')->columnsTogglable(false)->columns([
amis()->DateControl('start_at', '开始时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->DateControl('end_at', '截止时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('company', '工作单位以及所在部门')->required(true),
amis()->TextControl('job_name', '职务、职称')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->FieldSetControl()->title('获奖情况')->className('mt-10')->body([
amis()->TableControl('ranks', '')->columnsTogglable(false)->columns([
amis()->TextControl('rank_name', '获奖名称')->required(true),
amis()->TextControl('rank_cate', '获奖类别(等级)')->required(true),
amis()->TextControl('rank_company', '授予单位')->required(true),
amis()->DateControl('rank_at', '获奖时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('rank_lv', '本人排名')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
])
]),
amis()->WizardStep()->title('科研项目情况')->body([
amis()->TableControl('projects', '')->columnsTogglable(false)->columns([
amis()->TextControl('project_name', '项目名称')->required(true),
amis()->TextControl('project_source', '项目来源')->required(true),
amis()->SelectControl('join_type', '主持或者参加')->options([
'1'=>'主持', '2'=>'参加'
])->required(true),
amis()->DateControl('start_at', '开始时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->DateControl('end_at', '截止时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_name', '成果名称')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('论著发表出版情况')->body([
amis()->TableControl('articles', '')->columnsTogglable(false)->columns([
amis()->TextControl('artcile_name', '论文或著作名称')->required(true),
amis()->TextControl('press_name', '出版社/期刊/报纸')->required(true),
amis()->YearControl('year', '年份')->valueFormat('YYYY')->required(true),
amis()->TextControl('source_page', '期/卷/版/页')->required(true),
amis()->TextControl('author_rank', '作者名次')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('决策咨询情况')->body([
amis()->TableControl('consults', '')->columnsTogglable(false)->columns([
amis()->TextControl('consult_title', '决策咨询报告题目')->required(true),
amis()->TextControl('consult_channel', '报送渠道')->required(true),
amis()->SelectControl('join_type', '主持或者参加')->options([
'1'=>'主持', '2'=>'参加'
])->required(true),
amis()->TextControl('leader_instruction', '领导批示')->required(true),
amis()->DateControl('consult_at', '日期')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('学术交流情况')->body([
amis()->TableControl('meetings', '')->columnsTogglable(false)->columns([
amis()->TextControl('meeting_name', '学术活动名称')->required(true),
amis()->TextControl('meeting_company', '主办单位')->required(true),
amis()->TextControl('meeting_cate', '类型')->required(true),
amis()->DateControl('meeting_at', '日期')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_name', '成果名称')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('社科普及项目情况')->body([
amis()->TableControl('socials', '')->columnsTogglable(false)->columns([
amis()->TextControl('social_name', '社科普及项目名称')->required(true),
amis()->TextControl('social_company', '主办单位')->required(true),
amis()->TextControl('social_cate', '类型')->required(true),
amis()->DateControl('social_at', '日期')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_name', '成果名称')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('其他注意事项')->body([
amis()->TextareaControl('others', '')->minRows(10)->placeholder('请填写其他注意事项,若无则无需填写'),
]),
])
->redirect($this->getListPath())
);
$page = $this->basePage()->body($wizard);
return $this->response()->success($page);
}
public function editManage()
{
$wizard = amis()
->Card()
->header(['title' => __('admin.create')])
->toolbar([$this->backButton()])
->body(
amis()->Wizard()->className('min-h-screen')
->api($this->getUpdatePath())->initApi($this->getEditGetDataPath())
->steps([
amis()->WizardStep()->title('基本信息')->body([
amis()->FieldSetControl()->title('基础资料')->body([
amis()->GroupControl()->mode('horizontal')->body([
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('name', '姓名')->required(true),
Components::make()->cropImageControl('avatar', '寸照')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('nation', '民族')->required(true),
amis()->RadiosControl('gender', '性别')->options([
'1'=>'男', '2'=>'女'
])->required(),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->DateControl('birthday', '出生年月')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('political_face', '政治面貌')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('educational_level', '学历学位')->required(true),
amis()->TextControl('company', '工作单位')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('strative_position', '行政职务')->required(true),
amis()->TextControl('technical_position', '专业技术职务')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('subject', '学科门类')->required(true),
amis()->TextControl('research_direction', '研究方向')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('address', '通讯地址(邮编)')->required(true),
amis()->TextControl('email', '个人邮箱')->required(true),
]),
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('work_phone', '办公电话')->required(true),
amis()->TextControl('mobile_phone', '移动电话')->required(true),
]),
]),
amis()->FieldSetControl()->title('个人简历')->className('mt-10')->body([
amis()->TableControl('jobs', '')->columnsTogglable(false)->columns([
amis()->DateControl('start_at', '开始时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->DateControl('end_at', '截止时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('company', '工作单位以及所在部门')->required(true),
amis()->TextControl('job_name', '职务、职称')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->FieldSetControl()->title('获奖情况')->className('mt-10')->body([
amis()->TableControl('ranks', '')->columnsTogglable(false)->columns([
amis()->TextControl('rank_name', '获奖名称')->required(true),
amis()->TextControl('rank_cate', '获奖类别(等级)')->required(true),
amis()->TextControl('rank_company', '授予单位')->required(true),
amis()->DateControl('rank_at', '获奖时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('rank_lv', '本人排名')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
])
]),
amis()->WizardStep()->title('科研项目情况')->body([
amis()->TableControl('projects', '')->columnsTogglable(false)->columns([
amis()->TextControl('project_name', '项目名称')->required(true),
amis()->TextControl('project_source', '项目来源')->required(true),
amis()->SelectControl('join_type', '主持或者参加')->options([
'1'=>'主持', '2'=>'参加'
])->required(true),
amis()->DateControl('start_at', '开始时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->DateControl('end_at', '截止时间')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_name', '成果名称')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('论著发表出版情况')->body([
amis()->TableControl('articles', '')->columnsTogglable(false)->columns([
amis()->TextControl('artcile_name', '论文或著作名称')->required(true),
amis()->TextControl('press_name', '出版社/期刊/报纸')->required(true),
amis()->YearControl('year', '年份')->valueFormat('YYYY')->required(true),
amis()->TextControl('source_page', '期/卷/版/页')->required(true),
amis()->TextControl('author_rank', '作者名次')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('决策咨询情况')->body([
amis()->TableControl('consults', '')->columnsTogglable(false)->columns([
amis()->TextControl('consult_title', '决策咨询报告题目')->required(true),
amis()->TextControl('consult_channel', '报送渠道')->required(true),
amis()->SelectControl('join_type', '主持或者参加')->options([
'1'=>'主持', '2'=>'参加'
])->required(true),
amis()->TextControl('leader_instruction', '领导批示')->required(true),
amis()->DateControl('consult_at', '日期')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('学术交流情况')->body([
amis()->TableControl('meetings', '')->columnsTogglable(false)->columns([
amis()->TextControl('meeting_name', '学术活动名称')->required(true),
amis()->TextControl('meeting_company', '主办单位')->required(true),
amis()->TextControl('meeting_cate', '类型')->required(true),
amis()->DateControl('meeting_at', '日期')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_name', '成果名称')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('社科普及项目情况')->body([
amis()->TableControl('socials', '')->columnsTogglable(false)->columns([
amis()->TextControl('social_name', '社科普及项目名称')->required(true),
amis()->TextControl('social_company', '主办单位')->required(true),
amis()->TextControl('social_cate', '类型')->required(true),
amis()->DateControl('social_at', '日期')->valueFormat('YYYY-MM-DD')->required(true),
amis()->TextControl('result_name', '成果名称')->required(true),
amis()->TextControl('result_use', '成果转化')->required(true),
])->needConfirm(false)->addable()->removable()->minLength(1)
]),
amis()->WizardStep()->title('其他注意事项')->body([
amis()->TextareaControl('others', '')->minRows(10)->placeholder('请填写其他注意事项,若无则无需填写'),
]),
])->redirect($this->getListPath())
);
$page = $this->basePage()->body($wizard);
return $this->response()->success($page);
}
public function form($isEdit = false): Form
{
return $this->baseForm()->body([
amis()->TextControl('name', '姓名'),
amis()->ImageControl('avatar', '头像'),
amis()->TextControl('gender', '性别:0未知1男2女'),
amis()->TextControl('birthday', '生日'),
amis()->TextControl('nation', '民族'),
amis()->TextControl('political_face', '政治面貌'),
amis()->TextControl('educational_level', '学历学位'),
amis()->TextControl('company', '工作单位'),
amis()->TextControl('strative_position', '行政职务'),
amis()->TextControl('technical_position', '专业技术职务'),
amis()->TextControl('subject', '学科门类'),
amis()->TextControl('research_direction', '研究方向'),
amis()->TextControl('address', '通讯地址(邮编)'),
amis()->TextControl('email', '个人邮箱'),
amis()->TextControl('work_phone', '办公电话'),
amis()->TextControl('mobile_phone', '移动电话'),
amis()->TextControl('remarks', '备注'),
amis()->TextControl('others', '补充说明'),
]);
}

View File

@ -32,7 +32,9 @@ Route::group([
$router->resource('ads', \App\Admin\Controllers\AdController::class);
$router->resource('manages', \App\Admin\Controllers\ManageController::class);
$router->get('manages/create', [\App\Admin\Controllers\ManageController::class, 'createManage']);
$router->get('manages/{manage}/edit', [\App\Admin\Controllers\ManageController::class, 'editManage']);
$router->resource('manages', \App\Admin\Controllers\ManageController::class)->only(['index', 'store', 'update', 'show', 'destroy']);
//修改上传
$router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']);

View File

@ -17,37 +17,37 @@ class Manage extends Model
}
public function article()
public function articles()
{
return $this->hasMany(ManageArticle::class, 'manage_id');
}
public function consult()
public function consults()
{
return $this->hasMany(ManageConsult::class, 'manage_id');
}
public function job()
public function jobs()
{
return $this->hasMany(ManageJob::class, 'manage_id');
}
public function meeting()
public function meetings()
{
return $this->hasMany(ManageMeeting::class, 'manage_id');
}
public function project()
public function projects()
{
return $this->hasMany(ManageProject::class, 'manage_id');
}
public function rank()
public function ranks()
{
return $this->hasMany(ManageRank::class, 'manage_id');
}
public function social()
public function socials()
{
return $this->hasMany(ManageSocial::class, 'manage_id');
}

View File

@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model;
class ManageArticle extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'artcile_name', 'press_name', 'year', 'source_page', 'author_rank'
];
}

View File

@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model;
class ManageConsult extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'consult_title', 'consult_channel', 'join_type', 'leader_instruction', 'consult_at', 'result_use'
];
}

View File

@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model;
class ManageJob extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'start_at', 'end_at', 'company', 'job_name'
];
}

View File

@ -8,4 +8,9 @@ use Illuminate\Database\Eloquent\Model;
class ManageMeeting extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'meeting_name', 'meeting_company', 'meeting_cate', 'meeting_at', 'result_name', 'result_use'
];
}

View File

@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model;
class ManageProject extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'project_name', 'project_source', 'join_type', 'start_at', 'end_at', 'result_name', 'result_use'
];
}

View File

@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model;
class ManageRank extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'rank_name', 'rank_cate', 'rank_company', 'rank_at', 'rank_lv'
];
}

View File

@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model;
class ManageSocial extends Model
{
use HasFactory;
protected $fillable = [
'manage_id', 'social_name', 'social_company', 'social_cate', 'social_at', 'result_name', 'result_use'
];
}

View File

@ -6,6 +6,7 @@ use App\Models\Manage;
use App\Models\Filters\ManageFilter;
use App\Traits\UploadTrait;
use Illuminate\Support\Arr;
use DB;
/**
* @method Manage getModel()
@ -19,4 +20,86 @@ class ManageService extends BaseService
protected string $modelFilterName = ManageFilter::class;
protected array $withRelationships = ['articles', 'consults', 'jobs', 'meetings', 'projects', 'ranks', 'socials'];
public function store($data): bool
{
$columns = $this->getTableColumns();
$model = $this->getModel();
$data['avatar'] = $this->saveImage('avatar', 'manages/avatar')[0] ?? '';
foreach ($data as $k => $v) {
if (!in_array($k, $columns)) {
continue;
}
$model->setAttribute($k, $v);
}
try{
DB::beginTransaction();
$model->save();
$model->jobs()->createMany($data['jobs']);
$model->ranks()->createMany($data['ranks']);
$model->projects()->createMany($data['projects']);
$model->articles()->createMany($data['articles']);
$model->consults()->createMany($data['consults']);
$model->meetings()->createMany($data['meetings']);
$model->socials()->createMany($data['socials']);
DB::commit();
}catch(\Throwable $th){
DB::rollBack();
report($th);
return false;
}
return true;
}
public function update($primaryKey, $data): bool
{
$columns = $this->getTableColumns();
$model = $this->query()->whereKey($primaryKey)->first();
if(isset($data['avatar'])){
$data['avatar'] = $this->saveImage('avatar', 'manages/cover')[0] ?? '';
}
foreach ($data as $k => $v) {
if (!in_array($k, $columns)) {
continue;
}
$model->setAttribute($k, $v);
}
try{
DB::beginTransaction();
$model->save();
$model->jobs()->delete();
$model->jobs()->createMany($data['jobs']);
$model->ranks()->delete();
$model->ranks()->createMany($data['ranks']);
$model->projects()->delete();
$model->projects()->createMany($data['projects']);
$model->articles()->delete();
$model->articles()->createMany($data['articles']);
$model->consults()->delete();
$model->consults()->createMany($data['consults']);
$model->meetings()->delete();
$model->meetings()->createMany($data['meetings']);
$model->socials()->delete();
$model->socials()->createMany($data['socials']);
DB::commit();
}catch(\Throwable $th){
dd($th);
DB::rollBack();
report($th);
return $this->setError('系统错误,请刷新后重试');
}
return true;
}
}