@@ -28,6 +28,7 @@ const InfoBar: React.FC = ({ device }) => { getUser() const isBusinessAccount = account_type === 'business_account' + const isSecureAccount = account_type === 'business_security' const [anchorEl, setAnchorEl] = React.useState(null) const [anchorEl2, setAnchorEl2] = React.useState(null) @@ -168,7 +169,6 @@ const InfoBar: React.FC = ({ device }) => { }} > - {/* Настройки - для всех */} = ({ device }) => { - {/* Оплата - для всех */} = ({ device }) => { - {/* Дополнительные пункты только для обычных аккаунтов */} - {!isBusinessAccount && ( - <> - - - - router.push( - '/account/business' - ) - } - > - {''} - - Компаниям - - - - - - - - - router.push( - '/account/referral' - ) + {!isBusinessAccount && !isSecureAccount && ( + + + + router.push( + '/account/business' + ) + } + > + {''} + - {''} - - Рефералам - - - - - + Компаниям + + + + )} - {/* Выйти - для всех */} signOut()} @@ -0,0 +1,31 @@ +.wrap { + padding-top: 60px; + min-width: 320px; + &__role { + margin-bottom: 20px; + } + + &__group { + margin-bottom: 20px; + } + + .title { + font-size: 21px; + font-weight: 500; + } + .hint { + margin-top: 15px; + font-size: 15px; + font-weight: 500; + margin-bottom: 5px; + } + .buttons { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 10px; + width: 100%; + margin-top: 15px; + text-align: right; + } +} @@ -5,13 +5,19 @@ import { Dayjs } from 'dayjs' import { useRouter } from 'next/navigation' import { useSession } from 'next-auth/react' -import styles from './invite-modal.module.scss' +import styles from './download-modal.module.scss' import { ButtonGray, ButtonUI, Error, Loader, Modal } from '#/shared' import { API_URL } from '#/shared/lib/constants' import { DateInput } from '#/shared/ui/date-input/date-input' -export const DownloadModal = ({ open, setOpen }: { open: boolean; setOpen: React.Dispatch> }) => { +export const DownloadModal = ({ + open, + setOpen, +}: { + open: boolean + setOpen: React.Dispatch> +}) => { const [endDate, setEndDate] = useState() const [startDate, setStartDate] = useState() @@ -23,7 +29,9 @@ export const DownloadModal = ({ open, setOpen }: { open: boolean; setOpen: React setIsLoading(true) axios.get( API_URL + - `/auth/business-security/download-report?${startDate ? `start_date=${startDate}` : ''}${endDate ? `&end_date=${endDate}` : ''}`, + `/auth/business-security/download-report?${ + startDate ? `start_date=${startDate}` : '' + }${endDate ? `&end_date=${endDate}` : ''}`, { responseType: 'arraybuffer', headers: { Authorization: `Bearer ${session?.access}` }, @@ -5,6 +5,7 @@ import styles from '#/app/styles/business.module.scss' import { ButtonUI } from '#/shared' import { Info } from '#/widgets/business-info' +import { DownloadModal } from '#/features/business-security-download/ui/download-modal' interface AccountBusinessSecurityProps { downloadModal: boolean @@ -17,7 +18,7 @@ const AccountBusinessSecurity: React.FC = ({ }) => { return ( <> - {/* */} + @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useMemo,useState } from 'react' +import React, { useCallback, useEffect, useMemo, useState } from 'react' import { Box, Stack, Tab, Tabs, Typography } from '@mui/material' import CircularProgress from '@mui/material/CircularProgress' import Link from 'next/link' @@ -26,6 +26,8 @@ const Account: NextPageWithLayout = () => { const { account_type: type } = getUser() const { pathname } = useRouter() + console.log(type) + const getCurrentScope = useCallback((): ScopeType => { const scopeMap: Record = { '/account/settings': 'setting', @@ -66,7 +68,11 @@ const Account: NextPageWithLayout = () => { {!loaded || type === null ? ( - + ) : ( { const { addList } = useBusinessLists() + const { user } = useUserStore() + const isSecureAccount = user?.account_type === 'business_security' + + const [downloadModal, setDownloadModal] = useState(false) const { mailing, @@ -44,6 +50,15 @@ export const BusinessHost: NextPageWithLayout = () => { ) } + if (isSecureAccount) { + return ( + + ) + } + return ( @@ -52,7 +67,11 @@ export const BusinessHost: NextPageWithLayout = () => { - + { const [showModels, setShowModels] = useState(true) - - const { models, setModels, fetchModels, changeAccess } = useBusinessModels() + const { models, fetchModels, changeAccess } = useBusinessModels() useEffect(() => { fetchModels() @@ -45,39 +46,39 @@ export const ModelsList = () => { Наименование Категория - Доступ для сотрудников + + Доступ для сотрудников + - {models.map((model) => { - return ( - ( + + {model.title} + + {translateTypeModel(model.model_type)} + + - {model.title} - - {translateTypeModel(model.model_type)} - - - - - - - - ) - })} + + + + + + ))} @@ -1,19 +1,40 @@ -// src/widgets/layouts/config/admin-links.ts import { AdminLink } from '../types' import { useUserStore } from '#/entities/user-account' +import { useMemo } from 'react' -// Базовый массив всех возможных ссылок const allAdminLinks: AdminLink[] = [ { label: 'Настройки', link: '/account/settings' }, { label: 'Управление оплатой', link: '/account/subscribe' }, { label: 'Корпоративный аккаунт', link: '/account/business' }, + { label: 'Реферальная программа', link: '/account/referral' }, ] -// Кастомный хук для получения отфильтрованных ссылок export const useAdminLinks = () => { const { user } = useUserStore() - const isBusinessAccount = user?.account_type === 'business_account' - // Фильтруем ссылки в зависимости от типа аккаунта - return allAdminLinks.filter((link) => link.label === 'Настройки' || !isBusinessAccount) + const isBusinessAccount = useMemo( + () => user?.account_type === 'business_account', + [user?.account_type] + ) + + const isSecureAccount = useMemo( + () => user?.account_type === 'business_security', + [user?.account_type] + ) + + const adminLinks = useMemo(() => { + return allAdminLinks.filter((link) => { + if (isBusinessAccount) { + return link.label === 'Настройки' + } + + if (isSecureAccount) { + return link.label === 'Настройки' || link.label === 'Корпоративный аккаунт' + } + + return true + }) + }, [isBusinessAccount, isSecureAccount]) + + return adminLinks } @@ -134,15 +134,17 @@ export const SideMenu = ({}) => { const { user } = useUserStore() const userTypeBussinessAcc = user?.account_type === 'business_account' + const userTypeSecureAcc = user?.account_type === 'business_security' - // Фильтрация пунктов меню для бизнес-аккаунтов - const filteredMenuListTop = userTypeBussinessAcc - ? menuListTop.filter((item) => item.title === 'Дашборд') - : menuListTop + const filteredMenuListTop = + userTypeBussinessAcc || userTypeSecureAcc + ? menuListTop.filter((item) => item.title === 'Дашборд') + : menuListTop - const filteredMenuListMiddle = userTypeBussinessAcc - ? menuListMiddle.filter((item) => ['Чат-боты', 'Изображения'].includes(item.title)) - : menuListMiddle + const filteredMenuListMiddle = + userTypeBussinessAcc || userTypeSecureAcc + ? menuListMiddle.filter((item) => ['Чат-боты', 'Изображения'].includes(item.title)) + : menuListMiddle return ( { - {!userTypeBussinessAcc && ( + {!(userTypeBussinessAcc || userTypeSecureAcc) && ( <>