251211:1314 Frontend: reeactor Admin panel
Some checks failed
Spec Validation / validate-markdown (push) Has been cancelled
Spec Validation / validate-diagrams (push) Has been cancelled
Spec Validation / check-todos (push) Has been cancelled

This commit is contained in:
admin
2025-12-11 13:14:15 +07:00
parent c8a0f281ef
commit 3fa28bd14f
79 changed files with 6571 additions and 206 deletions

View File

@@ -51,11 +51,13 @@ const contractSchema = z.object({
type ContractFormData = z.infer<typeof contractSchema>;
import { contractService } from "@/lib/services/contract.service";
// Inline hooks for simplicity, or could move to hooks/use-master-data
const useContracts = (params?: any) => {
return useQuery({
queryKey: ['contracts', params],
queryFn: () => projectService.getAllContracts(params),
queryFn: () => contractService.getAll(params),
});
};

View File

@@ -19,13 +19,12 @@ import {
SelectValue,
} from "@/components/ui/select";
const PROJECTS = [
{ id: '1', name: 'LCBP3' },
{ id: '2', name: 'LCBP3-Maintenance' },
];
import { useProjects } from '@/hooks/use-master-data';
export default function NumberingPage() {
const { data: projects = [] } = useProjects();
const [selectedProjectId, setSelectedProjectId] = useState("1");
const [templates, setTemplates] = useState<NumberingTemplate[]>([]);
const [, setLoading] = useState(true);
@@ -35,7 +34,7 @@ export default function NumberingPage() {
const [isTesting, setIsTesting] = useState(false);
const [testTemplate, setTestTemplate] = useState<NumberingTemplate | null>(null);
const selectedProjectName = PROJECTS.find(p => p.id === selectedProjectId)?.name || 'Unknown Project';
const selectedProjectName = projects.find((p: any) => p.id.toString() === selectedProjectId)?.projectName || 'Unknown Project';
const loadTemplates = async () => {
setLoading(true);
@@ -105,9 +104,9 @@ export default function NumberingPage() {
<SelectValue placeholder="Select Project" />
</SelectTrigger>
<SelectContent>
{PROJECTS.map(project => (
<SelectItem key={project.id} value={project.id}>
{project.name}
{projects.map((project: any) => (
<SelectItem key={project.id} value={project.id.toString()}>
{project.projectCode} - {project.projectName}
</SelectItem>
))}
</SelectContent>
@@ -134,7 +133,7 @@ export default function NumberingPage() {
{template.documentTypeName}
</h3>
<Badge variant="outline" className="text-xs">
{PROJECTS.find(p => p.id === template.projectId?.toString())?.name || selectedProjectName}
{projects.find((p: any) => p.id.toString() === template.projectId?.toString())?.projectName || selectedProjectName}
</Badge>
{template.disciplineCode && <Badge>{template.disciplineCode}</Badge>}
<Badge variant={template.isActive ? 'default' : 'secondary'}>

View File

@@ -2,10 +2,9 @@
import { GenericCrudTable } from "@/components/admin/reference/generic-crud-table";
import { masterDataService } from "@/lib/services/master-data.service";
import { projectService } from "@/lib/services/project.service";
import { contractService } from "@/lib/services/contract.service";
import { ColumnDef } from "@tanstack/react-table";
import { useState, useEffect } from "react";
import apiClient from "@/lib/api/client";
import {
Select,
SelectContent,
@@ -22,8 +21,7 @@ export default function DisciplinesPage() {
useEffect(() => {
// Fetch contracts for filter and form options
// Fetch contracts for filter and form options
projectService.getAllContracts().then((data) => {
contractService.getAll().then((data) => {
setContracts(Array.isArray(data) ? data : []);
}).catch(err => {
console.error("Failed to load contracts:", err);

View File

@@ -2,10 +2,9 @@
import { GenericCrudTable } from "@/components/admin/reference/generic-crud-table";
import { masterDataService } from "@/lib/services/master-data.service";
import { projectService } from "@/lib/services/project.service";
import { contractService } from "@/lib/services/contract.service";
import { ColumnDef } from "@tanstack/react-table";
import { useState, useEffect } from "react";
import apiClient from "@/lib/api/client";
import {
Select,
SelectContent,
@@ -22,8 +21,7 @@ export default function RfaTypesPage() {
useEffect(() => {
// Fetch contracts for filter and form options
// Fetch contracts for filter and form options
projectService.getAllContracts().then((data) => {
contractService.getAll().then((data) => {
setContracts(Array.isArray(data) ? data : []);
}).catch(err => {
console.error("Failed to load contracts:", err);

View File

@@ -25,7 +25,10 @@ interface Session {
}
const sessionService = {
getAll: async () => (await apiClient.get("/auth/sessions")).data,
getAll: async () => {
const response = await apiClient.get("/auth/sessions");
return response.data.data || response.data;
},
revoke: async (sessionId: string) => (await apiClient.delete(`/auth/sessions/${sessionId}`)).data,
};

View File

@@ -18,7 +18,10 @@ interface NumberingError {
}
const logService = {
getNumberingErrors: async () => (await apiClient.get("/document-numbering/logs/errors")).data,
getNumberingErrors: async () => {
const response = await apiClient.get("/document-numbering/logs/errors");
return response.data.data || response.data;
},
};
export default function NumberingLogsPage() {