feat(org): user and PM management - list/define users, roles, project assignment (API + organization panel)

This commit is contained in:
ali_mohaghegh
2026-08-27 15:04:24 +03:30
parent 034c05c713
commit f48f3752af
4 changed files with 403 additions and 22 deletions
+27
View File
@@ -1325,6 +1325,20 @@ const rawInventory = (r: {
interface RawCat { id: string; slug: string; name: string; }
interface RawUnitL { id: number; code: string; name_fa: string | null; }
// Organization panel — one user row (backend GET /users shape).
export interface UserRow {
id: string;
casdoor_id: string;
first_name: string;
last_name: string;
phone: string | null;
role: "pm" | "procurement_manager" | "admin" | null;
role_label: string | null;
project_id: string | null;
project_name: string | null;
created_at: string;
}
export const apiV26 = {
lookup: {
categories: async (): Promise<RawCat[]> => getData<RawCat[]>("/material-categories?page_size=100"),
@@ -1356,6 +1370,19 @@ export const apiV26 = {
display_name: `${data.first_name} ${data.last_name}`.trim() || data.casdoor_id,
};
},
// --- Organization panel (admin / procurement manager) ---
list: async (): Promise<UserRow[]> => {
const data = await getData<UserRow[]>("/users");
return data;
},
create: async (body: {
first_name: string; last_name?: string; phone?: string | null;
casdoor_id?: string | null; role?: "pm" | "procurement_manager" | "admin" | null;
}): Promise<UserRow> => postData<UserRow>("/users", body),
updateRole: async (id: string, role: "pm" | "procurement_manager" | "admin" | null): Promise<UserRow> =>
patchData<UserRow>(`/users/${id}`, { role }),
assignProject: async (id: string, projectId: string | null): Promise<UserRow> =>
postData<UserRow>(`/users/${id}/project`, { project_id: projectId }),
},
warehouses: {