0904
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# 功能管理面板改进:长期开放模式 + 私聊上限下线 + 按钮同行(2026-09-01)
|
||||
|
||||
## 需求与方案
|
||||
|
||||
| # | 需求 | 方案 |
|
||||
|---|------|------|
|
||||
| 1 | 缺少「长期开放」开关:设了时间/数量后服务到期即关,想要一直开放的服务没有直接入口 | 每个功能面板新增「收集模式」三选一(radio):**长期开放 / 定时收集 / 循环定时**;选「长期开放」保存后即不限时间,保持开放直到手动关闭(仍可叠加收集上限) |
|
||||
| 2 | 私聊设置收集上限没有意义 | 私聊面板隐藏「收集上限」与「重置计数」;后端保存私聊时强制 `quota_limit=0`;启动期幂等清零历史残留的私聊上限/计数(`normalizeChatQuota`) |
|
||||
| 3 | 「保存该功能设置」应与「重置计数」同一行 | 两按钮合并到同一 flex 行;重置按钮通过 HTML5 `form` 属性指向独立的 reset 表单(HTML 不允许表单嵌套),CSRF 各自保留 |
|
||||
|
||||
## 改动明细
|
||||
|
||||
### 1. 收集模式三选一(`templates/user/feature-control-form.html` + `route/user/features.go`)
|
||||
|
||||
- 模式取值:`always`(长期开放)/ `window`(定时收集,一次性开放/关闭窗口)/ `recurring`(循环定时,每周循环)。
|
||||
- 渲染时从已保存配置推断模式(`inferFeatureMode`):有循环定时 → recurring;有一性次时间 → window;否则 → always。
|
||||
- **模式互斥**:保存时只保留所选模式的字段,其余清空。这顺带修掉一个旧语义坑——
|
||||
此前「一次性窗口 AND 循环定时」叠加,一次性关闭时间过后功能**永久结束**(硬边界),
|
||||
用户想恢复一直开放必须手动清空时间字段;现在切换到「长期开放」保存一次即可。
|
||||
- JS 按所选模式显隐「定时收集」/「循环定时」字段区(未选模式的字段仍提交,由后端按模式清理)。
|
||||
- 未携带 `mode` 的旧表单提交按字段推断兜底,保持兼容;`Evaluate` 判定逻辑零改动。
|
||||
|
||||
### 2. 私聊收集上限下线
|
||||
|
||||
- UI:`{{ if ne .Key "chat" }}` 条件隐藏配额输入、已收集行、重置按钮。
|
||||
- 后端:`FeaturesUpdate` 对 `feature=chat` 强制 `quota = 0`(防历史残留上限导致私聊"莫名关闭")。
|
||||
- 数据:新增 `internal/db/feature_control.go::normalizeChatQuota`,启动时把
|
||||
`feature='chat'` 且 `quota_limit>0 或 quota_count>0` 的行幂等清零(`db.go` 调用,失败仅告警)。
|
||||
- 文案:四语言字典更新 `admin.featureHint.chat`(去掉"达到上限后停止新建会话")。
|
||||
|
||||
### 3. 按钮同行
|
||||
|
||||
- `.feat-actions` 行内先「重置计数」(default 样式,仅非私聊面板)后「保存」(primary)。
|
||||
- 重置按钮 `form="feat-reset-{key}"` 指向表单外的独立 reset 表单,功能与原来完全一致。
|
||||
|
||||
## 其他改动
|
||||
|
||||
- i18n 四语言(zh-CN/zh-TW/en/ja)新增 `admin.featureMode`、`admin.featureModeAlways/Window/Recurring`、`admin.featureModeHint`。
|
||||
- `templates/render_test.go`:mock 结构体补 `Mode` 字段(question=always、chat=always、vote=recurring)。
|
||||
- `templates/user/profile.html`:新增 `.feat-modes` / `.feat-field-label` / `.is-hidden` 样式。
|
||||
|
||||
## 验证
|
||||
|
||||
- `gofmt -l -e` 全部改动文件 ✅
|
||||
- 全模块 overlay `go build` / `go vet` ✅(webp 屏蔽包用 `dev/webpstub` 桩 + `-overlay` 类型检查)
|
||||
- 全部可运行测试通过(含 `templates` 面板渲染回归、`internal/i18n`)✅
|
||||
- 待办:Linux 环境最终 `go build ./...`(webp CGO 真实编译)
|
||||
Reference in New Issue
Block a user