feat: implement stock keeping unit management form and list components

- Added StockKeepingUnitFormComponent for creating and editing stock keeping units.
- Introduced StockKeepingUnitsComponent for listing stock keeping units with pagination.
- Integrated form fields for code, name, VAT, and SKU type in the stock keeping unit form.
- Created API routes for stock keeping units with CRUD operations.
- Updated input components to handle numeric and price types with Persian/Arabic digit normalization.
- Enhanced key-value component to support tag display instead of badge.
- Adjusted layout styles for sidebar menu.
- Added AGENT.md for repository-specific coding guidelines and practices.
- Implemented good management form with file upload and category selection.
This commit is contained in:
2026-05-06 22:01:20 +03:30
parent 54d00e19ae
commit b2a1eb8e5b
87 changed files with 882 additions and 434 deletions
@@ -22,7 +22,7 @@ import { TableModule } from 'primeng/table';
import { AppPageDataListGridView } from './page-data-list-grid-view.component';
import { AppPageDataListTableView } from './page-data-list-table-view.component';
type TDataType =
export type TDataType =
| 'simple'
| 'price'
| 'boolean'
@@ -31,7 +31,13 @@ type TDataType =
| 'index'
| 'id'
| 'thumbnail'
| 'number';
| 'badge'
| 'number'
| 'dateTime'
| 'duration'
| 'active'
| 'has';
export interface IColumn<T = any> {
field: T extends object ? keyof T | string : string;
header: string;
@@ -39,6 +45,11 @@ export interface IColumn<T = any> {
minWidth?: string;
canCopy?: boolean;
type?: TDataType;
variant?: 'text' | 'tag';
tagOptions?: {
severity?: 'success' | 'secondary' | 'info' | 'warn' | 'danger' | 'contrast';
};
nestedOption?: {
path: string;
@@ -105,6 +116,7 @@ export class PageDataListComponent<I = any> {
@Input() expandableItemKey?: string = '';
@Input() expandColumns?: Maybe<IColumn[]> = null;
@Input() dataKey?: string = 'items';
@Input() showIndex?: boolean = true;
@ContentChild('filter', { static: true }) filter!: TemplateRef<any> | null;
@ContentChild('caption', { static: true }) caption!: TemplateRef<any> | null;