baseCRUD() ->tableLayout('fixed') ->headerToolbar([ $this->createTypeButton('drawer', 'lg')->visible($user->can('admin.hr.employees.create')), ...$this->baseHeaderToolBar(), $this->exportAction(true)->visible($user->can('admin.hr.employees.export')), ]) ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->GroupControl()->mode('horizontal')->body([ amisMake()->TextControl()->name('name')->label(__('employee.name'))->columnRatio(3)->clearable(), amisMake()->TextControl()->name('phone')->label(__('employee.phone'))->columnRatio(3)->clearable(), amisMake()->SelectControl()->name('employee_status')->label(__('employee.employee_status'))->columnRatio(3)->clearable()->options(EmployeeStatus::options()), ]), ])) ->filterDefaultVisible() ->columns([ amisMake()->TableColumn()->name('id')->label(__('employee.id')), amisMake()->TableColumn()->name('name')->label(__('employee.name')), amisMake()->TableColumn()->name('avatar')->label(__('employee.avatar'))->type('avatar')->src('${avatar}'), amisMake()->TableColumn()->name('jobs')->label(__('employee.jobs'))->type('each')->items(amisMake()->Tag()->label('${name}')), amisMake()->TableColumn()->name('phone')->label(__('employee.phone')), amisMake()->TableColumn()->name('employee_status_text')->label(__('employee.employee_status'))->set('type', 'tag')->set('color', '${employee_status_color}'), amisMake()->TableColumn()->name('store.title')->label(__('employee.store_id')), amisMake()->TableColumn()->name('remarks')->label(__('employee.remarks')), amis()->TableColumn()->name('is_sign')->label(__('employee.is_sign'))->type('switch'), $this->rowActions([ $this->rowShowButton()->visible($user->can('admin.hr.employees.view')), $this->rowEditTypeButton('drawer', 'lg')->visible($user->can('admin.hr.employees.update')), $this->rowDeleteButton()->visible($user->can('admin.hr.employees.delete')), amisMake()->AjaxAction() ->label(__('employee.leave')) ->level('link') ->icon('fa fa-sign-out') ->confirmText(__('employee.leave_confirm')) ->api('post:'.admin_url('hr/employees/${id}/leave')) ->visible($user->can('admin.hr.employees.leave')) ->visibleOn('${employee_status == '.EmployeeStatus::Online->value.'}'), amisMake()->AjaxAction() ->label(__('employee.reback')) ->level('link') ->icon('fa fa-sign-out') ->confirmText(__('employee.leave_confirm')) ->api('post:'.admin_url('hr/employees/${id}/leave')) ->visible($user->can('admin.hr.employees.leave')) ->visibleOn('${employee_status == '.EmployeeStatus::Offline->value.'}'), ]), ]); return $this->baseList($crud); } public function form($edit): Form { return $this->baseForm()->title('')->body([ amisMake()->ImageControl()->name('avatar')->label(__('employee.avatar'))->receiver($this->uploadImagePath().'?full-url=1'), amisMake()->TextControl()->name('name')->label(__('employee.name'))->required(), amisMake()->TextControl()->name('phone')->label(__('employee.phone'))->required(), amisMake()->TagControl()->name('jobs')->label(__('employee.jobs')) ->source(admin_url('api/keywords/tree-list').'?parent_key='.Employee::JOB_KEY) ->labelField('name') ->valueField('key') ->extractValue(true) ->joinValues(false), amisMake()->DateControl()->name('join_at')->label(__('employee.join_at'))->format('YYYY-MM-DD'), amisMake()->TextControl()->name('remarks')->label(__('employee.remarks')), amisMake()->ImageControl()->name('prize_images')->label(__('employee.prize_images')) ->multiple() ->receiver($this->uploadImagePath().'?full-url=1') ->joinValues(false) ->extractValue(true), amisMake()->ImageControl()->name('skill_images')->label(__('employee.skill_images')) ->multiple() ->receiver($this->uploadImagePath().'?full-url=1') ->joinValues(false) ->extractValue(true), amisMake()->TextControl()->name('username')->label(__('admin.username'))->value('${admin_user.username}')->visible(! $edit)->required(! $edit), amisMake()->TextControl()->name('password')->set('type', 'input-password')->label(__('admin.password'))->visible(! $edit)->required(! $edit), amisMake()->TextControl()->name('confirm_password')->set('type', 'input-password')->label(__('admin.confirm_password'))->visible(! $edit)->required(! $edit), ]); } public function detail(): Form { return $this->baseDetail()->title('')->body(amisMake()->Property()->items([ ['label' => __('employee.store_id'), 'content' => '${store.title}', 'span' => 3], ['label' => __('employee.avatar'), 'content' => amisMake()->Avatar()->src('${avatar}')], ['label' => __('employee.name'), 'content' => '${name}'], ['label' => __('admin.username'), 'content' => '${admin_user.username}'], ['label' => __('employee.phone'), 'content' => '${phone}'], ['label' => __('employee.jobs'), 'content' => amisMake()->Each()->name('jobs')->items(amisMake()->Tag()->label('${name}'))], ['label' => __('employee.employee_status'), 'content' => amisMake()->Tag()->label('${employee_status_text}')->color('${employee_status_color}')], ['label' => __('employee.join_at'), 'content' => '${join_at}'], ['label' => __('employee.leave_at'), 'content' => '${leave_at}'], ['label' => __('employee.remarks'), 'content' => '${remarks}'], ['label' => __('employee.prize_images'), 'content' => amisMake()->Images()->source('${prize_images}')->enlargeAble(), 'span' => 3], ['label' => __('employee.skill_images'), 'content' => amisMake()->Images()->source('${skill_images}')->enlargeAble(), 'span' => 3], ])); } // 员工离职 public function leave($id, Request $request) { $user = Employee::findOrFail($id); if ($this->service->leave($user, $request->only(['leave_at']))) { return $this->response()->success(null, '操作成功'); } return $this->response()->fail($this->service->getError()); } public function shareList() { return $this->service->listQuery()->get(['id', 'name', 'phone']); } protected function exportFileName() { return '员工记录'; } protected function exportMap($row) { $jobs = data_get($row, 'jobs', []); return [ __('employee.id') => data_get($row, 'id'), __('employee.name') => data_get($row, 'name'), __('employee.jobs') => data_get($row, 'name'), __('employee.jobs') => implode(',', array_column($jobs, 'name')), __('employee.phone') => data_get($row, 'phone'), __('employee.employee_status') => data_get($row, 'employee_status_text'), __('employee.store_id') => data_get($row, 'store.title'), __('employee.remarks') => data_get($row, 'remarks'), __('employee.is_sign') => data_get($row, 'is_sign') ? '是' : '否', ]; } }