feat(frontend): add React UI — procurement office, wizard, suppliers, inventory panel (dash port), role-based login
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
// ============================================================
|
||||
// Auth store — Casdoor OIDC + PKCE session (v2.6)
|
||||
// Dev mode: no token — identity sent via X-User-Role/X-Project-Id
|
||||
// headers (backend dev fallback) so the dash works before Casdoor
|
||||
// is fully seeded.
|
||||
// ============================================================
|
||||
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
|
||||
export interface AuthUser {
|
||||
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;
|
||||
display_name: string;
|
||||
}
|
||||
|
||||
interface AuthStore {
|
||||
token: string | null;
|
||||
user: AuthUser | null;
|
||||
isDev: boolean;
|
||||
setToken: (token: string | null) => void;
|
||||
setUser: (user: AuthUser | null) => void;
|
||||
setDevUser: (role: "pm" | "admin" | "procurement_manager", projectId: string | null, projectName: string | null) => void;
|
||||
logout: () => void;
|
||||
}
|
||||
|
||||
export const useAuthStore = create<AuthStore>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
token: null,
|
||||
user: null,
|
||||
isDev: false,
|
||||
setToken: (token) => set({ token, isDev: false }),
|
||||
setUser: (user) => set({ user, isDev: false }),
|
||||
setDevUser: (role, projectId, projectName) =>
|
||||
set({
|
||||
token: null,
|
||||
isDev: true,
|
||||
user: {
|
||||
id: "dev-user",
|
||||
casdoor_id: "dev",
|
||||
first_name: "کاربر",
|
||||
last_name: "آزمایشی",
|
||||
phone: null,
|
||||
role,
|
||||
role_label: role === "pm" ? "مدیر پروژه (آزمایشی)" : role === "procurement_manager" ? "مدیر تدارکات (آزمایشی)" : "ادمین (آزمایشی)",
|
||||
project_id: projectId,
|
||||
project_name: projectName,
|
||||
display_name: projectId ? `کاربر آزمایشی — ${projectName || ""}` : "کاربر آزمایشی",
|
||||
},
|
||||
}),
|
||||
logout: () => set({ token: null, user: null, isDev: false }),
|
||||
}),
|
||||
{ name: "procurement-auth-v1" },
|
||||
),
|
||||
);
|
||||
Reference in New Issue
Block a user