diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php
index e979731..cbd9da6 100644
--- a/app/Http/Controllers/Admin/UserController.php
+++ b/app/Http/Controllers/Admin/UserController.php
@@ -19,7 +19,7 @@ class UserController extends Controller
{
$perPage = $request->input('per_page', 10);
- $users = User::with('roles')
+ $users = User::with(['roles:id,name,display_name'])
->orderBy('id')
->paginate($perPage)
->withQueryString();
diff --git a/resources/js/Layouts/AuthenticatedLayout.tsx b/resources/js/Layouts/AuthenticatedLayout.tsx
index 7c0c9f2..914f552 100644
--- a/resources/js/Layouts/AuthenticatedLayout.tsx
+++ b/resources/js/Layouts/AuthenticatedLayout.tsx
@@ -352,11 +352,6 @@ export default function AuthenticatedLayout({
{user.username || 'Administrator'}
- {user.roles && user.roles.length > 0 && (
-
- [{user.roles.join(', ')}]
-
- )}
diff --git a/resources/js/Pages/Admin/User/Create.tsx b/resources/js/Pages/Admin/User/Create.tsx
index 329bca6..a2b742b 100644
--- a/resources/js/Pages/Admin/User/Create.tsx
+++ b/resources/js/Pages/Admin/User/Create.tsx
@@ -81,11 +81,24 @@ export default function UserCreate({ roles }: Props) {
-
+
{/* Basic Info */}
-
-
-
基本資料
+
+
基本資料
+
+
+
+
+
setData('username', e.target.value)}
+ placeholder="請輸入登入帳號"
+ />
+ {errors.username &&
{errors.username}
}
+
-
-
-
-
setData('email', e.target.value)}
- placeholder="user@example.com (可省略)"
- />
- {errors.email &&
{errors.email}
}
-
-
-
-
-
setData('username', e.target.value)}
- placeholder="請輸入登入帳號"
- />
- {errors.username &&
{errors.username}
}
-
-
-
安全設定
-
-
-
-
-
setData('password', e.target.value)}
- />
- {errors.password &&
{errors.password}
}
-
-
-
-
- setData('password_confirmation', e.target.value)}
- />
-
-
+
+
+
setData('email', e.target.value)}
+ placeholder="user@example.com (可省略)"
+ />
+ {errors.email &&
{errors.email}
}
{/* Roles */}
-
-
-
角色分配
-
- {Object.entries(roles).map(([roleName, displayName]) => (
-
-
toggleRole(roleName)}
- />
-
-
-
- {roleName}
-
-
+
+
角色分配
+
+ {Object.entries(roles).map(([roleName, displayName]) => (
+
+
toggleRole(roleName)}
+ />
+
+
+
+ {roleName}
+
- ))}
- {errors.roles && {errors.roles}
}
+
+ ))}
+
+ {errors.roles &&
{errors.roles}
}
+
+
+ {/* Password */}
+
+
安全設定
+
+
+
+
+
setData('password', e.target.value)}
+ />
+ {errors.password &&
{errors.password}
}
+
+
+
+
+ setData('password_confirmation', e.target.value)}
+ />
diff --git a/resources/js/Pages/Admin/User/Edit.tsx b/resources/js/Pages/Admin/User/Edit.tsx
index ee94f53..b98d018 100644
--- a/resources/js/Pages/Admin/User/Edit.tsx
+++ b/resources/js/Pages/Admin/User/Edit.tsx
@@ -29,7 +29,7 @@ interface Props {
export default function UserEdit({ user, roles, currentRoles }: Props) {
const { data, setData, put, processing, errors } = useForm({
name: user.name,
- email: user.email,
+ email: user.email || '',
username: user.username || '',
password: '',
password_confirmation: '',
@@ -96,11 +96,24 @@ export default function UserEdit({ user, roles, currentRoles }: Props) {
-
+
{/* Basic Info */}
-
-
-
基本資料
+
+
基本資料
+
+
+
+
+
setData('username', e.target.value)}
+ placeholder="請輸入登入帳號"
+ />
+ {errors.username &&
{errors.username}
}
+
-
-
-
-
setData('email', e.target.value)}
- placeholder="user@example.com (可省略)"
- />
- {errors.email &&
{errors.email}
}
-
-
-
-
-
setData('username', e.target.value)}
- placeholder="請輸入登入帳號"
- />
- {errors.username &&
{errors.username}
}
-
-
-
重設密碼
-
-
-
-
-
-
setData('password', e.target.value)}
- placeholder="••••••••"
- />
- {errors.password &&
{errors.password}
}
-
-
-
-
- setData('password_confirmation', e.target.value)}
- placeholder="••••••••"
- />
-
-
+
+
+
setData('email', e.target.value)}
+ placeholder="user@example.com (可省略)"
+ />
+ {errors.email &&
{errors.email}
}
{/* Roles */}
-
-
-
角色分配
-
- {roles.map((role) => (
-
-
toggleRole(role.name)}
- // Prevent changing super-admin if user is editing themselves? Or just backend protection.
- />
-
-
-
- {role.name}
-
-
+
+
角色分配
+
+ {roles.map((role) => (
+
+
toggleRole(role.name)}
+ />
+
+
+
+ {role.name}
+
- ))}
- {errors.roles && {errors.roles}
}
+
+ ))}
+
+ {errors.roles &&
{errors.roles}
}
+
+
+ {/* Password Reset */}
+
+
重設密碼
+
+
+
+
+
+
setData('password', e.target.value)}
+ placeholder="••••••••"
+ />
+ {errors.password &&
{errors.password}
}
+
+
+
+
+ setData('password_confirmation', e.target.value)}
+ placeholder="••••••••"
+ />
diff --git a/resources/js/Pages/Admin/User/Index.tsx b/resources/js/Pages/Admin/User/Index.tsx
index 0370713..ee23ef0 100644
--- a/resources/js/Pages/Admin/User/Index.tsx
+++ b/resources/js/Pages/Admin/User/Index.tsx
@@ -21,6 +21,7 @@ import { SearchableSelect } from "@/Components/ui/searchable-select";
interface Role {
id: number;
name: string;
+ display_name: string;
}
interface User {
@@ -70,16 +71,7 @@ export default function UserIndex({ users, filters }: Props) {
);
};
- const translateRoleName = (name: string) => {
- const map: Record = {
- 'super-admin': '超級管理員',
- 'admin': '管理員',
- 'warehouse-manager': '倉庫主管',
- 'purchaser': '採購人員',
- 'viewer': '檢視者',
- };
- return map[name] || name;
- }
+
return (
-
+
{user.roles.length > 0 ? (
user.roles.map(role => (
-
- {role.name === 'super-admin' && }
- {translateRoleName(role.name)}
-
+
+ {role.name === 'super-admin' && }
+
+ {role.display_name}
+
+
+
+ {role.name}
+
+
))
) : (
未分配角色