Pull request #2466: Feature/TEAMMSBMOB-22759 reclame campaign
Merge in MCB_FE/mcb-platform-monorepo from feature/TEAMMSBMOB-22759_reclame-campaign to release-1.10.0 * commit '12eb00e98a03fcd334a72327e1b1cc7799ee17d0': feat(TEAMMSBMOB-22759): изменение цвета текста feat(TEAMMSBMOB-22759): рекламная капания 5
@@ -164,6 +164,7 @@ const EXTERNAL_LINKS = {
|
||||
REGULATIONS_CERTIFICATION_CENTER: 'https://www.gazprombank.ru/corporate/settlement_cash_services/client_bank/#tab_432725',
|
||||
CRYPTO_PRO: 'https://passport.gbo.gazprombank.ru/help#cm61',
|
||||
SALARY_PROJECTS: 'https://www.gazprombank.ru/business/salary-project/#first-step',
|
||||
PAYMENTS_ABROAD: 'https://www.gazprombank.ru/special/msb/ved-payments-1/',
|
||||
};
|
||||
|
||||
const CROSS_SALE_PATHS = {
|
||||
|
||||
@@ -3,7 +3,12 @@ import { LongRightIcon } from '@fractal-ui/library';
|
||||
import { Modal } from '@fractal-ui/overlays';
|
||||
import { Title, Text } from '@fractal-ui/styling';
|
||||
import type { MegaBannerModel, SALE_GRADIENTS } from '@msb/shared';
|
||||
import { MEDIA, TEXT_RATE_KEY, useBestRatesMainPage, useMediaQuery, type BaseModalProps } from '@msb/shared';
|
||||
import {
|
||||
MEDIA,
|
||||
// TEXT_RATE_KEY, useBestRatesMainPage,
|
||||
useMediaQuery,
|
||||
type BaseModalProps,
|
||||
} from '@msb/shared';
|
||||
import * as S from './MegaBanner.styles';
|
||||
|
||||
interface MegaBannerProps extends MegaBannerModel, BaseModalProps {
|
||||
@@ -17,14 +22,14 @@ const MegaBanner = ({
|
||||
button,
|
||||
image,
|
||||
gradient = 'sale2',
|
||||
rateText,
|
||||
dealType,
|
||||
// rateText,
|
||||
// dealType,
|
||||
onConfirm,
|
||||
onClose,
|
||||
}: MegaBannerProps) => {
|
||||
const isMobile = useMediaQuery(MEDIA.mobile);
|
||||
|
||||
const { bestRates } = useBestRatesMainPage();
|
||||
// const { bestRates } = useBestRatesMainPage();
|
||||
|
||||
if (!isOpen) {
|
||||
return null;
|
||||
@@ -38,13 +43,13 @@ const MegaBanner = ({
|
||||
onClose?.();
|
||||
};
|
||||
|
||||
const haveRate = dealType && rateText && bestRates && bestRates[dealType];
|
||||
// const haveRate = dealType && rateText && bestRates && bestRates[dealType];
|
||||
|
||||
const finalText = haveRate
|
||||
? rateText
|
||||
.split(new RegExp(`(${TEXT_RATE_KEY})`))
|
||||
.map(textPart => (textPart === TEXT_RATE_KEY ? <b>{bestRates[dealType]}%</b> : textPart))
|
||||
: text;
|
||||
// const finalText = haveRate
|
||||
// ? rateText
|
||||
// .split(new RegExp(`(${TEXT_RATE_KEY})`))
|
||||
// .map(textPart => (textPart === TEXT_RATE_KEY ? <b>{bestRates[dealType]}%</b> : textPart))
|
||||
// : text;
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -62,11 +67,11 @@ const MegaBanner = ({
|
||||
{isMobile ? <Title.H1Bold color="text.primary">{title}</Title.H1Bold> : <Title.H2Bold color="text.primary">{title}</Title.H2Bold>}
|
||||
{isMobile ? (
|
||||
<Text.P2 color="text.primary" whiteSpace="pre-wrap">
|
||||
{finalText}
|
||||
{text}
|
||||
</Text.P2>
|
||||
) : (
|
||||
<Text.P1 color="text.primary" whiteSpace="inherit">
|
||||
{finalText}
|
||||
{text}
|
||||
</Text.P1>
|
||||
)}
|
||||
</S.Content>
|
||||
|
||||
@@ -11,9 +11,10 @@ const BannerContainer = styled.div<{ $background: string }>(({ $background }) =>
|
||||
|
||||
const Image = styled.img({
|
||||
position: 'absolute',
|
||||
right: 0,
|
||||
right: '-12px',
|
||||
bottom: 16,
|
||||
height: 132,
|
||||
scale: '1.5',
|
||||
});
|
||||
|
||||
const Content = styled.div({
|
||||
|
||||
@@ -56,10 +56,10 @@ const PromoBanner: FC<PromoBannerProps> = ({
|
||||
{bestRates[dealType]?.replace('.', ',')}%
|
||||
</Title.H1>
|
||||
)}
|
||||
{title && <Title.H4 color="text.primary">{title}</Title.H4>}
|
||||
<Text.P3 color="text.primary">{description}</Text.P3>
|
||||
{title && <Title.H4 color="bg.primary">{title}</Title.H4>}
|
||||
<Text.P3 color="bg.primary">{description}</Text.P3>
|
||||
</S.Title>
|
||||
<Button dataAction="read-more" size="M" variant="secondary" onClick={navigateTo}>
|
||||
<Button dataAction="read-more" size="S" variant="white" onClick={navigateTo}>
|
||||
{buttonText}
|
||||
</Button>
|
||||
</S.Content>
|
||||
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 21 KiB |
@@ -1,12 +1,11 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"title": "Валютный\nконтроль",
|
||||
"saleGradient": "sale4",
|
||||
"imagePath": "/product-carousel/assets/currency_transaction.webp",
|
||||
"navigatePath": "/ulk_ved_eco/ru_RU/",
|
||||
"isEcoPath": true,
|
||||
"ymCode": "your_products_currency_control"
|
||||
"title": "Счет\nонлайн",
|
||||
"saleGradient": "sale2",
|
||||
"imagePath": "/product-carousel/assets/account_online.webp",
|
||||
"navigatePath": "/accounts/open-account/new",
|
||||
"ymCode": "your_products_account_online"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 19 KiB |
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"stories": [
|
||||
{
|
||||
"id": "0011",
|
||||
"id": "0021",
|
||||
"image": "/stories/assets/miniature_1.webp",
|
||||
"name": "АУСН\nДоступно",
|
||||
"ymCode": "stories_slide_ausn",
|
||||
"gradient": "sale7",
|
||||
"items": [
|
||||
{
|
||||
"id": "1011",
|
||||
"id": "1021",
|
||||
"gradient": "sale7",
|
||||
"image": "/stories/assets/story_image_1.webp",
|
||||
"showTime": 10000,
|
||||
@@ -28,40 +28,14 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0012",
|
||||
"image": "/stories/assets/miniature_2.webp",
|
||||
"name": "Повышение НДС",
|
||||
"ymCode": "stories_slide_nds",
|
||||
"gradient": "sale2",
|
||||
"items": [
|
||||
{
|
||||
"id": "1012",
|
||||
"gradient": "sale2",
|
||||
"image": "/stories/assets/story_image_2.webp",
|
||||
"showTime": 10000,
|
||||
"content": {
|
||||
"title": "Изменение в налоговом законодательстве",
|
||||
"description": "С 1 января 2026 года базовая ставка налога на добавленную стоимость (НДС) повышается с 20% до 22%",
|
||||
"buttons": [
|
||||
{
|
||||
"link": "https://www.nalog.gov.ru/rn92/news/activities_fts/16586778/",
|
||||
"ymCode": "stories_slide_nds_more",
|
||||
"text": "Подробнее"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0013",
|
||||
"id": "0022",
|
||||
"image": "/stories/assets/miniature_3.webp",
|
||||
"name": "Импорт платежей",
|
||||
"ymCode": "stories_slide_import_payments",
|
||||
"gradient": "sale6",
|
||||
"items": [
|
||||
{
|
||||
"id": "1013",
|
||||
"id": "1022",
|
||||
"gradient": "sale6",
|
||||
"image": "/stories/assets/story_image_3.webp",
|
||||
"showTime": 10000,
|
||||
@@ -80,14 +54,14 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0014",
|
||||
"id": "0023",
|
||||
"image": "/stories/assets/miniature_4.webp",
|
||||
"name": "Проверка контрагентов",
|
||||
"name": "Проверка контрагента",
|
||||
"ymCode": "stories_slide_partner_check",
|
||||
"gradient": "sale2",
|
||||
"items": [
|
||||
{
|
||||
"id": "1014",
|
||||
"id": "1023",
|
||||
"gradient": "sale2",
|
||||
"image": "/stories/assets/story_image_4.webp",
|
||||
"showTime": 10000,
|
||||
@@ -106,25 +80,26 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0015",
|
||||
"image": "/stories/assets/miniature_5.webp",
|
||||
"name": "Валютные переводы",
|
||||
"ymCode": "stories_slide_currency_operations_china",
|
||||
"gradient": "sale3",
|
||||
"id": "0024",
|
||||
"image": "/stories/assets/miniature_9.webp",
|
||||
"name": "Валютный контроль",
|
||||
"ymCode": "stories_slide_currency_control",
|
||||
"gradient": "sale7",
|
||||
"items": [
|
||||
{
|
||||
"id": "1015",
|
||||
"gradient": "sale3",
|
||||
"image": "/stories/assets/story_image_5.webp",
|
||||
"id": "1024",
|
||||
"gradient": "sale7",
|
||||
"image": "/stories/assets/story_image_9.webp",
|
||||
"showTime": 10000,
|
||||
"content": {
|
||||
"title": "Надежные переводы\nв Китай",
|
||||
"description": "Переводите деньги партнерам\nпо выгодному курсу Банка России\nи комиссией от 0,2%+НДС",
|
||||
"title": "Валютный контроль",
|
||||
"description": "Комиссия от 0,11% от суммы операции. \nВ стоимость включено сопровождение персональным валютным контролёром",
|
||||
"buttons": [
|
||||
{
|
||||
"link": "https://app.ab-payments.ru/?idp=gpb",
|
||||
"text": "Подробнее",
|
||||
"ymCode": "stories_slide_currency_operations_china_more"
|
||||
"link": "/ulk_ved_eco/ru_RU/",
|
||||
"text": "Перейти в кабинет",
|
||||
"ymCode": "sstories_slide_currency_control_more",
|
||||
"linkType": "eco"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -132,14 +107,40 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0016",
|
||||
"id": "0025",
|
||||
"image": "/stories/assets/miniature_5.webp",
|
||||
"name": "Платежи\nв Китай 1%",
|
||||
"ymCode": "stories_slide_payments_china",
|
||||
"gradient": "sale3",
|
||||
"items": [
|
||||
{
|
||||
"id": "1025",
|
||||
"gradient": "sale3",
|
||||
"image": "/stories/assets/story_image_5.webp",
|
||||
"showTime": 10000,
|
||||
"content": {
|
||||
"title": "Платежи в Китай за 1 день",
|
||||
"description": "Переводите деньги по выгодному курсу Банка России с тарифом 1% + НДС",
|
||||
"buttons": [
|
||||
{
|
||||
"link": "https://app.ab-payments.ru/?idp=gpb",
|
||||
"text": "Оставить заявку",
|
||||
"ymCode": "stories_slide_payments_china_more"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0026",
|
||||
"image": "/stories/assets/miniature_6.webp",
|
||||
"name": "Бизнес-карта\nОнлайн",
|
||||
"ymCode": "stories_slide_business_cards",
|
||||
"gradient": "sale5",
|
||||
"items": [
|
||||
{
|
||||
"id": "1016",
|
||||
"id": "1026",
|
||||
"gradient": "sale5",
|
||||
"image": "/stories/assets/story_image_6.webp",
|
||||
"showTime": 10000,
|
||||
@@ -157,15 +158,16 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"id": "0017",
|
||||
"id": "0027",
|
||||
"image": "/stories/assets/miniature_7.webp",
|
||||
"name": "Экспресс-гарантия",
|
||||
"ymCode": "stories_slide_bank_guarantees",
|
||||
"gradient": "sale4",
|
||||
"items": [
|
||||
{
|
||||
"id": "1017",
|
||||
"id": "1027",
|
||||
"gradient": "sale4",
|
||||
"image": "/stories/assets/story_image_7.webp",
|
||||
"showTime": 10000,
|
||||
@@ -185,14 +187,14 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0018",
|
||||
"id": "0028",
|
||||
"image": "/stories/assets/miniature_8.webp",
|
||||
"name": "Эквайринг выгодно",
|
||||
"ymCode": "stories_slide_acquiring",
|
||||
"gradient": "sale6",
|
||||
"items": [
|
||||
{
|
||||
"id": "1018",
|
||||
"id": "1028",
|
||||
"gradient": "sale6",
|
||||
"image": "/stories/assets/story_image_8.webp",
|
||||
"showTime": 10000,
|
||||
|
||||
@@ -53,15 +53,15 @@ const ProfileGroup = styled.div(({ theme }) => ({
|
||||
}));
|
||||
|
||||
const IconLogo = styled.img({
|
||||
height: '70px',
|
||||
width: '54px',
|
||||
height: '54px',
|
||||
objectFit: 'cover',
|
||||
display: 'none',
|
||||
[`@media ${MEDIA.tablet}`]: { display: 'block' },
|
||||
[`@media ${MEDIA.tablet}`]: { width: '70px', height: '64px' },
|
||||
});
|
||||
|
||||
const GpbMsbLogo = styled.img({
|
||||
display: 'none',
|
||||
[`@media ${MEDIA.desktop}`]: { display: 'block', width: '240px', height: '80px' },
|
||||
[`@media ${MEDIA.desktop}`]: { display: 'block' },
|
||||
});
|
||||
|
||||
const LetterService = styled.a({
|
||||
|
||||
@@ -2,9 +2,8 @@ import type { ReactNode } from 'react';
|
||||
import { type ReactElement } from 'react';
|
||||
import { UserProfileIcon } from '@fractal-ui/library';
|
||||
import { PATHS } from '@msb/shared';
|
||||
// import gpbIcon from '@msb/shared/assets/gpb_flavor.webp';
|
||||
import gpbIcon from '../../../assets/new-year-logo-small.webp';
|
||||
import gpbMsbLogo from '../../../assets/new-year-logo.webp';
|
||||
import gpbIcon from '@msb/shared/assets/gpb_flavor.webp';
|
||||
import gpbMsbLogo from '../../../assets/logo_pic_out.svg';
|
||||
import * as S from './HeaderMenu.styles';
|
||||
import { ProfileDropdown } from '@/entities/Profile';
|
||||
import { UserNotifications } from '@/entities/UserNotification';
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import cryptoProImg from './cryptoProImg.webp';
|
||||
import megaBannerHeader from './megaBannerHeader@2x.webp';
|
||||
import payments from './payments.webp';
|
||||
|
||||
const Icons = { cryptoProImg } as const;
|
||||
const Icons = { cryptoProImg, payments } as const;
|
||||
|
||||
type IconName = keyof typeof Icons;
|
||||
|
||||
export { Icons, megaBannerHeader };
|
||||
export { Icons, megaBannerHeader, payments };
|
||||
export type { IconName };
|
||||
|
||||
|
After Width: | Height: | Size: 216 KiB |
@@ -3,19 +3,19 @@ import { Icons, megaBannerHeader } from '../assets';
|
||||
import type { PromoBanner } from '@/shared/model';
|
||||
|
||||
const promoBanner: PromoBanner = {
|
||||
id: 'main_page_promo_banner_crypto_pro_id',
|
||||
codeName: 'main_page_promo_banner_crypto_pro',
|
||||
title: 'КриптоПро CSP 5.0',
|
||||
description: 'Обновитесь до новой версии 5.0\nдо 15 января 2026 года чтобы сохранить доступ к интернет-\nбанку',
|
||||
image: Icons.cryptoProImg,
|
||||
link: EXTERNAL_LINKS.CRYPTO_PRO,
|
||||
background: 'linear-gradient(135.58deg, #FFFFFF 0.99%, #FFFFFF 47.24%, #A9DFFF 98.06%)',
|
||||
ymCode: 'right_side_banner_cryptopro5_more',
|
||||
id: 'main_page_promo_banner_payments_abroad',
|
||||
codeName: 'main_page_promo_banner_payments_abroad',
|
||||
title: 'Платежи за границу',
|
||||
description: 'Доступно более 70 стран \nс выгодной ставкой',
|
||||
image: Icons.payments,
|
||||
link: EXTERNAL_LINKS.PAYMENTS_ABROAD,
|
||||
background: 'linear-gradient(136.47deg, #013895 0%, #7D20D4 58.93%, #2690E2 97.56%)',
|
||||
ymCode: 'right_side_banner_payments_abroad_more',
|
||||
};
|
||||
|
||||
const megaBanner: MegaBannerModel = {
|
||||
title: 'Депозиты для бизнеса',
|
||||
text: 'Начните получать доход от ваших денежных средств уже сейчас. \nОткройте депозит на наших лучших условиях.',
|
||||
text: 'Размещайте свободные средства по выгодной ставке и получайте дополнительный доход',
|
||||
rateText: `Начните получать доход от ваших денежных средств уже сейчас. \nОткройте депозит на наших лучших условиях по ставке до ${TEXT_RATE_KEY}`,
|
||||
button: { text: 'Открыть', url: PATHS_DEPOSITS.TREASURY_DEALS, docType: DOC_TYPES.DEPOSIT },
|
||||
dealType: 'DEPOSIT',
|
||||
@@ -23,8 +23,8 @@ const megaBanner: MegaBannerModel = {
|
||||
};
|
||||
|
||||
const ebgBanner = {
|
||||
title: 'Электронная банковская гарантия \nбез\u00A0визита\u00A0в\u00A0офис',
|
||||
text: 'Оформите электронную банковскую гарантию онлайн от\u00A010\u00A0минут на сумму до 200 млн рублей. Без\u00A0залога\u00A0и\u00A0поручителей',
|
||||
title: 'Вам предодобрен лимит на\nэлектронные банковские гарантии',
|
||||
text: 'Получите сумму до 200 млн. рублей в рамках лимита с решением онлайн от 10 минут. Без обеспечения и поручителей.',
|
||||
button: {
|
||||
text: 'Оформить',
|
||||
url: `${EXTERNAL_PATHS.EBG}?productCode=ebg&sourcePage=popup&sourceSystem=MSB`,
|
||||
|
||||
@@ -25,7 +25,7 @@ const BALANCE_BANNERS: BalanceBannerSlide[] = [
|
||||
},
|
||||
{
|
||||
id: '222',
|
||||
text: 'Доход\nза 1 ночь',
|
||||
text: 'Доход за 1 ночь',
|
||||
imagePath: overnightDayImagePath,
|
||||
saleGradient: 'sale2',
|
||||
navigatePath: PATHS_DEPOSITS.TREASURY_DEALS,
|
||||
@@ -35,7 +35,7 @@ const BALANCE_BANNERS: BalanceBannerSlide[] = [
|
||||
},
|
||||
{
|
||||
id: '444',
|
||||
text: 'Неснижаемый\nостаток\nпо счетам',
|
||||
text: 'Неснижаемый\nостаток по счетам',
|
||||
imagePath: groupAccountsImagePath,
|
||||
saleGradient: 'sale1',
|
||||
navigatePath: PATHS_DEPOSITS.TREASURY_DEALS,
|
||||
|
||||
@@ -89,11 +89,11 @@ const BalanceBanner = () => {
|
||||
|
||||
return (
|
||||
<S.BannerWrapper
|
||||
$isIpad={isIpad}
|
||||
$isTouchDevice={isTouchDevice}
|
||||
onTouchEnd={handleTouchEnd}
|
||||
onTouchMove={handleTouchMove}
|
||||
onTouchStart={handleTouchStart}
|
||||
$isTouchDevice={isTouchDevice}
|
||||
$isIpad={isIpad}
|
||||
>
|
||||
<S.BannerList $selectedBannerIndex={selectedBannerIndex}>
|
||||
{BALANCE_BANNERS.map(banner => {
|
||||
@@ -112,8 +112,8 @@ const BalanceBanner = () => {
|
||||
</Title.H2>
|
||||
)}
|
||||
<S.Description
|
||||
$showBestRates={!!showBestRates}
|
||||
$lineClamp={showBestRates ? '2' : '3'}
|
||||
$showBestRates={!!showBestRates}
|
||||
color="bg.primary"
|
||||
lineHeight="16px"
|
||||
whiteSpace="pre-wrap"
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
@@ -6,7 +6,7 @@ const ghostBanners: Record<FinanceChipValue, TabGhostBanner> = {
|
||||
accounts: {
|
||||
imagePath: accountsGhostImage,
|
||||
title: 'Перейти к оформлению',
|
||||
badgeText: 'Зарабатывай на остатках',
|
||||
badgeText: 'Зарабатывайте на остатках',
|
||||
navigate: {
|
||||
link: PATHS_DEPOSITS.TREASURY_DEALS,
|
||||
docType: DOC_TYPES.MNO,
|
||||
@@ -16,7 +16,7 @@ const ghostBanners: Record<FinanceChipValue, TabGhostBanner> = {
|
||||
deposits: {
|
||||
imagePath: depositsGhostImage,
|
||||
title: 'Перейти к оформлению',
|
||||
badgeText: 'Депозит на выгодных условиях',
|
||||
badgeText: 'Депозит под выгодный процент',
|
||||
navigate: {
|
||||
link: PATHS_DEPOSITS.TREASURY_DEALS,
|
||||
docType: DOC_TYPES.DEPOSIT,
|
||||
|
||||
@@ -32,7 +32,7 @@ const TextBlock = ({
|
||||
>
|
||||
{tag}
|
||||
<Title.H3Bold color={(mode === 'light' ? lightTheme : darkTheme).colors.text.primary}>{title}</Title.H3Bold>
|
||||
<Text.P2 color={(mode === 'light' ? lightTheme : darkTheme).colors.text.secondary}>{description}</Text.P2>
|
||||
<Text.P2 color={(mode === 'light' ? lightTheme : darkTheme).colors.text.primary}>{description}</Text.P2>
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
||||
|
||||