store-manage/app/Admin/Controllers/Store/EmployeeController.php

96 lines
3.9 KiB
PHP

<?php
namespace App\Admin\Controllers\Store;
use App\Admin\Controllers\AdminController;
use App\Admin\Services\StoreEmployeeService;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page;
/**
* 店员管理
*/
class EmployeeController extends AdminController
{
protected string $serviceName = StoreEmployeeService::class;
public function list(): Page
{
$user = Admin::user();
$crud = $this->baseCRUD()
->tableLayout('fixed')
->headerToolbar([
$this->createTypeButton('drawer', 'lg')->visible($user->can('admin.store.employees.create')),
...$this->baseHeaderToolBar(),
$this->exportAction(true),
])
->bulkActions([])
->filter($this->baseFilter()->body([
amis()->GroupControl()->mode('horizontal')->body([
amisMake()->SelectControl()->name('store_id')->label(__('employee.store_id'))
->source(admin_url('api/stores?_all=1'))
->labelField('title')
->valueField('id')
->columnRatio(3)
->clearable(),
amisMake()->TextControl()->name('search')->label(__('store.employees'))->placeholder('姓名/电话')->columnRatio(3)->clearable(),
]),
]))
->filterDefaultVisible()
->columns([
amisMake()->TableColumn()->name('store.title')->label(__('employee.store_id')),
amisMake()->TableColumn()->name('admin_user.username')->label(__('admin.username'))->copyable(),
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('store.master_id')->label(__('store.master_id'))->set('type', 'tpl')->tpl('${store.master_id == id ? "店长" : "--"}'),
amisMake()->TableColumn()->name('phone')->label(__('employee.phone'))->copyable(),
$this->rowActions([
$this->rowDeleteButton()->hiddenOn('${store.master_id == id}')->visible($user->can('admin.store.employees.delete')),
]),
]);
return $this->baseList($crud);
}
public function form($edit): Form
{
return $this->baseForm()->title('')->body([
amisMake()->SelectControl()->name('store_id')->label(__('employee.store_id'))
->source(admin_url('api/stores?_all=1'))
->labelField('title')
->valueField('id')
->searchable()
->required(),
amisMake()->SelectControl()->name('employee_id')->label(__('store.employees'))
->source(admin_url('api/employees?_all=1&store_id=0&enable=1'))
->labelField('name')
->valueField('id')
->multiple()
->joinValues(false)
->extractValue()
->searchable()
->required(),
]);
}
protected function exportFileName()
{
return '店员记录';
}
protected function exportMap($row)
{
$jobs = data_get($row, 'jobs', []);
return [
__('employee.store_id') => data_get($row, 'store.title'),
__('admin.username') => data_get($row, 'admin_user.username'),
__('employee.name') => data_get($row, 'name'),
__('employee.jobs') => implode(',', array_column($jobs, 'name')),
__('employee.phone') => data_get($row, 'phone'),
__('store.master_id') => data_get($row, 'store.master_id') == data_get($row, 'id') ? '是' : '否',
];
}
}