diff --git a/projects/social_platform/src/app/domain/program/program-management.model.ts b/projects/social_platform/src/app/domain/program/program-management.model.ts index 9029e71be..913dd1d5a 100644 --- a/projects/social_platform/src/app/domain/program/program-management.model.ts +++ b/projects/social_platform/src/app/domain/program/program-management.model.ts @@ -132,7 +132,8 @@ export interface ManagementQuery { caseName?: string; regionScope?: "all" | "selected" | "without_region"; region?: string; - activity?: "all" | "period" | "never"; + activity?: "all" | "period" | "active" | "inactive" | "never"; + order?: "registration" | "activity_asc" | "activity_desc"; activityFrom?: string; activityTo?: string; } diff --git a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts index 43d322403..6639e0e2e 100644 --- a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts +++ b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts @@ -59,6 +59,7 @@ describe("Контракт HTTP панели организатора", () => { regionScope: "selected" as const, region: "Москва", activity: "period" as const, + order: "activity_desc" as const, activityFrom: "2026-10-01", activityTo: "2026-10-19", }; @@ -70,9 +71,30 @@ describe("Контракт HTTP панели организатора", () => { expect(file.request.params.toString()).toBe(list.request.params.toString()); expect(file.request.params.get("activity_from")).toBe("2026-10-01"); expect(file.request.params.get("region")).toBe("Москва"); + expect(file.request.params.get("order")).toBe("activity_desc"); expect(file.request.responseType).toBe("blob"); file.flush(new Blob(["xlsx"])); }); + it("одни параметры наличия активности и сортировки передаются списку и выбору всех", () => { + const query = { + search: "", + offset: 20, + limit: 20, + submission: "all" as const, + caseScope: "all" as const, + activity: "inactive" as const, + order: "activity_asc" as const, + }; + adapter.participants(4, query).subscribe(); + const list = http.expectOne(r => r.url.endsWith("/participants/")); + list.flush({ count: 0, results: [] }); + adapter.selection(4, "participants", query).subscribe(); + const selection = http.expectOne(r => r.url.endsWith("/participants/selection/")); + expect(selection.request.params.toString()).toBe(list.request.params.toString()); + expect(selection.request.params.get("activity")).toBe("inactive"); + expect(selection.request.params.get("order")).toBe("activity_asc"); + selection.flush({ ids: [] }); + }); it("версия PATCH не теряет точность при преобразовании JSON", () => { const version = "2026-10-17T12:34:56.123456Z"; adapter diff --git a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts index 913c528f4..ab7aeaba7 100644 --- a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts +++ b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts @@ -93,7 +93,8 @@ export class ProgramManagementHttpAdapter implements ProgramManagementRepository private participantParams(q: ManagementQuery): HttpParams { let params = this.params(q) .set("region_scope", q.regionScope ?? "all") - .set("activity", q.activity ?? "all"); + .set("activity", q.activity ?? "all") + .set("order", q.order ?? "registration"); if (q.regionScope === "selected" && q.region) params = params.set("region", q.region); if (q.activity === "period") { if (q.activityFrom) params = params.set("activity_from", q.activityFrom); diff --git a/projects/social_platform/src/app/ui/pages/program/detail/analytics/drilldown/analytics-drilldown.component.scss b/projects/social_platform/src/app/ui/pages/program/detail/analytics/drilldown/analytics-drilldown.component.scss index bcce0f586..1b44ee690 100644 --- a/projects/social_platform/src/app/ui/pages/program/detail/analytics/drilldown/analytics-drilldown.component.scss +++ b/projects/social_platform/src/app/ui/pages/program/detail/analytics/drilldown/analytics-drilldown.component.scss @@ -1,6 +1,7 @@ /** @format */ @use "styles/responsive"; +@use "styles/ui-foundation"; @use "styles/program-management-controls"; .modal__body.analytics-drilldown-body.analytics-drilldown-body--case { @@ -288,7 +289,7 @@ } &__action:hover { - text-decoration: underline; + color: var(--accent-dark); } &__action:disabled { @@ -311,16 +312,11 @@ align-items: center; input { - box-sizing: border-box; + @include ui-foundation.control; + flex: 1 1 220px; width: 100%; - min-width: 0; - padding: 10px 12px; - font: inherit; - color: var(--black); - background: var(--white); - border: 1px solid var(--medium-grey-for-outline); - border-radius: 8px; + font-size: 12px; } } diff --git a/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.html b/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.html index 255585ee1..dceda0e13 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.html +++ b/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.html @@ -60,29 +60,34 @@

Эксперты программы

@if (loading() && !snapshot()) {

Загружаем экспертов…

} -
- +
+
@@ -260,28 +265,33 @@

Проекты на оценку

} } -
- +
+
- + Эксперт Кейсы
diff --git a/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.scss b/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.scss index c208f5a1a..b2dd4ae4e 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.scss +++ b/projects/social_platform/src/app/ui/pages/program/management/experts/experts.component.scss @@ -835,8 +835,8 @@ } } -.experts__select-all { - min-height: 32px; +.experts__mobile-tools { + display: none; } .experts__bulk { @@ -848,6 +848,17 @@ } @media (max-width: 999px) { + .experts__mobile-tools { + display: block; + } + + .experts .experts__mobile-tools .experts__pick-target { + display: flex; + gap: 8px; + justify-content: start; + min-height: 44px; + } + .experts__table--people tr { position: relative; } diff --git a/projects/social_platform/src/app/ui/pages/program/management/management.component.html b/projects/social_platform/src/app/ui/pages/program/management/management.component.html index 70fb20283..90b9d56c5 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/management.component.html +++ b/projects/social_platform/src/app/ui/pages/program/management/management.component.html @@ -11,8 +11,8 @@ >

Управление программой

- @if (state.program(); as program) { -

{{ program.name }}

+ @if (state.program() && !state.teamOpen()) { +

{{ state.program()?.name }}

}
@if (state.program(); as program) { @@ -73,24 +73,24 @@

{{ section() === "participants" ? "Участники" : "Проекты" }} @if (section() === "participants") { } -

- {{ - section() === "participants" - ? "Зарегистрированные участники этой программы." - : "Проекты, связанные с этой программой." - }} -

+ @if (section() === "projects") { +

Проекты, связанные с этой программой.

+ }

- + Проект Кейс
@@ -258,22 +267,50 @@

- + @@ -297,7 +334,12 @@

@@ -326,21 +368,19 @@

- + № Участник Почта Регион Дата регистрацииДата последней активности + + Действия
{{ offset() + index + 1 }} - {{ person.name }} + {{ person.name }} {{ person.email || "Не указана" }} {{ person.region || "—" }}
} @else { -
- +
+
@@ -460,6 +501,7 @@

@if (selectedRows().size) {
> @if (section() === "participants") {

@@ -360,15 +400,16 @@

- + № Проект