- 同步版本号:VERSION / backend pom / admin-web / miniapp 均升至 1.1.0 - 合并本轮代码审查修复(详见 docs/CODE-REVIEW-2026-09-24.md): - 后端:微信登录真实实现 RealWechatLoginProvider、实名核验真实实现 RealIdentityVerificationProvider(本地强校验 + 可配置第三方 + fail-closed/fail-fast) - 照片直传落库端点 POST /me/photos/confirm(fileKey 归属校验 + 对象存在性校验后 savePhoto) - 刷新 Token Redis TTL 修正(getExpirationMs()*2 的 4h → refreshExpirationMs 的 14 天) - 管理端 token 改为 HttpOnly Cookie + silent-refresh,移除 localStorage 明文存储与 30+ 处手工注入 - 小程序:红娘接单鉴权头错位修复、serviceType 中文映射、生产域名可配置 - 隔离本地产物(.workbuddy/、*.bundle、*.dump、secrets、application-dev.yml 等已被 .gitignore 覆盖) 未验证项(打标签 ≠ 生产发布): - 后端编译 / 单测未在本环境执行(Maven 慢、Docker DNS 受限) - 管理端 登录→刷新→登出 端到端、小程序真机走查待人工验收 - 生产部署需注入 WECHAT_APP_ID / WECHAT_APP_SECRET、VERIFICATION_API_URL / VERIFICATION_API_KEY 与小程序生产域名
86 lines
2.9 KiB
Plaintext
86 lines
2.9 KiB
Plaintext
<!-- 红娘工作台 -->
|
|
<view class="page">
|
|
<!-- 欢迎区 -->
|
|
<view class="header">
|
|
<view class="header-top">
|
|
<view class="avatar">👩</view>
|
|
<view class="greeting-wrap">
|
|
<view class="greeting">您好,{{operatorName}}</view>
|
|
<view class="date">{{currentDate}}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="header-badge">公益红娘</view>
|
|
|
|
<!-- 数据概览 -->
|
|
<view class="stats-container">
|
|
<view class="stat-card" hover-class="stat-hover">
|
|
<view class="stat-icon pending">📋</view>
|
|
<view class="stat-value">{{pendingCount}}</view>
|
|
<view class="stat-label">待处理</view>
|
|
</view>
|
|
<view class="stat-card" hover-class="stat-hover">
|
|
<view class="stat-icon progress">⏳</view>
|
|
<view class="stat-value">{{inProgressCount}}</view>
|
|
<view class="stat-label">进行中</view>
|
|
</view>
|
|
<view class="stat-card" hover-class="stat-hover">
|
|
<view class="stat-icon completed">✅</view>
|
|
<view class="stat-value">{{completedCount}}</view>
|
|
<view class="stat-label">已完成</view>
|
|
</view>
|
|
<view class="stat-card" hover-class="stat-hover">
|
|
<view class="stat-icon today">📅</view>
|
|
<view class="stat-value">{{todayCount}}</view>
|
|
<view class="stat-label">今日</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 待处理列表 -->
|
|
<view class="section" wx:if="{{!loading}}">
|
|
<view class="section-header">
|
|
<view class="section-title-wrap">
|
|
<text class="section-dot"></text>
|
|
<text class="section-title">待处理服务</text>
|
|
</view>
|
|
<text class="section-count" wx:if="{{pendingCount > 0}}">共{{pendingCount}}件</text>
|
|
</view>
|
|
|
|
<view class="service-list" wx:if="{{pendingServices.length > 0}}">
|
|
<view
|
|
wx:for="{{pendingServices}}"
|
|
wx:key="serviceId"
|
|
class="service-card"
|
|
data-id="{{item.serviceId}}"
|
|
bindtap="onViewService"
|
|
>
|
|
<view class="service-left">
|
|
<view class="service-header">
|
|
<view class="service-tag">{{serviceTypeLabel(item.serviceType)}}</view>
|
|
<view class="service-time">{{formatTime(item.createdAt)}}</view>
|
|
</view>
|
|
<view class="service-desc">{{item.description}}</view>
|
|
</view>
|
|
<button class="btn-claim" catchtap="onClaimService" data-id="{{item.serviceId}}" hover-class="btn-hover">接单</button>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="empty-state" wx:else>
|
|
<view class="empty-illustration">📭</view>
|
|
<view class="empty-text">暂无待处理服务</view>
|
|
<view class="empty-hint">用户申请的服务将在这里展示</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 加载中 -->
|
|
<view class="loading-wrap" wx:if="{{loading}}">
|
|
<view class="loading-spinner"></view>
|
|
<text class="loading-text">加载中...</text>
|
|
</view>
|
|
|
|
<!-- 退出登录 -->
|
|
<view class="footer">
|
|
<button class="logout-btn" bindtap="onLogout">退出登录</button>
|
|
</view>
|
|
</view>
|