diff --git a/README.md b/README.md index feb18ba..2e21119 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,12 @@ - `php artisan storage:link` - `vim .env` ``` -APP_URL=http://local.lottery.host +APP_URL=http://store-manage.hmily.club DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=lottery DB_USERNAME=root DB_PASSWORD=123456 ``` -- `php artisan migrate --seed` \ No newline at end of file +- `php artisan migrate --seed` +- 目录 `./bootstrap/cache` 和 `./storage` 需要写入权限 \ No newline at end of file diff --git a/app/Admin/Controllers/AdminController.php b/app/Admin/Controllers/AdminController.php index b39ea49..ad5abd0 100644 --- a/app/Admin/Controllers/AdminController.php +++ b/app/Admin/Controllers/AdminController.php @@ -8,12 +8,14 @@ use Illuminate\Validation\ValidationException; use Slowlyo\OwlAdmin\Controllers\AdminController as Controller; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Throwable; +use App\Traits\CustomActionTrait; /** * @property \App\Admin\Services\BaseService $service */ abstract class AdminController extends Controller { + use CustomActionTrait; public function update(Request $request) { $input = $request->all(); diff --git a/app/Admin/Controllers/BaseKeywordController.php b/app/Admin/Controllers/BaseKeywordController.php index c51f65d..70f91e0 100644 --- a/app/Admin/Controllers/BaseKeywordController.php +++ b/app/Admin/Controllers/BaseKeywordController.php @@ -16,8 +16,8 @@ class BaseKeywordController extends AdminController ->loadDataOnce(true) ->footerToolbar([]) ->headerToolbar([ - $this->createButton(true), - ...$this->baseHeaderToolBar(), + $this->createTypeButton('drawer', 'xl'), + amis('reload')->align('right'), ]) ->columns([ 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('sort')->label(__('keyword.sort')), amisMake()->Operation()->label(__('admin.actions'))->buttons([ - $this->rowEditButton(true), + $this->rowEditTypeButton('drawer', 'xl'), $this->rowDeleteButton(), ]), ]); diff --git a/app/Admin/Controllers/Hr/EmployeeController.php b/app/Admin/Controllers/Hr/EmployeeController.php index 6538dc4..56c7df0 100644 --- a/app/Admin/Controllers/Hr/EmployeeController.php +++ b/app/Admin/Controllers/Hr/EmployeeController.php @@ -20,7 +20,7 @@ class EmployeeController extends AdminController $crud = $this->baseCRUD() ->tableLayout('fixed') ->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(), ]) ->bulkActions([]) @@ -41,7 +41,7 @@ class EmployeeController extends AdminController amisMake()->TableColumn()->name('remarks')->label(__('employee.remarks')), $this->rowActions([ $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')), amisMake()->AjaxAction() ->label(__('employee.leave')) diff --git a/app/Admin/Controllers/Hr/RestController.php b/app/Admin/Controllers/Hr/RestController.php index bec5812..e58c468 100644 --- a/app/Admin/Controllers/Hr/RestController.php +++ b/app/Admin/Controllers/Hr/RestController.php @@ -7,6 +7,7 @@ use App\Admin\Services\EmployeeRestService; use App\Enums\EmployeeStatus; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; +use Slowlyo\OwlAdmin\Admin; /** * 休息管理 @@ -20,7 +21,7 @@ class RestController extends AdminController $crud = $this->baseCRUD() ->tableLayout('fixed') ->headerToolbar([ - $this->createButton(true, 'lg'), + $this->createTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.rests.create')), ...$this->baseHeaderToolBar(), ]) ->bulkActions([]) @@ -35,7 +36,7 @@ class RestController extends AdminController // amisMake()->TableColumn()->name('employee.phone')->label(__('employee.phone')), amisMake()->TableColumn()->name('date')->label(__('employee_sign.date')), $this->rowActions([ - $this->rowDeleteButton(), + $this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.rests.delete')), ]), ]); diff --git a/app/Admin/Controllers/Hr/SignController.php b/app/Admin/Controllers/Hr/SignController.php index a8aad77..9f1846b 100644 --- a/app/Admin/Controllers/Hr/SignController.php +++ b/app/Admin/Controllers/Hr/SignController.php @@ -7,6 +7,7 @@ use App\Admin\Services\EmployeeSignService; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; use App\Enums\{SignType, SignStatus}; +use Slowlyo\OwlAdmin\Admin; /** * 考勤打卡 @@ -17,7 +18,6 @@ class SignController extends AdminController public function list(): Page { - // $this->service->signResult(); $crud = $this->baseCRUD() ->tableLayout('fixed') ->headerToolbar([ @@ -48,7 +48,7 @@ class SignController extends AdminController ->source(SignStatus::source()), amisMake()->TableColumn()->name('remarks')->label(__('employee_sign.remarks')), $this->rowActions([ - $this->rowShowButton(), + $this->rowShowButton()->visible(Admin::user()->can('admin.hr.signs.view')), ]), ]); diff --git a/app/Admin/Controllers/Store/DeviceController.php b/app/Admin/Controllers/Store/DeviceController.php index 43c8af1..dada753 100644 --- a/app/Admin/Controllers/Store/DeviceController.php +++ b/app/Admin/Controllers/Store/DeviceController.php @@ -20,7 +20,7 @@ class DeviceController extends AdminController $crud = $this->baseCRUD() ->tableLayout('fixed') ->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(), ]) ->bulkActions([]) @@ -43,7 +43,7 @@ class DeviceController extends AdminController amisMake()->TableColumn()->name('remarks')->label(__('store_device.remarks')), amisMake()->TableColumn()->name('created_at')->label(__('store_device.created_at')), $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')), ]), ]); diff --git a/app/Admin/Controllers/Store/EmployeeController.php b/app/Admin/Controllers/Store/EmployeeController.php index fc91dcc..eb25642 100644 --- a/app/Admin/Controllers/Store/EmployeeController.php +++ b/app/Admin/Controllers/Store/EmployeeController.php @@ -17,10 +17,11 @@ class EmployeeController extends AdminController public function list(): Page { + $user = Admin::user(); $crud = $this->baseCRUD() ->tableLayout('fixed') ->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(), ]) ->bulkActions([]) @@ -39,10 +40,10 @@ class EmployeeController extends AdminController amisMake()->TableColumn()->name('id')->label(__('employee.id')), amisMake()->TableColumn()->name('store.title')->label(__('employee.store_id')), 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')), $this->rowActions([ - $this->rowDeleteButton()->visible(Admin::user()->can('admin.store.employees.delete')), + $this->rowDeleteButton()->visible($user->can('admin.store.employees.delete')), ]), ]); diff --git a/app/Admin/Controllers/Store/StoreController.php b/app/Admin/Controllers/Store/StoreController.php index 8fdc2cf..e5a011f 100644 --- a/app/Admin/Controllers/Store/StoreController.php +++ b/app/Admin/Controllers/Store/StoreController.php @@ -20,10 +20,11 @@ class StoreController extends AdminController public function list(): Page { + $user = Admin::user(); $crud = $this->baseCRUD() ->tableLayout('fixed') ->headerToolbar([ - $this->createButton()->visible(Admin::user()->can('admin.store.stores.create')), + $this->createTypeButton('drawer', 'xl')->visible($user->can('admin.store.stores.create')), ...$this->baseHeaderToolBar(), ]) ->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('created_at')->label(__('store.created_at')), $this->rowActions([ - $this->rowShowButton()->visible(Admin::user()->can('admin.store.stores.view')), - $this->rowEditButton()->visible(Admin::user()->can('admin.store.stores.update')), - $this->rowDeleteButton()->visible(Admin::user()->can('admin.store.stores.delete')), + $this->rowShowButton()->visible($user->can('admin.store.stores.view')), + $this->rowEditTypeButton('drawer', 'xl')->visible($user->can('admin.store.stores.update')), + $this->rowDeleteButton()->visible($user->can('admin.store.stores.delete')), ]), ]); @@ -80,7 +81,7 @@ class StoreController extends AdminController return $this->baseForm()->title('')->body([ amisMake()->TextControl()->name('title')->label(__('store.title'))->required(), 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') ->valueField('id') ->searchable() diff --git a/app/Admin/Services/StoreService.php b/app/Admin/Services/StoreService.php index fd4d49a..db5aa72 100644 --- a/app/Admin/Services/StoreService.php +++ b/app/Admin/Services/StoreService.php @@ -17,6 +17,44 @@ class StoreService extends BaseService 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) { if (isset($data['location'])) { @@ -25,17 +63,6 @@ class StoreService extends BaseService $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; } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index aac5006..816eb40 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -39,7 +39,7 @@ Route::group([ // 门店管理 $router->resource('stores', StoreController::class); // 店员管理 - $router->resource('employees', StoreEmployeeController::class); + $router->resource('employees', StoreEmployeeController::class)->only(['index', 'store', 'destroy']); // 彩票机管理 $router->resource('devices', DeviceController::class); // 门店分类 diff --git a/database/factories/StoreFactory.php b/database/factories/StoreFactory.php index 2f9cc25..e63ecb5 100644 --- a/database/factories/StoreFactory.php +++ b/database/factories/StoreFactory.php @@ -39,7 +39,7 @@ class StoreFactory extends Factory { return $this->afterMaking(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]); }); } } diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 2d2afcb..4cea8df 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -50,25 +50,25 @@ class AdminPermissionSeeder extends Seeder 'name' => '店员管理', 'icon' => '', 'uri' => '/store/employees', - 'resource' => true, + 'resource' => ['list', 'create', 'delete'], ], 'categories' => [ 'name' => '门店分类', 'icon' => '', 'uri' => '/store/categories?parent_key=store_category', - 'resource' => false, + 'resource' => true, ], 'levels' => [ 'name' => '门店等级', 'icon' => '', 'uri' => '/store/levels?parent_key=store_levels', - 'resource' => false, + 'resource' => true, ], 'business' => [ 'name' => '经营类别', 'icon' => '', 'uri' => '/store/business?parent_key=store_business', - 'resource' => false, + 'resource' => true, ], 'devices' => [ 'name' => '彩票机管理', @@ -80,7 +80,7 @@ class AdminPermissionSeeder extends Seeder 'name' => '彩种类型', 'icon' => '', 'uri' => '/store/lottery-types?parent_key=lottery_type', - 'resource' => false, + 'resource' => true, ], ], ], @@ -108,7 +108,7 @@ class AdminPermissionSeeder extends Seeder 'name' => '职位管理', 'icon' => '', 'uri' => '/hr/jobs?parent_key=job', - 'resource' => false, + 'resource' => true, ], 'rests' => [ 'name' => '休息管理', diff --git a/database/seeders/EmployeeSeeder.php b/database/seeders/EmployeeSeeder.php index d6b1782..de92a6e 100644 --- a/database/seeders/EmployeeSeeder.php +++ b/database/seeders/EmployeeSeeder.php @@ -16,15 +16,15 @@ class EmployeeSeeder extends Seeder */ public function run(): void { - // DB::table('employee_jobs')->truncate(); - // Employee::truncate(); - // (new EmployeeFactory)->count(100)->create(['admin_user_id' => 1]); + DB::table('employee_jobs')->truncate(); + Employee::truncate(); + (new EmployeeFactory)->count(100)->create(['admin_user_id' => 1]); - // Store::truncate(); - // Store::factory()->count(10)->create(); + Store::truncate(); + Store::factory()->count(10)->create(); - EmployeeSign::truncate(); - EmployeeSignLog::truncate(); - EmployeeSignLog::factory()->count(100)->create(); + // EmployeeSign::truncate(); + // EmployeeSignLog::truncate(); + // EmployeeSignLog::factory()->count(100)->create(); } }