feat(web): добавить поддержку быстрого доступа на дашборде и обновить настройки интерфейса
Docker / build (push) Failing after 19s

- Внедрён компонент QuickActionGrid для отображения часто используемых разделов на дашборде, управляемый настройкой showQuickActions.
- Добавлен новый параметр showQuickActions в схему настроек для управления видимостью быстрого доступа.
- Обновлён интерфейс настроек для включения переключателя отображения быстрого доступа.
- Добавлен компонент SystemMonitorPopover в заголовок приложения для мониторинга системы.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-07-17 20:32:59 +07:00
co-authored by Cursor
parent 9c43b45245
commit d52c633d90
15 changed files with 608 additions and 6 deletions
+16 -1
View File
@@ -44,6 +44,7 @@ export type SettingsDto = Omit<
| 'integrationEnabled'
| 'customFields'
| 'appSwitcherJson'
| 'showQuickActions'
> & {
telegramBotTokenSet: boolean
integrationTokenSet: boolean
@@ -56,6 +57,7 @@ export type SettingsDto = Omit<
notifyVpsDownEnabled: boolean
webhookEnabled: boolean
integrationEnabled: boolean
showQuickActions: boolean
notifyIntervalMinutes: number
uptimeCheckIntervalMinutes: number
customFields: unknown[]
@@ -81,7 +83,8 @@ function toDto(row: Row | undefined): SettingsDto | undefined {
customFields = []
}
}
const { telegramBotToken, integrationToken, appSwitcherJson, ...rest } = row
const { telegramBotToken, integrationToken, appSwitcherJson, showQuickActions: _showQa, ...rest } =
row
return {
...rest,
telegramBotTokenSet: Boolean(telegramBotToken?.trim()),
@@ -95,6 +98,7 @@ function toDto(row: Row | undefined): SettingsDto | undefined {
notifyVpsDownEnabled: Boolean(row.notifyVpsDownEnabled),
webhookEnabled: Boolean(row.webhookEnabled),
integrationEnabled: Boolean(row.integrationEnabled),
showQuickActions: row.showQuickActions == null ? true : Boolean(row.showQuickActions),
notifyIntervalMinutes: Number(row.notifyIntervalMinutes) || 60,
uptimeCheckIntervalMinutes: Number(row.uptimeCheckIntervalMinutes) || 5,
customFields: Array.isArray(customFields) ? customFields : [],
@@ -135,6 +139,7 @@ interface SettingsInput {
integrationEnabled?: boolean
integrationLastSyncAt?: string
cfdmApiUrl?: string
showQuickActions?: boolean
}
function buildValues(id: string, existing: Row | undefined, r: SettingsInput) {
@@ -238,6 +243,16 @@ function buildValues(id: string, existing: Row | undefined, r: SettingsInput) {
? r.integrationLastSyncAt || ''
: existing?.integrationLastSyncAt ?? '',
cfdmApiUrl: r.cfdmApiUrl !== undefined ? r.cfdmApiUrl || '' : existing?.cfdmApiUrl ?? '',
showQuickActions:
r.showQuickActions !== undefined
? r.showQuickActions
? 1
: 0
: existing?.showQuickActions == null
? 1
: existing.showQuickActions
? 1
: 0,
}
}
+1
View File
@@ -14,6 +14,7 @@ const COLUMN_MIGRATIONS: string[] = [
`ALTER TABLE settings ADD COLUMN integrationEnabled INTEGER`,
`ALTER TABLE settings ADD COLUMN integrationLastSyncAt TEXT`,
`ALTER TABLE settings ADD COLUMN cfdmApiUrl TEXT`,
`ALTER TABLE settings ADD COLUMN showQuickActions INTEGER`,
`ALTER TABLE vps_domains ADD COLUMN targetIps TEXT`,
]
+1
View File
@@ -133,6 +133,7 @@ export const settings = sqliteTable('settings', {
integrationEnabled: integer('integrationEnabled'),
integrationLastSyncAt: text('integrationLastSyncAt'),
cfdmApiUrl: text('cfdmApiUrl'),
showQuickActions: integer('showQuickActions'),
})
export const vpsDomains = sqliteTable('vps_domains', {