- 添加项目基础结构:Cargo.toml、.gitignore、设备UID和密钥文件 - 实现前端Vue3项目结构:路由、登录页面、设备管理页面 - 添加核心协议定义(crates/protocol):设备状态、资产、USB事件等 - 实现客户端监控模块:系统状态收集、资产收集 - 实现服务端基础API和插件系统 - 添加数据库迁移脚本:设备管理、资产跟踪、告警系统等 - 实现前端设备状态展示和基本交互 - 添加使用时长统计和水印功能插件
88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
import axios from 'axios'
|
|
|
|
const api = axios.create({
|
|
baseURL: '/api',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
})
|
|
|
|
// Add auth token to requests
|
|
api.interceptors.request.use((config) => {
|
|
const token = localStorage.getItem('token')
|
|
if (token) {
|
|
config.headers.Authorization = `Bearer ${token}`
|
|
}
|
|
return config
|
|
})
|
|
|
|
export interface Device {
|
|
id: number
|
|
device_uid: string
|
|
hostname: string
|
|
ip_address: string
|
|
mac_address: string | null
|
|
os_version: string | null
|
|
client_version: string | null
|
|
status: 'online' | 'offline'
|
|
last_heartbeat: string | null
|
|
registered_at: string
|
|
group_name: string
|
|
}
|
|
|
|
export interface DeviceStatusDetail {
|
|
cpu_usage: number
|
|
memory_usage: number
|
|
memory_total: number
|
|
disk_usage: number
|
|
disk_total: number
|
|
running_procs: number
|
|
top_processes: Array<{ name: string; pid: number; cpu_usage: number; memory_mb: number }>
|
|
}
|
|
|
|
export const useDeviceStore = defineStore('devices', () => {
|
|
const devices = ref<Device[]>([])
|
|
const loading = ref(false)
|
|
const total = ref(0)
|
|
|
|
async function fetchDevices(params?: Record<string, string>) {
|
|
loading.value = true
|
|
try {
|
|
const { data } = await api.get('/devices', { params })
|
|
if (data.success) {
|
|
devices.value = data.data.devices
|
|
total.value = data.data.total ?? devices.value.length
|
|
}
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
async function fetchDeviceStatus(uid: string): Promise<DeviceStatusDetail | null> {
|
|
const { data } = await api.get(`/devices/${uid}/status`)
|
|
return data.success ? data.data : null
|
|
}
|
|
|
|
async function fetchDeviceHistory(uid: string, params?: Record<string, string>) {
|
|
const { data } = await api.get(`/devices/${uid}/history`, { params })
|
|
return data.success ? data.data : null
|
|
}
|
|
|
|
async function removeDevice(uid: string) {
|
|
await api.delete(`/devices/${uid}`)
|
|
devices.value = devices.value.filter((d) => d.device_uid !== uid)
|
|
}
|
|
|
|
return {
|
|
devices,
|
|
loading,
|
|
total,
|
|
fetchDevices,
|
|
fetchDeviceStatus,
|
|
fetchDeviceHistory,
|
|
removeDevice,
|
|
}
|
|
})
|