DELIVERY-APPROVAL-ALIGNMENT.md 7.3 KB

交付执行阶段审批逻辑与样式对齐完成

📋 任务概述

将交付执行阶段(Delivery Stage)的审批逻辑和审批按钮样式完全对齐到订单分配阶段(Order Stage)的实现标准。

✅ 完成的修改

1. 样式对齐 (stage-delivery.component.scss)

审批状态横幅样式

  • 将审批状态横幅的样式从圆角 12px 改为 8px,与订单阶段一致
  • 调整内边距和间距,确保视觉效果一致
  • 统一颜色渐变:
    • Pending: linear-gradient(135deg, #fff3e0, #ffe0b2) + 边框 #ff9800
    • Approved: linear-gradient(135deg, #e8f5e9, #c8e6c9) + 边框 #4caf50
    • Rejected: linear-gradient(135deg, #ffebee, #ffcdd2) + 边框 #f44336
  • 添加了 .btn-resubmit 按钮样式(预留功能)

组长审批操作条样式

  • 保持 .leader-approval-bar 的样式与订单阶段完全一致:
    • 背景渐变:linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%)
    • 圆角:16px
    • 阴影:0 4px 20px rgba(0, 0, 0, 0.08)
    • 按钮居中显示,间距 20px
  • 审批按钮样式:
    • 通过审批: linear-gradient(135deg, #667eea 0%, #764ba2 100%)
    • 驳回按钮: linear-gradient(135deg, #f093fb 0%, #f5576c 100%)
    • 悬停效果:translateY(-2px) + 阴影增强
    • 禁用状态:opacity: 0.6

2. TypeScript 逻辑对齐 (stage-delivery.component.ts)

增强调试日志

getDeliveryApprovalStatus() 方法中添加了详细的调试日志,与订单阶段的 getApprovalStatus() 方法保持一致:

console.log('🔍 【交付执行审批按钮显示条件检查】', {
  '条件1_审批状态': status,
  '条件1_是否pending': status === 'pending',
  '条件2_isTeamLeader': this.isTeamLeader,
  '条件3_isFromCustomerService': this.isFromCustomerService,
  '条件3_非客服入口': !this.isFromCustomerService,
  '✅ 所有条件满足': status === 'pending' && this.isTeamLeader && !this.isFromCustomerService,
  '---详细信息---': '',
  '用户角色': this.currentUser?.get('roleName'),
  'canEdit': this.canEdit,
  'data.deliveryApprovalStatus': data.deliveryApprovalStatus,
  'data.approvalHistory': data.approvalHistory?.length || 0
});

审批逻辑一致性

  • 审批按钮显示条件:status === 'pending' && isTeamLeader && !isFromCustomerService
  • isTeamLeader 判定:仅通过 URL 参数 roleName=team-leader 判定
  • isFromCustomerService 判定:从 localStorage 读取客服端标记
  • 清除冲突标记:进入组长模式时清除客服端标记

3. 模板对齐 (stage-delivery.component.html)

审批按钮条件渲染

确保审批按钮的显示条件与订单阶段完全一致:

@if (getDeliveryApprovalStatus() === 'pending' && isTeamLeader && !isFromCustomerService) {
  <div class="leader-approval-bar">
    <div class="approval-buttons-container">
      <button class="btn-approve" (click)="approveDelivery()" [disabled]="saving">
        <span class="btn-icon">✅</span>
        <span class="btn-text">通过审批</span>
      </button>
      <button class="btn-reject" (click)="rejectDelivery()" [disabled]="saving">
        <span class="btn-icon">❌</span>
        <span class="btn-text">驳回交付</span>
      </button>
    </div>
  </div>
}

4. 组长看板导航逻辑 (dashboard.ts)

动态阶段导航

已实现三个导航方法的动态阶段路由:

  1. viewProjectDetails(projectId) - 主要项目详情入口
  2. onProjectTimelineClick(projectId) - 时间线点击入口
  3. navigateToProjectFromPanel(projectId) - 从员工面板进入

所有方法都包含以下逻辑:

// 阶段映射:项目阶段 → 路由路径
const stageRouteMap: Record<string, string> = {
  '订单分配': 'order',
  '确认需求': 'requirements',
  '方案深化': 'requirements',
  '建模': 'requirements',
  '软装': 'requirements',
  '渲染': 'requirements',
  '后期': 'requirements',
  '交付执行': 'delivery',
  '交付': 'delivery',
  '售后归档': 'aftercare',
  '已完成': 'aftercare'
};

const stagePath = stageRouteMap[currentStage] || 'order';

// ✅ 跳转到对应阶段,并通过查询参数标识为组长视角
this.router.navigate(['/wxwork', cid, 'project', projectId, stagePath], {
  queryParams: { roleName: 'team-leader' }
});

🎯 关键特性

URL 参数优先原则

  • 只要 URL 包含 ?roleName=team-leader,就显示审批按钮
  • 不再依赖用户实际角色,避免角色判断复杂性
  • 简化逻辑,提高可维护性

localStorage 冲突处理

  • 进入组长模式时,自动清除客服端标记
  • 确保不会出现"既是组长又是客服"的状态冲突

调试友好

  • 添加详细的 console.log 输出
  • 便于排查审批按钮显示/隐藏问题

🔍 测试验证点

1. 组长端进入 ✅

  • URL: http://localhost:4200/wxwork/cDL6R1hgSi/project/{projectId}/delivery?roleName=team-leader
  • 预期:显示审批按钮(通过审批 + 驳回交付)
  • 状态横幅:显示 "等待组长审批"

2. 客服端进入 ✅

  • URL: http://localhost:4200/wxwork/cDL6R1hgSi/project/{projectId}/delivery(无 roleName 参数)
  • 预期:隐藏审批按钮
  • 只显示状态横幅和文件管理

3. 动态阶段导航 ✅

  • 从组长看板点击项目
  • 预期:根据项目当前阶段跳转到对应页面
  • 例如:项目处于"交付执行"阶段 → 跳转到 /delivery 路由

4. 样式一致性 ✅

  • 审批按钮位置:居中显示
  • 审批按钮样式:渐变背景 + 悬停效果
  • 状态横幅:颜色、圆角、字体与订单阶段一致

📝 相关文件清单

修改的文件

  1. yss-project/src/modules/project/pages/project-detail/stages/stage-delivery.component.scss

    • 审批状态横幅样式对齐
    • 审批按钮样式完全匹配订单阶段
  2. yss-project/src/modules/project/pages/project-detail/stages/stage-delivery.component.ts

    • 添加调试日志到 getDeliveryApprovalStatus()
    • 确保审批逻辑与订单阶段一致
  3. yss-project/src/modules/project/pages/project-detail/stages/stage-delivery.component.html

    • 审批按钮条件渲染与订单阶段保持一致
    • 之前已移除审批历史部分

已确认无需修改的文件

  1. yss-project/src/app/pages/team-leader/dashboard/dashboard.ts
    • 已包含完整的动态阶段导航逻辑
    • 所有三个导航方法都已更新

🎨 视觉效果对比

订单分配阶段(Order Stage)

  • ✅ 审批状态横幅:渐变背景 + 2px 边框
  • ✅ 审批按钮:紫色渐变(通过)+ 粉红渐变(驳回)
  • ✅ 居中显示,20px 间距

交付执行阶段(Delivery Stage)

  • ✅ 审批状态横幅:完全相同的渐变背景 + 2px 边框
  • ✅ 审批按钮:完全相同的紫色渐变(通过)+ 粉红渐变(驳回)
  • ✅ 居中显示,完全相同的 20px 间距

✨ 总结

本次修改确保了交付执行阶段的审批功能与订单分配阶段在以下方面完全一致:

  1. 逻辑一致性:URL 参数判定、localStorage 管理、条件渲染
  2. 样式一致性:颜色、间距、圆角、阴影、动画效果
  3. 用户体验一致性:按钮位置、交互反馈、调试友好
  4. 代码可维护性:清晰的注释、统一的命名规范

现在两个阶段的审批体验完全统一,用户在不同阶段的操作感受保持一致。