экраны закупов и креативов
This commit is contained in:
@@ -46,67 +46,91 @@ func (s *Creatives) renderCreatives(b *bot.Bot, mode bot.RenderMode, jwt string)
|
||||
return
|
||||
}
|
||||
|
||||
text := "Креативы • Управление рекламными материалами\n\n"
|
||||
|
||||
var text string
|
||||
var buttons [][]echotron.InlineKeyboardButton
|
||||
|
||||
if len(page.Items) == 0 {
|
||||
text += "У вас пока нет креативов"
|
||||
text = `<b>Креативы</b>
|
||||
|
||||
У вас пока нет креативов.
|
||||
|
||||
<i>Креатив — это рекламный материал:</i>
|
||||
▸ Текст объявления
|
||||
▸ Медиа контент (фото, видео)
|
||||
▸ Шаблон для автопостинга
|
||||
▸ Варианты для A/B тестирования
|
||||
|
||||
<i>Начните с добавления первого креатива 👇</i>`
|
||||
} else {
|
||||
text += fmt.Sprintf("Выберите креатив для управления (стр. %d из %d):", s.CurrentPage+1, page.Pages)
|
||||
|
||||
// Креативы по 2 в ряду
|
||||
for i := 0; i < len(page.Items); i += 2 {
|
||||
var row []echotron.InlineKeyboardButton
|
||||
|
||||
// Первый креатив в ряду
|
||||
creative := page.Items[i]
|
||||
row = append(row, bot.Button(creative.Name, fmt.Sprintf("creative:%s", creative.ID)))
|
||||
|
||||
// Второй креатив в ряду (если есть)
|
||||
if i+1 < len(page.Items) {
|
||||
creative = page.Items[i+1]
|
||||
row = append(row, bot.Button(creative.Name, fmt.Sprintf("creative:%s", creative.ID)))
|
||||
} else {
|
||||
// Добавляем пустую кнопку для выравнивания
|
||||
row = append(row, bot.Button(" ", "empty"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, row)
|
||||
pageInfo := ""
|
||||
if page.Pages > 1 {
|
||||
pageInfo = fmt.Sprintf("\n<i>Страница %d из %d</i>", page.Page, page.Pages)
|
||||
}
|
||||
|
||||
// Кнопки пагинации с номером страницы посередине (только если есть креативы)
|
||||
var navRow []echotron.InlineKeyboardButton
|
||||
text = fmt.Sprintf(`<b>Креативы</b>
|
||||
|
||||
// Левая стрелка (активная или неактивная)
|
||||
if s.CurrentPage > 0 {
|
||||
navRow = append(navRow, bot.Button("←", "prev"))
|
||||
} else {
|
||||
navRow = append(navRow, bot.Button("·", "empty"))
|
||||
}
|
||||
Управление рекламными материалами.%s
|
||||
|
||||
// Кнопка с номером страницы (неактивная)
|
||||
pageButton := bot.Button(fmt.Sprintf("• %d/%d •", s.CurrentPage+1, page.Pages), "page_info")
|
||||
navRow = append(navRow, pageButton)
|
||||
|
||||
// Правая стрелка (активная или неактивная)
|
||||
if s.CurrentPage+1 < page.Pages {
|
||||
navRow = append(navRow, bot.Button("→", "next"))
|
||||
} else {
|
||||
navRow = append(navRow, bot.Button("·", "empty"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, navRow)
|
||||
<i>Выберите креатив 👇</i>`,
|
||||
pageInfo)
|
||||
}
|
||||
|
||||
// Кнопки управления
|
||||
buttons = append(buttons, bot.Row(
|
||||
bot.Button("Архив", "archive"),
|
||||
bot.Button("Добавить креатив", "add_creative"),
|
||||
))
|
||||
// Создаем слоты для креативов
|
||||
var slots []echotron.InlineKeyboardButton
|
||||
for _, creative := range page.Items {
|
||||
slots = append(slots, bot.Button(creative.Name, fmt.Sprintf("creative:%s", creative.ID)))
|
||||
}
|
||||
|
||||
// Кнопка возврата
|
||||
buttons = append(buttons, bot.Row(bot.Button("« Назад", "back")))
|
||||
// Если страниц >= 2, заполняем до 6 слотов пустыми кнопками
|
||||
if page.Pages >= 2 {
|
||||
for len(slots) < creativesPerPage {
|
||||
slots = append(slots, bot.Button(" ", "empty"))
|
||||
}
|
||||
}
|
||||
|
||||
// Разбиваем слоты по 2 в ряду
|
||||
for i := 0; i < len(slots); i += 2 {
|
||||
var row []echotron.InlineKeyboardButton
|
||||
row = append(row, slots[i])
|
||||
|
||||
// Второй слот в ряду (если есть)
|
||||
if i+1 < len(slots) {
|
||||
row = append(row, slots[i+1])
|
||||
} else {
|
||||
// Если нечетное количество, добавляем пустую кнопку
|
||||
row = append(row, bot.Button(" ", "empty"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, row)
|
||||
}
|
||||
|
||||
// Ряд: Пагинация + Добавить
|
||||
var navRow []echotron.InlineKeyboardButton
|
||||
|
||||
// Левая стрелка (или пустая кнопка)
|
||||
if s.CurrentPage > 0 {
|
||||
navRow = append(navRow, bot.Button("←", "prev"))
|
||||
} else {
|
||||
navRow = append(navRow, bot.Button(" ", "empty"))
|
||||
}
|
||||
|
||||
// Кнопка "Добавить креатив" всегда в центре
|
||||
navRow = append(navRow, bot.Button("+ Добавить", "add_creative"))
|
||||
|
||||
// Правая стрелка (или пустая кнопка)
|
||||
if s.CurrentPage+1 < page.Pages {
|
||||
navRow = append(navRow, bot.Button("→", "next"))
|
||||
} else {
|
||||
navRow = append(navRow, bot.Button(" ", "empty"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, navRow)
|
||||
|
||||
// Нижний ряд: Назад + Архив
|
||||
buttons = append(buttons, bot.Row(
|
||||
bot.Button("← Назад", "back"),
|
||||
bot.Button("≡ Архив", "archive"),
|
||||
))
|
||||
|
||||
keyboard := bot.Keyboard(buttons...)
|
||||
b.Render(text, keyboard, mode)
|
||||
@@ -175,10 +199,12 @@ func (s *Creatives) HandleCallback(b *bot.Bot, u *echotron.Update) {
|
||||
if len(parts) == 2 {
|
||||
creativeID := parts[1]
|
||||
|
||||
// TODO: реализовать экран деталей креатива
|
||||
b.Edit(fmt.Sprintf("📄 Детали креатива\n\nID: %s\n\nЭта функция в разработке", creativeID), bot.Keyboard(
|
||||
bot.Row(bot.Button("« Назад", "back")),
|
||||
))
|
||||
b.SetState(&CreativeDetails{
|
||||
CreativeID: creativeID,
|
||||
ProjectID: s.ProjectID,
|
||||
WorkspaceID: s.WorkspaceID,
|
||||
BackState: s,
|
||||
}, bot.NewMessage)
|
||||
}
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user