Files
3x-ui/frontend
MHSanaei 59a4a713cd feat(frontend): Phase 6-i — xray page scaffold + Advanced JSON tab
The fifth and last legacy page comes online. Tabs are scaffolded with
a-empty placeholders for the structured editors (Basics / Routing /
Outbounds / Balancers / DNS) so navigation is stable; the
Advanced (JSON) tab is fully functional and lets power users edit
the raw xraySetting tree exactly like the legacy CodeMirror pane.

- xray.html + src/xray.js: fifth Vite multi-page entry, mounted as
  XrayPage; vite.config.js routes /panel/xray and /panel/xray/ to it
  through the dev proxy bypass alongside the other pages.
- XrayPage.vue: page chrome with the Save / Restart-xray bar, restart-
  output popover (surfaces /panel/xray/getXrayResult content when
  startup fails), 6 a-tabs, and a textarea-backed Advanced JSON editor.
  CodeMirror is intentionally not pulled in — the textarea works for
  every modern browser and keeps the bundle slim while structured
  editors land in 6-ii through 6-v.
- useXraySetting.js composable: POST /panel/xray/ on mount, mirrors
  the settings-page 1s busy-loop dirty check for both xraySetting
  and outboundTestUrl, and exposes saveAll + restartXray. The dirty
  flag relies on string equality of the pretty-printed JSON, so
  reformat-only edits don't enable Save.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 14:13:26 +02:00
..

3x-ui frontend

Vue 3 + Ant Design Vue 4 + Vite. Builds into ../web/dist/, which the Go binary will embed via embed.FS once the migration reaches the page handlers (Phase 4+).

This directory exists alongside the legacy web/html/ Vue 2 templates during the migration. Pages will move over one at a time on the vue3-migration branch.

Dev

cd frontend
npm install
npm run dev

The dev server runs on http://localhost:5173/ and proxies API calls to the Go panel at http://localhost:2053/ — start the Go panel first (go run main.go), then start Vite.

Production build

npm run build

Outputs to ../web/dist/. The Go binary picks it up at compile time via embed.FS.

Where things live

  • src/main.js — app entrypoint (createApp, install Antd, mount)
  • src/App.vue — root component (currently a smoke-test placeholder)
  • vite.config.js — build + dev-server config
  • index.html — Vite HTML template

Adding new pages

For each legacy page being migrated, add an entry to vite.config.js rollupOptions.input. Each entry produces its own HTML file in web/dist/, which the Go panel route handler will serve.