The operator UI
minmcs-ui is a Vue 3 + Pinia + vue-router operator dashboard, built on a Bootstrap 5 admin
template (“quantum-vue”) and adapted for MCS use. It talks to the API service
over REST, and refreshes reactively on the /ws broadcast rather than polling.
Structure
src/components/minmcs/— the domain components. Five of them fetch data directly from the API and each defines its ownAPIconstant fromVITE_MINMCS_API, rather than sharing a client module:TmDisplaySubsystems,TmPackets,TcManualStack,TcHistory,OnboardTime. The other two,PanelStatusandPanelSearch, are purely presentational — props and emits only, no API calls of their own.src/views/— one view per route:TelemetryPackets,TelemetryParameters,TelemetryContainers,TelecommandsPackets,TelecommandsCommands,TelecommandsContainers,SystemConfiguration,SystemModel,Links, plus the template’s defaultView1and a catch-allPageError.src/router/index.ts— a flat, static route list (no groups, no guards), with each view lazy-loaded.- Everything else is template scaffolding, not MCS-specific:
src/components/app/(header, sidebar, footer chrome),src/components/bootstrap/(thin Card wrappers),src/stores/*.ts(Pinia stores for UI chrome state — theme, sidebar collapse, nav menu, not domain data),src/composables/, andsrc/scss/.
There’s no dedicated domain Pinia store. TM/TC data is fetched directly by the minmcs/
components instead of being centralized in a store.
Commands
$ npm install
$ npm run dev # Vite dev server, host exposed
$ npm run build # vue-tsc --noEmit && vite build
$ npm run lint # eslint --fix
$ npm run typecheck # vue-tsc --noEmitVITE_MINMCS_API sets the backend base URL at build/dev time (default
http://localhost:9300). Under compose it comes from the root .env and is baked into the
bundle at image build time, so changing it needs docker compose up --build — see
Configuration. There’s no test tooling configured yet — no test script
in package.json, and no vitest or Cypress config anywhere in the repo.