Добавлены настройки для удаленных изображений в конфигурацию Next.js. Удалены неиспользуемые заголовки и улучшен интерфейс компонентов панели управления и мессенджера, включая добавление новых заголовков с кнопками и сокращенных названий компаний. Оптимизированы стили и структура кода в компонентах.
This commit is contained in:
@ -122,6 +122,37 @@ export function MessengerChat({ counterparty }: MessengerChatProps) {
|
||||
return name.charAt(0).toUpperCase()
|
||||
}
|
||||
|
||||
const getShortCompanyName = (fullName: string) => {
|
||||
if (!fullName) return 'Полное название не указано'
|
||||
|
||||
// Словарь для замены полных форм на сокращенные
|
||||
const legalFormReplacements: { [key: string]: string } = {
|
||||
'Общество с ограниченной ответственностью': 'ООО',
|
||||
'Открытое акционерное общество': 'ОАО',
|
||||
'Закрытое акционерное общество': 'ЗАО',
|
||||
'Публичное акционерное общество': 'ПАО',
|
||||
'Непубличное акционерное общество': 'НАО',
|
||||
'Акционерное общество': 'АО',
|
||||
'Индивидуальный предприниматель': 'ИП',
|
||||
'Товарищество с ограниченной ответственностью': 'ТОО',
|
||||
'Частное предприятие': 'ЧП',
|
||||
'Субъект предпринимательской деятельности': 'СПД'
|
||||
}
|
||||
|
||||
let result = fullName
|
||||
|
||||
// Заменяем полные формы на сокращенные
|
||||
for (const [fullForm, shortForm] of Object.entries(legalFormReplacements)) {
|
||||
const regex = new RegExp(`^${fullForm}\\s+`, 'i')
|
||||
if (regex.test(result)) {
|
||||
result = result.replace(regex, `${shortForm} `)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
const getTypeLabel = (type: string) => {
|
||||
switch (type) {
|
||||
case 'FULFILLMENT':
|
||||
@ -273,17 +304,17 @@ export function MessengerChat({ counterparty }: MessengerChatProps) {
|
||||
</Avatar>
|
||||
|
||||
<div>
|
||||
<h3 className="text-white font-medium">
|
||||
{getOrganizationName(counterparty)}
|
||||
</h3>
|
||||
<p className="text-white/60 text-sm mb-1">
|
||||
{getManagerName(counterparty)}
|
||||
</p>
|
||||
<div className="flex items-center space-x-2">
|
||||
<div className="flex items-center space-x-3">
|
||||
<h3 className="text-white font-medium">
|
||||
{getOrganizationName(counterparty)}
|
||||
</h3>
|
||||
<Badge className={`${getTypeColor(counterparty.type)} text-xs`}>
|
||||
{getTypeLabel(counterparty.type)}
|
||||
</Badge>
|
||||
</div>
|
||||
<p className="text-white/60 text-sm">
|
||||
{getShortCompanyName(counterparty.fullName || '')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -48,6 +48,37 @@ export function MessengerConversations({
|
||||
return name.charAt(0).toUpperCase()
|
||||
}
|
||||
|
||||
const getShortCompanyName = (fullName: string) => {
|
||||
if (!fullName) return 'Полное название не указано'
|
||||
|
||||
// Словарь для замены полных форм на сокращенные
|
||||
const legalFormReplacements: { [key: string]: string } = {
|
||||
'Общество с ограниченной ответственностью': 'ООО',
|
||||
'Открытое акционерное общество': 'ОАО',
|
||||
'Закрытое акционерное общество': 'ЗАО',
|
||||
'Публичное акционерное общество': 'ПАО',
|
||||
'Непубличное акционерное общество': 'НАО',
|
||||
'Акционерное общество': 'АО',
|
||||
'Индивидуальный предприниматель': 'ИП',
|
||||
'Товарищество с ограниченной ответственностью': 'ТОО',
|
||||
'Частное предприятие': 'ЧП',
|
||||
'Субъект предпринимательской деятельности': 'СПД'
|
||||
}
|
||||
|
||||
let result = fullName
|
||||
|
||||
// Заменяем полные формы на сокращенные
|
||||
for (const [fullForm, shortForm] of Object.entries(legalFormReplacements)) {
|
||||
const regex = new RegExp(`^${fullForm}\\s+`, 'i')
|
||||
if (regex.test(result)) {
|
||||
result = result.replace(regex, `${shortForm} `)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
const getTypeLabel = (type: string) => {
|
||||
switch (type) {
|
||||
case 'FULFILLMENT':
|
||||
@ -154,18 +185,17 @@ export function MessengerConversations({
|
||||
</Avatar>
|
||||
|
||||
<div className="flex-1 min-w-0">
|
||||
<h4 className="text-white font-medium text-sm leading-tight truncate mb-1">
|
||||
{getOrganizationName(org)}
|
||||
</h4>
|
||||
|
||||
<div className="flex items-center space-x-2 mb-2">
|
||||
<Badge className={`${getTypeColor(org.type)} text-xs`}>
|
||||
<div className="flex items-center justify-between mb-1">
|
||||
<h4 className="text-white font-medium text-sm leading-tight truncate">
|
||||
{getOrganizationName(org)}
|
||||
</h4>
|
||||
<Badge className={`${getTypeColor(org.type)} text-xs flex-shrink-0 ml-2`}>
|
||||
{getTypeLabel(org.type)}
|
||||
</Badge>
|
||||
</div>
|
||||
|
||||
<p className="text-white/60 text-xs truncate">
|
||||
{getManagerName(org)}
|
||||
{getShortCompanyName(org.fullName || '')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -65,14 +65,6 @@ export function MessengerDashboard() {
|
||||
<Sidebar />
|
||||
<main className="flex-1 ml-56 px-6 py-4 overflow-hidden">
|
||||
<div className="h-full w-full flex flex-col">
|
||||
{/* Заголовок - фиксированная высота */}
|
||||
<div className="flex items-center justify-between mb-4 flex-shrink-0">
|
||||
<div>
|
||||
<h1 className="text-xl font-bold text-white mb-1">Мессенджер</h1>
|
||||
<p className="text-white/70 text-sm">Общение с контрагентами</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Основной контент - сетка из 2 колонок */}
|
||||
<div className="flex-1 overflow-hidden">
|
||||
<div className="grid grid-cols-[350px_1fr] gap-4 h-full">
|
||||
|
Reference in New Issue
Block a user