chore: add Tailwind CSS configuration file. ux writing update

This commit is contained in:
2026-05-05 22:42:06 +03:30
parent d130a83bd4
commit 54d00e19ae
96 changed files with 187 additions and 204 deletions
+8
View File
@@ -116,6 +116,10 @@
} }
], ],
"fileReplacements": [ "fileReplacements": [
{
"replace": "src/assets/images/logo.png",
"with": "src/tenants/tis/assets/images/logo.png"
},
{ {
"replace": "src/environments/environment.ts", "replace": "src/environments/environment.ts",
"with": "src/environments/environment.tis.ts" "with": "src/environments/environment.tis.ts"
@@ -127,6 +131,10 @@
{ {
"replace": "src/app/branding/branding.config.ts", "replace": "src/app/branding/branding.config.ts",
"with": "src/tenants/tis/branding.config.ts" "with": "src/tenants/tis/branding.config.ts"
},
{
"replace": "src/app/domains/partner",
"with": ""
} }
], ],
"outputHashing": "all", "outputHashing": "all",
+2 -2
View File
@@ -10,7 +10,7 @@ services:
DIST_DIR: tis DIST_DIR: tis
ports: ports:
- "8090:8090" - "8091:8090"
restart: unless-stopped restart: unless-stopped
app_default: app_default:
@@ -19,7 +19,7 @@ services:
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
TENANT: default TENANT: default
DIST_DIR: default DIST_DIR: production
ports: ports:
- "8090:8090" - "8090:8090"
+1 -1
View File
@@ -2,7 +2,7 @@
"$schema": "./node_modules/@angular/service-worker/config/schema.json", "$schema": "./node_modules/@angular/service-worker/config/schema.json",
"appData": { "appData": {
"appVersion": "0.0.0", "appVersion": "0.0.0",
"buildDate": "2026-05-03T16:17:50.761Z" "buildDate": "2026-05-04T18:58:47.135Z"
}, },
"assetGroups": [ "assetGroups": [
{ {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 37 KiB

+4 -4
View File
@@ -1,7 +1,6 @@
{ {
"background_color": "#ffffff", "background_color": "#ffffff",
"display": "standalone", "display": "standalone",
"id": "/",
"icons": [ "icons": [
{ {
"purpose": "maskable", "purpose": "maskable",
@@ -16,9 +15,10 @@
"type": "image/png" "type": "image/png"
} }
], ],
"name": "PSP A - مدیریت صورت‌حساب‌های مالیاتی", "id": "/",
"short_name": "PSP A", "name": "تیس - مدیریت صورت‌حساب‌های مالیاتی",
"start_url": "/",
"scope": "/", "scope": "/",
"short_name": "تیس",
"start_url": "/",
"theme_color": "#ffffff" "theme_color": "#ffffff"
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 52 KiB

+1 -1
View File
@@ -53,7 +53,7 @@ export const appConfig: ApplicationConfig = {
emptySearchMessage: 'هیچ موردی برای نمایش وجود ندارد', emptySearchMessage: 'هیچ موردی برای نمایش وجود ندارد',
accept: 'تایید', accept: 'تایید',
reject: 'رد کردن', reject: 'رد کردن',
cancel: 'لغو', cancel: 'انصراف',
noFileChosenMessage: 'هیچ فایلی انتخاب نشده است', noFileChosenMessage: 'هیچ فایلی انتخاب نشده است',
fileChosenMessage: 'انتخاب فایل', fileChosenMessage: 'انتخاب فایل',
selectionMessage: '{0} مورد انتخاب شده است', selectionMessage: '{0} مورد انتخاب شده است',
@@ -44,7 +44,7 @@
<div class="listKeyValue"> <div class="listKeyValue">
<app-key-value label="کسب و کار" [value]="invoice.pos!.complex.business_activity.name" /> <app-key-value label="کسب و کار" [value]="invoice.pos!.complex.business_activity.name" />
<app-key-value label="مجموعه" [value]="invoice.pos!.complex.name" /> <app-key-value label="مجموعه" [value]="invoice.pos!.complex.name" />
<app-key-value label="پایانه‌ی فروش" [value]="invoice.pos!.name" /> <app-key-value label="پایانه فروش" [value]="invoice.pos!.name" />
<app-key-value label="ایجاد کننده" [value]="invoice.consumer_account.account.username" /> <app-key-value label="ایجاد کننده" [value]="invoice.consumer_account.account.username" />
</div> </div>
@@ -68,11 +68,6 @@ export class ConsumerSaleInvoiceSharedComponent {
}; };
columns: IColumn[] = [ columns: IColumn[] = [
{
field: '',
header: '',
type: 'index',
},
{ {
field: 'name', field: 'name',
header: 'عنوان', header: 'عنوان',
@@ -18,7 +18,7 @@ export const CONSUMER_MENU_ITEMS = [
routerLink: ['/consumer/poses'], routerLink: ['/consumer/poses'],
}, },
{ {
label: 'لیست فاکتورها', label: 'فاکتورها',
icon: 'pi pi-fw pi-home', icon: 'pi pi-fw pi-home',
routerLink: ['/consumer/sale_invoices'], routerLink: ['/consumer/sale_invoices'],
}, },
@@ -1,17 +1,13 @@
// import { CatalogRolesComponent } from '@/shared/catalog/roles'; // import { CatalogRolesComponent } from '@/shared/catalog/roles';
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { import { AddressComponent, BranchCodeComponent, NameComponent } from '@/shared/components';
NameComponent, import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
AddressComponent,
BranchCodeComponent,
} from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { IComplexRequest, IComplexResponse } from '../../models'; import { IComplexRequest, IComplexResponse } from '../../models';
import { ConsumerComplexesService } from '../../services/complexes.service'; import { ConsumerComplexesService } from '../../services/complexes.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'consumer-complex-form', selector: 'consumer-complex-form',
@@ -45,7 +41,7 @@ export class ConsumerComplexFormComponent extends AbstractFormDialog<
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} شعبه`; return `${this.editMode ? 'ویرایش' : 'افزودن'} شعبه`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,11 +1,11 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت شعب" pageTitle="مدیریت شعب"
[addNewCtaLabel]="'افزودن شعبه‌ جدید'" [addNewCtaLabel]="'افزودن شعبه‌'"
[showAdd]="true" [showAdd]="true"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="شعبه‌ای یافت نشد." emptyPlaceholderTitle="شعبه‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن شعبه‌ جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن شعبه‌، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -46,6 +46,9 @@ export class ConsumerBusinessActivityFormComponent extends AbstractFormDialog<
}); });
override submitForm(payload: IBusinessActivityRequest) { override submitForm(payload: IBusinessActivityRequest) {
return this.service.update(this.businessId, payload); return this.service.update(this.businessId, {
...payload,
economic_code: payload.economic_code.toString(),
});
} }
} }
@@ -6,12 +6,12 @@ import { ReactiveFormsModule, Validators } from '@angular/forms';
import { EnumSelectComponent } from '@/shared/apiEnum/select.component'; import { EnumSelectComponent } from '@/shared/apiEnum/select.component';
import { CatalogGuildGoodCategoriesSelectComponent } from '@/shared/catalog/guildGoodCategories'; import { CatalogGuildGoodCategoriesSelectComponent } from '@/shared/catalog/guildGoodCategories';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { import {
IConsumerBusinessActivityGoodRequest, IConsumerBusinessActivityGoodRequest,
IConsumerBusinessActivityGoodResponse, IConsumerBusinessActivityGoodResponse,
} from '../../models/goods_io'; } from '../../models/goods_io';
import { BusinessActivityGoodsService } from '../../services/goods.service'; import { BusinessActivityGoodsService } from '../../services/goods.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'consumer-businessActivity-good-form', selector: 'consumer-businessActivity-good-form',
@@ -45,7 +45,7 @@ export class ConsumerBusinessActivityGoodFormComponent extends AbstractFormDialo
}); });
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} کالا`; return `${this.editMode ? 'ویرایش' : 'افزودن'} کالا`;
} }
override submitForm(payload: IConsumerBusinessActivityGoodRequest) { override submitForm(payload: IConsumerBusinessActivityGoodRequest) {
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت کالاها" pageTitle="مدیریت کالاها"
[addNewCtaLabel]="'افزودن کالای جدید'" [addNewCtaLabel]="'افزودن کالای'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="کالایی یافت نشد" emptyPlaceholderTitle="کالایی یافت نشد"
emptyPlaceholderDescription="برای افزودن کالای جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن کالای، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showAdd]="true" [showAdd]="true"
@@ -2,22 +2,22 @@
import { MustMatch } from '@/core/validators'; import { MustMatch } from '@/core/validators';
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { import {
NameComponent,
SharedPasswordInputComponent,
DeviceIdComponent, DeviceIdComponent,
NameComponent,
PosTypeComponent,
ProviderIdComponent, ProviderIdComponent,
SerialNumberComponent, SerialNumberComponent,
PosTypeComponent, SharedPasswordInputComponent,
UsernameComponent, UsernameComponent,
} from '@/shared/components'; } from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields'; import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule, Validators } from '@angular/forms';
import { Divider } from 'primeng/divider'; import { Divider } from 'primeng/divider';
import { IPosRequest, IPosResponse } from '../../models'; import { IPosRequest, IPosResponse } from '../../models';
import { ConsumerPosesService } from '../../services/poses.service'; import { ConsumerPosesService } from '../../services/poses.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'consumer-pos-form', selector: 'consumer-pos-form',
@@ -123,7 +123,7 @@ export class ConsumerPosFormComponent extends AbstractFormDialog<IPosRequest, IP
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} پایانه فروش`; return `${this.editMode ? 'ویرایش' : 'افزودن'} پایانه فروش`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,9 +1,9 @@
<app-page-data-list <app-page-data-list
pageTitle="لیست پایانه‌های فروش" pageTitle="لیست پایانه‌های فروش"
[columns]="columns" [columns]="columns"
[addNewCtaLabel]="'افزودن پایانه‌ی فروش جدید'" [addNewCtaLabel]="'افزودن پایانه فروش'"
emptyPlaceholderTitle="پایانه‌ی فروشی یافت نشد." emptyPlaceholderTitle="پایانه فروشی یافت نشد."
emptyPlaceholderDescription="برای افزودن پایانه‌ی فروش جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن پایانه فروش، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,5 +1,5 @@
<app-page-data-list <app-page-data-list
pageTitle="لیست فاکتور‌های صادر شده" pageTitle="لیست فاکتور‌ها"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="تا به حال فاکتور فروشی توسط این پایانه ایجاد نشده است." emptyPlaceholderTitle="تا به حال فاکتور فروشی توسط این پایانه ایجاد نشده است."
[items]="items()" [items]="items()"
@@ -24,7 +24,7 @@ export const consumerBusinessActivityGoodsNamedRoutes: NamedRoutes<TGoodsRouteNa
// import('../../views/goods/single.component').then((m) => m.SuperAdminUserPosComponent), // import('../../views/goods/single.component').then((m) => m.SuperAdminUserPosComponent),
// // @ts-ignore // // @ts-ignore
// meta: { // meta: {
// title: 'پایانه‌ی فروش', // title: 'پایانه فروش',
// pagePath: (businessId: string, complexId: string, goodId: string) => // pagePath: (businessId: string, complexId: string, goodId: string) =>
// `${baseUrl(businessId)}/${goodId}`, // `${baseUrl(businessId)}/${goodId}`,
// }, // },
@@ -23,7 +23,7 @@ export const consumerPosesNamedRoutes: NamedRoutes<TPosesRouteNames> = {
import('../../views/poses/single.component').then((m) => m.ConsumerComplexPosPageComponent), import('../../views/poses/single.component').then((m) => m.ConsumerComplexPosPageComponent),
// @ts-ignore // @ts-ignore
meta: { meta: {
title: 'پایانه‌ی فروش', title: 'پایانه فروش',
pagePath: (businessId: string, complexId: string, posId: string) => pagePath: (businessId: string, complexId: string, posId: string) =>
`${baseUrl(businessId, complexId)}/${posId}`, `${baseUrl(businessId, complexId)}/${posId}`,
}, },
@@ -1,7 +1,7 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<app-card-data cardTitle="اطلاعات فعالیت اقتصادی" [editable]="true" [(editMode)]="editMode"> <app-card-data cardTitle="اطلاعات فعالیت اقتصادی" [editable]="true" [(editMode)]="editMode">
<ng-template #moreActions> <ng-template #moreActions>
<a routerLink pButton [routerLink]="goodsPageRoute()" outlined>مدیریت کالاها</a> <a routerLink pButton [routerLink]="goodsPageRoute()" outlined size="small">مدیریت کالاها</a>
</ng-template> </ng-template>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="listKeyValue"> <div class="listKeyValue">
@@ -1,7 +1,7 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'لیست مشتری‌ها'" [pageTitle]="'لیست مشتری‌ها'"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="مشتری‌ای یافت نشد" emptyPlaceholderTitle="مشتری یافت نشد"
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showEdit]="true" [showEdit]="true"
@@ -1,5 +1,5 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'لیست فاکتورهای ایجاد شده'" [pageTitle]="'لیست فاکتورها'"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="فاکتوری یافت نشد" emptyPlaceholderTitle="فاکتوری یافت نشد"
[items]="items()" [items]="items()"
@@ -29,7 +29,7 @@ export class ConsumerCustomerSaleInvoiceListComponent extends AbstractList<ICust
field: 'pos', field: 'pos',
header: 'پایانه', header: 'پایانه',
customDataModel(item: ICustomerSaleInvoicesResponse) { customDataModel(item: ICustomerSaleInvoicesResponse) {
return `${item.pos.complex.business_activity.name}، شعبه ${item.pos.complex.name}، پایانه‌ی فروش ${item.pos.name}`; return `${item.pos.complex.business_activity.name}، شعبه ${item.pos.complex.name}، پایانه فروش ${item.pos.name}`;
}, },
}, },
{ {
@@ -1,7 +1,7 @@
<app-page-data-list <app-page-data-list
pageTitle="لیست پایانه‌های فروش" pageTitle="لیست پایانه‌های فروش"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="پایانه‌ی فروشی یافت نشد." emptyPlaceholderTitle="پایانه فروشی یافت نشد."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -22,7 +22,7 @@ export const ConsumerPosesNamedRoutes: NamedRoutes<TPosesRouteNames> = {
import('../../views/single.component').then((m) => m.ConsumerPosPageComponent), import('../../views/single.component').then((m) => m.ConsumerPosPageComponent),
// @ts-ignore // @ts-ignore
meta: { meta: {
title: 'پایانه‌ی فروش', title: 'پایانه فروش',
pagePath: (posId: string) => `${baseUrl}/${posId}`, pagePath: (posId: string) => `${baseUrl}/${posId}`,
}, },
}, },
@@ -1,5 +1,5 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'لیست فاکتورهای ایجاد شده'" [pageTitle]="'لیست فاکتورها'"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="فاکتوری یافت نشد" emptyPlaceholderTitle="فاکتوری یافت نشد"
[items]="items()" [items]="items()"
@@ -1,5 +1,5 @@
<shared-dialog <shared-dialog
header="ایجاد فعالیت اقتصادی" header="افزودن فعالیت اقتصادی"
[(visible)]="visible" [(visible)]="visible"
[modal]="true" [modal]="true"
[style]="{ width: '520px' }" [style]="{ width: '520px' }"
@@ -9,8 +9,8 @@
<p-stepper [value]="activeStep()" [linear]="true"> <p-stepper [value]="activeStep()" [linear]="true">
<p-step-list> <p-step-list>
<p-step [value]="1">فعالیت اقتصادی</p-step> <p-step [value]="1">فعالیت اقتصادی</p-step>
<p-step [value]="2" [disabled]="!businessActivity()">فروشگاه</p-step> <p-step [value]="2" [disabled]="!businessActivity()">شعبه</p-step>
<p-step [value]="3" [disabled]="!complex()">پایانه‌ی فروشگاهی</p-step> <p-step [value]="3" [disabled]="!complex()">پایانه فروشگاهی</p-step>
</p-step-list> </p-step-list>
</p-stepper> </p-stepper>
@@ -1,8 +1,8 @@
import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog'; import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { IBusinessActivityResponse } from '../../models'; import { IBusinessActivityResponse } from '../../models';
import { ConsumerBusinessActivitiesFormComponent } from './form.component'; import { ConsumerBusinessActivitiesFormComponent } from './form.component';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'partner-consumer-businessActivities-form', selector: 'partner-consumer-businessActivities-form',
@@ -18,7 +18,7 @@ export class ConsumerBusinessActivitiesFormDialogComponent extends AbstractDialo
@Input() businessActivityId!: string; @Input() businessActivityId!: string;
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} فعالیت اقتصادی`; return `${this.editMode ? 'ویرایش' : 'افزودن'} فعالیت اقتصادی`;
} }
onFormSubmit(response: IBusinessActivityResponse) { onFormSubmit(response: IBusinessActivityResponse) {
@@ -1,13 +1,13 @@
<form [formGroup]="form" (submit)="submit()" class="flex flex-col gap-4"> <form [formGroup]="form" (submit)="submit()" class="flex flex-col gap-4">
<field-name [control]="$any(form).controls.name" /> <field-name [control]="form.controls.name" />
<field-economic-code [control]="$any(form).controls.economic_code" /> <field-economic-code [control]="form.controls.economic_code" />
<field-fiscal-code [control]="$any(form).controls.fiscal_id" /> <field-fiscal-code [control]="form.controls.fiscal_id" />
<field-partner-token [control]="$any(form).controls.partner_token" /> <field-partner-token [control]="form.controls.partner_token" />
<field-guild-id [control]="$any(form).controls.guild_id" /> <field-guild-id [control]="form.controls.guild_id" />
@if (!editMode) { @if (!editMode) {
<p-divider align="center"> اطلاعات لایسنس </p-divider> <p-divider align="center"> اطلاعات لایسنس </p-divider>
<field-license-starts-at [control]="$any(form).controls.license_starts_at" /> <field-license-starts-at [control]="form.controls.license_starts_at" />
} }
<app-form-footer-actions [submitLabel]="'ذخیره'" [loading]="submitLoading()" (onCancel)="close()" /> <app-form-footer-actions [submitLabel]="'ذخیره'" [loading]="submitLoading()" (onCancel)="close()" />
@@ -73,6 +73,7 @@ export class ConsumerBusinessActivitiesFormComponent extends AbstractForm<
submitForm() { submitForm() {
const formValue = this.form.value as IBusinessActivityRequest; const formValue = this.form.value as IBusinessActivityRequest;
formValue.economic_code = String(formValue.economic_code);
if (this.editMode) { if (this.editMode) {
return this.service.update(this.consumerId, this.businessActivityId, formValue); return this.service.update(this.consumerId, this.businessActivityId, formValue);
} }
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت فعالیت‌های اقتصادی" pageTitle="مدیریت فعالیت‌های اقتصادی"
[addNewCtaLabel]="'افزودن فعالیت اقتصادی جدید'" [addNewCtaLabel]="'افزودن فعالیت اقتصادی'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="فعالیت اقتصادی‌ای یافت نشد." emptyPlaceholderTitle="فعالیت اقتصادی‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن فعالیت اقتصادی جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن فعالیت اقتصادی، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,5 +1,5 @@
<shared-dialog <shared-dialog
header="ایجاد فروشگاه" header="افزودن شعبه"
[(visible)]="visible" [(visible)]="visible"
[modal]="true" [modal]="true"
[style]="{ width: '400px' }" [style]="{ width: '400px' }"
@@ -8,8 +8,8 @@
> >
<p-stepper [value]="activeStep()" [linear]="true"> <p-stepper [value]="activeStep()" [linear]="true">
<p-step-list> <p-step-list>
<p-step [value]="1">فروشگاه</p-step> <p-step [value]="1">شعبه</p-step>
<p-step [value]="2" [disabled]="!complex()">پایانه‌ی روشگاهی</p-step> <p-step [value]="2" [disabled]="!complex()">پایانه‌ فروشگاهی</p-step>
</p-step-list> </p-step-list>
</p-stepper> </p-stepper>
@@ -1,8 +1,8 @@
import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog'; import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { IComplexResponse } from '../../models'; import { IComplexResponse } from '../../models';
import { ConsumerComplexFormContentComponent } from './form.component'; import { ConsumerComplexFormContentComponent } from './form.component';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'partner-consumer-complex-form', selector: 'partner-consumer-complex-form',
@@ -19,7 +19,7 @@ export class ConsumerComplexFormDialogComponent extends AbstractDialog {
@Input() complexId!: string; @Input() complexId!: string;
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} شعبه`; return `${this.editMode ? 'ویرایش' : 'افزودن'} شعبه`;
} }
onFormSubmit(response: IComplexResponse) { onFormSubmit(response: IComplexResponse) {
@@ -1,12 +1,8 @@
// import { CatalogRolesComponent } from '@/shared/catalog/roles'; // import { CatalogRolesComponent } from '@/shared/catalog/roles';
import { AbstractForm } from '@/shared/abstractClasses'; import { AbstractForm } from '@/shared/abstractClasses';
import { import { AddressComponent, BranchCodeComponent, NameComponent } from '@/shared/components';
NameComponent,
AddressComponent,
BranchCodeComponent,
} from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { IComplexRequest, IComplexResponse } from '../../models'; import { IComplexRequest, IComplexResponse } from '../../models';
@@ -44,7 +40,7 @@ export class ConsumerComplexFormContentComponent extends AbstractForm<
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} شعبه`; return `${this.editMode ? 'ویرایش' : 'افزودن'} شعبه`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت شعب" pageTitle="مدیریت شعب"
[addNewCtaLabel]="'افزودن شعبه‌ جدید'" [addNewCtaLabel]="'افزودن شعبه‌'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="شعبه‌ای یافت نشد." emptyPlaceholderTitle="شعبه‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن شعبه‌ جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن شعبه‌، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,5 +1,5 @@
<shared-dialog <shared-dialog
header="ایجاد مشتری جدید" header="افزودن مشتری"
[(visible)]="visible" [(visible)]="visible"
[modal]="true" [modal]="true"
[style]="{ width: '640px' }" [style]="{ width: '640px' }"
@@ -10,8 +10,8 @@
<p-step-list> <p-step-list>
<p-step [value]="1">اطلاعات اولیه</p-step> <p-step [value]="1">اطلاعات اولیه</p-step>
<p-step [value]="2" [disabled]="!consumer()">فعالیت اقتصادی</p-step> <p-step [value]="2" [disabled]="!consumer()">فعالیت اقتصادی</p-step>
<p-step [value]="3" [disabled]="!businessActivity()">فروشگاه</p-step> <p-step [value]="3" [disabled]="!businessActivity()">شعبه</p-step>
<p-step [value]="4" [disabled]="!complex()">پایانه‌ی فروشگاهی</p-step> <p-step [value]="4" [disabled]="!complex()">پایانه فروشگاهی</p-step>
</p-step-list> </p-step-list>
</p-stepper> </p-stepper>
@@ -1,8 +1,8 @@
import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog'; import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { IPartnerConsumerResponse } from '../models'; import { IPartnerConsumerResponse } from '../models';
import { ConsumerUserFormContentComponent } from './form.component'; import { ConsumerUserFormContentComponent } from './form.component';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'partner-consumer-form', selector: 'partner-consumer-form',
@@ -17,7 +17,7 @@ export class ConsumerUserFormDialogComponent extends AbstractDialog {
@Input() consumerId?: string; @Input() consumerId?: string;
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} مشتری`; return `${this.editMode ? 'ویرایش' : 'افزودن'} مشتری`;
} }
onFormSubmit(response: IPartnerConsumerResponse) { onFormSubmit(response: IPartnerConsumerResponse) {
@@ -1,11 +1,11 @@
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { UikitFlatpickrJalaliComponent } from '@/uikit'; import { UikitFlatpickrJalaliComponent } from '@/uikit';
import { Component, computed, inject, Input } from '@angular/core'; import { Component, computed, inject, Input } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { ILicenseRequest, ILicenseResponse } from '../../models'; import { ILicenseRequest, ILicenseResponse } from '../../models';
import { LicensesService } from '../../services/licenses.service'; import { LicensesService } from '../../services/licenses.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'partner-consumer-license-form', selector: 'partner-consumer-license-form',
@@ -25,7 +25,7 @@ export class ConsumerLicenseFormComponent extends AbstractFormDialog<
@Input() licenseId?: string; @Input() licenseId?: string;
private service = inject(LicensesService); private service = inject(LicensesService);
preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} لایسنس`); preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'افزودن'} لایسنس`);
initForm = () => { initForm = () => {
const form = this.fb.group({ const form = this.fb.group({
@@ -1,8 +1,8 @@
import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog'; import { AbstractDialog } from '@/shared/abstractClasses/abstract-dialog';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { IPosResponse } from '../../models'; import { IPosResponse } from '../../models';
import { ConsumerPosFormContentComponent } from './form.component'; import { ConsumerPosFormContentComponent } from './form.component';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'partner-consumer-pos-form', selector: 'partner-consumer-pos-form',
@@ -20,7 +20,7 @@ export class ConsumerPosFormDialogComponent extends AbstractDialog {
@Input() posId!: string; @Input() posId!: string;
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} پایانه فروش`; return `${this.editMode ? 'ویرایش' : 'افزودن'} پایانه فروش`;
} }
onFormSubmit(response: IPosResponse) { onFormSubmit(response: IPosResponse) {
@@ -2,16 +2,16 @@
import { MustMatch } from '@/core/validators'; import { MustMatch } from '@/core/validators';
import { AbstractForm } from '@/shared/abstractClasses'; import { AbstractForm } from '@/shared/abstractClasses';
import { import {
NameComponent,
SharedPasswordInputComponent,
DeviceIdComponent, DeviceIdComponent,
NameComponent,
PosTypeComponent,
ProviderIdComponent, ProviderIdComponent,
SerialNumberComponent, SerialNumberComponent,
PosTypeComponent, SharedPasswordInputComponent,
UsernameComponent, UsernameComponent,
} from '@/shared/components'; } from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule, Validators } from '@angular/forms';
import { Divider } from 'primeng/divider'; import { Divider } from 'primeng/divider';
@@ -122,7 +122,7 @@ export class ConsumerPosFormContentComponent extends AbstractForm<IPosRequest, I
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} پایانه فروش`; return `${this.editMode ? 'ویرایش' : 'افزودن'} پایانه فروش`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,9 +1,9 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت پایانه‌های فروش" pageTitle="مدیریت پایانه‌های فروش"
[addNewCtaLabel]="'افزودن پایانه‌ی فروش جدید'" [addNewCtaLabel]="'افزودن پایانه فروش'"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="پایانه‌ی فروشی یافت نشد." emptyPlaceholderTitle="پایانه فروشی یافت نشد."
emptyPlaceholderDescription="برای افزودن پایانه‌ی فروش جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن پایانه فروش، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showAdd]="true" [showAdd]="true"
@@ -24,7 +24,7 @@ export const partnerConsumerPosesNamedRoutes: NamedRoutes<TPosesRouteNames> = {
import('../../views/poses/single.component').then((m) => m.PartnerUserPosComponent), import('../../views/poses/single.component').then((m) => m.PartnerUserPosComponent),
// @ts-ignore // @ts-ignore
meta: { meta: {
title: 'پایانه‌ی فروش', title: 'پایانه فروش',
pagePath: (consumerId: string, businessId: string, complexId: string, posId: string) => pagePath: (consumerId: string, businessId: string, complexId: string, posId: string) =>
`${baseUrl(consumerId, businessId, complexId)}/${posId}`, `${baseUrl(consumerId, businessId, complexId)}/${posId}`,
}, },
@@ -1,7 +1,7 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<app-card-data cardTitle="اطلاعات فعالیت اقتصادی" [editable]="true" [(editMode)]="editMode"> <app-card-data cardTitle="اطلاعات فعالیت اقتصادی" [editable]="true" [(editMode)]="editMode">
<ng-template #moreActions> <ng-template #moreActions>
<button pButton outlined (click)="showAccountsChargeDialog()">شارژ کاربر</button> <button pButton outlined size="small" (click)="showAccountsChargeDialog()">شارژ کاربر</button>
</ng-template> </ng-template>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="listKeyValue"> <div class="listKeyValue">
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="لیست مشتری‌ها" pageTitle="لیست مشتری‌ها"
[addNewCtaLabel]="'افزودن مشتری جدید'" [addNewCtaLabel]="'افزودن مشتری'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="مشتری‌ای یافت نشد" emptyPlaceholderTitle="مشتری یافت نشد"
emptyPlaceholderDescription="برای افزودن مشتری جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن مشتری، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,7 +1,7 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'لیست مشتری‌ها'" [pageTitle]="'لیست مشتری‌ها'"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="مشتری‌ای یافت نشد" emptyPlaceholderTitle="مشتری یافت نشد"
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showEdit]="true" [showEdit]="true"
@@ -18,7 +18,10 @@
</ng-template> </ng-template>
<ng-template #topbarEnd> <ng-template #topbarEnd>
<p-button (click)="toggleMenu()" icon="pi pi-user" outlined size="large" /> <div class="">
<p-menu #menu [model]="profileMenuItems" [popup]="true" />
<p-button (click)="menu.toggle($event)" icon="pi pi-user" text severity="contrast" size="large" />
</div>
</ng-template> </ng-template>
@if (loading()) { @if (loading()) {
@@ -14,6 +14,7 @@ import { RouterOutlet } from '@angular/router';
import { MenuItem } from 'primeng/api'; import { MenuItem } from 'primeng/api';
import { Button, ButtonDirective } from 'primeng/button'; import { Button, ButtonDirective } from 'primeng/button';
import { Card } from 'primeng/card'; import { Card } from 'primeng/card';
import { Menu } from 'primeng/menu';
import images from 'src/assets/images'; import images from 'src/assets/images';
import { PosInfoStore, PosProfileStore } from '../store'; import { PosInfoStore, PosProfileStore } from '../store';
import { PosChooseCardsComponent } from './choose-pos.component'; import { PosChooseCardsComponent } from './choose-pos.component';
@@ -30,6 +31,7 @@ import { PosMainMenuSidebarComponent } from './mainMenuSidebar/main-menu-sidebar
PosChooseCardsComponent, PosChooseCardsComponent,
Button, Button,
PosMainMenuSidebarComponent, PosMainMenuSidebarComponent,
Menu,
], ],
}) })
export class PosLayoutComponent implements AfterViewInit { export class PosLayoutComponent implements AfterViewInit {
@@ -1,15 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت حساب‌های کاربری" pageTitle="لیست حساب‌های کاربری"
[addNewCtaLabel]="'افزودن حساب کاربری جدید'"
[columns]="columns" [columns]="columns"
[showAdd]="true"
emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد." emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن حساب کاربری جدید، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
[showAdd]="true"
(onAdd)="openAddForm()"
(onRefresh)="refresh()" (onRefresh)="refresh()"
> >
</app-page-data-list> </app-page-data-list>
@@ -33,7 +33,7 @@ export class ConsumerAccountListComponent extends AbstractList<IConsumerAccountR
}, },
{ {
field: 'pos', field: 'pos',
header: 'پایانه‌ی مرتبط', header: 'پایانه مرتبط',
customDataModel: (item) => customDataModel: (item) =>
`${item.pos.name} (${item.pos.complex.name} - ${item.pos.complex.business_activity.name})`, `${item.pos.name} (${item.pos.complex.name} - ${item.pos.complex.business_activity.name})`,
}, },
@@ -52,7 +52,7 @@ export class ConsumerBusinessActivitiesFormComponent extends AbstractFormDialog<
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} فعالیت اقتصادی`; return `${this.editMode ? 'ویرایش' : 'افزودن'} فعالیت اقتصادی`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,17 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت فعالیت‌های اقتصادی" pageTitle="لیست فعالیت‌های اقتصادی"
[addNewCtaLabel]="'افزودن فعالیت اقتصادی جدید'"
[columns]="columns" [columns]="columns"
[showAdd]="true"
emptyPlaceholderTitle="فعالیت اقتصادی‌ای یافت نشد." emptyPlaceholderTitle="فعالیت اقتصادی‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن فعالیت اقتصادی جدید، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
[showAdd]="true"
[showEdit]="true"
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)" (onDetails)="toSinglePage($event)"
(onRefresh)="refresh()" (onRefresh)="refresh()"
> >
@@ -1,17 +1,13 @@
// import { CatalogRolesComponent } from '@/shared/catalog/roles'; // import { CatalogRolesComponent } from '@/shared/catalog/roles';
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { import { AddressComponent, BranchCodeComponent, NameComponent } from '@/shared/components';
NameComponent, import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
AddressComponent,
BranchCodeComponent,
} from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { IComplexRequest, IComplexResponse } from '../../models'; import { IComplexRequest, IComplexResponse } from '../../models';
import { AdminComplexesService } from '../../services/complexes.service'; import { AdminComplexesService } from '../../services/complexes.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'superAdmin-consumer-complex-form', selector: 'superAdmin-consumer-complex-form',
@@ -46,7 +42,7 @@ export class ConsumerComplexFormComponent extends AbstractFormDialog<
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} شعبه`; return `${this.editMode ? 'ویرایش' : 'افزودن'} شعبه`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,17 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت شعب" pageTitle="مدیریت شعب"
[addNewCtaLabel]="'افزودن شعبه‌ جدید'"
[columns]="columns" [columns]="columns"
[showAdd]="true"
emptyPlaceholderTitle="شعبه‌ای یافت نشد." emptyPlaceholderTitle="شعبه‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن شعبه‌ جدید، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
[showAdd]="true"
[showEdit]="true"
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)" (onDetails)="toSinglePage($event)"
(onRefresh)="refresh()" (onRefresh)="refresh()"
> >
@@ -1,9 +1,9 @@
import { MustMatch } from '@/core/validators'; import { MustMatch } from '@/core/validators';
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { SharedPasswordInputComponent, UsernameComponent } from '@/shared/components'; import { SharedPasswordInputComponent, UsernameComponent } from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component'; import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, computed, inject, Input } from '@angular/core'; import { Component, computed, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule, Validators } from '@angular/forms';
import { Divider } from 'primeng/divider'; import { Divider } from 'primeng/divider';
@@ -29,7 +29,7 @@ export class ConsumerUserFormComponent extends AbstractFormDialog<
@Input() consumerId?: string; @Input() consumerId?: string;
private service = inject(ConsumersService); private service = inject(ConsumersService);
preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} مشتری`); preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'افزودن'} مشتری`);
initForm = () => { initForm = () => {
const form = this.fb.group({ const form = this.fb.group({
@@ -1,4 +1,5 @@
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { UikitFlatpickrJalaliComponent } from '@/uikit'; import { UikitFlatpickrJalaliComponent } from '@/uikit';
import { Component, computed, inject, Input } from '@angular/core'; import { Component, computed, inject, Input } from '@angular/core';
@@ -6,7 +7,6 @@ import { ReactiveFormsModule } from '@angular/forms';
import { PartnerSelectComponent } from '../../../partners/shared/select.component'; import { PartnerSelectComponent } from '../../../partners/shared/select.component';
import { ILicenseRequest, ILicenseResponse } from '../../models'; import { ILicenseRequest, ILicenseResponse } from '../../models';
import { LicensesService } from '../../services/licenses.service'; import { LicensesService } from '../../services/licenses.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'superAdmin-consumer-license-form', selector: 'superAdmin-consumer-license-form',
@@ -27,7 +27,7 @@ export class ConsumerLicenseFormComponent extends AbstractFormDialog<
@Input() licenseId?: string; @Input() licenseId?: string;
private service = inject(LicensesService); private service = inject(LicensesService);
preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} لایسنس`); preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'افزودن'} لایسنس`);
initForm = () => { initForm = () => {
const form = this.fb.group({ const form = this.fb.group({
@@ -1,19 +1,19 @@
// import { CatalogRolesComponent } from '@/shared/catalog/roles'; // import { CatalogRolesComponent } from '@/shared/catalog/roles';
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { import {
NameComponent,
DeviceIdComponent, DeviceIdComponent,
NameComponent,
PosTypeComponent,
ProviderIdComponent, ProviderIdComponent,
SerialNumberComponent, SerialNumberComponent,
PosTypeComponent,
} from '@/shared/components'; } from '@/shared/components';
import { fieldControl } from '@/shared/constants/fields'; import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { IPosRequest, IPosResponse } from '../../models'; import { IPosRequest, IPosResponse } from '../../models';
import { AdminPosesService } from '../../services/poses.service'; import { AdminPosesService } from '../../services/poses.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'superAdmin-consumer-pos-form', selector: 'superAdmin-consumer-pos-form',
@@ -77,7 +77,7 @@ export class ConsumerPosFormComponent extends AbstractFormDialog<IPosRequest, IP
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} پایانه فروش`; return `${this.editMode ? 'ویرایش' : 'افزودن'} پایانه فروش`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,17 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت پایانه‌های فروش" pageTitle="لیست پایانه‌های فروش"
[addNewCtaLabel]="'افزودن پایانه‌ی فروش جدید'"
[columns]="columns" [columns]="columns"
[showAdd]="true" emptyPlaceholderTitle="پایانه فروشی یافت نشد."
emptyPlaceholderTitle="پایانه‌ی فروشی یافت نشد."
emptyPlaceholderDescription="برای افزودن پایانه‌ی فروش جدید، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
[showAdd]="true"
[showEdit]="true"
(onAdd)="openAddForm()"
(onEdit)="onEditClick($event)"
(onDetails)="toSinglePage($event)" (onDetails)="toSinglePage($event)"
(onRefresh)="refresh()" (onRefresh)="refresh()"
> >
@@ -24,7 +24,7 @@ export const superAdminConsumerPosesNamedRoutes: NamedRoutes<TPosesRouteNames> =
import('../../views/poses/single.component').then((m) => m.SuperAdminUserPosComponent), import('../../views/poses/single.component').then((m) => m.SuperAdminUserPosComponent),
// @ts-ignore // @ts-ignore
meta: { meta: {
title: 'پایانه‌ی فروش', title: 'پایانه فروش',
pagePath: (consumerId: string, businessId: string, complexId: string, posId: string) => pagePath: (consumerId: string, businessId: string, complexId: string, posId: string) =>
`${baseUrl(consumerId, businessId, complexId)}/${posId}`, `${baseUrl(consumerId, businessId, complexId)}/${posId}`,
}, },
@@ -1,5 +1,5 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<app-card-data cardTitle="اطلاعات فعالیت اقتصادی" [editable]="true" [(editMode)]="editMode"> <app-card-data cardTitle="اطلاعات فعالیت اقتصادی" [(editMode)]="editMode">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="listKeyValue"> <div class="listKeyValue">
<app-key-value label="عنوان" [value]="businessActivity()?.name" /> <app-key-value label="عنوان" [value]="businessActivity()?.name" />
@@ -1,5 +1,5 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<app-card-data cardTitle="اطلاعات شعبه" [editable]="true" [(editMode)]="editMode"> <app-card-data cardTitle="اطلاعات شعبه" [(editMode)]="editMode">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="listKeyValue"> <div class="listKeyValue">
<app-key-value label="عنوان" [value]="complex()?.name" /> <app-key-value label="عنوان" [value]="complex()?.name" />
@@ -1,7 +1,7 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت مشتری‌ها" pageTitle="مدیریت مشتری‌ها"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="مشتری‌ای یافت نشد" emptyPlaceholderTitle="مشتری یافت نشد"
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,5 +1,5 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<app-card-data cardTitle="اطلاعات پایانه‌ فروش" [editable]="true" [(editMode)]="editMode"> <app-card-data cardTitle="اطلاعات پایانه‌ فروش" [(editMode)]="editMode">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="listKeyValue"> <div class="listKeyValue">
<app-key-value label="عنوان" [value]="pos()?.name" /> <app-key-value label="عنوان" [value]="pos()?.name" />
@@ -1,5 +1,5 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<app-card-data cardTitle="اطلاعات مشتری" [editable]="true" [(editMode)]="editMode"> <app-card-data cardTitle="اطلاعات مشتری" [(editMode)]="editMode">
<ng-template #moreActions> </ng-template> <ng-template #moreActions> </ng-template>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="listKeyValue"> <div class="listKeyValue">
@@ -1,11 +1,11 @@
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { InputComponent } from '@/shared/components'; import { InputComponent } from '@/shared/components';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { Component, computed, inject, Input } from '@angular/core'; import { Component, computed, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule, Validators } from '@angular/forms';
import { IDeviceBrandRequest, IDeviceBrandResponse } from '../models'; import { IDeviceBrandRequest, IDeviceBrandResponse } from '../models';
import { DeviceBrandsService } from '../services/main.service'; import { DeviceBrandsService } from '../services/main.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'deviceBrand-form', selector: 'deviceBrand-form',
@@ -26,7 +26,7 @@ export class DeviceBrandFormComponent extends AbstractFormDialog<
}), }),
}); });
preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} برند دستگاه`); preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'افزودن'} برند دستگاه`);
override ngOnChanges() { override ngOnChanges() {
this.form.patchValue(this.initialValues ?? {}); this.form.patchValue(this.initialValues ?? {});
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت برند دستگاه‌ها" pageTitle="مدیریت برند دستگاه‌ها"
[addNewCtaLabel]="'افزودن برند دستگاه‍ جدید'" [addNewCtaLabel]="'افزودن برند دستگاه‍'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="برند دستگاه یافت نشد" emptyPlaceholderTitle="برند دستگاه یافت نشد"
emptyPlaceholderDescription="برای افزودن برند دستگاه جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن برند دستگاه، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showAdd]="true" [showAdd]="true"
@@ -2,12 +2,12 @@
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { CatalogDeviceBrandSelectComponent } from '@/shared/catalog/deviceBrands'; import { CatalogDeviceBrandSelectComponent } from '@/shared/catalog/deviceBrands';
import { InputComponent } from '@/shared/components'; import { InputComponent } from '@/shared/components';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule, Validators } from '@angular/forms';
import { IDeviceRequest, IDeviceResponse } from '../models'; import { IDeviceRequest, IDeviceResponse } from '../models';
import { SuperAdminDeviceService } from '../services/main.service'; import { SuperAdminDeviceService } from '../services/main.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'superAdmin-device-form', selector: 'superAdmin-device-form',
@@ -35,7 +35,7 @@ export class UserComplexFormComponent extends AbstractFormDialog<IDeviceRequest,
form = this.initForm(); form = this.initForm();
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} دستگاه`; return `${this.editMode ? 'ویرایش' : 'افزودن'} دستگاه`;
} }
override ngOnChanges(): void { override ngOnChanges(): void {
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت دستگاه‌ها" pageTitle="مدیریت دستگاه‌ها"
[addNewCtaLabel]="'افزودن دستگاه جدید'" [addNewCtaLabel]="'افزودن دستگاه'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="دستگاه یافت نشد" emptyPlaceholderTitle="دستگاه یافت نشد"
emptyPlaceholderDescription="برای افزودن دستگاه جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن دستگاه، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showAdd]="true" [showAdd]="true"
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'مدیریت دسته‌بندی‌های کالا'" [pageTitle]="'مدیریت دسته‌بندی‌های کالا'"
[addNewCtaLabel]="'افزودن دسته‌بندی جدید'" [addNewCtaLabel]="'افزودن دسته‌بندی'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="دسته‌بندی یافت نشد" emptyPlaceholderTitle="دسته‌بندی یافت نشد"
emptyPlaceholderDescription="برای افزودن دسته‌بندی جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن دسته‌بندی، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -51,7 +51,7 @@ export class GuildGoodFormComponent extends AbstractFormDialog<
}); });
get preparedTitle() { get preparedTitle() {
return `${this.editMode ? 'ویرایش' : 'ایجاد'} کالا`; return `${this.editMode ? 'ویرایش' : 'افزودن'} کالا`;
} }
changeFile(payload: onSelectFileArgs) { changeFile(payload: onSelectFileArgs) {
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت کالاها" pageTitle="مدیریت کالاها"
[addNewCtaLabel]="'افزودن کالای جدید'" [addNewCtaLabel]="'افزودن کالای'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="کالایی یافت نشد" emptyPlaceholderTitle="کالایی یافت نشد"
emptyPlaceholderDescription="برای افزودن کالای جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن کالای، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showAdd]="true" [showAdd]="true"
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'مدیریت اصناف'" [pageTitle]="'مدیریت اصناف'"
[addNewCtaLabel]="'افزودن صنف جدید'" [addNewCtaLabel]="'افزودن صنف'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="صنفی یافت نشد" emptyPlaceholderTitle="صنفی یافت نشد"
emptyPlaceholderDescription="برای افزودن صنف جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن صنف، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,9 +1,9 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت حساب‌های کاربری" pageTitle="مدیریت حساب‌های کاربری"
[addNewCtaLabel]="'افزودن حساب کاربری جدید'" [addNewCtaLabel]="'افزودن حساب کاربری'"
[columns]="columns" [columns]="columns"
emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد." emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن حساب کاربری جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن حساب کاربری، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
(onAdd)="openAddForm()" (onAdd)="openAddForm()"
@@ -79,7 +79,7 @@ export class GuildFormComponent extends AbstractFormDialog<IPartnerRequest, IPar
form = this.initForm(); form = this.initForm();
preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} شریک تجاری`); preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'افزودن'} شریک تجاری`);
changeFile(payload: onSelectFileArgs) { changeFile(payload: onSelectFileArgs) {
this.logo.set(payload.file); this.logo.set(payload.file);
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت شرکای تجاری" pageTitle="مدیریت شرکای تجاری"
[addNewCtaLabel]="'افزودن شریک تجاری جدید'" [addNewCtaLabel]="'افزودن شریک تجاری'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="شریک تجاری‌ای یافت نشد" emptyPlaceholderTitle="شریک تجاری‌ای یافت نشد"
emptyPlaceholderDescription="برای افزودن شریک تجاری جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن شریک تجاری، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,13 +1,13 @@
import { MustMatch } from '@/core/validators'; import { MustMatch } from '@/core/validators';
import { AbstractFormDialog } from '@/shared/abstractClasses'; import { AbstractFormDialog } from '@/shared/abstractClasses';
import { InputComponent, SharedPasswordInputComponent } from '@/shared/components'; import { InputComponent, SharedPasswordInputComponent } from '@/shared/components';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { Component, computed, inject, Input } from '@angular/core'; import { Component, computed, inject, Input } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; import { ReactiveFormsModule, Validators } from '@angular/forms';
import { Divider } from 'primeng/divider'; import { Divider } from 'primeng/divider';
import { IProviderRequest, IProviderResponse } from '../models'; import { IProviderRequest, IProviderResponse } from '../models';
import { ProvidersService } from '../services/main.service'; import { ProvidersService } from '../services/main.service';
import { SharedDialogComponent } from '@/shared/components/dialog/dialog.component';
@Component({ @Component({
selector: 'provider-form', selector: 'provider-form',
@@ -72,7 +72,7 @@ export class ProviderFormComponent extends AbstractFormDialog<IProviderRequest,
form = this.initForm(); form = this.initForm();
preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} ارایه‌دهنده`); preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'افزودن'} ارایه‌دهنده`);
override ngOnChanges() { override ngOnChanges() {
this.form.patchValue(this.initialValues ?? {}); this.form.patchValue(this.initialValues ?? {});
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'مدیریت ارایه‌دهنده‌گان'" [pageTitle]="'مدیریت ارایه‌دهنده‌گان'"
[addNewCtaLabel]="'افزودن ارایه‌دهنده‌ جدید'" [addNewCtaLabel]="'افزودن ارایه‌دهنده‌'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="ارایه‌دهنده‌ی یافت نشد" emptyPlaceholderTitle="ارایه‌دهنده‌ی یافت نشد"
emptyPlaceholderDescription="برای افزودن ارایه‌دهنده‌ی جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن ارایه‌دهنده‌ی، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
pageTitle="مدیریت حساب‌های کاربری" pageTitle="مدیریت حساب‌های کاربری"
[addNewCtaLabel]="'افزودن حساب کاربری جدید'" [addNewCtaLabel]="'افزودن حساب کاربری'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد." emptyPlaceholderTitle="حساب کاربری‌ای یافت نشد."
emptyPlaceholderDescription="برای افزودن حساب کاربری جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن حساب کاربری، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -1,10 +1,10 @@
<app-page-data-list <app-page-data-list
[pageTitle]="'مدیریت کاربران'" [pageTitle]="'مدیریت کاربران'"
[addNewCtaLabel]="'افزودن کاربر جدید'" [addNewCtaLabel]="'افزودن کاربر'"
[columns]="columns" [columns]="columns"
[showAdd]="true" [showAdd]="true"
emptyPlaceholderTitle="کاربری یافت نشد" emptyPlaceholderTitle="کاربری یافت نشد"
emptyPlaceholderDescription="برای افزودن کاربر جدید، روی دکمهٔ بالا کلیک کنید." emptyPlaceholderDescription="برای افزودن کاربر، روی دکمهٔ بالا کلیک کنید."
[items]="items()" [items]="items()"
[loading]="loading()" [loading]="loading()"
[showDetails]="true" [showDetails]="true"
@@ -7,11 +7,10 @@
<p-button <p-button
text text
size="large" size="large"
class="layout-menu-button layout-topbar-action me-2" icon="pi pi-bars"
class="layout-menu-button layout-topbar-action"
(click)="layoutService.onMenuToggle()" (click)="layoutService.onMenuToggle()"
> ></p-button>
<i class="pi pi-bars"></i>
</p-button>
} }
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<img [src]="logo" width="32" /> <img [src]="logo" width="32" />
@@ -8,7 +8,7 @@ import { Button } from 'primeng/button';
}) })
export class FormFooterActionsComponent { export class FormFooterActionsComponent {
@Input() submitLabel = 'تایید'; @Input() submitLabel = 'تایید';
@Input() cancelLabel = 'لغو'; @Input() cancelLabel = 'انصراف';
@Input() loading = false; @Input() loading = false;
@Input() disabled = false; @Input() disabled = false;
@Output() onSubmit = new EventEmitter<void>(); @Output() onSubmit = new EventEmitter<void>();
@@ -20,6 +20,9 @@
<ng-template #header let-columns> <ng-template #header let-columns>
<tr> <tr>
@if (showIndex) {
<th [style]="{ width: '3rem', minWidth: '3rem' }"></th>
}
@for (col of columns; track col.header) { @for (col of columns; track col.header) {
<th <th
[style]=" [style]="
@@ -40,11 +43,14 @@
<ng-template #body let-item let-i="rowIndex" let-expanded="expanded"> <ng-template #body let-item let-i="rowIndex" let-expanded="expanded">
<tr> <tr>
<td>
@if (showIndex) {
{{ i * (currentPage || 1) + 1 }}
}
</td>
@for (col of columns; track col.field) { @for (col of columns; track col.field) {
<td> <td>
@if (col.type === "index") { @if (col.type === "thumbnail") {
{{ i * (currentPage || 1) + 1 }}
} @else if (col.type === "thumbnail") {
<div <div
class="w-20 h-20 rounded-2xl overflow-hidden bg-surface-50 cursor-pointer" class="w-20 h-20 rounded-2xl overflow-hidden bg-surface-50 cursor-pointer"
(click)="openThumbnailModal(item)" (click)="openThumbnailModal(item)"
@@ -97,6 +97,7 @@ export class AppPageDataListTableView<I = any> {
@Input() expandColumns?: Maybe<IColumn[]> = null; @Input() expandColumns?: Maybe<IColumn[]> = null;
@Input() dataKey?: string = 'items'; @Input() dataKey?: string = 'items';
@Input() showPaginator?: boolean; @Input() showPaginator?: boolean;
@Input() showIndex?: boolean = true;
@ContentChild('filter', { static: true }) filter!: TemplateRef<any> | null; @ContentChild('filter', { static: true }) filter!: TemplateRef<any> | null;
@ContentChild('paginator', { static: true }) paginator!: TemplateRef<any> | null; @ContentChild('paginator', { static: true }) paginator!: TemplateRef<any> | null;
@@ -6,7 +6,7 @@
variant="outlined" variant="outlined"
severity="primary" severity="primary"
(click)="edit.emit()" (click)="edit.emit()"
title="ویرایش" pTooltip="ویرایش"
/> />
} }
@if (showDelete) { @if (showDelete) {
@@ -16,10 +16,10 @@
variant="outlined" variant="outlined"
severity="danger" severity="danger"
(click)="delete.emit()" (click)="delete.emit()"
title="حذف" pTooltip="ویرایش"
/> />
} }
@if (showDetails) { @if (showDetails) {
<p-button size="small" icon="pi pi-chevron-left" (click)="details.emit()" [title]="showDetailsText" /> <p-button size="small" icon="pi pi-chevron-left" (click)="details.emit()" [pTooltip]="showDetailsText" />
} }
</td> </td>
@@ -1,11 +1,12 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { Button } from 'primeng/button'; import { Button } from 'primeng/button';
import { Tooltip } from 'primeng/tooltip';
@Component({ @Component({
selector: '[table-action-row]', selector: '[table-action-row]',
standalone: true, standalone: true,
imports: [CommonModule, Button], imports: [CommonModule, Button, Tooltip],
templateUrl: './table-action-row.component.html', templateUrl: './table-action-row.component.html',
}) })
export class TableActionRowComponent { export class TableActionRowComponent {
@@ -27,7 +27,7 @@
// @Input() optionLabel: string = 'name'; // @Input() optionLabel: string = 'name';
// @Input() label!: string; // @Input() label!: string;
// @Input() placeholder!: string; // @Input() placeholder!: string;
// @Input() addCtaLabel: string = 'ایجاد مورد جدید'; // @Input() addCtaLabel: string = 'ایجاد مورد';
// @Output() onChange = new EventEmitter<Maybe<T>>(); // @Output() onChange = new EventEmitter<Maybe<T>>();
// @Output() onSetDefaultDataItem = new EventEmitter<T>(); // @Output() onSetDefaultDataItem = new EventEmitter<T>();
// } // }
+2 -2
View File
@@ -1,8 +1,8 @@
// Development environment configuration // Development environment configuration
export const environment = { export const environment = {
production: false, production: false,
// apiBaseUrl: 'http://194.59.214.243:5002', apiBaseUrl: 'http://194.59.214.243:5002',
apiBaseUrl: 'http://192.168.128.73:5002', // apiBaseUrl: 'http://192.168.128.73:5002',
host: 'localhost', host: 'localhost',
port: 5001, port: 5001,
enableLogging: false, enableLogging: false,
+2 -2
View File
@@ -1,8 +1,8 @@
// TIS tenant environment configuration // TIS tenant environment configuration
export const environment = { export const environment = {
production: true, production: true,
// apiBaseUrl: 'http://194.59.214.243:5002', apiBaseUrl: 'http://194.59.214.243:5002',
apiBaseUrl: 'http://192.168.128.73:5002', // apiBaseUrl: 'http://192.168.128.73:5002',
host: 'localhost', host: 'localhost',
port: 5000, port: 5000,
enableLogging: false, enableLogging: false,
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

+4
View File
@@ -0,0 +1,4 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{html,ts,scss,css}', './public/**/*.html'],
};