const isVisible = $(`table tbody tr:first td:eq(${index})`).is(':visible');
if (!isVisible) return;
- const val = valuesMap[storeId] || {quantity: '', id: '', title: {}};
- const tooltipTitle = $('<div>').text(generateTitleString(val.title)).html(); // экранирование
+ const tooltipTitle = generateTitleString(val.title);
+ const encodedTooltip = $('<div>').text(tooltipTitle).html(); // безопасно экранируем
const td = $(`
<td data-store-id="${storeId}">
data-id="${val.id}"
data-guid="${item.product_id}"
data-store_id="${storeId}"
- title="${tooltipTitle}"
- data-bs-toggle="tooltip" data-bs-placement="top"
+ title="${encodedTooltip}"
+ data-bs-toggle="tooltip"
+ data-bs-placement="top"
data-original-value="${val.quantity}">
<button class="reject-btn border-0 bg-transparent cursor-pointer">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
return startMonth;
}
-function buildForecastTooltip(week, storeId, guid) {
- console.log(week, storeId, guid);
- const weekData = forecastCache[week];
- if (!weekData) return null;
+function generateTitleString(titleObj) {
+ if (!titleObj || typeof titleObj !== 'object') return '';
- const storeData = weekData[storeId];
- if (!storeData) return null;
+ const typeTitles = {
+ offline: '📦 Оффлайн',
+ online: '🌐 Онлайн',
+ marketplace: '🛒 Маркетплейс'
+ };
- const productData = storeData[guid];
- if (!productData) return null;
+ let parts = [];
- let tooltip = `<div><strong>Прогноз:</strong><br>`;
- for (const [type, groups] of Object.entries(productData)) {
- tooltip += `<div><em>${type}</em><ul>`;
- for (const [group, value] of Object.entries(groups)) {
- tooltip += `<li>${group}: ${value}</li>`;
- }
- tooltip += `</ul></div>`;
+ for (const [typeKey, typeValue] of Object.entries(titleObj)) {
+ if (!typeValue || typeof typeValue !== 'object') continue;
+
+ let lines = Object.entries(typeValue)
+ .map(([key, val]) => `- ${key.replace(/_/g, ' ')}: ${parseFloat(val).toFixed(2)}`);
+
+ parts.push(`${typeTitles[typeKey] || typeKey}:\n${lines.join('\n')}`);
}
- tooltip += `</div>`;
- return tooltip;
+ return parts.join('\n\n');
}
+