fix(feedback): 隐藏页加返回按钮 + 入库时间用东八区
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

- FeedbackAdminPage / EleImportPage 头部加 ← 返回按钮:
  优先 history.back(来自 SPA 内跳转),否则 hash=#mileage 兜底回主页
- 反馈入库(created_at / reply_at)改为 DATE_ADD(UTC_TIMESTAMP, INTERVAL 8 HOUR)
  不再依赖 MySQL/容器的本地时区设置,固定 CST

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
kkfluous
2026-04-30 14:27:41 +08:00
parent 9bbd11cc86
commit 2aeff0c2f4
3 changed files with 36 additions and 12 deletions

View File

@@ -54,6 +54,9 @@ const VALID_STATUS = new Set(['open', 'in_progress', 'done', 'rejected']);
const VALID_TYPES = new Set(['dimension', 'bug', 'ux', 'other']);
// 写入时间戳一律用东八区 CST避免依赖 MySQL/容器时区设置
const CST_NOW = `DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR)`;
app.post('/submit', async (c) => {
await ensureTable();
const body = await c.req.json().catch(() => ({})) as {
@@ -79,7 +82,7 @@ app.post('/submit', async (c) => {
const [r] = await pool.query<ResultSetHeader>(
`INSERT INTO bi_user_feedback (type, module, content, contact, screenshots, user_id, user_name, user_agent, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW())`,
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ${CST_NOW})`,
[type, moduleVal, content, contact, JSON.stringify(screenshots), user?.userId || null, user?.userName || null, userAgent],
);
return c.json({ ok: true, id: r.insertId });
@@ -174,7 +177,7 @@ app.patch('/:id', async (c) => {
}
if (typeof body.reply === 'string') {
const reply = body.reply.trim().slice(0, 2000);
fields.push('reply_content = ?', 'reply_user = ?', 'reply_at = NOW()');
fields.push('reply_content = ?', 'reply_user = ?', `reply_at = ${CST_NOW}`);
const user = (c as { get?: (k: string) => unknown }).get?.('user') as AuthUser | undefined;
params.push(reply || null, user?.userName || user?.userId || null);
}