Skip to content

Распил OrderView.vue: composable и диалоги - #478

Open
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-339-split-order-view
Open

Распил OrderView.vue: composable и диалоги#478
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-339-split-order-view

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

OrderView.vue был монолитом (~2517 LOC): layout, загрузка заказа, продукты, cost, plugin-tabs и три диалога в одном SFC.

PR выносит логику в useOrderView.js, диалоги — в отдельные компоненты под components/order/, а OrderView.vue оставляет shell: header, tabs, provide/inject через ORDER_CONTEXT_KEY, defineExpose({ registerPluginTab }).

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

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

Связанные Issues

Closes #339

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

Gate E (локально):

cd vueManager
npm run lint -- --no-error-on-unmatched-pattern \
  src/components/OrderView.vue \
  src/composables/useOrderView.js \
  src/components/order/OrderEditProductDialog.vue \
  src/components/order/OrderAddProductDialog.vue \
  src/components/order/OrderDuplicateCustomerDialog.vue
# exit 0

npm run build
# exit 0
  • Ручное тестирование — чеклист ниже (нужен MODX + менеджер)
  • Автоматические тесты (npm run lint, npm run build)
  • Тестирование на разных версиях PHP/MODX

Ручной smoke-чеклист:

  • Открытие существующего заказа, заголовок с номером
  • Создание нового заказа (create mode)
  • Вкладки info / products / address / history
  • Редактирование и добавление товара (диалоги)
  • Duplicate customer flow
  • Vue- и ExtJS plugin tabs (registerPluginTab)

Конфигурация тестирования:

  • MiniShop3: branch feat/issue-339-split-order-view
  • MODX: —
  • PHP: —

Скриншоты (если применимо)

До После
OrderView.vue ~2517 LOC OrderView.vue 250 LOC

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах (JSDoc у composable)
  • Изменения не ломают существующую функциональность (рефакторинг 1:1)
  • Лексиконы добавлены на двух языках (ru/en) — ключи не менялись
  • PHPStan проходит без новых ошибок — PHP не затронут
  • ESLint проходит без ошибок
  • Обновлён CHANGELOG.md — по политике проекта, только при релизе

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

Gate A (#339):

Критерий Статус
OrderView.vue < 1000 LOC ✅ 250 строк
UX без регрессий ⏳ ручной smoke в MODX
npm run lint ✅ exit 0
Лексиконы ✅ без изменений

Структура после PR:

  • OrderView.vue — shell (~250 LOC)
  • useOrderView.js — state, API, lifecycle, plugin tabs (~1753 LOC)
  • OrderEditProductDialog.vue, OrderAddProductDialog.vue, OrderDuplicateCustomerDialog.vue

Follow-up (вне scope #339): дальнейший split useOrderView.js на domain-composables и перевод диалогов на inject(ORDER_CONTEXT_KEY) вместо prop drilling.

Review: исправлен BLOCK по реактивности — binding'и из composable деструктурируются на top-level в OrderView.vue (не vm.* в template).

@Ibochkarev Ibochkarev added enhancement New feature or request javascript Pull requests that update javascript code priority: high Важно исправить в ближайшее время tech-debt Maintainability / refactor / architecture debt labels Jul 29, 2026
Extract order screen logic to useOrderView and product/customer dialogs so
OrderView.vue stays under the 1000 LOC target without changing UX.

Closes #339
@Ibochkarev
Ibochkarev force-pushed the feat/issue-339-split-order-view branch from b4dcfa5 to 3ffaef8 Compare July 29, 2026 11:31
Break the 1753-line useOrderView.js into focused composables so no file
exceeds ~400 lines. The thin orchestrator wires shared refs (order, saving,
editingProduct) and core computeds, delegating to:

- useOrderLoad: order/refs/fields/extra-fields loading + empty-order init
- useOrderSave: save / finalize / create order actions
- useOrderProducts: edit / add / delete product dialog state
- useOrderProductOptions: options table/json editing
- useOrderCostRecalc: cost recalculation + shipping/payment baseline
- useOrderCustomer: customer search + duplicate-customer dialog
- useOrderPluginTabs: built-in + MS3OrderTabsRegistry plugin tab registry

Public orderContext contract and the return shape consumed by OrderView.vue
are preserved unchanged. No behavior/API changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request javascript Pull requests that update javascript code priority: high Важно исправить в ближайшее время tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Распилить OrderView.vue и крупные mgr-экраны (>1000 LOC)

1 participant