# 🧪 交付执行阶段测试标记功能使用指南
## 📋 功能概述
为了方便测试交付执行阶段的审批流程,我们添加了一个**开发测试功能**,允许组长端快速将交付执行标记为"待审批"状态,无需实际完成提交流程。
## ✨ 功能特点
1. **仅组长端显示**:只有通过 `?roleName=team-leader` 参数进入的组长视图才会显示测试按钮
2. **智能显示**:只在交付执行状态**不是**待审批时显示测试按钮
3. **一键标记**:点击按钮即可快速设置为待审批状态
4. **清除记录**:自动清除之前的审批记录,确保干净的测试环境
5. **视觉明显**:橙色虚线边框,清晰标识为测试功能
## 🎯 使用场景
### 场景 1:首次测试审批流程
当项目刚进入交付执行阶段,还没有提交审批时:
1. 从组长看板进入项目交付执行阶段
2. 点击 "🧪 测试:标记为待审批" 按钮
3. 确认操作
4. 页面自动刷新,显示审批按钮
### 场景 2:重置审批状态重新测试
当已经测试过一次审批(通过或驳回)后,想要重新测试:
1. 从组长看板进入项目交付执行阶段
2. 看到测试标记按钮(此时审批状态不是 pending)
3. 点击按钮重新标记为待审批
4. 再次测试审批流程
## 📍 访问方式
### 方式 1:从组长看板进入(推荐)
```
1. 访问组长看板:http://localhost:4200/wxwork/cDL6R1hgSi/team-leader/dashboard
2. 点击任意项目(会自动添加 ?roleName=team-leader 参数)
3. 如果项目当前阶段是"交付执行",会直接跳转到交付执行页面
4. 看到测试标记按钮
```
### 方式 2:直接URL访问
```
http://localhost:4200/wxwork/cDL6R1hgSi/project/{projectId}/delivery?roleName=team-leader
```
例如:
```
http://localhost:4200/wxwork/cDL6R1hgSi/project/iKvYck89zE/delivery?roleName=team-leader
```
## 🖼️ 界面展示
### 显示测试按钮时
```
┌────────────────────────────────────────────┐
│ ⏳ 等待组长审批 │
│ 交付执行已提交,正在等待组长审核批准 │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ 🧪 测试:标记为待审批 │
│ │
│ 💡 仅开发测试使用,快速将交付执行 │
│ 标记为"待审批"状态 │
└────────────────────────────────────────────┘
```
### 标记为待审批后
```
┌────────────────────────────────────────────┐
│ ⏳ 等待组长审批 │
│ 交付执行已提交,正在等待组长审核批准 │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ ✅ 通过审批 ❌ 驳回交付 │
└────────────────────────────────────────────┘
```
## 🔧 技术实现
### HTML 模板
```html
@if (isTeamLeader && !isFromCustomerService && getDeliveryApprovalStatus() !== 'pending') {
仅开发测试使用,快速将交付执行标记为"待审批"状态
}
```
### TypeScript 逻辑
```typescript
async markDeliveryAsPending(): Promise {
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();
}
}
```
### SCSS 样式
```scss
.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` 字段:
### 设置的字段
```javascript
{
deliveryApprovalStatus: 'pending', // 标记为待审批
testMarkedAt: '2024-01-01T12:00:00.000Z', // 测试标记时间
testMarkedBy: '张三' // 测试标记人
}
```
### 清除的字段
```javascript
{
deliveryApprovedBy: undefined, // 清除审批人
deliveryApprovedByName: undefined,
deliveryApprovedAt: undefined,
deliveryRejectedBy: undefined, // 清除驳回人
deliveryRejectedByName: undefined,
deliveryRejectedAt: undefined,
deliveryRejectionReason: undefined // 清除驳回原因
}
```
## ⚠️ 注意事项
1. **仅开发测试使用**:此功能是为了方便开发测试,不应在生产环境中使用
2. **组长端专属**:只有组长端才会显示此按钮,客服端不会看到
3. **会清除记录**:点击测试按钮会清除之前的审批记录
4. **需要确认**:点击按钮会弹出确认对话框,防止误操作
5. **自动刷新**:标记成功后会自动刷新页面数据
## 🧪 完整测试流程
### 1. 准备工作
```bash
# 确保项目正在运行
npm start
# 访问组长看板
http://localhost:4200/wxwork/cDL6R1hgSi/team-leader/dashboard
```
### 2. 选择测试项目
- 选择一个处于"交付执行"阶段的项目
- 或者选择任意项目,手动跳转到交付执行页面
### 3. 标记为待审批
1. 看到橙色虚线边框的测试区域
2. 点击 "🧪 测试:标记为待审批" 按钮
3. 在确认对话框中点击"确定"
4. 等待成功提示
### 4. 测试审批流程
**通过审批:**
1. 看到紫色渐变的"✅ 通过审批"按钮
2. 点击按钮
3. 查看状态变为"已通过"
**驳回交付:**
1. 看到粉色渐变的"❌ 驳回交付"按钮
2. 点击按钮
3. 输入驳回原因
4. 查看状态变为"已驳回"
### 5. 重新测试
1. 刷新页面或重新进入
2. 再次看到测试标记按钮
3. 重复步骤 3-4
## 📊 控制台日志
操作过程中会输出详细的控制台日志:
```javascript
// 点击测试按钮时
🧪 开始标记交付执行为待审批...
// 标记成功时
✅ 交付执行已标记为待审批
// 显示条件检查时
🔍 【交付执行审批按钮显示条件检查】 {
条件1_审批状态: 'pending',
条件1_是否pending: true,
条件2_isTeamLeader: true,
条件3_isFromCustomerService: false,
条件3_非客服入口: true,
✅ 所有条件满足: true,
// ... 更多详细信息
}
```
## 🎨 视觉效果
### 测试按钮样式
- **背景**:橙色渐变 `linear-gradient(135deg, #ffa500, #ff8c00)`
- **边框**:2px 虚线橙色边框
- **图标**:🧪 测试管图标
- **悬停**:向上移动 2px + 阴影增强
- **宽度**:最大 300px,居中显示
### 与审批按钮的区别
| 特征 | 测试按钮 | 审批按钮 |
|------|---------|---------|
| 颜色 | 橙色系 | 紫色/粉色 |
| 边框 | 虚线 | 无边框 |
| 背景 | 浅黄色 | 灰蓝色渐变 |
| 位置 | 审批按钮下方 | 审批状态横幅下方 |
| 宽度 | 300px | 160px × 2 |
## 🚀 快速开始
只需三步即可开始测试:
```bash
1. 打开浏览器访问:
http://localhost:4200/wxwork/cDL6R1hgSi/team-leader/dashboard
2. 点击任意项目,确保 URL 包含 ?roleName=team-leader
3. 如果看到橙色测试按钮,点击即可开始测试!
```
## ✅ 验收标准
功能正常工作的标志:
- ✅ 组长端能看到橙色测试按钮
- ✅ 客服端看不到测试按钮
- ✅ 点击测试按钮后显示审批按钮
- ✅ 审批按钮功能正常(通过/驳回)
- ✅ 审批后测试按钮重新出现
- ✅ 控制台日志输出正常
## 🎉 总结
这个测试标记功能大大简化了交付执行阶段的审批流程测试,让开发人员可以快速验证审批功能是否正常工作,无需完成复杂的提交流程。只需一键点击,即可进入审批测试状态!