Andrey Epifancev 6a2439239d perf: модалки на малом и выращенном листе (grow)
perfkit.gen.grow доращивает FORM_2 AHR_UTILITY/AHR_SECURITY до 500 и
FORM_4 CAP до 300 строк; у форм-модалок варианты @big.

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 01:04:06 +04:00

645 lines
20 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[
{
"id": "sheet_select_vsp",
"title": "Выбор ВСП (добавление строки)",
"page": "sheet",
"source": "web/src/components/RealtimeTable/Modals/SelectVspModal.jsx:51",
"priority": 1,
"role": "rf",
"sheet_ref": "FORM_2/AHR_RENT/null",
"open": {
"selector": "button[aria-label=\"Добавить строку\"]",
"action": "click"
},
"appear": {
"css": "h2",
"text": "Выбор ВСП"
},
"note": "RealtimeTable.jsx:652; только при праве править строки (rf); additionVspRowTable FORM_2 = AHR_RENT/UTILITY/SECURITY (на AHR модалка не открывается). Малый лист AHR_RENT (31 строка), @big = AHR_UTILITY, выращенный perfkit.gen.grow до ~500 строк",
"big_sheet": "FORM_2/AHR_UTILITY/null"
},
{
"id": "sheet_select_expense",
"title": "Добавление строки (статья расходов)",
"page": "sheet",
"source": "web/src/components/RealtimeTable/Modals/SelectExpenseItemModal.jsx:51",
"priority": 1,
"role": "rf",
"sheet_ref": "FORM_4/AHR/null",
"open": {
"selector": "button[aria-label=\"Добавить строку\"]",
"action": "click",
"pre": [
{
"selector": "tbody tr:has-text(\"Проект\") >> nth=0 >> td >> nth=1",
"action": "click"
}
]
},
"appear": {
"css": "h2",
"text": "Добавление строки"
},
"note": "нужна выделенная строка проекта (row_type ITEM); RealtimeTable.jsx:656; малый лист FORM_4/AHR (110 строк), @big = FORM_4/CAP, выращенный perfkit.gen.grow до ~300 строк",
"big_sheet": "FORM_4/CAP/null"
},
{
"id": "sheet_create_program",
"title": "Создание программы",
"page": "sheet",
"source": "web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38",
"priority": 1,
"role": "rf",
"sheet_ref": "FORM_4/AHR/null",
"open": {
"selector": "button[aria-label=\"Добавить программу\"]",
"action": "click"
},
"appear": {
"css": "h2",
"text": "Создание программы"
},
"note": "RealtimeTable.jsx:697, только FORM_4; малый лист FORM_4/AHR (110 строк), @big = FORM_4/CAP, выращенный perfkit.gen.grow до ~300 строк",
"big_sheet": "FORM_4/CAP/null"
},
{
"id": "sheet_create_project",
"title": "Создание проекта (в программе)",
"page": "sheet",
"source": "web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38",
"priority": 1,
"role": "rf",
"sheet_ref": "FORM_4/AHR/null",
"open": {
"selector": "button[aria-label=\"Добавить проект\"]",
"action": "click",
"pre": [
{
"selector": "tbody tr:has-text(\"Программа\") >> nth=0 >> td >> nth=1",
"action": "click"
}
]
},
"appear": {
"css": "h2",
"text": "Создание проекта"
},
"note": "нужна выделенная строка программы (GROUP); RealtimeTable.jsx:705; малый лист FORM_4/AHR (110 строк), @big = FORM_4/CAP, выращенный perfkit.gen.grow до ~300 строк",
"big_sheet": "FORM_4/CAP/null"
},
{
"id": "sheet_columns_tree",
"title": "Выбор столбцов (Popover с деревом)",
"page": "sheet",
"source": "web/src/components/common/CollapsibleTree.jsx:203",
"priority": 1,
"role": "rf",
"sheet_ref": "FORM_2/AHR_RENT/null",
"open": {
"selector": "[data-pin-panel] input[readonly]",
"action": "click"
},
"appear": {
"css": ".MuiPopover-root .MuiPaper-root"
},
"big_sheet": "FORM_2/AHR/null",
"note": "не модалка, а MUI Popover: единственный оверлей, доступный на больших листах; замер на малом и на самом большом листе rf"
},
{
"id": "task_stages",
"title": "Этапы задачи (SettingModal)",
"page": "task",
"source": "web/src/components/Stages/SettingModal.jsx:102",
"priority": 1,
"role": "rf",
"page_ref": "task_rf_form_2",
"open": {
"selector": "role=button[name=\"Этапы\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Этапы"
},
"note": "TaskPage.jsx:171"
},
{
"id": "task_stage_add",
"title": "Добавление этапа (задача)",
"page": "task",
"source": "web/src/components/Stages/AddStagesModal.jsx:156",
"priority": 1,
"role": "admin",
"page_ref": "task_rf_form_2",
"open": {
"selector": "role=button[name=\"Добавить этап\"]",
"action": "click",
"pre": [
{
"selector": "role=button[name=\"Этапы\"]",
"action": "click"
}
]
},
"appear": {
"css": "h2",
"text": "Добавление этапа"
},
"note": "кнопка только у admin"
},
{
"id": "task_stage_edit",
"title": "Редактирование этапа (задача)",
"page": "task",
"source": "web/src/components/Stages/AddStagesModal.jsx:156",
"priority": 1,
"role": "admin",
"page_ref": "task_rf_form_2",
"open": {
"selector": "role=menuitem[name=\"Редактировать\"]",
"action": "click",
"pre": [
{
"selector": "role=button[name=\"Этапы\"]",
"action": "click"
},
{
"selector": ".fixed.inset-0.z-50 button.MuiIconButton-root >> nth=0",
"action": "click"
}
]
},
"appear": {
"css": "h2",
"text": "Редактирование этапа"
},
"note": "меню строки этапа только у admin"
},
{
"id": "project_stages",
"title": "Этапы отчёта проекта (SettingModal)",
"page": "project",
"source": "web/src/components/Stages/SettingModal.jsx:102",
"priority": 1,
"role": "rf",
"page_ref": "project_card",
"open": {
"selector": "role=button[name=\"Этапы\"] >> nth=0",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Этапы"
},
"note": "TaskPage.jsx:195 (по строке отчёта)"
},
{
"id": "project_add_year",
"title": "Добавить год",
"page": "project",
"source": "web/src/pages/TaskPage/TaskPage.jsx:217",
"priority": 1,
"role": "rf",
"page_ref": "project_card",
"open": {
"selector": "role=button[name=\"Добавить год\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Вы точно хотите добавить год"
}
},
{
"id": "project_stage_delete",
"title": "Удаление этапа (проект)",
"page": "project",
"source": "web/src/components/Stages/DeleteStageModal.jsx:38",
"priority": 1,
"role": "admin",
"page_ref": "project_card",
"open": {
"selector": "role=menuitem[name=\"Удалить\"]",
"action": "click",
"pre": [
{
"selector": "role=button[name=\"Этапы\"] >> nth=0",
"action": "click"
},
{
"selector": ".fixed.inset-0.z-50 button.MuiIconButton-root >> nth=0",
"action": "click"
}
]
},
"appear": {
"css": ".MuiTypography-root",
"text": "Удалить этот элемент?"
},
"note": "удаление этапа только в режиме project; открытие без подтверждения"
},
{
"id": "projects_create",
"title": "Создание проекта",
"page": "projects",
"source": "web/src/pages/ProjectsPage/ModalCreateProject.jsx:247",
"priority": 1,
"role": "rf",
"page_ref": "projects",
"open": {
"selector": "role=button[name=\"Создать проект\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Создание проекта"
},
"note": "NavigationProjectPage.jsx:504"
},
{
"id": "projects_edit",
"title": "Редактирование строки проекта (MUI Dialog)",
"page": "projects",
"source": "web/src/pages/ProjectPages/components/EditModal/EditModal.jsx:170",
"priority": 1,
"role": "rf",
"page_ref": "projects",
"open": {
"selector": "role=button[name=\"Редактировать\"] >> nth=0",
"action": "click"
},
"appear": {
"css": "[role=dialog]",
"text": "Редактирование строки"
},
"note": "NavigationProjectPage.jsx:496"
},
{
"id": "projects_delete",
"title": "Удалить проект?",
"page": "projects",
"source": "web/src/pages/ProjectPages/NavigationProjectPage.jsx:510",
"priority": 1,
"role": "rf",
"page_ref": "projects",
"open": {
"selector": "role=button[name=\"Удалить проект\"] >> nth=0",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Удалить проект?"
}
},
{
"id": "tasks_create",
"title": "Создать задачу",
"page": "tasks",
"source": "web/src/pages/TasksPage/TasksPage.jsx:374",
"priority": 1,
"role": "admin",
"page_ref": "tasks",
"open": {
"selector": "role=button[name=\"Создать задачу\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Создать задачу"
},
"note": "кнопка только у admin"
},
{
"id": "tasks_confirm_mark",
"title": "Отправить задачу на удаление (подтверждение)",
"page": "tasks",
"source": "web/src/pages/TasksPage/TasksTable.jsx:371",
"priority": 1,
"role": "admin",
"page_ref": "tasks",
"open": {
"selector": "text=Отправить на удаление",
"action": "click",
"pre": [
{
"selector": "role=button[name^=\"Действия с задачей\"] >> nth=0",
"action": "click"
}
]
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Отправить задачу на удаление"
},
"note": "меню действий только у admin"
},
{
"id": "forms_create",
"title": "Создание формы (FormsPage)",
"page": "forms",
"source": "web/src/pages/FormsPage.jsx:133",
"priority": 1,
"role": "admin",
"open": {
"selector": "",
"action": "click"
},
"skip_reason": "страница FormsPage не подключена в app/Routes.jsx - открыть из UI нельзя"
},
{
"id": "taskcard_confirm",
"title": "Подтверждение действия над карточкой задачи",
"page": "forms",
"source": "web/src/components/common/TaskCardComponent.jsx:265",
"priority": 1,
"role": "admin",
"open": {
"selector": "",
"action": "click"
},
"skip_reason": "TaskCardComponent используется только в FormsPage (не в маршрутах)"
},
{
"id": "infoheader_rename",
"title": "Переименование таблицы (InfoForHeader)",
"page": "forms",
"source": "web/src/pages/TableTempPage/InfoForHeader.jsx:44",
"priority": 1,
"role": "admin",
"open": {
"selector": "",
"action": "click"
},
"skip_reason": "TableTempPage не в маршрутах, ModalRename не импортирован - мёртвый код"
},
{
"id": "admin_users_add",
"title": "Добавить пользователей",
"page": "admin_users",
"source": "web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx:71",
"priority": 2,
"role": "admin",
"page_ref": "admin_users",
"open": {
"selector": "role=button[name=\"Добавить\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Добавить пользователей"
}
},
{
"id": "admin_users_edit",
"title": "Информация о пользователе",
"page": "admin_users",
"source": "web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx:311",
"priority": 2,
"role": "admin",
"page_ref": "admin_users",
"open": {
"selector": "role=menuitem[name=\"Редактировать\"]",
"action": "click",
"pre": [
{
"selector": "tbody tr >> nth=1 >> button >> nth=-1",
"action": "click"
}
]
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Информация о пользователе"
}
},
{
"id": "admin_users_delete",
"title": "Удалить пользователя?",
"page": "admin_users",
"source": "web/src/pages/AdminPanel/UsersPage/UserTable/DeleteUserModal.jsx:48",
"priority": 2,
"role": "admin",
"page_ref": "admin_users",
"open": {
"selector": "role=menuitem[name=\"Удалить\"]",
"action": "click",
"pre": [
{
"selector": "tbody tr >> nth=1 >> button >> nth=-1",
"action": "click"
}
]
},
"appear": {
"css": ".MuiTypography-root",
"text": "Удалить пользователя?"
}
},
{
"id": "admin_users_ssp",
"title": "Выбор подразделения пользователя",
"page": "admin_users",
"source": "web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx:93",
"priority": 2,
"role": "admin",
"page_ref": "admin_users",
"open": {
"selector": "tbody button:has-text(\"Выбрать\") >> nth=0",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Выбор подразделения"
}
},
{
"id": "admin_ssps_add",
"title": "Добавить ССП/РФ",
"page": "admin_ssps",
"source": "web/src/pages/AdminPanel/SppsPage/ModalAddSsp.jsx:51",
"priority": 2,
"role": "admin",
"page_ref": "admin_ssps",
"open": {
"selector": "role=button[name=\"Добавить\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Добавить ССП/Рег. филиал"
}
},
{
"id": "admin_ssps_edit",
"title": "Редактировать ССП/РФ",
"page": "admin_ssps",
"source": "web/src/pages/AdminPanel/SppsPage/ModalEditSsp.jsx:41",
"priority": 2,
"role": "admin",
"page_ref": "admin_ssps",
"open": {
"selector": "tbody tr >> nth=0 >> button >> nth=-1",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Редактировать ССП/Рег. филиал"
}
},
{
"id": "admin_ssps_users",
"title": "Список пользователей ССП/РФ",
"page": "admin_ssps",
"source": "web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx:121",
"priority": 2,
"role": "admin",
"page_ref": "admin_ssps",
"open": {
"selector": "tbody tr >> nth=0 >> button >> nth=0",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Редактировать список пользователей"
}
},
{
"id": "admin_ssps_archive",
"title": "Подтверждение архивации ССП",
"page": "admin_ssps",
"source": "web/src/pages/AdminPanel/SppsPage/ModalConfirmArchiveSsp.jsx:27",
"priority": 2,
"role": "admin",
"page_ref": "admin_ssps",
"open": {
"selector": "tbody tr >> nth=0 >> button:has-text(\"Активен\")",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Отправить ссп в архив"
}
},
{
"id": "admin_phase_add",
"title": "Добавление этапа (шаблон)",
"page": "admin_default_stage",
"source": "web/src/pages/AdminPanel/PhaseTemplatesPage/components/PhaseTemplateDialog.jsx:120",
"priority": 2,
"role": "admin",
"page_ref": "admin_default_stage",
"open": {
"selector": "role=button[name=\"Добавить этап\"]",
"action": "click"
},
"appear": {
"css": "[role=dialog]",
"text": "Добавление этапа"
}
},
{
"id": "admin_phase_edit",
"title": "Редактирование этапа (шаблон)",
"page": "admin_default_stage",
"source": "web/src/pages/AdminPanel/PhaseTemplatesPage/components/PhaseTemplateDialog.jsx:120",
"priority": 2,
"role": "admin",
"page_ref": "admin_default_stage",
"open": {
"selector": "role=button[name^=\"Редактировать этап\"] >> nth=0",
"action": "click"
},
"appear": {
"css": "[role=dialog]",
"text": "Редактирование этапа"
}
},
{
"id": "admin_phase_delete",
"title": "Удалить предопределённый этап?",
"page": "admin_default_stage",
"source": "web/src/pages/AdminPanel/PhaseTemplatesPage/components/DeletePhaseTemplateDialog.jsx:8",
"priority": 2,
"role": "admin",
"page_ref": "admin_default_stage",
"open": {
"selector": "role=button[name^=\"Удалить этап\"] >> nth=0",
"action": "click"
},
"appear": {
"css": "[role=dialog]",
"text": "Удалить предопределённый этап"
}
},
{
"id": "admin_audit_json",
"title": "Детали события аудита",
"page": "admin_audit_log",
"source": "web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx:95",
"priority": 2,
"role": "admin",
"page_ref": "admin_audit_log",
"open": {
"selector": "text=Посмотреть >> nth=0",
"action": "click"
},
"appear": {
"css": ".MuiModal-root",
"text": "Детали события"
},
"note": "MUI Modal; страница грузится дольше"
},
{
"id": "dict_vsp_add",
"title": "Добавление ВСП",
"page": "dict_vsp",
"source": "web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx:239",
"priority": 2,
"role": "admin",
"page_ref": "dict_vsp",
"open": {
"selector": "role=button[name=\"+ Добавить объект\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Добавление ВСП"
}
},
{
"id": "dict_vsp_edit",
"title": "Редактирование ВСП",
"page": "dict_vsp",
"source": "web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx:239",
"priority": 2,
"role": "admin",
"page_ref": "dict_vsp",
"open": {
"selector": "tbody tr >> nth=0 >> button >> nth=-1",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Редактирование ВСП"
},
"note": "нужны строки справочника (после выбора ССП)"
},
{
"id": "dict_vsp_export",
"title": "Экспорт ВСП",
"page": "dict_vsp",
"source": "web/src/pages/DictVspPage/components/Modals/ModalExport.jsx:71",
"priority": 2,
"role": "admin",
"page_ref": "dict_vsp",
"open": {
"selector": "role=button[name=\"Экспортировать\"]",
"action": "click"
},
"appear": {
"css": ".fixed.inset-0.z-50",
"text": "Экспорт ВСП"
}
}
]