feat: add refresh functionality to various components

- Implemented refresh event emission in multiple list components across partner and superAdmin modules.
- Updated consumers and customers list components to handle refresh actions.
- Enhanced dashboard component to fetch partner info on initialization.
- Introduced new API method in PartnerService to retrieve current partner data.
- Modified PartnerStore to utilize the new API method for fetching partner information.
- Updated UI elements to reflect changes in partner and license management, including new fields for license renewals.
- Added a new POS display component for better presentation of POS terminal information.
- Updated layout service and top bar to reflect new titles and improve user experience.
- Refactored existing components to ensure consistency and maintainability.
This commit is contained in:
2026-04-24 23:01:44 +03:30
parent 5bb5f10dbf
commit a816c05777
73 changed files with 559 additions and 97 deletions
@@ -10,6 +10,7 @@
[showDetails]="true"
[showAdd]="true"
(onAdd)="openAddForm()"
(onRefresh)="refresh()"
>
</app-page-data-list>
<superAdmin-consumer-account-form
@@ -13,6 +13,7 @@
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)"
(onRefresh)="refresh()"
>
</app-page-data-list>
<superAdmin-consumer-businessActivities-form
@@ -13,6 +13,7 @@
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)"
(onRefresh)="refresh()"
>
</app-page-data-list>
<superAdmin-consumer-complex-form
@@ -13,6 +13,7 @@
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)"
(onRefresh)="refresh()"
>
</app-page-data-list>
<superAdmin-consumer-pos-form
@@ -13,6 +13,7 @@
(onAdd)="openAddForm()"
(onDetails)="toSinglePage($event)"
(onEdit)="onEditClick($event)"
(onRefresh)="refresh()"
/>
<superAdmin-consumer-form
[(visible)]="visibleForm"
@@ -11,6 +11,7 @@
[showEdit]="true"
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onRefresh)="refresh()"
/>
<deviceBrand-form
[(visible)]="visibleForm"
@@ -11,6 +11,7 @@
[showEdit]="true"
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onRefresh)="refresh()"
/>
<superAdmin-device-form
[(visible)]="visibleForm"
@@ -13,6 +13,7 @@
[fullHeight]="fullHeight"
(onEdit)="onEditClick($event)"
(onAdd)="openAddForm()"
(onRefresh)="refresh()"
/>
<admin-guild-good-categories-form
@@ -12,6 +12,7 @@
[fullHeight]="fullHeight"
(onEdit)="onEditClick($event)"
(onAdd)="openAddForm()"
(onRefresh)="refresh()"
/>
<admin-guild-good-form
[guildId]="guildId"
@@ -11,5 +11,6 @@
[showAdd]="true"
(onAdd)="openAddForm()"
(onDetails)="toSinglePage($event)"
(onRefresh)="refresh()"
/>
<admin-guild-form [(visible)]="visibleForm" (onSubmit)="refresh()" />
@@ -4,6 +4,7 @@
emptyPlaceholderTitle="لایسنسی یافت نشد"
[items]="items()"
[loading]="loading()"
(onRefresh)="refresh()"
>
<!-- <ng-template #role let-data>
<catalog-role-tag [role]="data.role" />
@@ -2,14 +2,12 @@
pageTitle="مدیریت حساب‌های کاربری"
[addNewCtaLabel]="'افزودن حساب کاربری جدید'"
[columns]="columns"
[showAdd]="true"
emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن حساب کاربری جدید، روی دکمهٔ بالا کلیک کنید."
[items]="items()"
[loading]="loading()"
[showDetails]="true"
[showAdd]="true"
(onAdd)="openAddForm()"
(onRefresh)="refresh()"
>
</app-page-data-list>
<superAdmin-partner-account-form
@@ -4,5 +4,6 @@
emptyPlaceholderTitle="تا به حال شارژ کاربری انجام نشده‌ است"
[items]="items()"
[loading]="loading()"
(onRefresh)="refresh()"
>
</app-page-data-list>
@@ -4,6 +4,7 @@
emptyPlaceholderTitle="تا به حال شارژ لایسنسی انجام نشده‌ است"
[items]="items()"
[loading]="loading()"
(onRefresh)="refresh()"
>
<!-- <ng-template #role let-data>
<catalog-role-tag [role]="data.role" />
@@ -1,9 +1,10 @@
<app-page-data-list
pageTitle="لیست لایسنس‌های فروخته شده"
[columns]="columns"
emptyPlaceholderTitle="تا به حال توسط این شریک تجاری لایسنسی فروخته نشده‌ است"
emptyPlaceholderTitle="تا به حال لایسنسی فروخته نشده‌ است"
[items]="items()"
[loading]="loading()"
(onRefresh)="refresh()"
>
<!-- <ng-template #role let-data>
<catalog-role-tag [role]="data.role" />
@@ -2,13 +2,14 @@
import { AbstractList } from '@/shared/abstractClasses/abstract-list';
import { PageDataListComponent } from '@/shared/components/pageDataList/page-data-list.component';
import { Component, inject, Input } from '@angular/core';
import { ButtonDirective } from 'primeng/button';
import { IPartnerActivatedLicenseResponse } from '../../models';
import { AdminPartnerActivatedLicensesService } from '../../services/licenses.service';
@Component({
selector: 'admin-partner-licenses',
templateUrl: './list.component.html',
imports: [PageDataListComponent],
imports: [PageDataListComponent, ButtonDirective],
})
export class AdminPartnerLicensesComponent extends AbstractList<IPartnerActivatedLicenseResponse> {
@Input({ required: true }) partnerId!: string;
@@ -25,6 +26,12 @@ export class AdminPartnerLicensesComponent extends AbstractList<IPartnerActivate
return `${item.business_activity.consumer.first_name} ${item.business_activity.consumer.last_name} (${item.business_activity.name})`;
},
},
{
field: 'license',
header: 'تعداد کاربر قابل تعریف',
type: 'nested',
nestedOption: { path: 'license.accounts_limit' },
},
{ field: 'expires_at', header: 'تاریخ انقضا', type: 'date' },
];
}
@@ -14,6 +14,11 @@ export interface IPartnerRawResponse {
used: number;
expired: number;
};
license_renew_status: {
total: number;
used: number;
expired: number;
};
}
export interface IPartnerResponse extends IPartnerRawResponse {}
@@ -13,15 +13,24 @@
(onAdd)="openAddForm()"
(onDetails)="toSinglePage($event)"
(onEdit)="onEditClick($event)"
(onRefresh)="refresh()"
>
<ng-template #licensesStatus let-item>
<span class="font-bold">
{{ item.licenses_status.total }}
@if (item.licenses_status.used) {
<small class="small text-muted-color font-normal"> ({{ item.licenses_status.used }} عدد استفاده شده) </small>
} @else {
<small class="small text-muted-color font-normal"> (تمامی لایسنس‌ها فعال می‌باشند) </small>
}
<small class="small text-muted-color font-normal"> ({{ item.licenses_status.used }} عدد استفاده شده) </small>
</span>
</ng-template>
<ng-template #accountQuotaStatus let-item>
<span class="font-bold">
{{ item.account_quota_status.total }}
<small class="small text-muted-color font-normal"> ({{ item.account_quota_status.used }} عدد استفاده شده) </small>
</span>
</ng-template>
<ng-template #licensesRenewStatus let-item>
<span class="font-bold">
{{ item.license_renew_status.total }}
<small class="small text-muted-color font-normal"> ({{ item.license_renew_status.used }} عدد استفاده شده) </small>
</span>
</ng-template>
</app-page-data-list>
@@ -18,18 +18,25 @@ export class PartnersComponent extends AbstractList<IPartnerResponse> {
private readonly router = inject(Router);
@ViewChild('licensesStatus', { static: true }) licensesStatus!: TemplateRef<any>;
@ViewChild('accountQuotaStatus', { static: true }) accountQuotaStatus!: TemplateRef<any>;
@ViewChild('licensesRenewStatus', { static: true }) licensesRenewStatus!: TemplateRef<any>;
override setColumns(): void {
this.columns = [
{ field: 'name', header: 'نام' },
{ field: 'code', header: 'کد' },
{ field: 'licenses', header: 'وضعیت لایسنس‌ها', customDataModel: this.licensesStatus },
{ field: 'status', header: 'وضعیت' },
{ field: 'licenses', header: 'تعداد لایسنس‌ها', customDataModel: this.licensesStatus },
{
field: 'created_at',
header: اریخ ایجاد',
type: 'date',
field: 'account_quota',
header: عداد کاربرهای خریداری شده',
customDataModel: this.accountQuotaStatus,
},
{
field: 'license_renew',
header: 'تعداد لایسنس‌های تمدیدی',
customDataModel: this.licensesRenewStatus,
},
{ field: 'status', header: 'وضعیت' },
];
}
@@ -32,6 +32,18 @@
(partner()?.account_quota_status?.expired || 0)
"
/>
<p-divider align="center" class="col-span-3">اطلاعات تمدید لایسنس‌ها</p-divider>
<app-key-value label="تعداد کاربران خریداری شده" [value]="partner()?.license_renew_status?.total" />
<app-key-value label="تعداد کاربران منقضی شده" [value]="partner()?.license_renew_status?.expired" />
<app-key-value label="تعداد کاربران فروخته شده" [value]="partner()?.license_renew_status?.used" />
<app-key-value
label="تعداد کاربران باقی‌مانده"
[value]="
(partner()?.license_renew_status?.total || 0) -
(partner()?.license_renew_status?.used || 0) -
(partner()?.license_renew_status?.expired || 0)
"
/>
</div>
</div>
</app-card-data>
@@ -10,6 +10,7 @@
[showDetails]="true"
[showAdd]="true"
(onAdd)="openAddForm()"
(onRefresh)="refresh()"
/>
<provider-form
[(visible)]="visibleForm"
@@ -10,6 +10,7 @@
[showDetails]="true"
[showAdd]="true"
(onAdd)="openAddForm()"
(onRefresh)="refresh()"
>
</app-page-data-list>
<superAdmin-user-account-form
@@ -13,6 +13,7 @@
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)"
(onRefresh)="refresh()"
/>
<superAdmin-user-form
[(visible)]="visibleForm"