admin 添加和修改 改为 drawer

main
panliang 2024-03-28 16:38:58 +08:00
parent 5359f742e4
commit 418f8489d5
14 changed files with 81 additions and 48 deletions

View File

@ -16,7 +16,7 @@
- `php artisan storage:link` - `php artisan storage:link`
- `vim .env` - `vim .env`
``` ```
APP_URL=http://local.lottery.host APP_URL=http://store-manage.hmily.club
DB_HOST=127.0.0.1 DB_HOST=127.0.0.1
DB_PORT=3306 DB_PORT=3306
DB_DATABASE=lottery DB_DATABASE=lottery
@ -24,3 +24,4 @@ DB_USERNAME=root
DB_PASSWORD=123456 DB_PASSWORD=123456
``` ```
- `php artisan migrate --seed` - `php artisan migrate --seed`
- 目录 `./bootstrap/cache``./storage` 需要写入权限

View File

@ -8,12 +8,14 @@ use Illuminate\Validation\ValidationException;
use Slowlyo\OwlAdmin\Controllers\AdminController as Controller; use Slowlyo\OwlAdmin\Controllers\AdminController as Controller;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Throwable; use Throwable;
use App\Traits\CustomActionTrait;
/** /**
* @property \App\Admin\Services\BaseService $service * @property \App\Admin\Services\BaseService $service
*/ */
abstract class AdminController extends Controller abstract class AdminController extends Controller
{ {
use CustomActionTrait;
public function update(Request $request) public function update(Request $request)
{ {
$input = $request->all(); $input = $request->all();

View File

@ -16,8 +16,8 @@ class BaseKeywordController extends AdminController
->loadDataOnce(true) ->loadDataOnce(true)
->footerToolbar([]) ->footerToolbar([])
->headerToolbar([ ->headerToolbar([
$this->createButton(true), $this->createTypeButton('drawer', 'xl'),
...$this->baseHeaderToolBar(), amis('reload')->align('right'),
]) ])
->columns([ ->columns([
amisMake()->TableColumn()->name('id')->label(__('keyword.id')), amisMake()->TableColumn()->name('id')->label(__('keyword.id')),
@ -26,7 +26,7 @@ class BaseKeywordController extends AdminController
amisMake()->TableColumn()->name('value')->label(__('keyword.value')), amisMake()->TableColumn()->name('value')->label(__('keyword.value')),
amisMake()->TableColumn()->name('sort')->label(__('keyword.sort')), amisMake()->TableColumn()->name('sort')->label(__('keyword.sort')),
amisMake()->Operation()->label(__('admin.actions'))->buttons([ amisMake()->Operation()->label(__('admin.actions'))->buttons([
$this->rowEditButton(true), $this->rowEditTypeButton('drawer', 'xl'),
$this->rowDeleteButton(), $this->rowDeleteButton(),
]), ]),
]); ]);

View File

@ -20,7 +20,7 @@ class EmployeeController extends AdminController
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
->tableLayout('fixed') ->tableLayout('fixed')
->headerToolbar([ ->headerToolbar([
$this->createButton(true)->visible(Admin::user()->can('admin.hr.employees.create')), $this->createTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.employees.create')),
...$this->baseHeaderToolBar(), ...$this->baseHeaderToolBar(),
]) ])
->bulkActions([]) ->bulkActions([])
@ -41,7 +41,7 @@ class EmployeeController extends AdminController
amisMake()->TableColumn()->name('remarks')->label(__('employee.remarks')), amisMake()->TableColumn()->name('remarks')->label(__('employee.remarks')),
$this->rowActions([ $this->rowActions([
$this->rowShowButton()->visible(Admin::user()->can('admin.hr.employees.view')), $this->rowShowButton()->visible(Admin::user()->can('admin.hr.employees.view')),
$this->rowEditButton(true)->visible(Admin::user()->can('admin.hr.employees.update')), $this->rowEditTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.employees.update')),
$this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.employees.delete')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.employees.delete')),
amisMake()->AjaxAction() amisMake()->AjaxAction()
->label(__('employee.leave')) ->label(__('employee.leave'))

View File

@ -7,6 +7,7 @@ use App\Admin\Services\EmployeeRestService;
use App\Enums\EmployeeStatus; use App\Enums\EmployeeStatus;
use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Admin;
/** /**
* 休息管理 * 休息管理
@ -20,7 +21,7 @@ class RestController extends AdminController
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
->tableLayout('fixed') ->tableLayout('fixed')
->headerToolbar([ ->headerToolbar([
$this->createButton(true, 'lg'), $this->createTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.rests.create')),
...$this->baseHeaderToolBar(), ...$this->baseHeaderToolBar(),
]) ])
->bulkActions([]) ->bulkActions([])
@ -35,7 +36,7 @@ class RestController extends AdminController
// amisMake()->TableColumn()->name('employee.phone')->label(__('employee.phone')), // amisMake()->TableColumn()->name('employee.phone')->label(__('employee.phone')),
amisMake()->TableColumn()->name('date')->label(__('employee_sign.date')), amisMake()->TableColumn()->name('date')->label(__('employee_sign.date')),
$this->rowActions([ $this->rowActions([
$this->rowDeleteButton(), $this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.rests.delete')),
]), ]),
]); ]);

View File

@ -7,6 +7,7 @@ use App\Admin\Services\EmployeeSignService;
use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\Page;
use App\Enums\{SignType, SignStatus}; use App\Enums\{SignType, SignStatus};
use Slowlyo\OwlAdmin\Admin;
/** /**
* 考勤打卡 * 考勤打卡
@ -17,7 +18,6 @@ class SignController extends AdminController
public function list(): Page public function list(): Page
{ {
// $this->service->signResult();
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
->tableLayout('fixed') ->tableLayout('fixed')
->headerToolbar([ ->headerToolbar([
@ -48,7 +48,7 @@ class SignController extends AdminController
->source(SignStatus::source()), ->source(SignStatus::source()),
amisMake()->TableColumn()->name('remarks')->label(__('employee_sign.remarks')), amisMake()->TableColumn()->name('remarks')->label(__('employee_sign.remarks')),
$this->rowActions([ $this->rowActions([
$this->rowShowButton(), $this->rowShowButton()->visible(Admin::user()->can('admin.hr.signs.view')),
]), ]),
]); ]);

View File

@ -20,7 +20,7 @@ class DeviceController extends AdminController
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
->tableLayout('fixed') ->tableLayout('fixed')
->headerToolbar([ ->headerToolbar([
$this->createButton(true)->visible(Admin::user()->can('admin.store.devices.create')), $this->createTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.store.devices.create')),
...$this->baseHeaderToolBar(), ...$this->baseHeaderToolBar(),
]) ])
->bulkActions([]) ->bulkActions([])
@ -43,7 +43,7 @@ class DeviceController extends AdminController
amisMake()->TableColumn()->name('remarks')->label(__('store_device.remarks')), amisMake()->TableColumn()->name('remarks')->label(__('store_device.remarks')),
amisMake()->TableColumn()->name('created_at')->label(__('store_device.created_at')), amisMake()->TableColumn()->name('created_at')->label(__('store_device.created_at')),
$this->rowActions([ $this->rowActions([
$this->rowEditButton(true)->visible(Admin::user()->can('admin.store.devices.update')), $this->rowEditTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.store.devices.update')),
$this->rowDeleteButton()->visible(Admin::user()->can('admin.store.devices.delete')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.store.devices.delete')),
]), ]),
]); ]);

View File

@ -17,10 +17,11 @@ class EmployeeController extends AdminController
public function list(): Page public function list(): Page
{ {
$user = Admin::user();
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
->tableLayout('fixed') ->tableLayout('fixed')
->headerToolbar([ ->headerToolbar([
$this->createButton(true)->visible(Admin::user()->can('admin.store.employees.create')), $this->createTypeButton('drawer', 'xl')->visible($user->can('admin.store.employees.create')),
...$this->baseHeaderToolBar(), ...$this->baseHeaderToolBar(),
]) ])
->bulkActions([]) ->bulkActions([])
@ -39,10 +40,10 @@ class EmployeeController extends AdminController
amisMake()->TableColumn()->name('id')->label(__('employee.id')), amisMake()->TableColumn()->name('id')->label(__('employee.id')),
amisMake()->TableColumn()->name('store.title')->label(__('employee.store_id')), amisMake()->TableColumn()->name('store.title')->label(__('employee.store_id')),
amisMake()->TableColumn()->name('name')->label(__('employee.name')), amisMake()->TableColumn()->name('name')->label(__('employee.name')),
amisMake()->TableColumn()->name('store.master_id')->label(__('store.master_id'))->set('type', 'tpl')->tpl('${store.master_id == id ? "店长" : "--"}'), // 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')), amisMake()->TableColumn()->name('phone')->label(__('employee.phone')),
$this->rowActions([ $this->rowActions([
$this->rowDeleteButton()->visible(Admin::user()->can('admin.store.employees.delete')), $this->rowDeleteButton()->visible($user->can('admin.store.employees.delete')),
]), ]),
]); ]);

View File

@ -20,10 +20,11 @@ class StoreController extends AdminController
public function list(): Page public function list(): Page
{ {
$user = Admin::user();
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
->tableLayout('fixed') ->tableLayout('fixed')
->headerToolbar([ ->headerToolbar([
$this->createButton()->visible(Admin::user()->can('admin.store.stores.create')), $this->createTypeButton('drawer', 'xl')->visible($user->can('admin.store.stores.create')),
...$this->baseHeaderToolBar(), ...$this->baseHeaderToolBar(),
]) ])
->bulkActions([]) ->bulkActions([])
@ -66,9 +67,9 @@ class StoreController extends AdminController
amisMake()->TableColumn()->name('business_status')->label(__('store.business_status'))->type('switch')->trueValue(BusinessStatus::Open)->falseValue(BusinessStatus::Close), amisMake()->TableColumn()->name('business_status')->label(__('store.business_status'))->type('switch')->trueValue(BusinessStatus::Open)->falseValue(BusinessStatus::Close),
amisMake()->TableColumn()->name('created_at')->label(__('store.created_at')), amisMake()->TableColumn()->name('created_at')->label(__('store.created_at')),
$this->rowActions([ $this->rowActions([
$this->rowShowButton()->visible(Admin::user()->can('admin.store.stores.view')), $this->rowShowButton()->visible($user->can('admin.store.stores.view')),
$this->rowEditButton()->visible(Admin::user()->can('admin.store.stores.update')), $this->rowEditTypeButton('drawer', 'xl')->visible($user->can('admin.store.stores.update')),
$this->rowDeleteButton()->visible(Admin::user()->can('admin.store.stores.delete')), $this->rowDeleteButton()->visible($user->can('admin.store.stores.delete')),
]), ]),
]); ]);
@ -80,7 +81,7 @@ class StoreController extends AdminController
return $this->baseForm()->title('')->body([ return $this->baseForm()->title('')->body([
amisMake()->TextControl()->name('title')->label(__('store.title'))->required(), amisMake()->TextControl()->name('title')->label(__('store.title'))->required(),
amisMake()->SelectControl()->name('master_id')->label(__('store.master_id')) amisMake()->SelectControl()->name('master_id')->label(__('store.master_id'))
->source(admin_url('api/employees?_all=1&employee_status='.EmployeeStatus::Online->value)) ->source($edit ? admin_url('api/employees?_all=1&employee_status='.EmployeeStatus::Online->value) : admin_url('api/employees?_all=1&store_id=0&employee_status='.EmployeeStatus::Online->value))
->labelField('name') ->labelField('name')
->valueField('id') ->valueField('id')
->searchable() ->searchable()

View File

@ -17,6 +17,44 @@ class StoreService extends BaseService
protected string $modelFilterName = StoreFilter::class; protected string $modelFilterName = StoreFilter::class;
public function store($data): bool
{
$data = $this->resloveData($data);
$validate = $this->validate($data);
if ($validate !== true) {
$this->setError($validate);
return false;
}
$model = $this->modelName::create($data);
// 绑定店长
// Employee::where('id', $data['master_id'])->update(['store_id' => $model->id]);
return true;
}
public function update($primaryKey, $data): bool
{
$model = $this->query()->whereKey($primaryKey)->firstOrFail();
$data = $this->resloveData($data, $model);
$validate = $this->validate($data, $model);
if ($validate !== true) {
$this->setError($validate);
return false;
}
// 还原以前的店长
// if (isset($data['master_id']) && $model->master_id != $data['master_id']) {
// Employee::where('id', $model->master_id)->update(['store_id' => 0]);
// }
return $model->update($data);
}
public function resloveData($data, $model = null) public function resloveData($data, $model = null)
{ {
if (isset($data['location'])) { if (isset($data['location'])) {
@ -25,17 +63,6 @@ class StoreService extends BaseService
$data['address'] = data_get($data['location'], 'address'); $data['address'] = data_get($data['location'], 'address');
} }
// 绑定店长
if (isset($data['master_id'])) {
// 还原以前的店长
if ($model && $model->master_id != $data['master_id']) {
Employee::where('id', $model->master_id)->update(['store_id' => 0]);
}
if ($model->master_id != $data['master_id']) {
Employee::where('id', $data['master_id'])->update(['store_id' => $model->id]);
}
}
return $data; return $data;
} }

View File

@ -39,7 +39,7 @@ Route::group([
// 门店管理 // 门店管理
$router->resource('stores', StoreController::class); $router->resource('stores', StoreController::class);
// 店员管理 // 店员管理
$router->resource('employees', StoreEmployeeController::class); $router->resource('employees', StoreEmployeeController::class)->only(['index', 'store', 'destroy']);
// 彩票机管理 // 彩票机管理
$router->resource('devices', DeviceController::class); $router->resource('devices', DeviceController::class);
// 门店分类 // 门店分类

View File

@ -39,7 +39,7 @@ class StoreFactory extends Factory
{ {
return $this->afterMaking(function (Store $model) { return $this->afterMaking(function (Store $model) {
})->afterCreating(function (Store $model) { })->afterCreating(function (Store $model) {
Employee::where('id', $model->master_id)->update(['store_id' => $model->id]); // Employee::where('id', $model->master_id)->update(['store_id' => $model->id]);
}); });
} }
} }

View File

@ -50,25 +50,25 @@ class AdminPermissionSeeder extends Seeder
'name' => '店员管理', 'name' => '店员管理',
'icon' => '', 'icon' => '',
'uri' => '/store/employees', 'uri' => '/store/employees',
'resource' => true, 'resource' => ['list', 'create', 'delete'],
], ],
'categories' => [ 'categories' => [
'name' => '门店分类', 'name' => '门店分类',
'icon' => '', 'icon' => '',
'uri' => '/store/categories?parent_key=store_category', 'uri' => '/store/categories?parent_key=store_category',
'resource' => false, 'resource' => true,
], ],
'levels' => [ 'levels' => [
'name' => '门店等级', 'name' => '门店等级',
'icon' => '', 'icon' => '',
'uri' => '/store/levels?parent_key=store_levels', 'uri' => '/store/levels?parent_key=store_levels',
'resource' => false, 'resource' => true,
], ],
'business' => [ 'business' => [
'name' => '经营类别', 'name' => '经营类别',
'icon' => '', 'icon' => '',
'uri' => '/store/business?parent_key=store_business', 'uri' => '/store/business?parent_key=store_business',
'resource' => false, 'resource' => true,
], ],
'devices' => [ 'devices' => [
'name' => '彩票机管理', 'name' => '彩票机管理',
@ -80,7 +80,7 @@ class AdminPermissionSeeder extends Seeder
'name' => '彩种类型', 'name' => '彩种类型',
'icon' => '', 'icon' => '',
'uri' => '/store/lottery-types?parent_key=lottery_type', 'uri' => '/store/lottery-types?parent_key=lottery_type',
'resource' => false, 'resource' => true,
], ],
], ],
], ],
@ -108,7 +108,7 @@ class AdminPermissionSeeder extends Seeder
'name' => '职位管理', 'name' => '职位管理',
'icon' => '', 'icon' => '',
'uri' => '/hr/jobs?parent_key=job', 'uri' => '/hr/jobs?parent_key=job',
'resource' => false, 'resource' => true,
], ],
'rests' => [ 'rests' => [
'name' => '休息管理', 'name' => '休息管理',

View File

@ -16,15 +16,15 @@ class EmployeeSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// DB::table('employee_jobs')->truncate(); DB::table('employee_jobs')->truncate();
// Employee::truncate(); Employee::truncate();
// (new EmployeeFactory)->count(100)->create(['admin_user_id' => 1]); (new EmployeeFactory)->count(100)->create(['admin_user_id' => 1]);
// Store::truncate(); Store::truncate();
// Store::factory()->count(10)->create(); Store::factory()->count(10)->create();
EmployeeSign::truncate(); // EmployeeSign::truncate();
EmployeeSignLog::truncate(); // EmployeeSignLog::truncate();
EmployeeSignLog::factory()->count(100)->create(); // EmployeeSignLog::factory()->count(100)->create();
} }
} }