Исправлены проблемы с сохранением и убраны console.logs

This commit is contained in:
2025-07-22 07:45:13 +03:00
parent 1b17638565
commit 3275cdc661
18 changed files with 439 additions and 587 deletions

View File

@@ -153,22 +153,22 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
initialTemplateValues.current[cellAddress] = String(value || '')
})
})
console.log(
'✅ Загружено значений baseFileData для сравнения (приоритет):',
Object.keys(initialTemplateValues.current).length
)
// console.log(
// '✅ Загружено значений baseFileData для сравнения (приоритет):',
// Object.keys(initialTemplateValues.current).length
//)
} else if (hasTemplateData) {
Object.entries(templateData).forEach(([sheetName, sheetData]) => {
Object.entries(sheetData).forEach(([cellAddress, value]) => {
initialTemplateValues.current[cellAddress] = String(value || '')
})
})
console.log(
'✅ Загружено значений templateData для сравнения (fallback):',
Object.keys(initialTemplateValues.current).length
)
// console.log(
// '✅ Загружено значений templateData для сравнения (fallback):',
// Object.keys(initialTemplateValues.current).length
// )
} else {
console.log('⚠️ DualSpreadsheet: Нет базовых данных для сравнения')
// console.log('⚠️ DualSpreadsheet: Нет базовых данных для сравнения')
}
}, [baseFileData, templateData])
@@ -250,11 +250,11 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
baseFileValue &&
rawValue !== baseFileValue
) {
console.log(`🔧 Измененная ячейка ${cellName}:`, {
baseFileValue,
rawValue,
isModified: true,
})
// console.log(`🔧 Измененная ячейка ${cellName}:`, {
// baseFileValue,
// rawValue,
// isModified: true,
// })
}
// Нормализуем значения для сравнения
@@ -274,11 +274,11 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
// Отладка только для измененных ячеек
if (sheetType === 'report' && isModified) {
console.log(`🔍 Измененная ячейка ${cellName}:`, {
baseFileValue,
rawValue,
isModified,
})
// console.log(`🔍 Измененная ячейка ${cellName}:`, {
// baseFileValue,
// rawValue,
// isModified,
// })
}
cachedData[cellKey] = {
@@ -326,10 +326,10 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
setHighlightedCells(highlights)
console.log('🎨 Подсветка ячеек для формулы:', formula, {
references,
highlights,
})
// console.log('🎨 Подсветка ячеек для формулы:', formula, {
// references,
// highlights,
// })
} catch (error) {
console.error('Ошибка при обновлении подсветки ячеек:', error)
setHighlightedCells([])
@@ -411,14 +411,14 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
)
const baseFileValue = initialTemplateValues.current[cellName] ?? '' // Базовое значение из файла
console.log('💾 Сохранение ячейки:', {
cellName,
oldValue,
newValue: editingValue,
baseFileValue,
isChanged: oldValue !== editingValue,
isModifiedFromBaseFile: baseFileValue !== editingValue,
})
// console.log('💾 Сохранение ячейки:', {
//cellName,
//oldValue,
//newValue: editingValue,
//baseFileValue,
//isChanged: oldValue !== editingValue,
//isModifiedFromBaseFile: baseFileValue !== editingValue,
//})
multiSheetEngine.setCellValueWithoutRecalc(
sheetName,
@@ -529,12 +529,12 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
const handleCellClick = useCallback(
(row: number, col: number) => {
console.log('🖱️ Обычный клик по ячейке:', {
row,
col,
isEditing,
activeSheet,
})
// console.log('🖱️ Обычный клик по ячейке:', {
// row,
//col,
//isEditing,
//activeSheet,
//})
if (isEditing) {
stopEditing(true)
@@ -548,20 +548,20 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
// Новый обработчик для кликов в режиме редактирования - вставляет ссылку
const handleCellReferenceClick = useCallback(
(targetSheetType: SheetType, row: number, col: number) => {
console.log('🔗 Клик для вставки ссылки:', {
targetSheetType,
row,
col,
isEditing,
selectedCell,
editingValue,
})
// console.log('🔗 Клик для вставки ссылки:', {
//targetSheetType,
//row,
//col,
//isEditing,
//selectedCell,
//editingValue,
//})
// Проверяем, что мы в режиме редактирования
if (!isEditing || !selectedCell) {
console.log(
'⚠️ Игнорируем клик ссылки: не в режиме редактирования или нет выбранной ячейки'
)
// console.log(
// '⚠️ Игнорируем клик ссылки: не в режиме редактирования или нет выбранной ячейки'
//)
return
}
@@ -571,19 +571,19 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
// Если это другой лист, делаем квалифицированную ссылку
if (targetSheetType !== activeSheet) {
cellReference = createQualifiedCellReference(targetSheetType, row, col)
console.log('📋 Создана межлистовая ссылка:', cellReference)
// console.log('📋 Создана межлистовая ссылка:', cellReference)
} else {
// Если это тот же лист, делаем локальную ссылку
cellReference = createCellAddress(row, col)
console.log('📋 Создана локальная ссылка:', cellReference)
// console.log('📋 Создана локальная ссылка:', cellReference)
}
// Добавляем ссылку к текущему значению редактирования
const newValue = editingValue + cellReference
console.log('✏️ Новое значение формулы:', {
oldValue: editingValue,
newValue,
})
// console.log('✏️ Новое значение формулы:', {
//oldValue: editingValue,
//newValue,
//})
setEditingValue(newValue)
@@ -739,15 +739,15 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
// Отладка templateId
useEffect(() => {
console.log('🆔 Текущий templateId в DualSpreadsheet:', {
templateId,
type: typeof templateId,
isValid: templateId
? /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
templateId
)
: false,
})
// console.log('🆔 Текущий templateId в DualSpreadsheet:', {
//templateId,
//type: typeof templateId,
//isValid: templateId
// ? /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
// templateId
// )
// : false,
//})
}, [templateId])
// Используем хук для перетаскивания разделителя
@@ -774,7 +774,7 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
try {
const latestFile = await getLatestFileForTemplate(templateId)
if (latestFile) {
console.log('📁 Найден последний файл для шаблона:', latestFile.name)
// console.log('📁 Найден последний файл для шаблона:', latestFile.name)
const fileData = await getFileData(latestFile.id)
// TODO: Пока getFileData возвращает пустые данные, используем templateData
@@ -784,14 +784,14 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
setBaseFileData(finalBaseData)
// Сохраняем baseline, чтобы в L попадали только пользовательские изменения
setTemplateData(finalBaseData)
console.log('📄 Загружены базовые данные файла:', finalBaseData)
// console.log('📄 Загружены базовые данные файла:', finalBaseData)
} else {
console.log(
'⚠️ getFileData вернул пустые данные, используем templateData'
)
// console.log(
// '⚠️ getFileData вернул пустые данные, используем templateData'
//)
}
} else {
console.log('⚠️ Файл не найден для templateId:', templateId)
// console.log('⚠️ Файл не найден для templateId:', templateId)
}
} catch (error) {
console.error('❌ Ошибка при загрузке данных файла:', error)
@@ -806,16 +806,16 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
if (hasTemplateData && Object.keys(finalBaseData).length === 0) {
finalBaseData = templateData
setBaseFileData(finalBaseData)
console.log(
'📄 Используем templateData как базовые данные:',
finalBaseData
)
// console.log(
// '📄 Используем templateData как базовые данные:',
// finalBaseData
//)
setTemplateData(templateData)
}
// 3. ЗАГРУЖАЕМ ПОЛЬЗОВАТЕЛЬСКИЕ ИЗМЕНЕНИЯ ИЗ API
try {
console.log('🔍 Загружаем пользовательские изменения из API...')
// console.log('🔍 Загружаем пользовательские изменения из API...')
const apiSheets = await loadSheets()
// Преобразуем листы API в формат данных
@@ -840,16 +840,16 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
}
})
console.log(
'📂 Загружены пользовательские изменения:',
Object.keys(userChanges)
)
// console.log(
// '📂 Загружены пользовательские изменения:',
// Object.keys(userChanges)
//)
// 4. ОБЪЕДИНЯЕМ БАЗОВЫЕ ДАННЫЕ С ПОЛЬЗОВАТЕЛЬСКИМИ ИЗМЕНЕНИЯМИ
if (Object.keys(userChanges).length > 0) {
console.log(
'🔄 Объединяем базовые данные с пользовательскими изменениями'
)
// console.log(
// '🔄 Объединяем базовые данные с пользовательскими изменениями'
//)
// Создаем объединенные данные: базовые данные файла + пользовательские изменения
const mergedData: Record<string, Record<string, any>> = {}
@@ -869,24 +869,24 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
})
})
console.log(
'📊 Загружаем объединенные данные (базовые + пользовательские)'
)
// console.log(
// '📊 Загружаем объединенные данные (базовые + пользовательские)'
//)
multiSheetEngine.loadData(mergedData)
} else if (Object.keys(finalBaseData).length > 0) {
console.log(
'📋 Используем только базовые данные (нет пользовательских изменений)'
)
// console.log(
// '📋 Используем только базовые данные (нет пользовательских изменений)'
//)
multiSheetEngine.loadData(finalBaseData)
} else {
console.log('⚠️ Нет данных для загрузки')
// console.log('⚠️ Нет данных для загрузки')
}
} catch (error) {
console.error('❌ Ошибка при загрузке пользовательских изменений:', error)
// В случае ошибки используем только базовые данные
if (Object.keys(finalBaseData).length > 0) {
console.log('📋 Ошибка API, используем только базовые данные')
// console.log('📋 Ошибка API, используем только базовые данные')
multiSheetEngine.loadData(finalBaseData)
}
}

