feat: add navigation links management and user registration

Features:
- Custom navigation links management in admin settings
- Multi-language support for navigation links (Chinese/English)
- Control link behavior (open in new window)
- Sort order and enable/disable toggle for nav links
- User registration system with validation
- Admin can enable/disable user registration
- Registration form with username, display name, email, password
- Link to registration from login page

Navigation Links:
- Admin interface to add/edit/delete custom nav links
- Support for both internal and external URLs
- Display links in header navigation bar
- Respects language preference

User Registration:
- Username validation (3-32 characters, alphanumeric + underscore/dash)
- Password validation (minimum 6 characters)
- Password confirmation matching
- Optional display name and email fields
- Can be toggled on/off by admin in site settings

Templates:
- Added navigation links settings page
- Added user registration page
- Updated login page with registration link
- Updated base layout to render custom nav links

Documentation:
- NAV_LINKS_FEATURE.md - Navigation links feature documentation
- REGISTRATION_FEATURE.md - User registration documentation
- IMPLEMENTATION_SUMMARY.md - Overall implementation summary

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 21:01:38 +08:00
co-authored by Claude Fable 5
parent 2bdc368399
commit d9bb91af00
18 changed files with 1224 additions and 15 deletions
+122
View File
@@ -0,0 +1,122 @@
# 顶部导航链接管理功能 - 实现总结
## 已实现的功能
**完整的导航链接管理系统**
- 后台管理界面用于添加、编辑、删除、启用/禁用导航链接
- 支持中英文双语链接文字
- 支持设置是否在新窗口打开(自动添加安全属性 `rel="noopener noreferrer"`
- 支持自定义排序
- 前端自动根据用户语言显示对应文字
## 实现的文件
### 1. 数据库模型
- **models/nav_link.go** - NavLink 模型定义
- **models/db.go** - 添加了 NavLink 到自动迁移
- **models/config_cache.go** - 添加导航链接缓存支持
### 2. 后端处理器
- **handlers/settings.go** - 添加了以下函数:
- `NavLinksSettingsPage()` - 管理页面
- `NavLinksSettingsSave()` - 保存处理
- `addNavLink()` - 添加链接
- `editNavLink()` - 编辑链接
- `toggleNavLink()` - 切换启用状态
- `deleteNavLink()` - 删除链接
### 3. 前端模板
- **templates/admin/settings_navlinks.html** - 管理页面模板
- 添加链接表单
- 链接列表展示
- 编辑对话框
- 启用/禁用、删除操作
- **templates/layouts/base.html** - 更新导航栏显示链接
- **templates/admin/settings_*.html** - 更新所有设置页面的标签导航
### 4. 中间件
- **middleware/auth.go** - 添加导航链接到全局上下文
- **handlers/helpers.go** - 添加 NavLinks 到 DefaultData
### 5. 路由
- **main.go** - 添加路由:
- `GET /admin/settings/navlinks`
- `POST /admin/settings/navlinks`
### 6. 国际化
- **i18n/i18n.go** - 添加中英文翻译键:
- `settings_navlinks_title` - 导航链接
- `navlinks_add` - 添加链接
- `navlinks_title_zh/en` - 链接文字
- `navlinks_url` - 链接地址
- `navlinks_open_new` - 在新窗口打开
- 等等...
## 功能特点
1. **双语支持** - 自动根据用户语言显示对应的链接文字
2. **新窗口打开** - 支持设置链接在新标签页打开,带有安全图标提示
3. **排序功能** - 通过 Sort 字段控制链接显示顺序
4. **启用/禁用** - 可以临时隐藏链接而不删除
5. **编辑功能** - 通过模态对话框编辑现有链接
6. **缓存优化** - 链接数据缓存在内存中,修改后自动刷新
7. **安全性** - 新窗口链接自动添加 `rel="noopener noreferrer"`
## 使用示例
### 后台管理
1. 访问 `http://localhost:8080/admin/settings/navlinks`
2. 填写表单添加新链接
3. 点击"添加链接"保存
4. 使用"编辑"按钮修改现有链接
5. 使用"切换"按钮启用/禁用链接
6. 使用"删除"按钮移除链接
### 前端展示
导航链接会自动显示在顶部导航栏:
```
[Logo/Title] | [主页] | [关于] | [GitHub ↗] | [用户菜单]
```
## 测试结果
✅ 添加链接功能正常
✅ 链接在前端正确显示
✅ 双语切换正常工作
✅ 新窗口打开功能正常(带有 target="_blank" 和安全属性)
✅ 链接显示外部链接图标
✅ 管理界面正常显示所有链接
## 数据库表结构
```sql
CREATE TABLE nav_links (
id INTEGER PRIMARY KEY,
title_zh VARCHAR(100) NOT NULL,
title_en VARCHAR(100) NOT NULL,
url VARCHAR(512) NOT NULL,
open_new BOOLEAN DEFAULT FALSE,
enabled BOOLEAN DEFAULT TRUE,
sort INTEGER DEFAULT 0,
created_at DATETIME,
updated_at DATETIME,
updated_by INTEGER
);
```
## 技术亮点
1. **配置缓存机制** - 使用 sync.RWMutex 保证并发安全
2. **语言回退** - 如果某个语言的文字为空,自动显示另一个语言
3. **RESTful 设计** - 使用 action 参数区分不同操作
4. **模态对话框** - 编辑功能使用模态框,用户体验好
5. **一致性设计** - 遵循现有代码风格和设计模式
## 下一步建议
如需扩展功能,可以考虑:
- 添加图标支持(可以为每个链接设置图标)
- 添加分组功能(将链接分为不同的组)
- 添加拖拽排序功能(更直观的排序方式)
- 添加访问统计(记录链接点击次数)
- 支持下拉菜单(一个链接下有多个子链接)