feat: 品牌统一 LokiStack + 全站中英 i18n + 用户批量删除 + 主题定时切换与浅色侧栏

- 品牌: Go 模块/数据文件/二进制/构建部署资产全部 opsx→lokistack;前端 localStorage 命名空间迁移(读旧写新,含按用户 id 前缀迁移);修复 nginx upstream 与 Makefile 引用已改名服务的断裂
- i18n: react-i18next 落地,common + 11 个页面域命名空间全站中英(菜单/顶栏/登录/列表页/表单/确认弹窗/状态徽章);设置页语言即时切换;修复词典自注册导致的循环导入白屏
- 用户管理: 批量删除(POST /users/batch-delete,不删自己/最后管理员,部分失败不阻断)+ 行复选/全选/批量工具条
- 主题: 浅色侧栏(中性灰激活态)、四态模式(浅色/深色/跟随系统/定时切换,按时区判定)、顶栏太阳月亮二态、设置页紧凑分段选择器
- UI: 登录记住用户名、CardActionButton 统一五页卡片操作钮、shadcn Badge 替换手写徽章、语义色修正
- 清理: 移除主机 Web 终端(前后端)、k8s-helm/Helm 遗留代码与字段、README 重写精简
- 修复: 侧栏与日志告警 order 重复、路由标题 i18n key 未翻译、词典双逗号等
This commit is contained in:
opsx committed 2026-10-27 17:11:38 +08:00
1 parent 02d1bd87a7
commit f3733f0bfc
201 files changed
+5438 -2388

No files matched your search

+88
View File
@@ -0,0 +1,88 @@
// clusters 命名空间 — 集群管理页中文文案
// 富文本(含 <code>/<strong>)配合 react-i18next <Trans> 渲染,勿删标签
export default {
title: '集群管理',
description: '管理用于 Loki 部署的 Kubernetes 集群',
actions: {
add: '添加集群',
detail: '详情',
editAria: '编辑集群 {{name}}',
validateAria: '验证集群 {{name}}',
deleteAria: '删除集群 {{name}}',
},
fields: {
accessType: '接入方式',
apiServer: 'API Server',
version: '版本',
nodes: '节点数',
unknown: '未知',
},
empty: {
title: '暂无集群',
description: '添加第一个 Kubernetes 集群开始使用',
},
delete: {
warning:
'确定要删除「{{name}}」吗?警告:仍有 {{dep}} 个部署、{{col}} 个采集策略引用该集群,删除后它们将无法工作。',
},
toast: {
deleteFailed: '删除集群失败',
validateFailed: '验证失败',
createFailed: '创建集群失败',
},
form: {
addTitle: '添加 Kubernetes 集群',
editTitle: '编辑集群',
editTitleWithName: '编辑集群 · {{name}}',
nameLabel: '集群名称 *',
descriptionLabel: '描述',
descriptionPlaceholder: '生产环境日志集群',
accessTypeLabel: '接入方式',
kubeconfigLabel: 'Kubeconfig 内容 *',
kubeconfigLabelEdit: 'Kubeconfig 内容(留空保持不变)',
kubeconfigPlaceholder: '粘贴 kubeconfig YAML(自动识别 API Server)...',
apiServerDetected: '已识别 API Server:{{server}}',
apiServerLabel: 'API Server *',
tokenLabel: 'Token *',
tokenLabelEdit: 'Token(留空保持不变)',
tokenPlaceholder: '粘贴 Service Account Token...',
tokenInsecureHint: '采用 insecure 模式,便于内网/自签证书集群接入',
rbacSummary: '最小授权建议(点击展开)',
rbacScope:
'只授予 <code>log</code> 命名空间权限,Token 泄露也不会影响其他命名空间;<strong>不要使用 cluster-admin</strong>。',
rbacScriptIntro:
'一次性创建 <code>log</code> 命名空间、ServiceAccount、命名空间级 Role 和长期 Token(在集群里执行一次,Token 粘贴到下方输入框):',
rbacScriptComment1: '# 1) 一次创建:命名空间 + SA + 命名空间级 Role + 长期 Token',
rbacScriptComment2: '# 2) 取出长期 Token(不自动过期),粘贴到 Token 输入框',
rbacNamespaceNote:
'上面的 Namespace 由管理员创建,平台 Token 本身没有任何集群级权限。只有确实需要平台自建命名空间时,才额外授予 <code>namespaces: create/get</code> 的 ClusterRole;注意 namespace 的 create 无法按名称限制,所以预建 <code>log</code> 更安全。',
rbacTokenNote:
'Token 长期有效,但只绑定 <code>log</code> 命名空间的 Role(仅能操作该命名空间的 Pod / 工作负载),泄露影响面仅限于 <code>log</code>;服务端会转成 kubeconfig 并用 <code>ENCRYPTION_KEY</code> 加密存储,数据库里只有 <code>ENC:</code> 密文,接口不返回明文。轮换时删除该 Secret 重建即可,旧 Token 立即失效。',
contextLabel: '上下文(可选)',
contextPlaceholder: '留空则使用默认上下文',
submitAdd: '添加集群',
submitSave: '保存修改',
submittingAdd: '添加中...',
submittingSave: '保存中...',
validation: {
nameRequired: '请输入集群名称',
kubeconfigRequired: '请填写 kubeconfig 内容',
apiServerRequired: '请填写 API Server 地址',
tokenRequired: '请填写 Token',
},
},
detail: {
loadError: '加载集群详情失败',
version: '版本',
unknown: '未知',
currentContext: '当前上下文',
defaultContext: '默认',
nodesCount: '节点({{count}})',
nodeReady: '就绪',
nodeNotReady: '未就绪',
nodeIp: 'IP:{{value}}',
nodeOs: '系统:{{os}}/{{arch}}',
nodeVersion: '版本:{{version}}',
namespaces: '命名空间',
},
}