feat(admin): enrich admin panel fields; add user index constraint and customer service

- admin controller: add updatedAt to interview/resume selects; add orderCount,
  todayOrders, totalRevenue to overview
- admin.vue: enrich all tabs with more fields
  - overview: order cards (count, revenue)
  - users: wxOpenid, email, createdAt, interviewCount, vipExpireAt, role badge
  - interviews: user email, updatedAt, summary preview
  - orders: title, type, channel, paidAt, wxTransactionId, refund info
  - resumes: user email, updatedAt
  - share: sharer phone, shareCode, isActive, visitorId(IP), creditedAt
  - admins: email, createdAt
- user.schema: add unique indexes on phone/wxOpenid/email; pre-save hook
  requiring at least one contact method
- user/about: add WeChat contact button (open-type=contact) for customer service
This commit is contained in:
yuzhiran
2026-06-20 22:38:33 +08:00
parent 8ee27fdd32
commit ef4d22a633
5 changed files with 165 additions and 38 deletions
+15
View File
@@ -17,6 +17,15 @@
<text class="info-value">contact@yuzhiran.com</text>
</view>
<!-- #ifdef MP-WEIXIN -->
<button class="contact-btn" open-type="contact">
<view class="contact-btn-inner">
<text class="contact-icon">💬</text>
<text class="contact-text">联系在线客服</text>
</view>
</button>
<!-- #endif -->
<view class="link-section">
<view class="link-item" @click="goAgreement">
<text class="link-text">用户协议</text>
@@ -59,4 +68,10 @@ const goPrivacy = () => uni.navigateTo({ url: '/pages/privacy/privacy' })
.disclaimer { margin-top: 40rpx; background: #FFF8E1; border-radius: var(--radius-md); padding: 24rpx; }
.disclaimer-title { font-size: 24rpx; font-weight: 700; color: #F59E0B; display: block; margin-bottom: 12rpx; }
.disclaimer-text { font-size: 22rpx; color: var(--color-text-secondary); line-height: 1.8; }
.contact-btn { width: 100%; background: #FFF; border: none; border-radius: var(--radius-md); padding: 0; margin-bottom: 12rpx; }
.contact-btn-inner { display: flex; align-items: center; gap: 16rpx; padding: 24rpx 30rpx; }
.contact-btn:active { opacity: 0.7; }
.contact-icon { font-size: 28rpx; }
.contact-text { font-size: 26rpx; color: var(--color-text); }
</style>