[STYLE] 商品管理與分類管理 UI 標準化,補全多語系翻譯
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 50s
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 50s
This commit is contained in:
@@ -27,7 +27,7 @@ class PermissionController extends Controller
|
||||
// 篩選:公司名稱 (僅限系統管理員)
|
||||
if ($user->isSystemAdmin() && request()->filled('company_id')) {
|
||||
if (request()->company_id === 'system') {
|
||||
$query->where('is_system', true);
|
||||
$query->whereNull('company_id');
|
||||
} else {
|
||||
$query->where('company_id', request()->company_id);
|
||||
}
|
||||
@@ -36,7 +36,9 @@ class PermissionController extends Controller
|
||||
$roles = $query->latest()->paginate($per_page)->withQueryString();
|
||||
$companies = $user->isSystemAdmin() ? \App\Models\System\Company::all() : collect();
|
||||
|
||||
// 權限遞迴約束:租戶管理員只能看到並指派自己擁有的權限
|
||||
// 權限分組邏輯中的標題與過濾
|
||||
$isSubAccountRoles = request()->routeIs('*.sub-account-roles');
|
||||
$title = $isSubAccountRoles ? __('Sub Account Roles') : __('Role Settings');
|
||||
$permissionQuery = \Spatie\Permission\Models\Permission::query();
|
||||
if (!$user->isSystemAdmin()) {
|
||||
$permissionQuery->whereIn('name', $user->getAllPermissions()->pluck('name'));
|
||||
@@ -44,17 +46,13 @@ class PermissionController extends Controller
|
||||
|
||||
// 權限分組邏輯
|
||||
$all_permissions = $permissionQuery->get()
|
||||
->reject(fn($p) => $p->name === 'menu.data-config.sub-account-roles')
|
||||
->groupBy(function($perm) {
|
||||
if (str_starts_with($perm->name, 'menu.')) {
|
||||
// 主選單權限:menu.xxx (兩段)
|
||||
// 子選單權限:menu.xxx.yyy (三段)
|
||||
return 'menu';
|
||||
}
|
||||
return 'other';
|
||||
});
|
||||
|
||||
// 根據路由決定標題
|
||||
$title = request()->routeIs('*.sub-account-roles') ? __('Sub Account Roles') : __('Role Settings');
|
||||
|
||||
$currentUserRoleIds = $user->roles->pluck('id')->toArray();
|
||||
return view('admin.permission.roles', compact('roles', 'all_permissions', 'title', 'currentUserRoleIds', 'companies'));
|
||||
@@ -77,7 +75,9 @@ class PermissionController extends Controller
|
||||
$all_permissions = $permissionQuery->get()->groupBy(fn($p) => str_starts_with($p->name, 'menu.') ? 'menu' : 'other');
|
||||
|
||||
$title = request()->routeIs('*.sub-account-roles.create') ? __('Create Sub Account Role') : __('Create New Role');
|
||||
$back_url = request()->routeIs('*.sub-account-roles.create') ? route('admin.data-config.sub-account-roles') : route('admin.permission.roles');
|
||||
$back_url = request()->routeIs('*.sub-account-roles.create')
|
||||
? route('admin.data-config.sub-accounts', ['tab' => 'roles'])
|
||||
: route('admin.permission.roles');
|
||||
|
||||
return view('admin.permission.roles-edit', compact('role', 'all_permissions', 'title', 'back_url'));
|
||||
}
|
||||
@@ -98,6 +98,7 @@ class PermissionController extends Controller
|
||||
|
||||
// 權限分組邏輯
|
||||
$all_permissions = $permissionQuery->get()
|
||||
->reject(fn($p) => $p->name === 'menu.data-config.sub-account-roles')
|
||||
->groupBy(function($perm) {
|
||||
if (str_starts_with($perm->name, 'menu.')) {
|
||||
return 'menu';
|
||||
@@ -109,7 +110,9 @@ class PermissionController extends Controller
|
||||
$title = request()->routeIs('*.sub-account-roles.edit') ? __('Edit Sub Account Role') : __('Edit Role Permissions');
|
||||
|
||||
// 麵包屑/返回路徑
|
||||
$back_url = request()->routeIs('*.sub-account-roles.edit') ? route('admin.data-config.sub-account-roles') : route('admin.permission.roles');
|
||||
$back_url = request()->routeIs('*.sub-account-roles.edit')
|
||||
? route('admin.data-config.sub-accounts', ['tab' => 'roles'])
|
||||
: route('admin.permission.roles');
|
||||
|
||||
return view('admin.permission.roles-edit', compact('role', 'all_permissions', 'title', 'back_url'));
|
||||
}
|
||||
@@ -158,8 +161,8 @@ class PermissionController extends Controller
|
||||
$role->syncPermissions($perms);
|
||||
}
|
||||
|
||||
$target_route = request()->routeIs('*.sub-account-roles.*') ? 'admin.data-config.sub-account-roles' : 'admin.permission.roles';
|
||||
return redirect()->route($target_route)->with('success', __('Role created successfully.'));
|
||||
$target_route = request()->routeIs('*.sub-account-roles.*') ? route('admin.data-config.sub-accounts', ['tab' => 'roles']) : route('admin.permission.roles');
|
||||
return redirect()->to($target_route)->with('success', __('Role created successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -219,8 +222,8 @@ class PermissionController extends Controller
|
||||
}
|
||||
$role->syncPermissions($perms);
|
||||
|
||||
$target_route = request()->routeIs('*.sub-account-roles.*') ? 'admin.data-config.sub-account-roles' : 'admin.permission.roles';
|
||||
return redirect()->route($target_route)->with('success', __('Role updated successfully.'));
|
||||
$target_route = request()->routeIs('*.sub-account-roles.*') ? route('admin.data-config.sub-accounts', ['tab' => 'roles']) : route('admin.permission.roles');
|
||||
return redirect()->to($target_route)->with('success', __('Role updated successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -244,46 +247,95 @@ class PermissionController extends Controller
|
||||
|
||||
$role->delete();
|
||||
|
||||
if (request()->routeIs('*.sub-account-roles.*')) {
|
||||
return redirect()->route('admin.data-config.sub-accounts', ['tab' => 'roles'])->with('success', __('Role deleted successfully.'));
|
||||
}
|
||||
|
||||
return redirect()->back()->with('success', __('Role deleted successfully.'));
|
||||
}
|
||||
|
||||
// 帳號管理
|
||||
public function accounts(Request $request)
|
||||
{
|
||||
$query = \App\Models\System\User::query()->with(['company', 'roles', 'machines']);
|
||||
$user = auth()->user();
|
||||
$isSubAccountRoute = $request->routeIs('admin.data-config.sub-accounts');
|
||||
$tab = $request->input('tab', 'accounts');
|
||||
|
||||
// 租戶隔離:如果不是系統管理員,則只看自己公司的成員
|
||||
if (!auth()->user()->isSystemAdmin()) {
|
||||
$query->where('company_id', auth()->user()->company_id);
|
||||
// 初始化變數
|
||||
$users = collect();
|
||||
$roles = collect();
|
||||
$paginated_roles = collect();
|
||||
$all_permissions = collect();
|
||||
$currentUserRoleIds = $user->roles->pluck('id')->toArray();
|
||||
$companies = $user->isSystemAdmin() ? \App\Models\System\Company::all() : collect();
|
||||
|
||||
if ($isSubAccountRoute && $tab === 'roles') {
|
||||
// 處理角色分頁邏輯 (移植自 roles())
|
||||
$per_page = $request->input('per_page', 10);
|
||||
$roles_query = \App\Models\System\Role::query()->with(['permissions', 'users', 'company']);
|
||||
|
||||
if (!$user->isSystemAdmin()) {
|
||||
$roles_query->where('company_id', $user->company_id);
|
||||
}
|
||||
|
||||
if ($search = $request->input('search')) {
|
||||
$roles_query->where('name', 'like', "%{$search}%");
|
||||
}
|
||||
|
||||
if ($user->isSystemAdmin() && $request->filled('company_id')) {
|
||||
if ($request->company_id === 'system') {
|
||||
$roles_query->where('is_system', true);
|
||||
} else {
|
||||
$roles_query->where('company_id', $request->company_id);
|
||||
}
|
||||
}
|
||||
|
||||
$paginated_roles = $roles_query->latest()->paginate($per_page)->withQueryString();
|
||||
|
||||
// 權限分組邏輯
|
||||
$permissionQuery = \Spatie\Permission\Models\Permission::query();
|
||||
if (!$user->isSystemAdmin()) {
|
||||
$permissionQuery->whereIn('name', $user->getAllPermissions()->pluck('name'));
|
||||
}
|
||||
|
||||
$all_permissions = $permissionQuery->get()
|
||||
->reject(fn($p) => $p->name === 'menu.data-config.sub-account-roles')
|
||||
->groupBy(fn($p) => str_starts_with($p->name, 'menu.') ? 'menu' : 'other');
|
||||
} else {
|
||||
// 處理帳號名單邏輯
|
||||
$query = \App\Models\System\User::query()->with(['company', 'roles', 'machines']);
|
||||
|
||||
if (!$user->isSystemAdmin()) {
|
||||
$query->where('company_id', $user->company_id);
|
||||
}
|
||||
|
||||
if ($search = $request->input('search')) {
|
||||
$query->where(function($q) use ($search) {
|
||||
$q->where('name', 'like', "%{$search}%")
|
||||
->orWhere('username', 'like', "%{$search}%")
|
||||
->orWhere('email', 'like', "%{$search}%");
|
||||
});
|
||||
}
|
||||
|
||||
if ($user->isSystemAdmin() && $request->filled('company_id')) {
|
||||
$query->where('company_id', $request->company_id);
|
||||
}
|
||||
|
||||
$per_page = $request->input('per_page', 10);
|
||||
$users = $query->latest()->paginate($per_page)->withQueryString();
|
||||
|
||||
$roles_query = \App\Models\System\Role::query();
|
||||
if (!$user->isSystemAdmin()) {
|
||||
$roles_query->forCompany($user->company_id);
|
||||
}
|
||||
$roles = $roles_query->get();
|
||||
}
|
||||
|
||||
// 搜尋
|
||||
if ($search = $request->input('search')) {
|
||||
$query->where(function($q) use ($search) {
|
||||
$q->where('name', 'like', "%{$search}%")
|
||||
->orWhere('username', 'like', "%{$search}%")
|
||||
->orWhere('email', 'like', "%{$search}%");
|
||||
});
|
||||
}
|
||||
$title = $isSubAccountRoute ? __('Sub Account Management') : __('Account Management');
|
||||
|
||||
// 公司篩選 (僅限 super-admin)
|
||||
if (auth()->user()->isSystemAdmin() && $request->filled('company_id')) {
|
||||
$query->where('company_id', $request->company_id);
|
||||
}
|
||||
|
||||
$per_page = $request->input('per_page', 10);
|
||||
$users = $query->latest()->paginate($per_page)->withQueryString();
|
||||
$companies = auth()->user()->isSystemAdmin() ? \App\Models\System\Company::all() : collect();
|
||||
$roles_query = \App\Models\System\Role::query();
|
||||
if (!auth()->user()->isSystemAdmin()) {
|
||||
$roles_query->forCompany(auth()->user()->company_id);
|
||||
}
|
||||
$roles = $roles_query->get();
|
||||
|
||||
// 根據路由決定標題
|
||||
$title = request()->routeIs('*.sub-accounts') ? __('Sub Account Management') : __('Account Management');
|
||||
|
||||
return view('admin.data-config.accounts', compact('users', 'companies', 'roles', 'title'));
|
||||
return view('admin.data-config.accounts', compact(
|
||||
'users', 'companies', 'roles', 'paginated_roles', 'all_permissions', 'title', 'tab', 'currentUserRoleIds'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user