feat(admin): show last login time/IP/location in user list

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
yuzhiran
2026-06-22 12:38:26 +08:00
parent 04b30d0024
commit b6323f02eb
+9
View File
@@ -101,6 +101,11 @@
<text class="time-label" v-if="u.vipExpireAt">到期:{{ u.vipExpireAt?.slice(0,10) }}</text> <text class="time-label" v-if="u.vipExpireAt">到期:{{ u.vipExpireAt?.slice(0,10) }}</text>
<text class="time-label" v-if="u.sprintExpireAt">冲刺到期:{{ u.sprintExpireAt?.slice(0,10) }}</text> <text class="time-label" v-if="u.sprintExpireAt">冲刺到期:{{ u.sprintExpireAt?.slice(0,10) }}</text>
</view> </view>
<view class="user-meta-row time-row" v-if="u.lastLoginAt">
<text class="time-label">最后登录:{{ u.lastLoginAt?.slice(0,16).replace('T',' ') }}</text>
<text class="meta-tag" v-if="u.lastLoginIp">IP:{{ u.lastLoginIp }}</text>
<text class="meta-tag" v-if="u.lastLoginLocation">{{ u.lastLoginLocation }}</text>
</view>
<view class="user-actions"> <view class="user-actions">
<text class="user-action-btn" v-if="u.plan === 'free'" @click="setVip(u._id)">设为会员</text> <text class="user-action-btn" v-if="u.plan === 'free'" @click="setVip(u._id)">设为会员</text>
<text class="user-action-btn credit" @click="openCreditModal(u)">调整额度</text> <text class="user-action-btn credit" @click="openCreditModal(u)">调整额度</text>
@@ -300,6 +305,8 @@
<text>每月引力值</text> <text>每月引力值</text>
<input class="cfg-input" type="digit" v-model.number="pricing.plans.sprint.gravityPerMonth" /> <input class="cfg-input" type="digit" v-model.number="pricing.plans.sprint.gravityPerMonth" />
</view> </view>
<view class="cfg-row">
<text>面试额度/</text>
<input class="cfg-input" type="digit" v-model.number="pricing.plans.sprint.credits.interview" /> <input class="cfg-input" type="digit" v-model.number="pricing.plans.sprint.credits.interview" />
</view> </view>
<view class="cfg-row"> <view class="cfg-row">
@@ -539,6 +546,7 @@
<text class="admin-set-btn done" v-else>已是管理员</text> <text class="admin-set-btn done" v-else>已是管理员</text>
</view> </view>
</view> </view>
</view>
</view> </view>
</view> </view>
</view> </view>
@@ -736,6 +744,7 @@ const switchTab = (t) => {
if (t === 'pricing') loadPricing() if (t === 'pricing') loadPricing()
if (t === 'orders') loadOrders() if (t === 'orders') loadOrders()
if (t === 'analysis') loadAnalysis() if (t === 'analysis') loadAnalysis()
if (t === 'share') loadShareRecords()
} }
const loadUsers = async () => { const loadUsers = async () => {