feat: add balance display, user columns, device mgmt and sessions for agent

- Backend: add balance to agent stats API
- Backend: return full user details (balance, expiry, online_status, device_count, application) in agent users API
- Backend: export admin device/session handlers, add agent routes for devices and sessions
- Backend: add card type permission check and balance deduction for agent user creation
- Backend: extract checkAgentUserPermission helper, add user edit API
- Frontend: add balance card to agent dashboard
- Frontend: add application, online_status, device_count, balance, expiry_at columns to agent user table
- Frontend: add agent devices page (reuse admin data-table component)
- Frontend: add agent sessions page (reuse admin data-table component)
- Frontend: add devices and sessions to agent navigation and routes
- Add i18n keys for agent devices, sessions, user columns, dashboard balance
This commit is contained in:
2026-05-11 10:46:29 +08:00
parent a76a30ee78
commit 853c22fdbe
12 changed files with 848 additions and 32 deletions
+13 -1
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { Boxes, Cloud, CreditCard, Gauge, Key, LogOut, User, Users } from 'lucide-vue-next'
import { Boxes, Cloud, CreditCard, Gauge, Key, LogOut, Monitor, User, Users, Wifi } from 'lucide-vue-next'
import { computed, onMounted, reactive } from 'vue'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
@@ -87,6 +87,16 @@ const navMain = computed(() => {
url: '/agent/users',
icon: Users,
},
{
title: t('nav.devices'),
url: '/agent/devices',
icon: Monitor,
},
{
title: t('nav.sessions'),
url: '/agent/sessions',
icon: Wifi,
},
],
},
]
@@ -121,6 +131,8 @@ const breadcrumbs = computed(() => {
const titleMap: Record<string, string> = {
cards: t('nav.cards'),
users: t('nav.users'),
devices: t('nav.devices'),
sessions: t('nav.sessions'),
finance: t('nav.finance'),
'cloud-variables': t('nav.cloudVariables'),
profile: t('nav.profile'),