diff --git a/pkg/os/os.go b/pkg/os/os.go index b28c0b74..470118ad 100644 --- a/pkg/os/os.go +++ b/pkg/os/os.go @@ -80,6 +80,7 @@ func IsEOL() bool { "ubuntu": { "22.04": time.Date(2027, 4, 1, 0, 0, 0, 0, time.UTC), "24.04": time.Date(2029, 5, 31, 0, 0, 0, 0, time.UTC), + "26.04": time.Date(2031, 4, 30, 0, 0, 0, 0, time.UTC), }, } diff --git a/web/src/views/database/CreateUserModal.vue b/web/src/views/database/CreateUserModal.vue index 3efc6814..3a154aee 100644 --- a/web/src/views/database/CreateUserModal.vue +++ b/web/src/views/database/CreateUserModal.vue @@ -20,11 +20,16 @@ const createModel = ref({ remark: '', }) -const servers = ref<{ label: string; value: string }[]>([]) +const servers = ref<{ label: string; value: string; type: string }[]>([]) // 仅这些数据库类型支持用户管理 const userSupportedTypes = ['mysql', 'postgresql', 'clickhouse'] +// 当前选中服务器的类型,用于决定是否显示 Host 字段(仅 MySQL 需要) +const selectedServerType = computed( + () => servers.value.find((s) => s.value === createModel.value.server_id)?.type, +) + const hostTypeOptions = [ { label: $gettext('Local (localhost)'), value: 'localhost' }, { label: $gettext('All (%)'), value: '%' }, @@ -69,6 +74,7 @@ watch( servers.value.push({ label: server.name, value: server.id, + type: server.type, }) } }) @@ -125,7 +131,7 @@ watch( - + diff --git a/web/src/views/database/RedisDataView.vue b/web/src/views/database/RedisDataView.vue index 069f3ca1..b7b1d69c 100644 --- a/web/src/views/database/RedisDataView.vue +++ b/web/src/views/database/RedisDataView.vue @@ -40,6 +40,11 @@ const ttlModalShow = ref(false) const ttlKey = ref('') const ttlValue = ref(0) +// Rename 弹窗 +const renameModalShow = ref(false) +const renameOldKey = ref('') +const renameNewKey = ref('') + // 类型对应颜色 const typeColorMap: Record = { string: 'info', @@ -118,7 +123,7 @@ const columns: any = [ { title: $gettext('Actions'), key: 'actions', - width: 300, + width: 380, hideInExcel: true, render(row: any) { return h(NFlex, { size: 'small', align: 'center' }, () => [ @@ -148,6 +153,20 @@ const columns: any = [ }, { default: () => 'TTL' }, ), + h( + NButton, + { + size: 'small', + type: 'primary', + ghost: true, + onClick: () => { + renameOldKey.value = row.key + renameNewKey.value = row.key + renameModalShow.value = true + }, + }, + { default: () => $gettext('Rename') }, + ), h( NButton, { @@ -204,6 +223,22 @@ const handleSetTTL = () => { }) } +const handleRename = () => { + if (!selectedServer.value) return + useRequest( + database.redisKeyRename( + selectedServer.value, + selectedDB.value, + renameOldKey.value, + renameNewKey.value, + ), + ).onSuccess(() => { + renameModalShow.value = false + refresh() + window.$message.success($gettext('Renamed successfully')) + }) +} + const openCreate = () => { keyModalMode.value = 'create' keyModalKeyName.value = '' @@ -323,4 +358,24 @@ onUnmounted(() => { {{ $gettext('Submit') }} + + + + + + + + + + + + {{ $gettext('Submit') }} + +