@@ -811,14 +811,18 @@ export function generateConfirmationFormHTML(data: any, contact_data_confirmed:
extra = ' type="email" inputmode="email" autocomplete="email"';
extra = ' type="email" inputmode="email" autocomplete="email"';
}
}
// ✅ Добавляем name атрибут для правильной работы форм и автозаполнения
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + (index !== undefined ? '_' + index : '') + '"';
var fieldHtml = '<input class="inline-field bind" data-root="' + esc(root) + '" data-key="' + esc(key) + '"' + dataIndex +
var fieldHtml = '<input class="inline-field bind" data-root="' + esc(root) + '" data-key="' + esc(key) + '"' + dataIndex +
' id="' + id + '" value="' + esc(value || '') + '" placeholder="' + esc(placeholder || '') + '"' + extra + ' />';
' id="' + id + '" ' + nameAttr + ' value="' + esc(value || '') + '" placeholder="' + esc(placeholder || '') + '"' + extra + ' />';
return fieldHtml;
return fieldHtml;
}
}
function createReadonlyField(root, key, value) {
function createReadonlyField(root, key, value) {
var id = 'field_' + root + '_' + key + '_readonly_' + Math.random().toString(36).slice(2);
var id = 'field_' + root + '_' + key + '_readonly_' + Math.random().toString(36).slice(2);
return '<input class="inline-field readonly-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" value="' + esc(value || '') + '" readonly />';
// ✅ Добавляем name атрибут для правильной работы форм
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + '"';
return '<input class="inline-field readonly-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" ' + nameAttr + ' value="' + esc(value || '') + '" readonly />';
}
}
function createDateField(root, key, value) {
function createDateField(root, key, value) {
@@ -834,20 +838,25 @@ export function generateConfirmationFormHTML(data: any, contact_data_confirmed:
}
}
}
}
// ✅ Добавляем name атрибут для правильной работы форм
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + '"';
// ✅ Проверяем, нужно ли блокировать поле (для подтверждённых данных)
// ✅ Проверяем, нужно ли блокировать поле (для подтверждённых данных)
var isLockedField = contact_data_confirmed && root === 'user' && key === 'birthday';
var isLockedField = contact_data_confirmed && root === 'user' && key === 'birthday';
if (isLockedField) {
if (isLockedField) {
return '<input type="date" class="inline-field readonly-field date-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" value="' + esc(dateValue) + '" readonly />';
return '<input type="date" class="inline-field readonly-field date-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" ' + nameAttr + ' value="' + esc(dateValue) + '" readonly />';
}
}
return '<input type="date" class="inline-field bind date-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" value="' + esc(dateValue) + '" />';
return '<input type="date" class="inline-field bind date-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" ' + nameAttr + ' value="' + esc(dateValue) + '" />';
}
}
function createMoneyField(root, key, value) {
function createMoneyField(root, key, value) {
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
// ✅ Добавляем name атрибут для правильной работы форм
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + '"';
return '<div style="display: flex; align-items: center; gap: 8px;">' +
return '<div style="display: flex; align-items: center; gap: 8px;">' +
'<input class="inline-field bind money-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '"' +
'<input class="inline-field bind money-field" data-root="' + esc(root) + '" data-key="' + esc(key) + '"' +
' id="' + id + '" value="' + esc(value || '') + '"' +
' id="' + id + '" ' + nameAttr + ' value="' + esc(value || '') + '"' +
' inputmode="decimal" pattern="[0-9]*[.,]?[0-9]*" autocomplete="off" />' +
' inputmode="decimal" pattern="[0-9]*[.,]?[0-9]*" autocomplete="off" />' +
'<span style="color: #6b7280; font-size: 14px;">рублей</span>' +
'<span style="color: #6b7280; font-size: 14px;">рублей</span>' +
'</div>';
'</div>';
@@ -855,20 +864,25 @@ export function generateConfirmationFormHTML(data: any, contact_data_confirmed:
function createTextarea(root, key, value) {
function createTextarea(root, key, value) {
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
return '<textarea class="inline-field bind full-width" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '">' + esc(value || '') + '</textarea>';
// ✅ Добавляем name атрибут для правильной работы форм
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + '"';
return '<textarea class="inline-field bind full-width" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" ' + nameAttr + '>' + esc(value || '') + '</textarea>';
}
}
function createBankSelect(root, key, value) {
function createBankSelect(root, key, value) {
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var datalistId = 'bank-datalist-' + id;
var datalistId = 'bank-datalist-' + id;
// ✅ Добавляем name атрибут для правильной работы форм
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + '"';
// Создаём input с datalist для автоподстановки
// Создаём input с datalist для автоподстановки
var inputHtml = '<input type="text" class="inline-field bind bank-select" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" list="' + datalistId + '" placeholder="Начните вводить название банка (обязательно)" autocomplete="off" />';
var inputHtml = '<input type="text" class="inline-field bind bank-select" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" ' + nameAttr + ' list="' + datalistId + '" placeholder="Начните вводить название банка (обязательно)" autocomplete="off" />';
inputHtml += '<datalist id="' + datalistId + '" class="bank-datalist">';
inputHtml += '<datalist id="' + datalistId + '" class="bank-datalist">';
inputHtml += '<option value="">Загрузка списка банков...</option>';
inputHtml += '<option value="">Загрузка списка банков...</option>';
inputHtml += '</datalist>';
inputHtml += '</datalist>';
// Скрытое поле для bank_id
// Скрытое поле для bank_id
var hiddenId = id + '_id';
var hiddenId = id + '_id';
inputHtml += '<input type="hidden" class="bank-id-field" data-root="' + esc(root) + '" data-key="bank_id" id="' + hiddenId + '" /> ';
var hiddenNameAttr = 'name="' + esc(root) + '_bank_id" ';
inputHtml += '<input type="hidden" class="bank-id-field" data-root="' + esc(root) + '" data-key="bank_id" id="' + hiddenId + '" ' + hiddenNameAttr + ' />';
return inputHtml;
return inputHtml;
}
}
@@ -876,9 +890,12 @@ export function generateConfirmationFormHTML(data: any, contact_data_confirmed:
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var checkedAttr = checked ? ' checked' : '';
var checkedAttr = checked ? ' checked' : '';
var requiredClass = required ? ' required-checkbox' : '';
var requiredClass = required ? ' required-checkbox' : '';
// ✅ Добавляем name атрибут для правильной работы форм
var nameAttr = 'name="' + esc(root) + '_' + esc(key) + '"';
// ✅ Label правильно связан с input через for/id
var checkboxHtml = '<label class="checkbox-container' + requiredClass + '" for="' + id + '">';
var checkboxHtml = '<label class="checkbox-container' + requiredClass + '" for="' + id + '">';
checkboxHtml += '<input type="checkbox" class="checkbox-field bind" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '"' + checkedAttr + ' />';
checkboxHtml += '<input type="checkbox" class="checkbox-field bind" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '" ' + nameAttr + checkedAttr + ' />';
checkboxHtml += '<span class="checkmark"></span>';
checkboxHtml += '<span class="checkmark"></span>';
checkboxHtml += '<span class="checkbox-label">' + labelText + '</span>';
checkboxHtml += '<span class="checkbox-label">' + labelText + '</span>';
checkboxHtml += '</label>';
checkboxHtml += '</label>';