From ac5ee256fd025ae2e71142d0d30858294858e36a Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Mon, 6 Apr 2026 14:41:32 +0700 Subject: [PATCH] Add message board and bonus program preview --- app/app.vue | 34 +- app/assets/css/main.css | 211 ++++++++++ app/composables/graphql/generated.ts | 41 ++ app/pages/bonus-program.vue | 298 +++++++++++++++ app/pages/bonus-system/index.vue | 74 +++- app/pages/messages.vue | 361 ++++++++++++++++++ app/pages/notifications.vue | 23 ++ app/pages/profile/index.vue | 12 + app/pages/profile/notifications.vue | 15 + .../bonus/request-reward-withdrawal.graphql | 10 + 10 files changed, 1060 insertions(+), 19 deletions(-) create mode 100644 app/pages/bonus-program.vue create mode 100644 app/pages/messages.vue create mode 100644 graphql/operations/bonus/request-reward-withdrawal.graphql diff --git a/app/app.vue b/app/app.vue index 1b6722e..203dee9 100644 --- a/app/app.vue +++ b/app/app.vue @@ -5,9 +5,10 @@ import { hasManagerAccess } from '~/utils/roles'; const route = useRoute(); const isLoginPage = computed(() => route.path === '/login'); +const isBonusProgramPage = computed(() => route.path === '/bonus-program'); const meQuery = useQuery(MeDocument); const hasManagerDock = computed(() => ( - !isLoginPage.value && hasManagerAccess(meQuery.result.value?.me?.role) + !isLoginPage.value && !isBonusProgramPage.value && hasManagerAccess(meQuery.result.value?.me?.role) )); const managerPageTabs = computed(() => { @@ -48,7 +49,7 @@ const managerPageTabs = computed(() => { { key: 'balances', label: 'Балансы', - active: route.query.tab !== 'withdrawals', + active: route.query.tab !== 'withdrawals' && route.query.tab !== 'manager', to: { path: '/bonus-system', query: { @@ -69,6 +70,18 @@ const managerPageTabs = computed(() => { }, }, }, + { + key: 'manager', + label: 'Менеджеру', + active: route.query.tab === 'manager', + to: { + path: '/bonus-system', + query: { + ...route.query, + tab: 'manager', + }, + }, + }, ]; } @@ -77,13 +90,14 @@ const managerPageTabs = computed(() => { diff --git a/app/pages/profile/notifications.vue b/app/pages/profile/notifications.vue index b9159c1..87aee5b 100644 --- a/app/pages/profile/notifications.vue +++ b/app/pages/profile/notifications.vue @@ -75,6 +75,21 @@ async function connectMessenger(channel: 'TELEGRAM' | 'MAX') { Подключите Telegram и Max, чтобы получать статусы заказов и важные уведомления в удобном канале.

+
+

Бонусная программа теперь может жить в отдельном экране

+

+ Для бонусных начислений и выводов можно отправлять отдельное сообщение с кнопкой, которое ведёт в специальный бонусный интерфейс. +

+
+ + Message board + + + Открыть бонусный экран + +
+
+

Telegram

diff --git a/graphql/operations/bonus/request-reward-withdrawal.graphql b/graphql/operations/bonus/request-reward-withdrawal.graphql new file mode 100644 index 0000000..08f1744 --- /dev/null +++ b/graphql/operations/bonus/request-reward-withdrawal.graphql @@ -0,0 +1,10 @@ +mutation RequestRewardWithdrawal($input: RequestRewardWithdrawalInput!) { + requestRewardWithdrawal(input: $input) { + id + amount + status + createdAt + updatedAt + reviewComment + } +}