Saltar al contenido

Módulos del admin (@/*) ​

Una página de plugin importa vue, vue-router y @/…. Todo sale de window.__HURY_ADMIN__, así que comparte Vue, componentes, tiendas y estilos con el panel (no se empaquetan). @/… no es una ruta de ficheros libre: solo se alcanza lo que enumera el import.meta.glob de admin/src/plugins/runtime.ts. Importar otra cosa falla al cargar con «El panel no expone…».

Reglas ​

  • Se importan los nombres: import * as x from "@/…" no se admite.
  • Las dependencias propias del plugin (p. ej. qrcode) se resuelven desde las del admin y sí se empaquetan en el plugin.
  • Un import de @/modules/… no funciona, salvo las tres rutas concretas de la lista.
  • El texto en español es la clave de traducción: t("Texto") de @/i18n.

Entrada del plugin (admin/index.ts) ​

export default de un objeto PluginAdminModule:

CampoTipoDescripción
featuretextoClave del módulo. El panel oculta la entrada y bloquea las rutas si está apagado.
routesRouteRecordRaw[]Rutas de vue-router bajo el AppShell. El meta.permission (lista) restringe quién entra.
navNavEntryEntrada de menú plana; el runtime la aplana con PROMOTE, como las del núcleo.
settingsLink, settingsGroupSettingsLink, textoEnlace en la página de Ajustes, dentro del grupo con ese título en español («TPV», «Sistema»…).
tourModuleTourTutorial del módulo.
slotsArray<{ slot, feature?, component }>Componentes que el plugin engancha en puntos del panel; component es una importación dinámica.

Slots reservados ​

El núcleo pinta <PluginSlot name="área.punto" … /> y el plugin engancha componentes. PluginSlot pinta, en orden, los componentes cuyo feature está encendido, y no pinta nada si no hay ninguno.

SlotProps / eventosDónde
pos.order.paymentsorderId, compact?ficha del pedido del TPV y hoja de mesa del TPV 2
pos.order.detailorder ({ id, tableId })detalle de un pedido
pos.requestsemite open(orderId)avisos pendientes en Vender
terminals.rowterminal; emite changedfila de un terminal

Sesión y módulos ​

useSession() (@/stores/session) expone can(...permisos), canAny(...), feature(clave) y isAdmin. Para una clave de plugin, session.feature(clave) solo es verdadero si me.features[clave] === true: así un paso de tutorial o un panel del núcleo ligado a un plugin no salen mientras no esté instalado.

Lo que alcanza un plugin ​

Rutas que alcanza import.meta.glob en admin/src/plugins/runtime.ts:

  • /src/components/**/*.vue
  • /src/composables/**/*.ts
  • /src/lib/**/*.ts
  • /src/stores/**/*.ts
  • /src/api/*.ts
  • /src/app/*.ts
  • /src/i18n/index.ts
  • /src/brand.ts
  • /src/modules/crm/labels.ts
  • /src/modules/pos/components/ReasonModal.vue
  • /src/modules/media/access.ts
ImportaciónValoresSolo tipos
@/api/fetchAllfetchAll—
@/api/httpApiError apiBase buildQuery downloadFile http renewSession sessionLost setOnSessionLost streamUrl tokens uploadFile—
@/api/setupmarkSetupDone needsSetup setupApi setupStatusLicenseCheck SetupPayload SetupResult SetupStatus
@/api/types—Me Paged
@/app/envapiOrigin storagePrefix—
@/app/featuresFEATURE_KEYS FEATURE_PATHS NEW_MODULES featureOfPathFeatureKey ModuleInfo ModuleKey
@/app/kioskKIOSK_HOST KIOSK_PATH—
@/app/navigationNAV PROMOTE SECTIONS SECTION_LABELS SETTINGS_GROUPS SETTINGS_ROUTES activeFor activeIn flattenEntriesNavEntry NavSection NavView Promote SettingsLink
@/app/pageNavPAGE_NAV pageNavFor usePageNav visibleEntriesPageNavItem PageNavState PageNavToggle
@/app/pluginKeys.generatedPLUGIN_FEATURE_KEYS—
@/app/routerrouter—
@/app/setupRulesCOUNTRY_CODES MIN_DISTINCT_CHARS MIN_PASSWORD MIN_PASSWORD_SCORE checkPassword defaultCountry licenseReason mapServerIssuesLicenseReason MappedIssues PasswordCheck PasswordIssue ServerIssue SetupField
@/app/stylesAPP_STYLES applyStyle isStyleId loadStyleAppStyle StyleId
@/app/tourStepsTOUR_STEPSTourStep
@/app/usageProfilesQR_FEATURES blockLabel blockOf detectProfile profileFeatures profileSkipped profileSplit skippedMessage skippedOfBlockReason FeaturesState UsageProfile
@/brandbrand—
@/components/CardSetupNoticecomponente (default)—
@/components/CommandPalettecomponente (default)—
@/components/CrudPagecomponente (default)—
@/components/ImageInputcomponente (default)—
@/components/LocaleMenucomponente (default)—
@/components/LocaleSelectcomponente (default)—
@/components/PanelVersioncomponente (default)—
@/components/PluginSlotcomponente (default)—
@/components/sales/SalesWindowFieldscomponente (default)—
@/components/sales/TpvSalesPanelcomponente (default)—
@/components/shell/SideRailcomponente (default)—
@/components/shell/TourOverlaycomponente (default)—
@/components/ui/AppPagecomponente (default)—
@/components/ui/ConfirmHostcomponente (default)—
@/components/ui/StatusBadgecomponente (default)—
@/components/ui/UiBadgecomponente (default)—
@/components/ui/UiButtoncomponente (default)—
@/components/ui/UiCalloutcomponente (default)—
@/components/ui/UiCardcomponente (default)—
@/components/ui/UiCheckboxcomponente (default)—
@/components/ui/UiChoiceChipscomponente (default)—
@/components/ui/UiDesccomponente (default)—
@/components/ui/UiDescListcomponente (default)—
@/components/ui/UiDrawercomponente (default)—
@/components/ui/UiEmptycomponente (default)—
@/components/ui/UiFieldcomponente (default)—
@/components/ui/UiFileInputcomponente (default)—
@/components/ui/UiIconcomponente (default)—
@/components/ui/UiInputcomponente (default)—
@/components/ui/UiLinkListcomponente (default)—
@/components/ui/UiListcomponente (default)—
@/components/ui/UiListItemcomponente (default)—
@/components/ui/UiLoadErrorcomponente (default)—
@/components/ui/UiMenucomponente (default)—
@/components/ui/UiModalcomponente (default)—
@/components/ui/UiMoneyInputcomponente (default)—
@/components/ui/UiSearchcomponente (default)—
@/components/ui/UiSectioncomponente (default)—
@/components/ui/UiSegmentedcomponente (default)—
@/components/ui/UiSelectcomponente (default)—
@/components/ui/UiSkeletoncomponente (default)—
@/components/ui/UiSortHandlecomponente (default)—
@/components/ui/UiSortableListcomponente (default)—
@/components/ui/UiStatcomponente (default)—
@/components/ui/UiStatscomponente (default)—
@/components/ui/UiSwitchcomponente (default)—
@/components/ui/UiTablecomponente (default)—
@/components/ui/UiTabscomponente (default)—
@/components/ui/UiTextareacomponente (default)—
@/components/ui/UiThumbcomponente (default)—
@/components/ui/UiToastercomponente (default)—
@/components/ui/UiToolbarcomponente (default)—
@/composables/useCardStatususeCardStatus—
@/composables/useRealtimeuseRealtimeRealtimeMessage
@/composables/useReorderuseReorderReorderContext UseReorderOptions
@/composables/useResourceusePaged useResource—
@/composables/useSortablearrayMove keyboardDirection refocusItem useSortableSortableChange UseSortableOptions
@/i18nLOCALES LOCALE_NAMES addMessages initI18n intlLocale locale setLocale tLocale Params
@/lib/formatDAY_START_HOUR TIME_ZONE businessToday centsToInput date dateTime dayLabel delta fromLocalInput inputToCents money number percent relative switchPercentMoney time toLocalInput today weekdayNames—
@/lib/salesWindowchannelName channelOptions statusLabel statusTone whenTextSalesChannel SalesStatus SalesWindowBlock SalesWindowForm
@/modules/crm/labelsCAMPAIGN_STATUS CHANNEL CHANNEL_OPTIONS COUPON_SOURCE COUPON_STATUS COUPON_TYPE DAYS DAY_OPTIONS LOYALTY_TX MESSAGE_STATUS ORDER_STATUS PAYMENT_STATUS PROMOTION_TYPE REWARD_TYPE SHOP_ORDER_STATUS SOURCE fullName loadCategories loadClubStores loadProducts loadPromotions loadSegments loadTemplatesClubStoreOption
@/modules/media/accessMEDIA_EDIT MEDIA_VIEW useMediaAccess—
@/modules/pos/components/ReasonModalcomponente (default)—
@/stores/feedbackuseFeedbackConfirmRequest Toast
@/stores/sessionuseSession—
@/stores/tourmarkVisited tourDone useTour visitedPaths—

Contrato con el host: apiVersion 2. Sitio estático: no recoge datos ni usa servicios de terceros.