diff --git a/backend/src/modules/admin/admin.controller.ts b/backend/src/modules/admin/admin.controller.ts index c7540a4..0100a51 100644 --- a/backend/src/modules/admin/admin.controller.ts +++ b/backend/src/modules/admin/admin.controller.ts @@ -85,7 +85,12 @@ export class AdminController { filter.$or = [ { phone: { $regex: escaped, $options: 'i' } }, { nickname: { $regex: escaped, $options: 'i' } }, + { email: { $regex: escaped, $options: 'i' } }, ] + // 支持按 MongoDB _id 搜索(24位 hex) + if (/^[0-9a-f]{24}$/i.test(keyword)) { + filter.$or.push({ _id: keyword }) + } } const skip = (Math.max(1, +page) - 1) * +limit const [users, total] = await Promise.all([ diff --git a/zhiyin-app/src/pages/admin/admin.vue b/zhiyin-app/src/pages/admin/admin.vue index 1530f37..3e41feb 100644 --- a/zhiyin-app/src/pages/admin/admin.vue +++ b/zhiyin-app/src/pages/admin/admin.vue @@ -73,7 +73,7 @@ - + @@ -87,6 +87,9 @@ openid:{{ u.wxOpenid.slice(0,12) }}.. + + ID: {{ u._id }} + 引力:{{ u.gravity ?? 0 }} 面试:{{ u.interviewCount ?? 0 }}次 @@ -1028,6 +1031,13 @@ const doAdjustCredits = async () => { } catch { uni.showToast({ title: '调整失败', icon: 'none' }) } } +const copyId = (id) => { + uni.setClipboardData({ + data: id, + success: () => uni.showToast({ title: 'ID 已复制', icon: 'success' }), + }) +} + onMounted(() => { doVerify() }) @@ -1162,6 +1172,7 @@ onMounted(() => { doVerify() }) .meta-tag { font-size: 18rpx; background: #F3F4F6; color: var(--color-text-tertiary); padding: 2rpx 10rpx; border-radius: var(--radius-round); } .meta-tag.email { background: #EEF2FF; color: var(--color-primary); } .meta-tag.share { background: #FFF7ED; color: #D97706; } +.meta-tag.id-tag { background: #F5F3FF; color: #7C3AED; font-family: monospace; font-size: 16rpx; } .meta-tag.badge-done { background: #ECFDF5; color: #059669; } .meta-tag.badge-pend { background: #FEF3C7; color: #D97706; } .time-row { display: flex; flex-wrap: wrap; gap: 12rpx; }