refactor: BaseModel 主键列名统一 uid→id

- BaseModel 移除 gorm column:uid 和 json:uid 标签,统一为 id
- 更新 8 个 repository 文件中 28 处 raw SQL 列引用 (uid→id)
- 更新 3 个前端 JS 文件中 14 处 API 响应字段引用 (uid→id)
- 添加数据库迁移 SQL 脚本 (docs/migrations/001_uid_to_id.sql)
This commit is contained in:
2026-06-02 19:17:57 +08:00
parent 7fdea90ded
commit 5911cee01c
13 changed files with 70 additions and 43 deletions

View File

@ -113,8 +113,8 @@ function renderUsernameRow(item) {
<td><strong>${escapeHtml(item.new_value)}</strong></td>
<td>${formatTime(item.created_at)}</td>
<td class="col-actions">
<button class="btn btn-primary btn-sm" onclick="approveAudit(${item.uid})">通过</button>
<button class="btn btn-outline btn-sm" onclick="openRejectModal(${item.uid})">拒绝</button>
<button class="btn btn-primary btn-sm" onclick="approveAudit(${item.id})">通过</button>
<button class="btn btn-outline btn-sm" onclick="openRejectModal(${item.id})">拒绝</button>
</td>
</tr>`;
}
@ -128,8 +128,8 @@ function renderBioRow(item) {
<td title="${escapeHtml(text)}">${escapeHtml(display)}</td>
<td>${formatTime(item.created_at)}</td>
<td class="col-actions">
<button class="btn btn-primary btn-sm" onclick="approveAudit(${item.uid})">通过</button>
<button class="btn btn-outline btn-sm" onclick="openRejectModal(${item.uid})">拒绝</button>
<button class="btn btn-primary btn-sm" onclick="approveAudit(${item.id})">通过</button>
<button class="btn btn-outline btn-sm" onclick="openRejectModal(${item.id})">拒绝</button>
</td>
</tr>`;
}
@ -155,8 +155,8 @@ function renderAvatarCards(items) {
<img src="${escapeHtml(item.new_value)}" alt="新头像" onerror="this.src='data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22><rect fill=%22%23eee%22 width=%2280%22 height=%2280%22/><text x=%2240%22 y=%2245%22 text-anchor=%22middle%22 fill=%22%23999%22 font-size=%2212%22>加载失败</text></svg>'">
</div>
<div class="card-actions">
<button class="btn btn-primary btn-sm" onclick="approveAudit(${item.uid})">通过</button>
<button class="btn btn-outline btn-sm" onclick="openRejectModal(${item.uid})">拒绝</button>
<button class="btn btn-primary btn-sm" onclick="approveAudit(${item.id})">通过</button>
<button class="btn btn-outline btn-sm" onclick="openRejectModal(${item.id})">拒绝</button>
</div>
</div>
`).join('');

View File

@ -56,7 +56,7 @@ function renderTable(users) {
}
tbody.innerHTML = users.map(u => `
<tr>
<td class="col-uid">${u.uid}</td>
<td class="col-uid">${u.id}</td>
<td class="col-username">${escapeHtml(u.username)}</td>
<td class="col-email">${escapeHtml(u.email)}</td>
<td class="col-role">${roleLabel(u.role)}</td>
@ -73,27 +73,27 @@ function renderTable(users) {
function renderActions(u) {
// 不可操作自己
if (u.uid === window.__currentUid) return '—';
if (u.id === window.__currentUid) return '—';
let btns = '';
const isOwner = window.__isOwner || false;
// 封禁/解封按钮
if (u.status === 'active') {
btns += `<button class="btn btn-danger btn-sm" onclick="banUser(${u.uid}, '${escapeHtml(u.username)}')">封禁</button>`;
btns += `<button class="btn btn-danger btn-sm" onclick="banUser(${u.id}, '${escapeHtml(u.username)}')">封禁</button>`;
} else if (u.status === 'banned') {
btns += `<button class="btn btn-outline btn-sm" onclick="unbanUser(${u.uid}, '${escapeHtml(u.username)}')">解封</button>`;
btns += `<button class="btn btn-outline btn-sm" onclick="unbanUser(${u.id}, '${escapeHtml(u.username)}')">解封</button>`;
}
// 强制下线按钮
if (u.status === 'active' || u.status === 'banned') {
btns += `<button class="btn btn-outline btn-sm" onclick="resetToken(${u.uid}, '${escapeHtml(u.username)}')">踢下线</button>`;
btns += `<button class="btn btn-outline btn-sm" onclick="resetToken(${u.id}, '${escapeHtml(u.username)}')">踢下线</button>`;
}
// 删除按钮(仅 owner 可见,且目标不是 locked/deleted
if (isOwner && u.status !== 'locked' && u.status !== 'deleted') {
btns += `<button class="btn btn-danger btn-sm" onclick="deleteUser(${u.uid}, '${escapeHtml(u.username)}')">删除</button>`;
btns += `<button class="btn btn-danger btn-sm" onclick="deleteUser(${u.id}, '${escapeHtml(u.username)}')">删除</button>`;
}
// 解锁按钮(仅 owner 可见,状态为 locked
if (isOwner && u.status === 'locked') {
btns += `<button class="btn btn-outline btn-sm" onclick="unlockUser(${u.uid}, '${escapeHtml(u.username)}')">解锁</button>`;
btns += `<button class="btn btn-outline btn-sm" onclick="unlockUser(${u.id}, '${escapeHtml(u.username)}')">解锁</button>`;
}
return btns || '—';
}