fix этапов

This commit is contained in:
PotapovaA 2026-06-24 11:08:40 +03:00
parent 3aa9c96f25
commit c6502e59a7
10 changed files with 67 additions and 46 deletions

View File

@ -143,7 +143,7 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
} }
}, },
columnVirtualizerOptions: ({ table }) => ({ columnVirtualizerOptions: ({ table }) => ({
overscan: 1, overscan: 10,
measureElement: (el) => { measureElement: (el) => {
if (!el) return 150; if (!el) return 150;
const index = Number(el?.getAttribute?.('data-index')); const index = Number(el?.getAttribute?.('data-index'));
@ -152,7 +152,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
const colId = table.getState().columnPinning.left[index]; const colId = table.getState().columnPinning.left[index];
const column = table.getColumn(colId); const column = table.getColumn(colId);
return column.columnDef.size; return column.columnDef.size;
} }
const allCols = [...table.getLeftVisibleLeafColumns(), ...table.getCenterVisibleLeafColumns()] const allCols = [...table.getLeftVisibleLeafColumns(), ...table.getCenterVisibleLeafColumns()]
return allCols[index]?.getSize() ?? 150; return allCols[index]?.getSize() ?? 150;

View File

@ -168,7 +168,7 @@ const SettingPanel = ({
<ExportDefaultButton <ExportDefaultButton
onClick={handleExport} onClick={handleExport}
disabled={!formId || !sheetName || isExporting} disabled={!formId || !sheetName || isExporting}
text={isExporting ? 'Экспорт...' : 'Экспорт в Excel'} text={isExporting ? 'Экспорт...' : 'Экспорт'}
/> />
</GroupByObject> </GroupByObject>
</Stack> </Stack>

View File

@ -38,13 +38,12 @@ export const AddStagesModal = ({
sheetOptions = [], // [{ value: 'sheet1', label: 'Лист 1' }] sheetOptions = [], // [{ value: 'sheet1', label: 'Лист 1' }]
formType = '', formType = '',
defaultSheet = '', defaultSheet = '',
defaultRole,
}) => { }) => {
const [startDate, setStartDate] = useState(null); const [startDate, setStartDate] = useState(null);
const [endDate, setEndDate] = useState(null); const [endDate, setEndDate] = useState(null);
const [stageName, setStageName] = useState(''); const [stageName, setStageName] = useState('');
const [selectedSheet, setSelectedSheet] = useState(defaultSheet); const [selectedSheet, setSelectedSheet] = useState(defaultSheet);
const [selectedRole, setSelectedRole] = useState(defaultRole); const [selectedRole, setSelectedRole] = useState();
const [columnsConfig, setColumnsConfig] = useState({ columns: [], colors: {} }); const [columnsConfig, setColumnsConfig] = useState({ columns: [], colors: {} });
const [selectedColumns, setSelectedColumns] = useState([]); const [selectedColumns, setSelectedColumns] = useState([]);
@ -89,10 +88,10 @@ export const AddStagesModal = ({
setEndDate(null); setEndDate(null);
setStageName(''); setStageName('');
setSelectedSheet(defaultSheet); setSelectedSheet(defaultSheet);
setSelectedRole(defaultRole); setSelectedRole();
setSelectedColumns([]); setSelectedColumns([]);
} }
}, [stage, isOpen, defaultSheet, defaultRole]); }, [stage, isOpen, defaultSheet]);
const handleSave = () => { const handleSave = () => {
const opensAt = formatDateForApi(startDate); const opensAt = formatDateForApi(startDate);
@ -129,7 +128,7 @@ export const AddStagesModal = ({
setEndDate(null); setEndDate(null);
setStageName(''); setStageName('');
setSelectedSheet(defaultSheet); setSelectedSheet(defaultSheet);
setSelectedRole(defaultRole); setSelectedRole();
setSelectedColumns([]); setSelectedColumns([]);
onClose(); onClose();
}; };
@ -238,6 +237,7 @@ export const AddStagesModal = ({
placeholderSelect="Выбрано столбцов: " placeholderSelect="Выбрано столбцов: "
selectedIds={selectedColumns} selectedIds={selectedColumns}
onSelectNode={handleColumnsSelect} onSelectNode={handleColumnsSelect}
forStage={true}
/> />
</FormControl> </FormControl>
</Stack> </Stack>
@ -247,7 +247,7 @@ export const AddStagesModal = ({
<FormControl fullWidth> <FormControl fullWidth>
<FormLabel>Роль</FormLabel> <FormLabel>Роль</FormLabel>
<Select <Select
value={selectedRole} value={selectedRole ?? ''}
onChange={(e) => setSelectedRole(e.target.value)} onChange={(e) => setSelectedRole(e.target.value)}
displayEmpty displayEmpty
size="small" size="small"

View File

@ -76,41 +76,59 @@ export const SettingModal = ({
setIsAddEditModalOpen(true); setIsAddEditModalOpen(true);
}; };
const transformToSheetOptions = (data) => { const transformToSheetOptions = (data) => {
const sheetMap = new Map(); // TO DO пока не добавили direction для этапов
data.forEach(item => { // const sheetMap = new Map();
const key = item.direction ? `${item.sheet}_${item.direction}` : item.sheet;
if (!sheetMap.has(key)) { // data.forEach(item => {
sheetMap.set(key, { // const key = item.direction ? `${item.sheet}_${item.direction}` : item.sheet;
sheet: item.sheet,
direction: item.direction,
names: []
});
}
const entry = sheetMap.get(key); // if (!sheetMap.has(key)) {
if (!entry.names.includes(item.name)) { // sheetMap.set(key, {
entry.names.push(item.name); // sheet: item.sheet,
} // direction: item.direction,
}); // names: []
// });
// }
// const entry = sheetMap.get(key);
// if (!entry.names.includes(item.name)) {
// entry.names.push(item.name);
// }
// });
// const sheetOptions = [];
// sheetMap.forEach((value) => {
// let label = value.names.join(' / ');
// if (value.direction) {
// label += ` (${value.direction})`;
// }
// sheetOptions.push({
// value: value.direction ? `${value.sheet}_${value.direction}` : value.sheet,
// label: label,
// sheet: value.sheet,
// direction: value.direction
// });
// });
// return sheetOptions;
const sheetOptions = []; const sheetOptions = [];
data.forEach((value) => {
sheetMap.forEach((value) => { if (sheetOptions.find(s => s.sheet == value.sheet)) {
let label = value.names.join(' / '); return;
if (value.direction) {
label += ` (${value.direction})`;
} }
sheetOptions.push({ sheetOptions.push({
value: value.direction ? `${value.sheet}_${value.direction}` : value.sheet, value: value.sheet,
label: label, label: value.name,
sheet: value.sheet, sheet: value.sheet,
direction: value.direction direction: value.direction,
}); })
}); })
return sheetOptions; return sheetOptions;
}; };

View File

@ -34,7 +34,7 @@ export const ExportWithTextButton = (props) => {
<Stack sx={{ flexDirection: 'row', alignItems: 'center', gap: '.375rem' }}> <Stack sx={{ flexDirection: 'row', alignItems: 'center', gap: '.375rem' }}>
<ExportSvg size="1rem" color="#45881c" strokeWidth={'.33px'} /> <ExportSvg size="1rem" color="#45881c" strokeWidth={'.33px'} />
<span style={{ fontSize: '.88rem' }}> <span style={{ fontSize: '.88rem' }}>
{props?.text || 'Экспорт в Excel'} {props?.text || 'Экспорт'}
</span> </span>
</Stack> </Stack>
</PrimaryOutlinedButton> </PrimaryOutlinedButton>
@ -57,7 +57,7 @@ export const ExportDefaultButton = (props) => {
<DefaultOutlinedButton {...props}> <DefaultOutlinedButton {...props}>
<Stack sx={{ flexDirection: 'row', alignItems: 'center', gap: '.375rem' }}> <Stack sx={{ flexDirection: 'row', alignItems: 'center', gap: '.375rem' }}>
<ExportSvg color="#4a5565" strokeWidth={'.33'} size="1rem" /> <ExportSvg color="#4a5565" strokeWidth={'.33'} size="1rem" />
<span>{props?.text || 'Экспорт в Excel'}</span> <span>{props?.text || 'Экспорт'}</span>
</Stack> </Stack>
</DefaultOutlinedButton> </DefaultOutlinedButton>
); );

View File

@ -21,6 +21,7 @@ const CollapsibleTree = ({
placeholderSelect = 'Скрыто столбцов: ', placeholderSelect = 'Скрыто столбцов: ',
selectedIds = [], selectedIds = [],
onSelectNode, onSelectNode,
forStage = false
}) => { }) => {
const [expandedItems, setExpandedItems] = useState([]); const [expandedItems, setExpandedItems] = useState([]);
const [anchorEl, setAnchorEl] = useState(null); const [anchorEl, setAnchorEl] = useState(null);
@ -144,7 +145,7 @@ const CollapsibleTree = ({
setAnchorEl(null); setAnchorEl(null);
}; };
const selectedCount = selectedNodes.length - 1; //1 колонка всегда скрыта const selectedCount = forStage ? selectedNodes.length : selectedNodes.length - 1; //1 колонка всегда скрыта
const isAllSelected = () => { const isAllSelected = () => {
if (!columnTree) return false; if (!columnTree) return false;

View File

@ -1,3 +1,4 @@
import { DIRECTION_TRANSLATE, FORM_TYPE_OPTIONS } from '../../../constants';
import { import {
Section, Section,
SectionStartPart, SectionStartPart,
@ -22,7 +23,7 @@ const TableCard = ({ table, onNavigate }) => {
</div> </div>
<SectionTitle> <SectionTitle>
<h2>{table.name}</h2> <h2>{table.name}</h2>
<h2>{table?.direction}</h2> <h2>{DIRECTION_TRANSLATE[table?.direction]}</h2>
{/* <UsersList> {/* <UsersList>
<div className="img-user"></div> <div className="img-user"></div>
</UsersList> */} </UsersList> */}

View File

@ -37,6 +37,7 @@ export const EDIT_ACCESS_RUSSIAN = {
export const FORM_TYPE_OPTIONS = ['FORM_1', 'FORM_2', 'FORM_3', 'FORM_4']; export const FORM_TYPE_OPTIONS = ['FORM_1', 'FORM_2', 'FORM_3', 'FORM_4'];
export const FROM_TYPE_TRANSLATE = { 'FORM_1': 'Смета ССП', 'FORM_2': 'Смета РФ', 'FORM_3': 'Программа развитие ПРРС', 'FORM_4': 'Проектная деятельность' }; export const FROM_TYPE_TRANSLATE = { 'FORM_1': 'Смета ССП', 'FORM_2': 'Смета РФ', 'FORM_3': 'Программа развитие ПРРС', 'FORM_4': 'Проектная деятельность' };
export const DIRECTION_TRANSLATE = { 'Support': 'Поддержка', 'Development': 'Развитие' };
export const ORG_UNIT_TYPE_OPTIONS = [ export const ORG_UNIT_TYPE_OPTIONS = [
{ value: 'ssp', label: 'ССП' }, { value: 'ssp', label: 'ССП' },

View File

@ -22,7 +22,7 @@ import { ModalCreateProject } from './ModalCreateProject';
import { ExportWithTextButton } from '../../components/common/Buttons/ButtonsActions'; import { ExportWithTextButton } from '../../components/common/Buttons/ButtonsActions';
import { exportSingleForm } from '../../utils/exportForm'; import { exportSingleForm } from '../../utils/exportForm';
import TablesList from '../../components/common/TableList/TableList'; import TablesList from '../../components/common/TableList/TableList';
import { FROM_TYPE_TRANSLATE, SHEET_NAME } from '../../constants'; import { DIRECTION_TRANSLATE, FROM_TYPE_TRANSLATE, SHEET_NAME } from '../../constants';
const TaskInfo = ({ task }) => { const TaskInfo = ({ task }) => {
const portalContent = ( const portalContent = (
@ -61,7 +61,7 @@ export default function TaskPage() {
const mappedTables = data.result.all_sheets.map(sheet => ({ const mappedTables = data.result.all_sheets.map(sheet => ({
name: SHEET_NAME[sheet.sheet_name] || sheet.sheet_name, name: SHEET_NAME[sheet.sheet_name] || sheet.sheet_name,
sheet: sheet.sheet_name, sheet: sheet.sheet_name,
direction: sheet.direction direction: sheet.direction,
})); }));
setTables(mappedTables); setTables(mappedTables);
} catch (error) { } catch (error) {

View File

@ -26,6 +26,7 @@ import {
FORM_TYPE_OPTIONS, FORM_TYPE_OPTIONS,
ORG_UNIT_TYPE_OPTIONS, ORG_UNIT_TYPE_OPTIONS,
ROLES_NAME_ID, ROLES_NAME_ID,
FROM_TYPE_TRANSLATE
} from '../../constants'; } from '../../constants';
import { useAuth } from '../../app/context/AuthProvider'; import { useAuth } from '../../app/context/AuthProvider';
import { SspApi } from '../../api/ssp'; import { SspApi } from '../../api/ssp';
@ -129,8 +130,8 @@ export default function TasksPage() {
} catch (error) { } catch (error) {
toast.error( toast.error(
error.response?.data?.detail || error.response?.data?.detail ||
error.response?.data?.message || error.response?.data?.message ||
'Ошибка при создании задачи', 'Ошибка при создании задачи',
); );
} finally { } finally {
setLoadingUpdate(false); setLoadingUpdate(false);
@ -182,7 +183,7 @@ export default function TasksPage() {
const res = await TasksApi.list(params); const res = await TasksApi.list(params);
const data = res.result; const data = res.result;
setItems(data); setItems(data);
setTotalCount(res.count); setTotalCount(res.count);
@ -413,7 +414,7 @@ export default function TasksPage() {
onChange={(e) => handleFormChange('formTypeCode', e.target.value)} onChange={(e) => handleFormChange('formTypeCode', e.target.value)}
renderValue={(selected) => renderValue={(selected) =>
selected ? ( selected ? (
selected FROM_TYPE_TRANSLATE[selected]
) : ( ) : (
<span style={{ color: 'rgba(0,0,0,0.6)' }}>Не выбрана</span> <span style={{ color: 'rgba(0,0,0,0.6)' }}>Не выбрана</span>
) )
@ -423,7 +424,7 @@ export default function TasksPage() {
> >
{FORM_TYPE_OPTIONS.map((formType) => ( {FORM_TYPE_OPTIONS.map((formType) => (
<MenuItem key={formType} value={formType}> <MenuItem key={formType} value={formType}>
{formType} {FROM_TYPE_TRANSLATE[formType]}
</MenuItem> </MenuItem>
))} ))}
</Select> </Select>