View File

@@ -44,13 +44,13 @@ export const Cell = memo(
// Отладка стилей для измененных ячеек
if (isModified) {
console.log(`🎨 Стили для измененной ячейки ${rowIndex},${colIndex}:`, {
className,
isModified,
isSelected,
displayValue,
highlightColor,
})
// console.log(`🎨 Стили для измененной ячейки ${rowIndex},${colIndex}:`, //{
// className,
// isModified,
// isSelected,
// displayValue,
// highlightColor,
//})
}
// Для объединенных ячеек нужно рассчитать правильные размеры
@@ -109,14 +109,14 @@ export const Cell = memo(
const handleClick = useCallback(
(e: React.MouseEvent) => {
console.log('🖱️ Cell клик:', {
rowIndex,
colIndex,
sheetType,
isInEditMode,
isSelected,
hasReferenceHandler: !!onCellReferenceClick,
})
// console.log('🖱️ Cell клик:', {
// rowIndex,
// colIndex,
// sheetType,
// isInEditMode,
// isSelected,
//hasReferenceHandler: !!onCellReferenceClick,
//})
// Если мы в режиме редактирования, вставка была обработана на mousedown.
// Останавливаем всплытие, чтобы родительский Spreadsheet не сменил активный лист.
@@ -127,17 +127,17 @@ export const Cell = memo(
}
// Обычная логика клика (выделение ячейки)
console.log('📍 Обычный клик - выбираем ячейку:', {
rowIndex,
colIndex,
sheetType,
})
// console.log('📍 Обычный клик - выбираем ячейку:', {
// rowIndex,
// colIndex,
// sheetType,
//})
// Подсказка для пользователя
if (!isInEditMode) {
console.log(
'💡 Чтобы вставить ссылку на ячейку: 1) Выберите ячейку 2) Нажмите F2 или Enter для редактирования 3) Кликните на нужную ячейку'
)
// console.log(
// '💡 Чтобы вставить ссылку на ячейку: 1) Выберите ячейку 2) Нажмите F2 или Enter для редактирования 3) Кликните на нужную ячейку'
//)
}
setActiveSheet(sheetType)
@@ -166,11 +166,11 @@ export const Cell = memo(
if (isInEditMode && onCellReferenceClick && !isSelected) {
e.preventDefault()
e.stopPropagation()
console.log('🖱️ mousedown вставка ссылки до blur:', {
rowIndex,
colIndex,
sheetType,
})
// console.log('🖱️ mousedown вставка ссылки до blur:', {
// rowIndex,
// colIndex,
// sheetType,
//})
onCellReferenceClick(sheetType, rowIndex, colIndex)
return
}

View File

@@ -55,16 +55,16 @@ export const CellRenderer = ({
// Отладка для измененных ячеек
if (cellData?.isModified) {
console.log(
`🔍 CellRenderer: Измененная ячейка ${rowIndex},${columnIndex}:`,
{
cellKey,
isModified: cellData.isModified,
displayValue,
rawValue,
highlightColor,
}
)
// console.log(
// `🔍 CellRenderer: Измененная ячейка ${rowIndex},${columnIndex}:`,
// {
// cellKey,
// isModified: cellData.isModified,
// displayValue,
// rawValue,
// highlightColor,
// }
// )
}
// Получаем информацию об объединенных ячейках только для листа отчета

View File

@@ -56,13 +56,13 @@ export const Spreadsheet = ({
}
// Отладочное логирование для проверки состояния
console.log(`📊 Spreadsheet ${sheetType} состояние:`, {
isEditing,
isInEditMode,
selectedCell,
activeSheet,
isActiveSheet: activeSheet === sheetType,
})
// console.log(`📊 Spreadsheet ${sheetType} состояние:`, {
// isEditing,
// isInEditMode,
// selectedCell,
// activeSheet,
// isActiveSheet: activeSheet === sheetType,
//})
const parentRef = useRef<HTMLDivElement>(null)
const [gridSize, setGridSize] = useState({ width: 0, height: 0 })

View File

@@ -395,7 +395,7 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
value={formData.type}
onValueChange={value => {
const newType = value as ElementType
console.log('Element type changed to:', newType)
// console.log('Element type changed to:', newType)
setFormData(prev => {
const updates: Partial<TemplateElement> = { type: newType }
@@ -405,24 +405,24 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
newType === 'standards' ||
newType === 'calibration-conditions'
) {
console.log(
`${newType} type selected, getting element definition`
)
// console.log(
// `${newType} type selected, getting element definition`
// )
const elementDefinition = getElementDefinition(newType)
console.log('Element definition:', elementDefinition)
// console.log('Element definition:', elementDefinition)
if (elementDefinition && elementDefinition.defaultConfig) {
const defaultConfig =
elementDefinition.defaultConfig as any
console.log('Default config:', defaultConfig)
// console.log('Default config:', defaultConfig)
updates.targetCells =
elementDefinition.mapToCells?.(defaultConfig) || []
console.log('Generated targetCells:', updates.targetCells)
// console.log('Generated targetCells:', updates.targetCells)
}
}
const newFormData = { ...prev, ...updates }
console.log('New form data:', newFormData)
// console.log('New form data:', newFormData)
return newFormData
})
}}
@@ -520,7 +520,7 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
value={formData.type}
onValueChange={value => {
const newType = value as ElementType
console.log('Element type changed to (fallback):', newType)
// console.log('Element type changed to (fallback):', newType)
setFormData(prev => {
const updates: Partial<TemplateElement> = { type: newType }
@@ -530,29 +530,29 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
newType === 'standards' ||
newType === 'calibration-conditions'
) {
console.log(
`${newType} type selected (fallback), getting element definition`
)
// console.log(
// `${newType} type selected (fallback), getting element definition`
// )
const elementDefinition = getElementDefinition(newType)
console.log(
'Element definition (fallback):',
elementDefinition
)
// console.log(
// 'Element definition (fallback):',
// elementDefinition
// )
if (elementDefinition && elementDefinition.defaultConfig) {
const defaultConfig = elementDefinition.defaultConfig as any
console.log('Default config (fallback):', defaultConfig)
// console.log('Default config (fallback):', defaultConfig)
updates.targetCells =
elementDefinition.mapToCells?.(defaultConfig) || []
console.log(
'Generated targetCells (fallback):',
updates.targetCells
)
// console.log(
// 'Generated targetCells (fallback):',
// updates.targetCells
// )
}
}
const newFormData = { ...prev, ...updates }
console.log('New form data (fallback):', newFormData)
// console.log('New form data (fallback):', newFormData)
return newFormData
})
}}
@@ -746,10 +746,10 @@ export const ElementConstructor: React.FC<ElementConstructorProps> = ({
}
const handleAddElement = () => {
console.log('handleAddElement called with formData:', formData)
// console.log('handleAddElement called with formData:', formData)
if (!formData.label) {
console.log('Validation failed: missing label')
// console.log('Validation failed: missing label')
return
}
@@ -760,9 +760,9 @@ export const ElementConstructor: React.FC<ElementConstructorProps> = ({
formData.type !== 'button-group' &&
!formData.targetCells?.length
) {
console.log(
'Validation failed: missing targetCells for element that requires manual targetCells'
)
// console.log(
// 'Validation failed: missing targetCells for element that requires manual targetCells'
// )
return
}

View File

@@ -101,7 +101,7 @@ export const TemplateEditor: React.FC<TemplateEditorProps> = ({
})
setDataVersion(v => v + 1)
console.log('✅ Файл загружен с ID:', fileId)
// console.log('✅ Файл загружен с ID:', fileId)
} catch (err) {
console.error(err)
alert('Ошибка при загрузке Excel файла на сервер')

View File

@@ -398,7 +398,7 @@ export const VisualLayoutEditor: React.FC<VisualLayoutEditorProps> = ({
onLayoutSettingsChange,
onElementEdit,
}) => {
console.log('VisualLayoutEditor render with elements:', elements)
// console.log('VisualLayoutEditor render with elements:', elements)
const [selectedElementId, setSelectedElementId] = useState<string | null>(
null
)