From 264b7557955cd2cf441e7c66504fa681370ab1ae Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Wed, 27 Mar 2024 11:11:26 +0800 Subject: [PATCH] =?UTF-8?q?admin=20=E5=AD=97=E5=85=B8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/BaseKeywordController.php | 51 +++++++++++++++++++ app/Admin/Filters/KeywordFilter.php | 5 ++ app/Admin/Services/KeywordService.php | 2 +- app/Admin/routes.php | 9 ++++ app/Models/Keyword.php | 5 ++ ...3_26_131034_create_store_devices_table.php | 2 +- database/seeders/AdminPermissionSeeder.php | 33 ++++++++++-- lang/zh_CN/keyword.php | 15 ++++++ 8 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 app/Admin/Controllers/BaseKeywordController.php create mode 100644 lang/zh_CN/keyword.php diff --git a/app/Admin/Controllers/BaseKeywordController.php b/app/Admin/Controllers/BaseKeywordController.php new file mode 100644 index 0000000..c51f65d --- /dev/null +++ b/app/Admin/Controllers/BaseKeywordController.php @@ -0,0 +1,51 @@ +baseCRUD() + ->loadDataOnce(true) + ->footerToolbar([]) + ->headerToolbar([ + $this->createButton(true), + ...$this->baseHeaderToolBar(), + ]) + ->columns([ + amisMake()->TableColumn()->name('id')->label(__('keyword.id')), + amisMake()->TableColumn()->name('name')->label(__('keyword.name')), + amisMake()->TableColumn()->name('key')->label(__('keyword.key'))->copyable(true), + amisMake()->TableColumn()->name('value')->label(__('keyword.value')), + amisMake()->TableColumn()->name('sort')->label(__('keyword.sort')), + amisMake()->Operation()->label(__('admin.actions'))->buttons([ + $this->rowEditButton(true), + $this->rowDeleteButton(), + ]), + ]); + + return $this->baseList($crud); + } + + public function form(): Form + { + return $this->baseForm()->body([ + amisMake()->TreeSelectControl()->name('parent_id')->label(__('keyword.parent_id')) + ->source(admin_url('api/keywords/tree-list?with_parent_key='.request()->input('parent_key'))) + ->labelField('name') + ->valueField('id') + ->required(true), + amisMake()->TextControl()->name('name')->label('名称')->required(true), + amisMake()->TextControl()->name('key')->label('KEY')->required(true), + amisMake()->TextControl()->name('value')->label('值'), + amisMake()->NumberControl()->name('sort')->value(0)->min()->label(__('keyword.sort')), + ]); + } +} diff --git a/app/Admin/Filters/KeywordFilter.php b/app/Admin/Filters/KeywordFilter.php index 6e5695a..f5f4326 100644 --- a/app/Admin/Filters/KeywordFilter.php +++ b/app/Admin/Filters/KeywordFilter.php @@ -34,4 +34,9 @@ class KeywordFilter extends ModelFilter { return $this->where('parent_key', $key); } + + public function withParentKey($key) + { + return $this->where(fn($q) => $q->where('parent_key', $key)->orWhere('key', $key)); + } } diff --git a/app/Admin/Services/KeywordService.php b/app/Admin/Services/KeywordService.php index 39a8768..3fa2cc7 100644 --- a/app/Admin/Services/KeywordService.php +++ b/app/Admin/Services/KeywordService.php @@ -18,7 +18,7 @@ class KeywordService extends BaseService public function getTree() { - $list = $this->query()->filter(request()->all(), $this->modelFilterName)->get(); + $list = $this->query()->sort()->filter(request()->all(), $this->modelFilterName)->get(); $minNum = $list->min('parent_id'); return ! $list->isEmpty() ? array2tree($list->toArray(), $minNum) : []; diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 75316e4..026d0df 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -8,6 +8,7 @@ use App\Admin\Controllers\System\AdminMenuController; use App\Admin\Controllers\System\AdminPermissionController; use App\Admin\Controllers\System\AdminRoleController; use App\Admin\Controllers\System\AdminUserController; +use App\Admin\Controllers\BaseKeywordController; use App\Admin\Controllers\System\KeywordController; use Illuminate\Routing\Router; use Illuminate\Support\Facades\Route; @@ -37,6 +38,14 @@ Route::group([ $router->resource('employees', StoreEmployeeController::class); // 彩票机管理 $router->resource('devices', DeviceController::class); + // 门店分类 + $router->resource('categories', BaseKeywordController::class); + // 门店等级 + $router->resource('levels', BaseKeywordController::class); + // 经营类别 + $router->resource('business', BaseKeywordController::class); + // 彩种类型 + $router->resource('lottery-types', BaseKeywordController::class); }); diff --git a/app/Models/Keyword.php b/app/Models/Keyword.php index db24225..91890bd 100644 --- a/app/Models/Keyword.php +++ b/app/Models/Keyword.php @@ -60,6 +60,11 @@ class Keyword extends Model return $this->hasMany(static::class, 'parent_id'); } + public function scopeSort($q) + { + return $q->orderBy('sort', 'asc'); + } + public function scopeAllChildrenOfKey($q, $parentKey) { $q->where('path', 'like', '%-'. diff --git a/database/migrations/2024_03_26_131034_create_store_devices_table.php b/database/migrations/2024_03_26_131034_create_store_devices_table.php index 689a540..cfd4d7a 100644 --- a/database/migrations/2024_03_26_131034_create_store_devices_table.php +++ b/database/migrations/2024_03_26_131034_create_store_devices_table.php @@ -18,7 +18,7 @@ return new class extends Migration $table->string('code')->comment('编号'); $table->string('remarks')->nullable()->comment('备注'); $table->timestamps(); - $table->comment('设备管理'); + $table->comment('彩票机管理'); }); } diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 6e79180..41364db 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -15,6 +15,8 @@ class AdminPermissionSeeder extends Seeder */ public function run() { + // AdminMenu::truncate(); + // AdminPermission::truncate(); $data = [ /* |-------------------------------------------------------------------------- @@ -50,12 +52,36 @@ class AdminPermissionSeeder extends Seeder 'uri' => '/store/employees', 'resource' => true, ], + 'categories' => [ + 'name' => '门店分类', + 'icon' => '', + 'uri' => '/store/categories?parent_key=store_category', + 'resource' => false, + ], + 'levels' => [ + 'name' => '门店等级', + 'icon' => '', + 'uri' => '/store/levels?parent_key=store_levels', + 'resource' => false, + ], + 'business' => [ + 'name' => '经营类别', + 'icon' => '', + 'uri' => '/store/business?parent_key=store_business', + 'resource' => false, + ], 'devices' => [ 'name' => '彩票机管理', 'icon' => '', 'uri' => '/store/devices', 'resource' => true, - ] + ], + 'lottery-types' => [ + 'name' => '彩种类型', + 'icon' => '', + 'uri' => '/store/lottery-types?parent_key=lottery_type', + 'resource' => true, + ], ], ], @@ -146,17 +172,18 @@ class AdminPermissionSeeder extends Seeder public function handleAdminMenus(array $data, ?AdminMenu $parent = null): void { + $sort = 0; foreach ($data as $slug => $node) { if (! is_array($node) || ! array_key_exists('uri', $node)) { continue; } - + $sort++; /** @var \Slowlyo\OwlAdmin\Models\AdminMenu */ $menu = AdminMenu::updateOrCreate([ 'slug' => ($parent->slug ?? 'admin').'.'.$slug, ], [ 'parent_id' => $parent->id ?? 0, - 'order' => $node['order'] ?? 0, + 'order' => $sort, 'title' => $node['name'], 'icon' => $node['icon'], 'url' => $node['uri'], diff --git a/lang/zh_CN/keyword.php b/lang/zh_CN/keyword.php new file mode 100644 index 0000000..d6a96b5 --- /dev/null +++ b/lang/zh_CN/keyword.php @@ -0,0 +1,15 @@ + 'ID', + 'created_at' => '创建时间', + 'updated_at' => '更新时间', + 'name' => '名称', + 'key' => 'KEY', + 'value' => 'VALUE', + 'parent_id' => '上级', + 'parent_key' => '上级', + 'path' => '上级', + 'sort' => '排序', + 'lv' => '层级', +];