From 9e15b32bb3fa4665d60b761ffd08d9abf06b55dd Mon Sep 17 00:00:00 2001 From: Ivan Bochkarev Date: Fri, 11 Sep 2026 14:52:10 +0600 Subject: [PATCH] feat(vue): Salvage PrimeVue barrel, cache-bust, and i18n Import PrimeVue from the VueTools barrel so manager screens share one Theme instance. Reject primevue/* subpaths at Vite build time, bust vue-dist cache with filemtime, and keep Aura as the default preset. ModxManagerTheme and getActiveTheme stay out until vueTools#22. Fixes #701 --- _build/resolvers/resolver_01_setup.php | 2 +- .../minishop3/controllers/manager.class.php | 4 +- .../controllers/resource_create.class.php | 4 +- .../controllers/resource_update.class.php | 4 +- .../controllers/vue_module_cache_bust.inc.php | 31 ++++++++ .../minishop3/lexicon/en/help.inc.php | 10 +-- .../minishop3/lexicon/en/product.inc.php | 14 ++++ .../minishop3/lexicon/en/vue.inc.php | 18 +++++ .../minishop3/lexicon/ru/help.inc.php | 10 +-- .../minishop3/lexicon/ru/product.inc.php | 14 ++++ .../minishop3/lexicon/ru/vue.inc.php | 18 +++++ .../Manager/CategoryProductsController.php | 4 +- vueManager/src/components/ActionsColumn.vue | 2 +- vueManager/src/components/ActionsEditor.vue | 8 +-- vueManager/src/components/ApiTest.vue | 16 +---- .../src/components/AutocompleteCombo.vue | 3 +- .../src/components/CategoryOptionsTab.vue | 13 +--- .../src/components/CategoryProductsGrid.vue | 10 +-- vueManager/src/components/CustomersGrid.vue | 15 +--- vueManager/src/components/DeliveriesGrid.vue | 20 +----- vueManager/src/components/DynamicField.vue | 11 +-- .../src/components/ExtraFieldsManager.vue | 16 +---- vueManager/src/components/FileBrowser.vue | 4 +- .../src/components/GridFieldsConfig.vue | 12 +--- vueManager/src/components/HelpPage.vue | 3 +- vueManager/src/components/ImportProducts.vue | 12 +--- vueManager/src/components/KeyValueField.vue | 5 +- .../src/components/KeyValueSchemaEditor.vue | 5 +- vueManager/src/components/LinksGrid.vue | 13 +--- vueManager/src/components/ModelFieldsGrid.vue | 18 +---- .../src/components/NotificationsGrid.vue | 15 +--- .../src/components/OptionGroupsGrid.vue | 12 +--- .../src/components/OptionValuesEditor.vue | 4 +- .../src/components/OptionsAndGroupsTabs.vue | 6 +- vueManager/src/components/OptionsGrid.vue | 12 +--- vueManager/src/components/OrderView.vue | 9 +-- vueManager/src/components/OrdersGrid.vue | 14 +--- vueManager/src/components/PaymentsGrid.vue | 19 +---- vueManager/src/components/ProductData.vue | 6 +- .../src/components/ProductDataConfig.vue | 13 +--- .../src/components/ProductDataFields.vue | 5 +- vueManager/src/components/RepeaterField.vue | 4 +- .../src/components/RepeaterSchemaEditor.vue | 6 +- .../src/components/ResourceCategoryTree.vue | 4 +- vueManager/src/components/SettingsPage.vue | 7 +- vueManager/src/components/StatusesGrid.vue | 11 +-- .../src/components/UtilitiesGallery.vue | 7 +- vueManager/src/components/UtilitiesPage.vue | 7 +- .../src/components/ValidationRulesEditor.vue | 8 +-- vueManager/src/components/VendorCombo.vue | 41 ++++++++--- vueManager/src/components/VendorsGrid.vue | 16 +---- .../components/gallery/GalleryUploader.vue | 17 +++++ .../src/components/gallery/ProductGallery.vue | 4 +- .../gallery/ProductGalleryEditDialog.vue | 5 +- .../components/gallery/ProductGalleryGrid.vue | 4 +- .../gallery/ProductGalleryToolbar.vue | 4 +- .../order/OrderAddProductDialog.vue | 5 +- .../src/components/order/OrderAddressTab.vue | 9 +-- .../order/OrderDuplicateCustomerDialog.vue | 3 +- .../order/OrderEditProductDialog.vue | 7 +- .../order/OrderExtraFieldsSection.vue | 2 +- .../components/order/OrderFormActionsBar.vue | 2 +- .../src/components/order/OrderHistoryTab.vue | 38 ++++++++-- .../src/components/order/OrderInfoTab.vue | 10 +-- .../order/OrderProductOptionsChips.vue | 3 +- .../src/components/order/OrderProductsTab.vue | 4 +- .../components/product/ProductLinksTab.vue | 10 +-- .../components/product/ProductOptionField.vue | 9 +-- .../src/components/product/ProductTabs.vue | 8 +-- vueManager/src/composables/uiGroup.js | 3 +- vueManager/src/composables/uiGroup.test.js | 2 +- vueManager/src/composables/useActions.js | 2 +- vueManager/src/composables/useCrudDialog.js | 2 +- .../src/composables/useOrderLogFormatters.js | 72 ++++++++++++++----- vueManager/src/composables/useOrderView.js | 3 +- vueManager/src/composables/useResourceList.js | 2 +- vueManager/src/composables/useSelection.js | 2 +- vueManager/src/composables/useSortableList.js | 2 +- vueManager/src/entries/api-test.js | 5 +- vueManager/src/entries/category-options.js | 7 +- vueManager/src/entries/category-products.js | 5 +- vueManager/src/entries/customers.js | 5 +- vueManager/src/entries/help.js | 3 +- vueManager/src/entries/notifications.js | 5 +- vueManager/src/entries/order.js | 5 +- vueManager/src/entries/orders.js | 5 +- vueManager/src/entries/product-tabs.js | 5 +- vueManager/src/entries/settings.js | 5 +- vueManager/src/entries/utilities.js | 5 +- vueManager/src/main.js | 5 +- vueManager/vite.config.js | 21 +++++- 91 files changed, 348 insertions(+), 512 deletions(-) create mode 100644 core/components/minishop3/controllers/vue_module_cache_bust.inc.php diff --git a/_build/resolvers/resolver_01_setup.php b/_build/resolvers/resolver_01_setup.php index c69cbde92..30f9f7493 100644 --- a/_build/resolvers/resolver_01_setup.php +++ b/_build/resolvers/resolver_01_setup.php @@ -19,7 +19,7 @@ 'service_url' => 'modstore.pro', ], 'VueTools' => [ - 'version' => '1.0.0-beta1', + 'version' => '1.1.2-pl', 'service_url' => 'modstore.pro', ], ]; diff --git a/core/components/minishop3/controllers/manager.class.php b/core/components/minishop3/controllers/manager.class.php index 33e36f1ac..6ab29d221 100644 --- a/core/components/minishop3/controllers/manager.class.php +++ b/core/components/minishop3/controllers/manager.class.php @@ -89,8 +89,8 @@ public function addVueModule($src) self::$vueCoreCheckRegistered = true; } - // Add version to URL - $src = $src . '?v=' . $this->ms3->version; + require_once __DIR__ . '/vue_module_cache_bust.inc.php'; + $src = ms3_vue_module_cache_bust_url($this->modx, $src, (string) $this->ms3->version); // Register the module (will be blocked by check if VueCore not installed) $this->modx->regClientStartupHTMLBlock( diff --git a/core/components/minishop3/controllers/resource_create.class.php b/core/components/minishop3/controllers/resource_create.class.php index 85f846302..1c98bdfd4 100644 --- a/core/components/minishop3/controllers/resource_create.class.php +++ b/core/components/minishop3/controllers/resource_create.class.php @@ -65,8 +65,8 @@ public function addVueModule($src) self::$vueCoreCheckRegistered = true; } - // Add version to URL - $src = $src . '?v=' . $this->ms3->version; + require_once __DIR__ . '/vue_module_cache_bust.inc.php'; + $src = ms3_vue_module_cache_bust_url($this->modx, $src, (string) $this->ms3->version); // Register the module (will be blocked by check if VueCore not installed) $this->modx->regClientStartupHTMLBlock( diff --git a/core/components/minishop3/controllers/resource_update.class.php b/core/components/minishop3/controllers/resource_update.class.php index 2e81d6782..80b8341b5 100644 --- a/core/components/minishop3/controllers/resource_update.class.php +++ b/core/components/minishop3/controllers/resource_update.class.php @@ -69,8 +69,8 @@ public function addVueModule($src) self::$vueCoreCheckRegistered = true; } - // Add version to URL - $src = $src . '?v=' . $this->ms3->version; + require_once __DIR__ . '/vue_module_cache_bust.inc.php'; + $src = ms3_vue_module_cache_bust_url($this->modx, $src, (string) $this->ms3->version); // Register the module (will be blocked by check if VueCore not installed) $this->modx->regClientStartupHTMLBlock( diff --git a/core/components/minishop3/controllers/vue_module_cache_bust.inc.php b/core/components/minishop3/controllers/vue_module_cache_bust.inc.php new file mode 100644 index 000000000..a564c6a1d --- /dev/null +++ b/core/components/minishop3/controllers/vue_module_cache_bust.inc.php @@ -0,0 +1,31 @@ +getOption('assets_url'), '/'); + $assetsPath = rtrim((string) $modx->getOption('assets_path'), '/'); + $fsPath = null; + if ($assetsUrl !== '' && str_starts_with($path, $assetsUrl)) { + $fsPath = $assetsPath . substr($path, strlen($assetsUrl)); + } elseif (defined('MODX_ASSETS_PATH') && str_starts_with($path, '/assets/')) { + $fsPath = rtrim(MODX_ASSETS_PATH, '/') . substr($path, strlen('/assets')); + } + if (is_string($fsPath) && is_file($fsPath)) { + $version .= '.' . filemtime($fsPath); + } + } + + $separator = str_contains($src, '?') ? '&' : '?'; + + return $src . $separator . 'v=' . rawurlencode($version); +} diff --git a/core/components/minishop3/lexicon/en/help.inc.php b/core/components/minishop3/lexicon/en/help.inc.php index a3c07dbaa..45707e442 100644 --- a/core/components/minishop3/lexicon/en/help.inc.php +++ b/core/components/minishop3/lexicon/en/help.inc.php @@ -11,7 +11,7 @@ $_lang['ms3_components_href'] = 'https://modstore.pro/'; $_lang['ms3_components_text'] = 'Paid and free addons'; $_lang['ms3_components_title'] = 'Addons'; -$_lang['ms3_demo_href'] = '#'; +$_lang['ms3_demo_href'] = 'https://minishop3.ru/'; $_lang['ms3_demo_text'] = 'Go to demo site'; $_lang['ms3_demo_title'] = 'Demo'; $_lang['ms3_docs_href'] = 'https://docs.modx.pro/components/minishop3/'; @@ -24,9 +24,11 @@ $_lang['ms3_github_text'] = 'Found an issue? Report it!'; $_lang['ms3_github_title'] = 'github.com'; $_lang['ms3_help'] = 'Help and support'; +$_lang['ms3_help_nav_title'] = 'Manager sections'; +$_lang['ms3_help_resources_title'] = 'Resources'; $_lang['ms3_help_text'] = 'MiniShop3 - the most flexible and fast e-commerce component for MODX3.'; -$_lang['ms3_help_text_support'] = 'You can support MiniShop3 financially: -
- All details here'; +$_lang['ms3_help_text_support'] = 'Support MiniShop3 development +
Payment details are on the about page.'; $_lang['ms3_lexicons_href'] = '?a=workspaces/lexicon&ns=minishop3'; $_lang['ms3_lexicons_text'] = 'Lexicon management'; $_lang['ms3_localization_href'] = 'https://crowdin.com/project/minishop3-ecommerce'; @@ -41,6 +43,6 @@ $_lang['ms3_settings_href'] = '?a=mgr/settings&namespace=minishop3'; $_lang['ms3_settings_text'] = 'Settings'; $_lang['ms3_sys_settings_href'] = '?a=system/settings&ns=minishop3'; -$_lang['ms3_sys_settings_text'] = 'System settings & Events'; +$_lang['ms3_sys_settings_text'] = 'System settings'; $_lang['ms3_utilities_href'] = '?a=mgr/utilities&namespace=minishop3'; $_lang['ms3_utilities_text'] = 'Utilities'; diff --git a/core/components/minishop3/lexicon/en/product.inc.php b/core/components/minishop3/lexicon/en/product.inc.php index 8adb34a43..13f030f8a 100644 --- a/core/components/minishop3/lexicon/en/product.inc.php +++ b/core/components/minishop3/lexicon/en/product.inc.php @@ -145,6 +145,7 @@ $_lang['ms3_gallery_file_source'] = 'File Source'; $_lang['ms3_gallery_button_upload'] = 'Select Files'; +$_lang['ms3_gallery_actions'] = 'Gallery actions'; $_lang['ms3_gallery_file_show'] = 'Open in New Window'; $_lang['ms3_gallery_file_update'] = 'Edit Properties'; @@ -184,6 +185,7 @@ $_lang['ms3_gallery_uppy_note_max_size'] = 'Maximum size: %{maxSize}'; $_lang['ms3_gallery_uppy_back'] = 'Back'; $_lang['ms3_gallery_uppy_add_more_files'] = 'Add more files'; +$_lang['ms3_gallery_uppy_adding_more_files'] = 'Adding more files'; $_lang['ms3_gallery_uppy_drop_hint'] = 'Drop your files here'; $_lang['ms3_gallery_uppy_error'] = 'Error'; $_lang['ms3_gallery_uppy_failed_to_upload'] = 'Failed to upload %{file}'; @@ -191,6 +193,18 @@ $_lang['ms3_gallery_uppy_no_files_found'] = 'You have no files or folders here'; $_lang['ms3_gallery_uppy_pause_upload'] = 'Pause upload'; $_lang['ms3_gallery_uppy_resume_upload'] = 'Resume upload'; +$_lang['ms3_gallery_uppy_editing'] = 'Editing image'; +$_lang['ms3_gallery_uppy_save'] = 'Save'; +$_lang['ms3_gallery_uppy_finish_editing'] = 'Finish editing'; +$_lang['ms3_gallery_uppy_save_changes'] = 'Save changes'; +$_lang['ms3_gallery_uppy_revert'] = 'Reset'; +$_lang['ms3_gallery_uppy_rotate'] = 'Rotate 90°'; +$_lang['ms3_gallery_uppy_zoom_in'] = 'Zoom in'; +$_lang['ms3_gallery_uppy_zoom_out'] = 'Zoom out'; +$_lang['ms3_gallery_uppy_flip_horizontal'] = 'Flip horizontally'; +$_lang['ms3_gallery_uppy_crop_square'] = 'Crop square'; +$_lang['ms3_gallery_uppy_crop_landscape'] = 'Crop landscape (16:9)'; +$_lang['ms3_gallery_uppy_crop_portrait'] = 'Crop portrait (9:16)'; $_lang['ms3_gallery_search_placeholder'] = 'Search files...'; $_lang['ms3_gallery_empty_text'] = 'No images yet. Upload files using the area above.'; diff --git a/core/components/minishop3/lexicon/en/vue.inc.php b/core/components/minishop3/lexicon/en/vue.inc.php index d93550177..e0abac805 100644 --- a/core/components/minishop3/lexicon/en/vue.inc.php +++ b/core/components/minishop3/lexicon/en/vue.inc.php @@ -8,6 +8,7 @@ $_lang['ms3_vue_product_fields_title'] = 'Product Fields (Admin)'; $_lang['ms3_vue_product_fields_description'] = 'Here you can configure which fields are displayed on the "Product Data" tab when editing a product'; $_lang['ms3_vue_product_properties'] = 'Product Properties'; +$_lang['ms3_product_links_empty'] = 'No links yet. Create the first one.'; // Grid Fields Config Widget $_lang['grid_fields_config_title'] = 'Grid Configuration'; @@ -640,6 +641,19 @@ $_lang['log_action'] = 'Action'; $_lang['log_user'] = 'User'; $_lang['log_entry'] = 'Entry'; +$_lang['log_empty'] = 'No order history yet'; +$_lang['log_action_status'] = 'Status'; +$_lang['log_action_field'] = 'Field'; +$_lang['log_action_address'] = 'Address'; +$_lang['log_action_products'] = 'Products'; +$_lang['log_action_payment'] = 'Payment'; +$_lang['log_entry_status_id'] = 'Status ID: {id}'; +$_lang['log_entry_fields'] = 'Fields: {fields}'; +$_lang['log_entry_address'] = 'Address: {fields}'; +$_lang['log_entry_product_op_add'] = 'Added'; +$_lang['log_entry_product_op_remove'] = 'Removed'; +$_lang['log_entry_product_op_update'] = 'Updated'; +$_lang['log_entry_product_op_unknown'] = 'Change'; $_lang['address_first_name'] = 'First Name'; $_lang['address_last_name'] = 'Last Name'; $_lang['address_phone'] = 'Phone'; @@ -1128,6 +1142,10 @@ $_lang['ms3_vendor_email'] = 'Email'; $_lang['ms3_vendor_description'] = 'Description'; $_lang['ms3_vendor_properties'] = 'Properties'; +$_lang['ms3_vendor_select'] = 'Select vendor'; +$_lang['ms3_vendor_search'] = 'Search vendor…'; +$_lang['ms3_vendor_empty'] = 'No vendors found. Add a vendor in component settings.'; +$_lang['ms3_vendor_not_found'] = 'Vendor not found'; // Vendor sections $_lang['ms3_section_vendor_info'] = 'Information'; diff --git a/core/components/minishop3/lexicon/ru/help.inc.php b/core/components/minishop3/lexicon/ru/help.inc.php index 55143ba58..2d1ac70a2 100644 --- a/core/components/minishop3/lexicon/ru/help.inc.php +++ b/core/components/minishop3/lexicon/ru/help.inc.php @@ -11,7 +11,7 @@ $_lang['ms3_components_href'] = 'https://modstore.pro/'; $_lang['ms3_components_text'] = 'Платные и бесплатные дополнения'; $_lang['ms3_components_title'] = 'Дополнения'; -$_lang['ms3_demo_href'] = '#'; +$_lang['ms3_demo_href'] = 'https://minishop3.ru/'; $_lang['ms3_demo_text'] = 'Перейти на демо-сайт'; $_lang['ms3_demo_title'] = 'Демо'; $_lang['ms3_docs_href'] = 'https://docs.modx.pro/components/minishop3/'; @@ -24,9 +24,11 @@ $_lang['ms3_github_text'] = 'Нашли проблему? Сообщите об этом!'; $_lang['ms3_github_title'] = 'github.com'; $_lang['ms3_help'] = 'Помощь и поддержка'; +$_lang['ms3_help_nav_title'] = 'Разделы менеджера'; +$_lang['ms3_help_resources_title'] = 'Ресурсы'; $_lang['ms3_help_text'] = 'MiniShop3 - самый гибкий и быстрый компонент интернет-магазина для MODX3.'; -$_lang['ms3_help_text_support'] = 'Вы можете поддержать MiniShop3 финансово: -
- Все реквизиты здесь'; +$_lang['ms3_help_text_support'] = 'Поддержите разработку MiniShop3 +
Реквизиты для перевода — на странице о проекте.'; $_lang['ms3_lexicons_href'] = '?a=workspaces/lexicon&ns=minishop3'; $_lang['ms3_lexicons_text'] = 'Управление словарями'; $_lang['ms3_localization_href'] = 'https://crowdin.com/project/minishop3-ecommerce'; @@ -41,6 +43,6 @@ $_lang['ms3_settings_href'] = '?a=mgr/settings&namespace=minishop3'; $_lang['ms3_settings_text'] = 'Настройки'; $_lang['ms3_sys_settings_href'] = '?a=system/settings&ns=minishop3'; -$_lang['ms3_sys_settings_text'] = 'Системные настройки & События'; +$_lang['ms3_sys_settings_text'] = 'Системные настройки'; $_lang['ms3_utilities_href'] = '?a=mgr/utilities&namespace=minishop3'; $_lang['ms3_utilities_text'] = 'Утилиты'; diff --git a/core/components/minishop3/lexicon/ru/product.inc.php b/core/components/minishop3/lexicon/ru/product.inc.php index 00303ec0b..f9cbc2a7b 100644 --- a/core/components/minishop3/lexicon/ru/product.inc.php +++ b/core/components/minishop3/lexicon/ru/product.inc.php @@ -145,6 +145,7 @@ $_lang['ms3_gallery_file_source'] = 'Источник файла'; $_lang['ms3_gallery_button_upload'] = 'Выбрать файлы'; +$_lang['ms3_gallery_actions'] = 'Действия галереи'; $_lang['ms3_gallery_file_show'] = 'Открыть в новом окне'; $_lang['ms3_gallery_file_update'] = 'Изменить свойства'; @@ -184,6 +185,7 @@ $_lang['ms3_gallery_uppy_note_max_size'] = 'Макс. размер: %{maxSize}'; $_lang['ms3_gallery_uppy_back'] = 'Назад'; $_lang['ms3_gallery_uppy_add_more_files'] = 'Добавить ещё файлы'; +$_lang['ms3_gallery_uppy_adding_more_files'] = 'Добавление файлов'; $_lang['ms3_gallery_uppy_drop_hint'] = 'Перетащите файлы сюда'; $_lang['ms3_gallery_uppy_error'] = 'Ошибка'; $_lang['ms3_gallery_uppy_failed_to_upload'] = 'Не удалось загрузить %{file}'; @@ -191,6 +193,18 @@ $_lang['ms3_gallery_uppy_no_files_found'] = 'У вас нет файлов или папок'; $_lang['ms3_gallery_uppy_pause_upload'] = 'Приостановить загрузку'; $_lang['ms3_gallery_uppy_resume_upload'] = 'Возобновить загрузку'; +$_lang['ms3_gallery_uppy_editing'] = 'Редактирование изображения'; +$_lang['ms3_gallery_uppy_save'] = 'Сохранить'; +$_lang['ms3_gallery_uppy_finish_editing'] = 'Завершить редактирование'; +$_lang['ms3_gallery_uppy_save_changes'] = 'Сохранить изменения'; +$_lang['ms3_gallery_uppy_revert'] = 'Сбросить'; +$_lang['ms3_gallery_uppy_rotate'] = 'Повернуть на 90°'; +$_lang['ms3_gallery_uppy_zoom_in'] = 'Увеличить'; +$_lang['ms3_gallery_uppy_zoom_out'] = 'Уменьшить'; +$_lang['ms3_gallery_uppy_flip_horizontal'] = 'Отразить по горизонтали'; +$_lang['ms3_gallery_uppy_crop_square'] = 'Квадратная обрезка'; +$_lang['ms3_gallery_uppy_crop_landscape'] = 'Альбомная обрезка (16:9)'; +$_lang['ms3_gallery_uppy_crop_portrait'] = 'Портретная обрезка (9:16)'; $_lang['ms3_gallery_search_placeholder'] = 'Поиск файлов...'; $_lang['ms3_gallery_empty_text'] = 'Файлов нет. Загрузите через область выше.'; diff --git a/core/components/minishop3/lexicon/ru/vue.inc.php b/core/components/minishop3/lexicon/ru/vue.inc.php index 01da74b1b..c9ee83ec4 100644 --- a/core/components/minishop3/lexicon/ru/vue.inc.php +++ b/core/components/minishop3/lexicon/ru/vue.inc.php @@ -8,6 +8,7 @@ $_lang['ms3_vue_product_fields_title'] = 'Поля товара (админка)'; $_lang['ms3_vue_product_fields_description'] = 'Здесь вы можете настроить, какие поля отображаются на вкладке "Данные товара" при редактировании товара'; $_lang['ms3_vue_product_properties'] = 'Свойства товара'; +$_lang['ms3_product_links_empty'] = 'Связей пока нет. Создайте первую.'; // Grid Fields Config Widget $_lang['grid_fields_config_title'] = 'Конфигурация гридов'; @@ -639,6 +640,19 @@ $_lang['log_action'] = 'Действие'; $_lang['log_user'] = 'Пользователь'; $_lang['log_entry'] = 'Запись'; +$_lang['log_empty'] = 'История заказа пуста'; +$_lang['log_action_status'] = 'Статус'; +$_lang['log_action_field'] = 'Поле'; +$_lang['log_action_address'] = 'Адрес'; +$_lang['log_action_products'] = 'Товары'; +$_lang['log_action_payment'] = 'Оплата'; +$_lang['log_entry_status_id'] = 'Статус ID: {id}'; +$_lang['log_entry_fields'] = 'Поля: {fields}'; +$_lang['log_entry_address'] = 'Адрес: {fields}'; +$_lang['log_entry_product_op_add'] = 'Добавлен'; +$_lang['log_entry_product_op_remove'] = 'Удалён'; +$_lang['log_entry_product_op_update'] = 'Изменён'; +$_lang['log_entry_product_op_unknown'] = 'Изменение'; $_lang['address_first_name'] = 'Имя'; $_lang['address_last_name'] = 'Фамилия'; $_lang['address_phone'] = 'Телефон'; @@ -1130,6 +1144,10 @@ $_lang['ms3_vendor_email'] = 'Email'; $_lang['ms3_vendor_description'] = 'Описание'; $_lang['ms3_vendor_properties'] = 'Свойства'; +$_lang['ms3_vendor_select'] = 'Выберите производителя'; +$_lang['ms3_vendor_search'] = 'Поиск производителя…'; +$_lang['ms3_vendor_empty'] = 'Производители не найдены. Добавьте производителя в настройках компонента.'; +$_lang['ms3_vendor_not_found'] = 'Производитель не найден'; // Vendor sections $_lang['ms3_section_vendor_info'] = 'Информация'; diff --git a/core/components/minishop3/src/Controllers/Api/Manager/CategoryProductsController.php b/core/components/minishop3/src/Controllers/Api/Manager/CategoryProductsController.php index 7a8858bc3..7845d9cf3 100644 --- a/core/components/minishop3/src/Controllers/Api/Manager/CategoryProductsController.php +++ b/core/components/minishop3/src/Controllers/Api/Manager/CategoryProductsController.php @@ -773,8 +773,8 @@ protected function getDefaultFilters(): array 'label' => 'published', 'placeholder' => 'all', 'options' => [ - ['label' => 'Да', 'value' => 1], - ['label' => 'Нет', 'value' => 0], + ['label' => 'yes', 'value' => 1], + ['label' => 'no', 'value' => 0], ], 'width' => '120px', 'position' => 20, diff --git a/vueManager/src/components/ActionsColumn.vue b/vueManager/src/components/ActionsColumn.vue index 213f0974c..f7bc35c39 100644 --- a/vueManager/src/components/ActionsColumn.vue +++ b/vueManager/src/components/ActionsColumn.vue @@ -36,7 +36,7 @@ * } */ import { useLexicon } from '@vuetools/useLexicon' -import Button from 'primevue/button' +import { Button } from 'primevue' import { computed } from 'vue' import { useActions } from '../composables/useActions.js' diff --git a/vueManager/src/components/ActionsEditor.vue b/vueManager/src/components/ActionsEditor.vue index 775f669d3..04ad1726f 100644 --- a/vueManager/src/components/ActionsEditor.vue +++ b/vueManager/src/components/ActionsEditor.vue @@ -5,13 +5,7 @@ * Allows adding, removing and editing actions in grid column */ import { useLexicon } from '@vuetools/useLexicon' -import Button from 'primevue/button' -import Checkbox from 'primevue/checkbox' -import Column from 'primevue/column' -import DataTable from 'primevue/datatable' -import Dialog from 'primevue/dialog' -import InputText from 'primevue/inputtext' -import Select from 'primevue/select' +import { Button, Checkbox, Column, DataTable, Dialog, InputText, Select } from 'primevue' import { computed, ref, watch } from 'vue' import actionRegistry from '../actionRegistry.js' diff --git a/vueManager/src/components/ApiTest.vue b/vueManager/src/components/ApiTest.vue index 0ab791bd7..a7f8dc88d 100644 --- a/vueManager/src/components/ApiTest.vue +++ b/vueManager/src/components/ApiTest.vue @@ -2,21 +2,7 @@ import { useApi } from '@vuetools/useApi' import { useModx } from '@vuetools/useModx' import { usePermission } from '@vuetools/usePermission' -import Badge from 'primevue/badge' -import Button from 'primevue/button' -import Card from 'primevue/card' -import Chip from 'primevue/chip' -import Column from 'primevue/column' -import DataTable from 'primevue/datatable' -import Divider from 'primevue/divider' -import Message from 'primevue/message' -import Panel from 'primevue/panel' -import ProgressSpinner from 'primevue/progressspinner' -import Tab from 'primevue/tab' -import TabList from 'primevue/tablist' -import TabPanel from 'primevue/tabpanel' -import TabPanels from 'primevue/tabpanels' -import Tabs from 'primevue/tabs' +import { Badge, Button, Card, Chip, Column, DataTable, Divider, Message, Panel, ProgressSpinner, Tab, TabList, TabPanel, TabPanels, Tabs } from 'primevue' import { computed, ref } from 'vue' const { get, loading, error, clearError } = useApi() diff --git a/vueManager/src/components/AutocompleteCombo.vue b/vueManager/src/components/AutocompleteCombo.vue index 60c90e914..223137292 100644 --- a/vueManager/src/components/AutocompleteCombo.vue +++ b/vueManager/src/components/AutocompleteCombo.vue @@ -17,7 +17,8 @@ + + diff --git a/vueManager/src/components/order/OrderInfoTab.vue b/vueManager/src/components/order/OrderInfoTab.vue index e87d8a688..2d7a3676d 100644 --- a/vueManager/src/components/order/OrderInfoTab.vue +++ b/vueManager/src/components/order/OrderInfoTab.vue @@ -1,14 +1,6 @@