为了方便测试交付执行阶段的审批流程,我们添加了一个开发测试功能,允许组长端快速将交付执行标记为"待审批"状态,无需实际完成提交流程。
?roleName=team-leader 参数进入的组长视图才会显示测试按钮当项目刚进入交付执行阶段,还没有提交审批时:
当已经测试过一次审批(通过或驳回)后,想要重新测试:
1. 访问组长看板:http://localhost:4200/wxwork/cDL6R1hgSi/team-leader/dashboard
2. 点击任意项目(会自动添加 ?roleName=team-leader 参数)
3. 如果项目当前阶段是"交付执行",会直接跳转到交付执行页面
4. 看到测试标记按钮
http://localhost:4200/wxwork/cDL6R1hgSi/project/{projectId}/delivery?roleName=team-leader
例如:
http://localhost:4200/wxwork/cDL6R1hgSi/project/iKvYck89zE/delivery?roleName=team-leader
┌────────────────────────────────────────────┐
│ ⏳ 等待组长审批 │
│ 交付执行已提交,正在等待组长审核批准 │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ 🧪 测试:标记为待审批 │
│ │
│ 💡 仅开发测试使用,快速将交付执行 │
│ 标记为"待审批"状态 │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ ⏳ 等待组长审批 │
│ 交付执行已提交,正在等待组长审核批准 │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ ✅ 通过审批 ❌ 驳回交付 │
└────────────────────────────────────────────┘
<!-- 🧪 开发测试:组长端快速标记为待审批(仅组长视图显示) -->
@if (isTeamLeader && !isFromCustomerService && getDeliveryApprovalStatus() !== 'pending') {
<div class="test-mark-section">
<button class="btn-test-mark" (click)="markDeliveryAsPending()" [disabled]="saving">
<span class="test-icon">🧪</span>
<span class="test-text">测试:标记为待审批</span>
</button>
<p class="test-hint">仅开发测试使用,快速将交付执行标记为"待审批"状态</p>
</div>
}
async markDeliveryAsPending(): Promise<void> {
if (!this.project || !this.isTeamLeader) {
console.warn('❌ 无法标记:缺少项目或非组长权限');
return;
}
const confirmed = await window?.fmode?.confirm?.(
'🧪 测试功能\n\n' +
'这是一个开发测试功能,将会:\n' +
'1. 标记交付执行状态为"待审批"\n' +
'2. 清除之前的审批记录\n' +
'3. 显示审批按钮供测试\n\n' +
'是否继续?'
);
if (!confirmed) return;
try {
this.saving = true;
const data = this.project.get('data') || {};
// 设置为待审批状态
data.deliveryApprovalStatus = 'pending';
// 清除之前的审批记录
delete data.deliveryApprovedBy;
delete data.deliveryApprovedByName;
delete data.deliveryApprovedAt;
delete data.deliveryRejectedBy;
delete data.deliveryRejectedByName;
delete data.deliveryRejectedAt;
delete data.deliveryRejectionReason;
// 记录测试标记信息
data.testMarkedAt = new Date().toISOString();
data.testMarkedBy = this.currentUser?.get('name') || 'Unknown';
this.project.set('data', data);
await this.project.save();
window?.fmode?.toast?.success?.('✅ 已标记为待审批,现在可以测试审批功能了');
// 刷新页面数据
await this.loadApprovalHistory();
this.cdr.markForCheck();
} catch (error) {
console.error('❌ 标记失败:', error);
window?.fmode?.alert?.('标记失败,请检查控制台日志');
} finally {
this.saving = false;
this.cdr.markForCheck();
}
}
.test-mark-section {
margin: 20px 0;
padding: 16px 20px;
background: linear-gradient(135deg, #fff9e6, #fff3cc);
border: 2px dashed #ffa500;
border-radius: 12px;
animation: slideDown 0.3s ease-out;
.btn-test-mark {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
padding: 12px 24px;
background: linear-gradient(135deg, #ffa500, #ff8c00);
color: white;
border: none;
border-radius: 10px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(255, 165, 0, 0.3);
width: 100%;
max-width: 300px;
margin: 0 auto;
&:hover:not(:disabled) {
background: linear-gradient(135deg, #ff8c00, #ff7700);
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(255, 165, 0, 0.4);
}
}
.test-hint {
text-align: center;
margin: 12px 0 0;
font-size: 13px;
color: #cc8400;
line-height: 1.5;
&::before {
content: '💡 ';
}
}
}
测试按钮会在以下所有条件同时满足时显示:
| 条件 | 说明 | 检查方式 |
|---|---|---|
isTeamLeader |
必须是组长身份 | URL 包含 ?roleName=team-leader |
!isFromCustomerService |
不是从客服端进入 | localStorage 没有客服标记 |
getDeliveryApprovalStatus() !== 'pending' |
当前不是待审批状态 | 检查 data.deliveryApprovalStatus |
点击测试按钮后,会修改项目的 data 字段:
{
deliveryApprovalStatus: 'pending', // 标记为待审批
testMarkedAt: '2024-01-01T12:00:00.000Z', // 测试标记时间
testMarkedBy: '张三' // 测试标记人
}
{
deliveryApprovedBy: undefined, // 清除审批人
deliveryApprovedByName: undefined,
deliveryApprovedAt: undefined,
deliveryRejectedBy: undefined, // 清除驳回人
deliveryRejectedByName: undefined,
deliveryRejectedAt: undefined,
deliveryRejectionReason: undefined // 清除驳回原因
}
# 确保项目正在运行
npm start
# 访问组长看板
http://localhost:4200/wxwork/cDL6R1hgSi/team-leader/dashboard
通过审批:
驳回交付:
操作过程中会输出详细的控制台日志:
// 点击测试按钮时
🧪 开始标记交付执行为待审批...
// 标记成功时
✅ 交付执行已标记为待审批
// 显示条件检查时
🔍 【交付执行审批按钮显示条件检查】 {
条件1_审批状态: 'pending',
条件1_是否pending: true,
条件2_isTeamLeader: true,
条件3_isFromCustomerService: false,
条件3_非客服入口: true,
✅ 所有条件满足: true,
// ... 更多详细信息
}
linear-gradient(135deg, #ffa500, #ff8c00)| 特征 | 测试按钮 | 审批按钮 |
|---|---|---|
| 颜色 | 橙色系 | 紫色/粉色 |
| 边框 | 虚线 | 无边框 |
| 背景 | 浅黄色 | 灰蓝色渐变 |
| 位置 | 审批按钮下方 | 审批状态横幅下方 |
| 宽度 | 300px | 160px × 2 |
只需三步即可开始测试:
1. 打开浏览器访问:
http://localhost:4200/wxwork/cDL6R1hgSi/team-leader/dashboard
2. 点击任意项目,确保 URL 包含 ?roleName=team-leader
3. 如果看到橙色测试按钮,点击即可开始测试!
功能正常工作的标志:
这个测试标记功能大大简化了交付执行阶段的审批流程测试,让开发人员可以快速验证审批功能是否正常工作,无需完成复杂的提交流程。只需一键点击,即可进入审批测试状态!