- number-поля теперь рендерятся как text + inputMode=numeric, чтобы браузер не округлял значения через input type=number - пробелы при вставке в number-поля удаляются - бэкенд нормализует значения number-полей в строку перед сохранением - добавлен хелпер normalizeFieldValueForStorage Closes: искажение расчётного счёта и других длинных числовых полей
75 lines
3.3 KiB
JSON
75 lines
3.3 KiB
JSON
{
|
|
"type": "2",
|
|
"label": "Google Таблицы (вкладки)",
|
|
"config": {
|
|
"title": "Множественные Google Таблицы",
|
|
"hideTitle": true,
|
|
"componentType": "tabs",
|
|
"tabsContainerStyle": {
|
|
"margin": "0",
|
|
"padding": "0",
|
|
"width": "100%",
|
|
"height": "100%"
|
|
},
|
|
"tabContentStyle": {
|
|
"margin": "0",
|
|
"padding": "0",
|
|
"overflow": "hidden"
|
|
}
|
|
},
|
|
"inputSchema": [
|
|
{
|
|
"name": "tabs",
|
|
"type": "array",
|
|
"label": "Вкладки таблиц",
|
|
"default": [
|
|
{
|
|
"name": "Таблица 1",
|
|
"embedUrl": "",
|
|
"height": 500
|
|
}
|
|
],
|
|
"items": {
|
|
"type": "object",
|
|
"properties": [
|
|
{
|
|
"name": "name",
|
|
"type": "string",
|
|
"label": "Название вкладки",
|
|
"default": "Таблица"
|
|
},
|
|
{
|
|
"name": "embedUrl",
|
|
"type": "url",
|
|
"label": "URL таблицы",
|
|
"required": true,
|
|
"placeholder": "https://docs.google.com/spreadsheets/d/..."
|
|
},
|
|
{
|
|
"name": "height",
|
|
"type": "number",
|
|
"label": "Высота (px)",
|
|
"default": 500,
|
|
"min": 200,
|
|
"max": 2000
|
|
}
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"renderTemplate": {
|
|
"html": "<div class='tabs-container' style='width:100%;height:100%;margin:0;padding:0;display:flex;flex-direction:column;overflow:hidden;'>"
|
|
+ "<div class='tabs-header' style='display:flex;background:#f5f5f5;border-bottom:1px solid #ddd;padding:0;height:40px;overflow-x:auto;'>"
|
|
+ " {{tabs.map((tab,i) => `<div class='tab-btn ${activeTab===i ? 'active' : ''}' data-tab='${i}' style='padding:0 16px;cursor:pointer;height:100%;display:flex;align-items:center;border-right:1px solid #eee;font-size:14px;'>${tab.name}</div>`).join('')}}"
|
|
+ " <div class='add-tab-btn' style='padding:0 16px;height:100%;display:flex;align-items:center;border-left:1px solid #eee;cursor:pointer;color:#666;'>+ Добавить</div>"
|
|
+ "</div>"
|
|
+ "<div class='tabs-content' style='flex:1;overflow:hidden;'>"
|
|
+ " {{tabs.map((tab,i) => `<div class='tab-content ${activeTab===i ? 'active' : ''}' data-tab='${i}' style='height:100%;width:100%;display:none;overflow:hidden;'>"
|
|
+ " <iframe src='${tab.embedUrl}' style='width:100%;height:100%;border:none;margin:0;padding:0;display:block;'></iframe>"
|
|
+ " </div>`).join('')}}"
|
|
+ "</div></div>",
|
|
"css": ".tabs-container .tab-btn.active{background:#fff;color:#333;font-weight:500;box-shadow:inset 0 -2px 0 #1976d2;}.tabs-container .tab-btn:hover{background:#e3f2fd;}.tabs-container .add-tab-btn:hover{background:#f0f0f0;}.tabs-container .tab-content.active{display:block;}",
|
|
"js": "let activeTab = 0; let tabs = {{tabs}}; document.querySelectorAll('.tab-btn').forEach((btn,i)=>{btn.onclick=()=>{activeTab=i;updateTabs();}});document.querySelector('.add-tab-btn').onclick=()=>{tabs.push({name:`Таблица ${tabs.length+1}`,embedUrl:'',height:500});renderModule();};function updateTabs(){document.querySelectorAll('.tab-btn, .tab-content').forEach((el,i)=>{el.classList.toggle('active',i===activeTab);});}"
|
|
}
|
|
}
|