diff --git a/apps/api/src/activities/activities.controller.ts b/apps/api/src/activities/activities.controller.ts index a71d5ee..28ce783 100644 --- a/apps/api/src/activities/activities.controller.ts +++ b/apps/api/src/activities/activities.controller.ts @@ -210,6 +210,7 @@ export class ActivitiesController { title: query.title, customer: query.customer, due: query.due, + priority: query.priority, boardId: query.boardId, }, ); @@ -246,6 +247,7 @@ export class ActivitiesController { title: query.title, customer: query.customer, due: query.due, + priority: query.priority, boardId: query.boardId, }, query.stageId ? { stageId: query.stageId } : undefined, @@ -279,6 +281,7 @@ export class ActivitiesController { title: query.title, customer: query.customer, due: query.due, + priority: query.priority, boardId: query.boardId, }, query.stageId ? { stageId: query.stageId } : undefined, diff --git a/apps/api/src/activities/activities.service.ts b/apps/api/src/activities/activities.service.ts index 75e7b6b..35207e3 100644 --- a/apps/api/src/activities/activities.service.ts +++ b/apps/api/src/activities/activities.service.ts @@ -123,6 +123,7 @@ type ListFacets = { customer?: string; /** set = زمان شروع دارد، unset = ندارد */ due?: 'set' | 'unset'; + priority?: ActivityDto['priority']; /** گروه فعالیت؛ خالی = همهٔ گروه‌ها */ boardId?: string; }; @@ -1369,11 +1370,13 @@ export class ActivitiesService { const facetTypeDef = facets?.typeDefId?.trim(); const facetTitle = facets?.title?.trim(); const facetCustomer = facets?.customer?.trim(); + const facetPriority = facets?.priority; const andParts: Prisma.ActivityWhereInput[] = [ scope, ...(facets?.type ? [{ type: facets.type }] : []), ...(facetTypeDef ? [this.types.whereForType(typeRows, facetTypeDef)] : []), ...(facets?.status ? [{ status: facets.status }] : []), + ...(facetPriority ? [{ priority: facetPriority }] : []), ...(facetTitle ? [{ title: ci(facetTitle) }] : []), ...(facetCustomer ? [this.customerWhere(facetCustomer)] : []), ...(facetAssignee diff --git a/apps/api/src/activities/dto.ts b/apps/api/src/activities/dto.ts index 0a683ec..33a9926 100644 --- a/apps/api/src/activities/dto.ts +++ b/apps/api/src/activities/dto.ts @@ -93,6 +93,11 @@ export class ListActivitiesQueryDto { @IsString() typeDefId?: string; + /** اولویت فعالیت (کلید ثابت؛ برچسب در تنظیمات سازمان) */ + @IsOptional() + @IsIn(ACTIVITY_PRIORITIES) + priority?: (typeof ACTIVITY_PRIORITIES)[number]; + /** شناسهٔ مرحله یا 'all' — حالت تب/کانبان مراحل */ @IsOptional() @IsString() diff --git a/apps/web/src/components/activities/ActivitiesKanban.vue b/apps/web/src/components/activities/ActivitiesKanban.vue index 24c7def..0a21942 100644 --- a/apps/web/src/components/activities/ActivitiesKanban.vue +++ b/apps/web/src/components/activities/ActivitiesKanban.vue @@ -511,6 +511,7 @@ function activityQuery(id: string) { if (source.typeDefId) query.typeDefId = source.typeDefId; else if (source.type) query.type = source.type; if (source.status) query.status = source.status; + if (source.priority) query.priority = source.priority; if (source.assigneeId) query.assigneeId = source.assigneeId; if (source.title) query.title = source.title; if (source.customer) query.customer = source.customer; diff --git a/apps/web/src/components/activities/ActivityDeskFilters.vue b/apps/web/src/components/activities/ActivityDeskFilters.vue index fbaf69a..44047a0 100644 --- a/apps/web/src/components/activities/ActivityDeskFilters.vue +++ b/apps/web/src/components/activities/ActivityDeskFilters.vue @@ -1,7 +1,14 @@