3x-ui/frontend
MHSanaei c3293bca82
feat(frontend): Phase 5c-iii — xray status card + stop/restart controls
XrayStatusCard.vue renders the right-hand card on the dashboard:

- Title with mobile-only version tag (matches the legacy collapse)
- Animated badge for the running/stop/error states. The pulsing dot
  comes from xray-pulse keyframes (renamed from runningAnimation in
  legacy custom.min.css). Color rings on the badge use the legacy's
  per-state border-color overrides on .ant-badge-status-processing.
- Error state replaces the badge with a popover that surfaces the
  multi-line errorMsg + a logs shortcut.
- Action row at the bottom: optional logs (when ipLimitEnable),
  stop, restart, and version switch.

IndexPage now wires:
- POST /panel/api/server/stopXrayService and /restartXrayService,
  followed by a refresh() so the status card reflects the new state
  without waiting for the next poll tick
- POST /panel/setting/defaultSettings to read ipLimitEnable
- Stub handlers for the panel-logs / xray-logs / version-switch /
  cpu-history modals — those land in 5c-iv

AD-Vue 4 changes hit on this card:
- <a-icon type="bars|poweroff|reload|tool"> → explicit
  BarsOutlined / PoweroffOutlined / ReloadOutlined / ToolOutlined
- <span slot="title|content"> → <template #title|#content>
- The .xray-*-animation classes ship as global <style> (not scoped)
  so they pierce AD-Vue's internal .ant-badge-status-* DOM.

i18n still hardcoded English; Phase 7 wires vue-i18n.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 12:39:38 +02:00
..
src feat(frontend): Phase 5c-iii — xray status card + stop/restart controls 2026-05-08 12:39:38 +02:00
.gitignore build(frontend): Phase 2 — scaffold Vite + Vue 3 + AD-Vue 4 2026-05-08 10:36:03 +02:00
index.html feat(frontend): Phase 5c-i — index.html dashboard shell 2026-05-08 12:26:51 +02:00
login.html feat(frontend): Phase 5a — theme system + Vite 8 + vue-i18n 11 2026-05-08 11:11:06 +02:00
package-lock.json feat(frontend): Phase 5a — theme system + Vite 8 + vue-i18n 11 2026-05-08 11:11:06 +02:00
package.json feat(frontend): Phase 5a — theme system + Vite 8 + vue-i18n 11 2026-05-08 11:11:06 +02:00
README.md build(frontend): Phase 2 — scaffold Vite + Vue 3 + AD-Vue 4 2026-05-08 10:36:03 +02:00
vite.config.js fix(frontend): real dark mode + silence dev proxy ECONNREFUSED noise 2026-05-08 11:59:02 +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.