feat: 統一全系統頁面標題樣式、優化側邊欄與實作角色成員查看功能
This commit is contained in:
@@ -17,6 +17,7 @@ class RoleController extends Controller
|
||||
public function index()
|
||||
{
|
||||
$roles = Role::withCount('users', 'permissions')
|
||||
->with('users:id,name,username')
|
||||
->orderBy('id')
|
||||
->get();
|
||||
|
||||
@@ -44,11 +45,15 @@ class RoleController extends Controller
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'name' => ['required', 'string', 'max:255', 'unique:roles,name'],
|
||||
'display_name' => ['required', 'string', 'max:255'],
|
||||
'permissions' => ['array'],
|
||||
'permissions.*' => ['exists:permissions,name']
|
||||
]);
|
||||
|
||||
$role = Role::create(['name' => $validated['name']]);
|
||||
$role = Role::create([
|
||||
'name' => $validated['name'],
|
||||
'display_name' => $validated['display_name']
|
||||
]);
|
||||
|
||||
if (!empty($validated['permissions'])) {
|
||||
$role->syncPermissions($validated['permissions']);
|
||||
@@ -92,11 +97,15 @@ class RoleController extends Controller
|
||||
|
||||
$validated = $request->validate([
|
||||
'name' => ['required', 'string', 'max:255', Rule::unique('roles', 'name')->ignore($role->id)],
|
||||
'display_name' => ['required', 'string', 'max:255'],
|
||||
'permissions' => ['array'],
|
||||
'permissions.*' => ['exists:permissions,name']
|
||||
]);
|
||||
|
||||
$role->update(['name' => $validated['name']]);
|
||||
$role->update([
|
||||
'name' => $validated['name'],
|
||||
'display_name' => $validated['display_name']
|
||||
]);
|
||||
|
||||
if (isset($validated['permissions'])) {
|
||||
$role->syncPermissions($validated['permissions']);
|
||||
@@ -134,10 +143,15 @@ class RoleController extends Controller
|
||||
$grouped = [];
|
||||
|
||||
foreach ($allPermissions as $permission) {
|
||||
// 假設命名格式為 group.action (例如 products.create)
|
||||
$parts = explode('.', $permission->name);
|
||||
$group = $parts[0];
|
||||
|
||||
$action = $parts[1] ?? '';
|
||||
|
||||
// 特定權限遷移邏輯
|
||||
if ($permission->name === 'inventory.transfer') {
|
||||
$group = 'warehouses'; // 調撥功能移至倉庫管理下
|
||||
}
|
||||
|
||||
if (!isset($grouped[$group])) {
|
||||
$grouped[$group] = [];
|
||||
}
|
||||
@@ -145,22 +159,34 @@ class RoleController extends Controller
|
||||
$grouped[$group][] = $permission;
|
||||
}
|
||||
|
||||
// 翻譯群組名稱 (可選,優化顯示)
|
||||
$groupNames = [
|
||||
// 依照側邊欄順序定義
|
||||
$groupDefinitions = [
|
||||
'products' => '商品資料管理',
|
||||
'vendors' => '廠商資料管理',
|
||||
'purchase_orders' => '採購單管理',
|
||||
'warehouses' => '倉庫管理',
|
||||
'inventory' => '庫存管理',
|
||||
'vendors' => '廠商資料管理',
|
||||
'purchase_orders' => '採購單管理',
|
||||
'users' => '使用者管理',
|
||||
'roles' => '角色權限管理',
|
||||
'roles' => '角色與權限',
|
||||
];
|
||||
|
||||
$result = [];
|
||||
foreach ($groupDefinitions as $key => $displayName) {
|
||||
if (isset($grouped[$key])) {
|
||||
$result[] = [
|
||||
'key' => $key,
|
||||
'name' => $displayName,
|
||||
'permissions' => $grouped[$key]
|
||||
];
|
||||
unset($grouped[$key]); // 從待處理中移除
|
||||
}
|
||||
}
|
||||
|
||||
// 處理剩餘未定義在 groupDefinitions 中的群組 (安全機制)
|
||||
foreach ($grouped as $key => $permissions) {
|
||||
$result[] = [
|
||||
'key' => $key,
|
||||
'name' => $groupNames[$key] ?? ucfirst($key),
|
||||
'name' => ucfirst($key),
|
||||
'permissions' => $permissions
|
||||
];
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class UserController extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$roles = Role::pluck('name', 'id');
|
||||
$roles = Role::pluck('display_name', 'name');
|
||||
|
||||
return Inertia::render('Admin/User/Create', [
|
||||
'roles' => $roles
|
||||
@@ -71,7 +71,7 @@ class UserController extends Controller
|
||||
public function edit(string $id)
|
||||
{
|
||||
$user = User::with('roles')->findOrFail($id);
|
||||
$roles = Role::get(['id', 'name']);
|
||||
$roles = Role::get(['id', 'name', 'display_name']);
|
||||
|
||||
return Inertia::render('Admin/User/Edit', [
|
||||
'user' => $user,
|
||||
|
||||
Reference in New Issue
Block a user