Compare commits

...

3 Commits

Author SHA1 Message Date
PotapovaA
2cd80343ab fix aurora-1149 2026-07-02 19:07:58 +03:00
PotapovaA
c0e186baef Merge branch 'front-projects' of https://git.aepif.ru/RSHB/DFiP_Budget_planing into front-projects 2026-07-02 18:15:16 +03:00
PotapovaA
1df748fb03 fix-vsp rename fields 2026-07-02 18:13:55 +03:00
4 changed files with 35 additions and 6 deletions

View File

@ -2,15 +2,18 @@
import { useEffect, useRef, useLayoutEffect, useState } from 'react'; import { useEffect, useRef, useLayoutEffect, useState } from 'react';
import { isFormula, extractFormula, calculateFormula, formatNumber } from '../../utils/formulaUtils'; import { isFormula, extractFormula, calculateFormula, formatNumber } from '../../utils/formulaUtils';
import { saveToStorage, loadFromStorage } from '../../utils/localStorageUtils'; import { saveToStorage, loadFromStorage } from '../../utils/localStorageUtils';
import { useRealtime } from '../../contexts/RealtimeContext';
const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId, table }) => {
const { endEditing: contextEndEditing } = useRealtime();
const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => {
const [curValue, setCurValue] = useState(value); const [curValue, setCurValue] = useState(value);
const [displayValue, setDisplayValue] = useState(value); const [displayValue, setDisplayValue] = useState(value);
const [isFormulaMode, setIsFormulaMode] = useState(false); const [isFormulaMode, setIsFormulaMode] = useState(false);
// Ключ для хранения формул в localStorage // Ключ для хранения формул в localStorage
const storageKey = `formula_${tableId}_${cellId}`; const storageKey = `formula_${tableId}_${cellId}`;
const trFrag = refCell.current.offsetParent.offsetParent; const trFrag = refCell.current.offsetParent.offsetParent;
const tdFrag = refCell.current.offsetParent; const tdFrag = refCell.current.offsetParent;
const left = tdFrag.offsetLeft; const left = tdFrag.offsetLeft;
@ -69,7 +72,7 @@ const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => {
if (isFormula(curValue)) { if (isFormula(curValue)) {
// Сохраняем формулу в localStorage // Сохраняем формулу в localStorage
saveToStorage(storageKey, curValue); saveToStorage(storageKey, curValue);
// Вычисляем и сохраняем результат // Вычисляем и сохраняем результат
try { try {
const formula = extractFormula(curValue); const formula = extractFormula(curValue);
@ -108,6 +111,29 @@ const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => {
return displayValue; return displayValue;
}; };
const finishEditing = () => {
const editingCell = table.getState().editingCell || null;
if (editingCell) {
contextEndEditing?.(editingCell.row, editingCell.column);
}
};
useEffect(() => {
const handleClickOutside = (event) => {
// Проверяем, был ли клик внутри элемента редактирования
const editElement = ref.current;
if (editElement && !editElement.contains(event.target)) {
finishEditing();
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, [ref]);
return ( return (
<tr> <tr>
<td> <td>

View File

@ -177,6 +177,7 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
measureElement: (el) => el?.offsetHeight || TABLE_ROW_HEIGHT, measureElement: (el) => el?.offsetHeight || TABLE_ROW_HEIGHT,
}, },
onEditingCellChange: (cell) => { onEditingCellChange: (cell) => {
console.log(cell, editingCell);
if (cell) { if (cell) {
if (editingCell) return; if (editingCell) return;
contextStartEditing?.(cell.row, cell.column); contextStartEditing?.(cell.row, cell.column);

View File

@ -3,6 +3,7 @@ import { createPortal } from 'react-dom';
import { columns as mockColumns } from '../../mocks/mockTable'; import { columns as mockColumns } from '../../mocks/mockTable';
import { config } from './constants/FORM_2/AHR'; import { config } from './constants/FORM_2/AHR';
import { useParams } from 'react-router'; import { useParams } from 'react-router';
import { useRealtime } from './contexts/RealtimeContext';
function EditCellPortal({ function EditCellPortal({
cell, cell,
@ -20,6 +21,8 @@ function EditCellPortal({
const [isSaving, setIsSaving] = useState(false); const [isSaving, setIsSaving] = useState(false);
const isDisabled = false; const isDisabled = false;
const { endEditing: contextEndEditing } = useRealtime();
useEffect(() => { useEffect(() => {
if (ref.current) { if (ref.current) {
const tbodyRef = ref.current.offsetParent?.offsetParent?.offsetParent; const tbodyRef = ref.current.offsetParent?.offsetParent?.offsetParent;
@ -68,6 +71,7 @@ function EditCellPortal({
disabled={!isEditable} disabled={!isEditable}
onChange={handleChange} onChange={handleChange}
tableId={tableKey} tableId={tableKey}
table={table}
cellId={cell.row.id + '_' + cell.column.id} cellId={cell.row.id + '_' + cell.column.id}
/>, />,
refTbody, refTbody,

View File

@ -21,7 +21,6 @@ export const EVENT_CONFIGS = {
branch_name: 'Региональный филиал ', branch_name: 'Региональный филиал ',
closed_at: 'Дата закрытия ВСП', closed_at: 'Дата закрытия ВСП',
user_email: 'Почта пользователя', user_email: 'Почта пользователя',
staff_count: 'Кол-во работников',
is_active: 'Активный', is_active: 'Активный',
}, },
VSP_UPDATE: { VSP_UPDATE: {
@ -40,7 +39,6 @@ export const EVENT_CONFIGS = {
'changes.branch_name': 'Региональный филиал ', 'changes.branch_name': 'Региональный филиал ',
closed_at: 'Дата закрытия ВСП', closed_at: 'Дата закрытия ВСП',
user_email: 'Почта пользователя', user_email: 'Почта пользователя',
staff_count: 'Кол-во работников',
is_active: 'Активный', is_active: 'Активный',
}, },
USER_ACCESS_GRANTED: { USER_ACCESS_GRANTED: {