63 lines
3.4 KiB
Markdown
63 lines
3.4 KiB
Markdown
# Nukumizu Console
|
|
|
|
Web console for the Nukumizu backend — a remote-server monitor and alert bot. Built with Vue 3 + Vite, no UI framework; styling is hand-rolled on CSS custom properties with a light/dark theme.
|
|
|
|
## Features
|
|
|
|
- **Sign in / first-run admin** — login, or create the very first admin while the database is still empty (the backend rejects further registrations once any user exists).
|
|
- **Nodes (overview)** — live server cards from the backend status/info APIs: online state, CPU / RAM / disk load, plus the per-node *status notify* switch persisted to `bot_node_config.json`. Searchable, auto-refreshes.
|
|
- **Bot trust** — manage QQ (NapCat) and Telegram admins & trusted groups in `bot_user_config.json`: add / remove members and toggle each member's `status notify`, `startup notify`, and `command replies`.
|
|
- **Settings** — structured forms for the global `config.json` (system, debug, Komari dashboard, controller methods, message templates, storage paths). Each card saves only its own section.
|
|
- **System logs** — live WebSocket log stream (`/api/system/getLogs`) with severity filter chips, search, pause/resume and export.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
npm install
|
|
npm run dev # http://localhost:5173
|
|
```
|
|
|
|
The dev server proxies `/api` (and the log websocket) to the backend. By default it targets `http://127.0.0.1:8080`; override with:
|
|
|
|
```bash
|
|
# Windows PowerShell
|
|
$env:NUKUMIZU_API = "http://192.168.20.4:8080"; npm run dev
|
|
```
|
|
|
|
Production build:
|
|
|
|
```bash
|
|
npm run build # outputs ../web/dist
|
|
npm run preview
|
|
```
|
|
|
|
Vite writes to `../web/dist` rather than `frontend/dist` (see `build.outDir` in `vite.config.js`) because the Go backend embeds that directory into the binary — `go:embed` cannot reach outside the package it sits in, so the output has to live under `web/`. The repo's `build-*` scripts run this build for you and compile the backend afterwards; `npm run build` alone does not change what an already-built binary serves.
|
|
|
|
## API contract notes
|
|
|
|
- Auth uses two headers on every request: `X-Token` (from login) and `X-Timestamp` — a **Unix timestamp in seconds** (not milliseconds) with a ±30 min tolerance (skipped when `system.debugMode` is on).
|
|
- Token & user are kept in `localStorage`. On a `401` the session is cleared and you are returned to the login page.
|
|
- The panel talks to `/api/server/getStatus`, `/api/server/getInfo`, `/api/settings/get`, `/api/settings/set` and `/api/user/login|register`. All management endpoints require an `admin` token.
|
|
- `/api/settings/set` is a deep merge: sending a JSON `null` for a key removes it (used when deleting a trusted member).
|
|
|
|
## Project structure
|
|
|
|
```
|
|
frontend/
|
|
├── index.html
|
|
├── vite.config.js
|
|
└── src/
|
|
├── main.js / App.vue
|
|
├── router/ # routes + auth guard
|
|
├── api/index.js # authApi, serverApi, settingsApi
|
|
├── utils/ # auth, http client, theme, toasts, formatting
|
|
├── styles/ # theme.css (tokens) + ui.css (primitives)
|
|
├── components/ # TopBar, SideBar, Modal, Toggle, TagsEditor, HeadersEditor
|
|
└── views/ # Login, Layout, Overview, Trusted, Settings, Logs
|
|
```
|
|
|
|
## Caveats
|
|
|
|
- The backend's `/api/system/getLogs` websocket is currently unauthenticated — anyone who can reach the port can read logs. Consider gating it in a future backend change.
|
|
- Registering more than one user is intentionally impossible; the backend only accepts the very first registration.
|