ваше сообщение коммита
This commit is contained in:
3
frontend/public/dle-logo.png
Normal file
3
frontend/public/dle-logo.png
Normal file
@@ -0,0 +1,3 @@
|
||||
# Это placeholder для логотипа DLE
|
||||
# В реальном проекте здесь должен быть PNG файл с логотипом
|
||||
# Размер рекомендуется: 200x200 пикселей
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.4 KiB |
20
frontend/public/uploads/logos/default-token.svg
Normal file
20
frontend/public/uploads/logos/default-token.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#0066cc;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#0056b3;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Фон -->
|
||||
<rect width="200" height="200" rx="20" fill="url(#grad1)"/>
|
||||
|
||||
<!-- Текст DLE -->
|
||||
<text x="100" y="120" font-family="Arial, sans-serif" font-size="48" font-weight="bold" text-anchor="middle" fill="white">DLE</text>
|
||||
|
||||
<!-- Дополнительные элементы -->
|
||||
<circle cx="50" cy="50" r="8" fill="rgba(255,255,255,0.3)"/>
|
||||
<circle cx="150" cy="50" r="8" fill="rgba(255,255,255,0.3)"/>
|
||||
<circle cx="50" cy="150" r="8" fill="rgba(255,255,255,0.3)"/>
|
||||
<circle cx="150" cy="150" r="8" fill="rgba(255,255,255,0.3)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 907 B |
@@ -58,8 +58,20 @@
|
||||
@click="selectDle(dle)"
|
||||
>
|
||||
<div class="dle-header">
|
||||
<h3>{{ dle.name }} ({{ dle.symbol }})</h3>
|
||||
<span class="dle-version">{{ dle.version || 'v2' }}</span>
|
||||
<div class="dle-title-section">
|
||||
<img
|
||||
v-if="dle.logoURI"
|
||||
:src="dle.logoURI"
|
||||
:alt="dle.name"
|
||||
class="dle-logo"
|
||||
@error="handleLogoError"
|
||||
/>
|
||||
<div class="default-logo" v-else>DLE</div>
|
||||
<div class="dle-title">
|
||||
<h3>{{ dle.name }} ({{ dle.symbol }})</h3>
|
||||
<span class="dle-version">{{ dle.version || 'v2' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dle-details">
|
||||
@@ -106,7 +118,22 @@
|
||||
<strong>Коды ОКВЭД:</strong> {{ dle.okvedCodes?.join(', ') || 'Не указаны' }}
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<strong>Партнеры:</strong> {{ dle.participantCount || 0 }} участников
|
||||
<strong>Партнеры:</strong>
|
||||
<span v-if="dle.partnerBalances && dle.partnerBalances.length > 0">
|
||||
{{ dle.participantCount || dle.partnerBalances.length }} участников
|
||||
<div class="partners-details">
|
||||
<div v-for="(partner, index) in dle.partnerBalances.slice(0, 3)" :key="index" class="partner-info">
|
||||
<span class="partner-address">{{ shortenAddress(partner.address) }}</span>
|
||||
<span class="partner-balance">{{ partner.balance }} токенов ({{ partner.percentage.toFixed(1) }}%)</span>
|
||||
</div>
|
||||
<div v-if="dle.partnerBalances.length > 3" class="more-partners">
|
||||
+{{ dle.partnerBalances.length - 3 }} еще
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ dle.participantCount || 0 }} участников
|
||||
</span>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<strong>Статус:</strong>
|
||||
@@ -229,6 +256,16 @@ const openProposals = () => {
|
||||
router.push('/management/proposals');
|
||||
};
|
||||
|
||||
// Обработка ошибки загрузки логотипа
|
||||
const handleLogoError = (event) => {
|
||||
console.log('Ошибка загрузки логотипа:', event.target.src);
|
||||
event.target.style.display = 'none';
|
||||
const defaultLogo = event.target.parentElement.querySelector('.default-logo');
|
||||
if (defaultLogo) {
|
||||
defaultLogo.style.display = 'flex';
|
||||
}
|
||||
};
|
||||
|
||||
const openTokens = () => {
|
||||
router.push('/management/tokens');
|
||||
};
|
||||
@@ -309,7 +346,8 @@ async function loadDeployedDles() {
|
||||
kpp: blockchainData.kpp || dle.kpp,
|
||||
// Информация о токенах из блокчейна
|
||||
totalSupply: blockchainData.totalSupply,
|
||||
deployerBalance: blockchainData.deployerBalance,
|
||||
partnerBalances: blockchainData.partnerBalances || [], // Информация о партнерах
|
||||
logoURI: blockchainData.logoURI || '', // URL логотипа
|
||||
// Количество участников (держателей токенов)
|
||||
participantCount: blockchainData.participantCount || 0
|
||||
};
|
||||
@@ -867,6 +905,97 @@ onBeforeUnmount(() => {
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
/* Стили для отображения логотипа */
|
||||
.dle-title-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.dle-logo {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 8px;
|
||||
object-fit: contain;
|
||||
border: 2px solid #e9ecef;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.default-logo {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 8px;
|
||||
background: linear-gradient(135deg, var(--color-primary), #0056b3);
|
||||
color: white;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
border: 2px solid #e9ecef;
|
||||
}
|
||||
|
||||
.dle-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.dle-title h3 {
|
||||
margin: 0;
|
||||
font-size: 1.2rem;
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
.dle-version {
|
||||
font-size: 0.8rem;
|
||||
color: #6c757d;
|
||||
background: #f8f9fa;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
align-self: flex-start;
|
||||
}
|
||||
|
||||
/* Стили для отображения партнеров */
|
||||
.partners-details {
|
||||
margin-top: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
background: #f8f9fa;
|
||||
border-radius: 6px;
|
||||
border-left: 3px solid var(--color-primary);
|
||||
}
|
||||
|
||||
.partner-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.25rem 0;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.partner-info:not(:last-child) {
|
||||
border-bottom: 1px solid #e9ecef;
|
||||
}
|
||||
|
||||
.partner-address {
|
||||
font-family: 'Courier New', monospace;
|
||||
color: #495057;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.partner-balance {
|
||||
color: var(--color-primary);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.more-partners {
|
||||
text-align: center;
|
||||
color: #6c757d;
|
||||
font-style: italic;
|
||||
font-size: 0.8rem;
|
||||
padding: 0.25rem 0;
|
||||
}
|
||||
|
||||
/* Адаптивность */
|
||||
@media (max-width: 768px) {
|
||||
.blocks-row {
|
||||
@@ -880,6 +1009,25 @@ onBeforeUnmount(() => {
|
||||
.management-block h3 {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
.partner-info {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.dle-title-section {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.dle-logo,
|
||||
.default-logo {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2475,6 +2475,28 @@ const deploySmartContracts = async () => {
|
||||
autoVerifyAfterDeploy: autoVerifyAfterDeploy.value
|
||||
};
|
||||
|
||||
// Обработка логотипа
|
||||
try {
|
||||
if (logoFile.value) {
|
||||
const form = new FormData();
|
||||
form.append('logo', logoFile.value);
|
||||
const uploadResp = await axios.post('/uploads/logo', form, { headers: { 'Content-Type': 'multipart/form-data' } });
|
||||
const uploaded = uploadResp.data?.data?.url || uploadResp.data?.data?.path;
|
||||
if (uploaded) {
|
||||
deployData.logoURI = uploaded;
|
||||
}
|
||||
} else if (ensResolvedUrl.value) {
|
||||
deployData.logoURI = ensResolvedUrl.value;
|
||||
} else {
|
||||
// фолбэк на дефолт
|
||||
deployData.logoURI = '/uploads/logos/default-token.svg';
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Ошибка при обработке логотипа:', error.message);
|
||||
// Используем fallback логотип
|
||||
deployData.logoURI = '/uploads/logos/default-token.svg';
|
||||
}
|
||||
|
||||
console.log('Данные для деплоя DLE:', deployData);
|
||||
|
||||
// Предварительная проверка балансов во всех сетях
|
||||
|
||||
Reference in New Issue
Block a user