Skip to content

fix(mgr): визуальная согласованность Vue-менеджера с MODX - #621

Merged
biz87 merged 4 commits into
betafrom
fix/issue-615-vue-modx-visual-consistency
Sep 21, 2026
Merged

biz87 merged 4 commits into
betafrom
fix/issue-615-vue-modx-visual-consistency

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Aug 20, 2026

Copy link
Copy Markdown
Member

Описание

Vue Manager выглядел «инородным» в MODX: Card «Данные товара», сломанные for/id, пустая вкладка «Опции» при ONLY_FULL_GROUP_BY, прыгающие отступы и слабая affordance галереи.

PR закрывает функциональную часть #615. Перекрас Aura и плотность 36px убраны по ревью: вид «как MODX» даёт vuetools.theme=modx (#701 / #738), дефолтная Aura остаётся как есть.

Совместимость с #701 / #738

  • Тема: entries идут через createMs3VueAppgetManagerPrimeVueConfig() / getActiveTheme. Пресет Aura в бандл MS3 не входит.
  • В :root не пишутся --p-primary-*, --p-emerald-*, --p-green-*.
  • --ms3-text-success / --ms3-accent-green остаются семантическими (#22c55e / #4caf50), не привязаны к primary.
  • Save: :severity="primarySaveSeverity" (success только при vuetools.theme=modx), включая ProductDataConfig.
  • formStyles.js как на beta. Локальные 2.25rem в ProductLinksTab и --pw-control-h в CustomersGrid убраны.

Галерея и связи

  • Компактный Uppy dropzone, поиск в тулбаре, keyboard path, отдельные empty vs search-empty (ru/en).
  • Поиск связей через InputText. Диалог create: append-to="self".

Прочее из #615

  • Плоские свойства товара (без Card), стабильные for/id (fieldHtmlId).
  • AdminOptionFields: агрегаты MAX(required) / MIN(value) / MIN(position) и GROUP BY каждой колонки msOption (MariaDB 10.6 не выводит функциональную зависимость от PK). Ошибка запроса пишется в лог.
  • a11y/lexicon polish (vtabs, category products checkbox, Help).

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое

Связанные Issues

Closes #615

Refs #616

Follows: #701, #702, #738 (уже в beta)

Как это было протестировано?

php -l, AdminOptionFieldsGroupByContractTest, ESLint по затронутым Vue, Vitest primevueTheme. Запрос на MariaDB 10.6 с ONLY_FULL_GROUP_BY локально не гонялся.

Чеклист

  • Код соответствует стилю проекта
  • Лексиконы ru/en
  • ESLint по затронутым Vue-файлам
  • CHANGELOG.md — на релизе

Дополнительные заметки

Семантика опции товара в нескольких категориях: required = MAX (обязательна, если так пометила хотя бы одна категория), value = MIN (один детерминированный дефолт), position = MIN (самый ранний слот задаёт порядок).

@Ibochkarev
Ibochkarev requested a review from biz87 August 20, 2026 11:04
@Ibochkarev

Copy link
Copy Markdown
Member Author

@biz87 Не рассматриваем пока - посмотрю, что останется после новой темы vueTools

@AgelxNash AgelxNash mentioned this pull request Sep 6, 2026
16 tasks
AgelxNash pushed a commit to AgelxNash/MiniShop3 that referenced this pull request Sep 6, 2026
… MODX

Conflict resolution: keep array-based fieldsBySections (merged modx-pro#620/modx-pro#611),
port fieldHtmlId labels + isCheckboxXtype/normalizeCheckboxValue helpers on top.
AgelxNash pushed a commit to AgelxNash/MiniShop3 that referenced this pull request Sep 6, 2026
Conflict resolution: PR 640 supersedes merged modx-pro#621 rework (same author, same
intent) — took PR side for 36 files; manually preserved modx-pro#631 useConfirm grids,
modx-pro#623 datefield dialog styles, modx-pro#643 gallery bits, modx-pro#605 order entry; ProductData
sections rebuilt on groupProductDataSections (keeps modx-pro#611/modx-pro#620 sort_order) under
PR 640 Panel layout.
@AgelxNash

Copy link
Copy Markdown

Этот PR включён в тестовую интеграционную сборку всех открытых PR MiniShop3: AgelxNash/MiniShop3, ветка integration/open-prs-20260906 (28/28 открытых).

Сборка нужна, чтобы проверить совместимость взаимозависимых серий PR до их мержа — при последовательном слиянии они конфликтуют друг с другом. Это не ревью и не конкурирующий PR: авторство сохранено (1 PR = 1 коммит с исходным автором), ветка пересобирается по мере обновления PR.

Как вошёл в сборку: Слит в ветку раньше #640. Файлы, перекрываемые более новым реворком #640, взяты из #640; наработки #621 (fieldHtmlId-лейблы, isCheckboxXtype/normalizeCheckboxValue) сохранены там, где #640 их не заменяет.

@AgelxNash

Copy link
Copy Markdown

Привет! Просто пожелание: удачи с этим PR 🚀 Работа нужная — пусть рассмотрят и смержат как можно скорее. Успехов!

@Ibochkarev
Ibochkarev force-pushed the fix/issue-615-vue-modx-visual-consistency branch 3 times, most recently from 5fba18d to 4d3f8e3 Compare September 13, 2026 05:59
@Ibochkarev
Ibochkarev requested review from biz87 and removed request for biz87 September 15, 2026 16:40
@biz87

biz87 commented Sep 21, 2026

Copy link
Copy Markdown
Member

Слил 00df7338 с актуальной beta (35f5d49c), конфликтов нет. Гейт зелёный: lint:ci, Vitest 93, test:smoke, build, smoke 114, PHPUnit 638, PHPStan 0.

Проверил на dev (VueTools 1.2.0-pl, MariaDB 10.6) в обеих темах, сравнивал со сборкой beta: клиенты, товар (свойства, галерея, связи), консоль. Ошибок в консоли нет. Что понравилось: плоские свойства товара без Card, стабильные for/id, фильтры клиентов в одну строку, компактная галерея с поиском в тулбаре, InputText в связях, vtabs с клавиатурой.

Возвращаю — основная часть расходится с моделью темизации из #701 / #738.

1. Aura перекрашивается по умолчанию

По #701 дефолт — Aura как есть, вид «как MODX» — только через vuetools.theme=modx. Здесь createMs3VueApp при любой теме, кроме modx, вызывает injectMs3ThemeVars, и он пишет в :root --p-primary-*, --p-emerald-* и --p-green-* со шкалой #6cb24a. То есть для всех сайтов без modx меняется основной и success-цвет. Переменные пишутся в :root, а PrimeVue общий из VueTools — под перекрас попадают и PrimeVue-компоненты других дополнений на той же странице менеджера.

Высота контролов 2.25rem под Aura тоже меняет вид, и у неё есть видимая регрессия: в CustomersGrid кнопки действий стали 36×36 и не помещаются в колонку 150px — корзина уходит на вторую строку, высота строки таблицы 56 → 105px. Под modx той же страницы всё ровно (кнопки 28×28, строка 44px).

2. «Успех» привязан к основному цвету темы

_variables.scss: --ms3-text-success и --ms3-accent-green были #22c55e / #4caf50, стали var(--p-primary-color, #6cb24a). Это цвет индикаторов «активно / оплачено» в 10 компонентах. Под vuetools.theme=modx основной цвет — #234368, и индикаторы успеха станут тёмно-синими. Основной цвет бренда и семантика success — разные вещи.

3. Лишние 109 КБ на каждой странице

ms3Preset.js вызывает definePreset(Aura, …) на верхнем уровне и импортирует @primeuix/themes/aura, хотя как тема пресет нигде не используется — берутся только константы шкалы. В сборке это отдельный чанк ms3Preset-*.min.js на 109 КБ, который грузят все entry; vue-dist вырос с 841 до 957 КБ. По сути это вторая копия темы Aura в бандле — то, от чего избавлялся #702.

4. ONLY_FULL_GROUP_BY на MariaDB не исправлен

Вызвал AdminOptionFields::getFieldsForProduct(152244, 152129) с SET SESSION sql_mode = … ,ONLY_FULL_GROUP_BY:

обычный sql_mode +ONLY_FULL_GROUP_BY
beta 17 полей 0 полей
PR 17 полей 0 полей

Запрос из PR на MariaDB 10.6 падает: 1055 'ms3.msOption.key' isn't in GROUP BY. MariaDB не выводит функциональную зависимость колонок msOption от msOption.id, в отличие от MySQL 5.7+/8, — на MySQL 8 фикс, вероятно, работает (не проверял). Ошибку getIterator() проглатывает — пустая вкладка без записи в журнал. AdminOptionFieldsGroupByContractTest проверяет регулярками текст исходника, а не выполнение запроса, поэтому этого не видит. Варианты: перечислить колонки msOption в GROUP BY или взять агрегаты подзапросом по msCategoryOption; и лог при неудачном запросе.

Там же вопрос по семантике: MIN(value) и MAX(required) для товара в нескольких категориях с разными настройками опции — стоит явно зафиксировать, что так и задумано.

Мелочи

  • ProductDataConfig.vue:540,640severity="primary" вместо primarySaveSeverity, под modx эти две кнопки не станут success, как остальные.
  • ProductLinksTab.vue:406-409 и --pw-control-h в CustomersGrid.vue задают 2.25rem в обход shouldInjectFormStylesOverride() — под modx это та самая разная высота контролов.

Что предлагаю

Разделить: функциональные правки (fieldHtmlId, a11y чекбокса и vtabs, InputText в связях, лексиконы, savingFields / savingSections, AdminOptionFields после исправления для MariaDB, раскладка фильтров и галереи без цветов и высот) — отдельным PR, их можно влить быстро. Перекрас Aura и плотность — либо убрать (MODX-вид уже даёт vuetools.theme=modx), либо вынести в issue с обоснованием, почему решение #701 пересматривается.

@Ibochkarev

Copy link
Copy Markdown
Member Author

@biz87 Согласен с моделью #701 / #738. Перекрас и плотность убрал в c67153c0, функциональные правки оставил в этом PR.

  1. injectMs3ThemeVars и ms3Preset удалены. В :root больше не пишутся --p-primary-* / --p-emerald-* / --p-green-*. Чанк Aura (~109 КБ) из сборки уходит. formStyles.js снова как на beta: нет правила, которое раздувало кнопки действий в CustomersGrid до 36×36.
  2. --ms3-text-success и --ms3-accent-green снова #22c55e и #4caf50, не var(--p-primary-color).
  3. AdminOptionFields группирует каждую выбранную колонку msOption, не только id. На MariaDB 10.6 ONLY_FULL_GROUP_BY не выводит зависимость от PK, в отличие от MySQL 5.7+. getOptionKeys дополнительно группирует `msOption`.`key`. Если prepare/execute падает, пишем LOG_LEVEL_ERROR: пустая вкладка больше не молчит. Семантика для товара в нескольких категориях зафиксирована: MAX(required) — обязательна, если хотя бы одна категория так пометила; MIN(value) — один детерминированный дефолт, не слияние; MIN(position) — сортировка по самому раннему слоту.
  4. ProductDataConfig: обе кнопки сохранения через primarySaveSeverity. В ProductLinksTab и CustomersGrid убраны локальные 2.25rem / --pw-control-h, которые обходили shouldInjectFormStylesOverride().

Высота инпутов 2.25rem в formStyles.js под Aura не трогал: это уже на beta, не из этого PR.

Локально: php -l, AdminOptionFieldsGroupByContractTest, ESLint по затронутым Vue, Vitest primevueTheme — зелёные. На MariaDB 10.6 сам запрос не гонял.

Unify primary/success to AA-safe #4e8136 (preset + CSS var inject for
VueTools-external PrimeVue), flatten ProductDataFields Card/for-id,
fix option_fields under ONLY_FULL_GROUP_BY, and polish Utilities/Uppy/
vtabs/a11y/lexicons (#615).
Match MODX primary green, unify toolbar/tab spacing, and make gallery upload and bulk actions clearer and keyboard-friendly.
Force buttons and AutoComplete dropdowns to the shared 2.25rem control height, and fix product links search/dialog spacing inside .vueApp.
VueTools keeps theme ownership (#701/#738): no :root primary inject and no second Aura chunk. Success stays a semantic color. Group every selected msOption column so ONLY_FULL_GROUP_BY works on MariaDB.
@Ibochkarev
Ibochkarev force-pushed the fix/issue-615-vue-modx-visual-consistency branch from c67153c to 24c92d6 Compare September 21, 2026 07:59
@biz87
biz87 merged commit f0dfe59 into beta Sep 21, 2026
6 checks passed
@Ibochkarev
Ibochkarev deleted the fix/issue-615-vue-modx-visual-consistency branch September 23, 2026 02:53
@biz87 biz87 mentioned this pull request Sep 23, 2026
13 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Vue-менеджер: визуальная согласованность с MODX (цвета, кнопки, отступы)

3 participants