feat: Implement product categories, stores, suppliers, and users management features

- Added ProductCategoriesService for handling product category API interactions.
- Created components for listing and viewing product categories.
- Implemented UI for managing product categories with a data list component.
- Developed StoresService for managing store-related API calls.
- Created components for listing and viewing stores with appropriate UI.
- Added SuppliersService for handling supplier API interactions.
- Implemented components for managing suppliers with a data list component.
- Developed UsersService for managing user-related API calls.
- Created components for listing and viewing users with appropriate UI.
- Enhanced not found page with improved layout and navigation options.
This commit is contained in:
2025-12-04 23:34:00 +03:30
parent 07fec02ea1
commit 3bc1202c77
154 changed files with 3149 additions and 1820 deletions
@@ -1,6 +1,6 @@
<div class="flex flex-col items-center justify-center py-12 text-center bg-surface-overlay">
<ng-container>
<i [class]="icon + ' !text-6xl mb-4 text-surface-500'" aria-hidden="true"></i>
<i [class]="icon + '!text-6xl mb-4 text-surface-500'" aria-hidden="true"></i>
</ng-container>
<span class="text-xl font-semibold mb-2 text-surface-500">{{ title }}</span>
@if (description) {
+23 -23
View File
@@ -1,36 +1,36 @@
import {
AfterContentInit,
Component,
ContentChild,
ElementRef,
EventEmitter,
Input,
Output,
AfterContentInit,
Component,
ContentChild,
ElementRef,
EventEmitter,
Input,
Output,
} from '@angular/core';
import { CommonModule } from '@angular/common';
import { Button } from 'primeng/button';
@Component({
selector: 'uikit-empty-state',
standalone: true,
imports: [CommonModule, Button],
templateUrl: './uikit-emptystate.component.html',
selector: 'uikit-empty-state',
standalone: true,
imports: [CommonModule, Button],
templateUrl: './uikit-emptystate.component.html',
})
export class UikitEmptyStateComponent implements AfterContentInit {
@ContentChild('cta', { static: false, read: ElementRef })
ctaContent?: ElementRef;
hasCtaContent = false;
@ContentChild('cta', { static: false, read: ElementRef })
ctaContent?: ElementRef;
hasCtaContent = false;
@Input() title: string = 'متاسفانه موردی یافت نشد.';
@Input() description?: string;
@Input() icon: string = 'pi pi-database';
@Input() ctaLabel?: string;
@Input() showCTA?: boolean = true;
@Input() title: string = 'متاسفانه موردی یافت نشد.';
@Input() description?: string;
@Input() icon: string = 'pi pi-database';
@Input() ctaLabel?: string;
@Input() showCTA?: boolean = true;
@Output() ctaClick = new EventEmitter<void>();
@Output() ctaClick = new EventEmitter<void>();
ngAfterContentInit() {
this.hasCtaContent = !!this.ctaContent;
}
ngAfterContentInit() {
this.hasCtaContent = !!this.ctaContent;
}
}