在项目详情页面的右下角添加停滞期和改图期的状态标记,方便组员和组长实时了解项目状态。
markedAt、markedBy)修改内容:
cancelStagnation() 方法cancelModification() 方法(备用)getReasonText() 方法关键代码:
// 停滞期状态
get isStalled(): boolean {
const data = this.project?.get('data') || {};
return data.isStalled === true;
}
// 改图期状态
get isModification(): boolean {
const data = this.project?.get('data') || {};
return data.isModification === true;
}
// 取消停滞期
async cancelStagnation() {
const data = this.project.get('data') || {};
data.isStalled = false;
data.stagnationReasonType = undefined;
data.stagnationCustomReason = undefined;
// ... 清除其他字段
await this.project.save();
}
修改内容:
关键代码:
<!-- 停滞期和改图期状态标记(右下角) -->
<div class="project-status-badges">
<!-- 停滞期标记 -->
@if (isStalled) {
<div class="status-badge stalled" (click)="cancelStagnation()">
<div class="badge-icon">⏸️</div>
<div class="badge-content">
<div class="badge-title">停滞期</div>
<div class="badge-reason">{{ getReasonText('stagnation') }}</div>
</div>
<div class="badge-action">
<svg class="icon">...</svg>
</div>
</div>
}
<!-- 改图期标记 -->
@if (isModification) {
<div class="status-badge modification">
<div class="badge-icon">🎨</div>
<div class="badge-content">
<div class="badge-title">改图期</div>
<div class="badge-reason">{{ getReasonText('modification') }}</div>
</div>
<div class="badge-tip">上传图片后自动取消</div>
</div>
}
</div>
修改内容:
样式特点:
position: fixed; bottom: 80px; right: 16px;slideInRight)修改内容:
onFileUploaded() 方法中添加自动取消改图期的逻辑关键代码:
async onFileUploaded(event: { productId: string, deliveryType: string, fileCount: number }) {
if (event.fileCount > 0 && this.project) {
const projectData = this.project.get('data') || {};
// 🆕 检查是否处于改图期,如果是则自动取消改图期标记
if (projectData.isModification === true) {
console.log('🎨 [改图期] 检测到项目处于改图期,上传文件后自动取消改图期标记');
// 清除改图期相关字段
projectData.isModification = false;
projectData.modificationReasonType = undefined;
projectData.modificationCustomReason = undefined;
console.log('✅ [改图期] 改图期标记已自动取消');
}
this.project.set('data', projectData);
// ...
}
}
{
isStalled: boolean, // 是否处于停滞期
stagnationReasonType: 'designer' | 'customer' | 'custom', // 停滞原因类型
stagnationCustomReason: string, // 自定义停滞原因
estimatedResumeDate: Date, // 预计恢复时间
reasonNotes: string, // 备注说明
markedAt: Date, // 标记时间
markedBy: string // 标记人
}
{
isModification: boolean, // 是否处于改图期
modificationReasonType: 'designer' | 'customer' | 'custom', // 改图原因类型
modificationCustomReason: string, // 自定义改图原因
reasonNotes: string, // 备注说明
markedAt: Date, // 标记时间
markedBy: string // 标记人
}
┌──────────────────────────────────┐
│ ⏸️ 停滞期 ❌ │
│ 客户原因 │
│ 张三 标记 │
└──────────────────────────────────┘
↑紫色边框,可点击取消
┌──────────────────────────────────┐
│ 🎨 改图期 │
│ 客户要求改图 │
│ 李四 标记 │
│ 上传图片后自动取消 │
└──────────────────────────────────┘
↑橙色边框,显示提示
Project.data.isStalled 等字段isStalled 设为 false,清除相关字段Project.data.isModification 等字段isModification 设为 false,清除相关字段改图期标记会在以下情况下自动取消:
实现位置:stage-delivery.component.ts 的 onFileUploaded() 方法
Project.data 字段中之前的实现中存在数据未保存到数据库的问题:
updateProjectMarkStatus 只更新内存数组,没有调用 project.save()notifyTeamLeaderForApproval 保存,如果通知失败则不会保存文件:src/app/pages/team-leader/dashboard/dashboard.ts
修改内容:
updateProjectMarkStatus 改为异步方法data 字段并调用 save()onStagnationReasonConfirm 改为异步方法,添加错误处理markEventAsStagnant 和 markEventAsModification 改为异步方法关键代码:
private async updateProjectMarkStatus(projectId: string, type: 'stagnation' | 'modification', reason: any): Promise<void> {
// 更新内存中的项目数据
this.projects = this.projects.map(project => { ... });
// 🆕 保存到Parse数据库
const Parse = (window as any).Parse;
const query = new Parse.Query('Project');
const project = await query.get(projectId);
const projectData = project.get('data') || {};
// 设置停滞期/改图期相关字段
projectData.isStalled = true; // 或 isModification
// ... 其他字段
project.set('data', projectData);
await project.save();
console.log(`✅ [数据库] 标记已保存到数据库`, projectId);
}
文件:src/modules/project/pages/project-detail/stages/stage-delivery.component.ts
修改内容:
onFileUploaded 方法中,如果取消了改图期,立即调用 this.project.save()notifyTeamLeaderForApproval 的保存关键代码:
async onFileUploaded(event: { productId: string, deliveryType: string, fileCount: number }) {
const projectData = this.project.get('data') || {};
// 检查是否处于改图期
let modificationCancelled = false;
if (projectData.isModification === true) {
projectData.isModification = false;
projectData.modificationReasonType = undefined;
projectData.modificationCustomReason = undefined;
modificationCancelled = true;
}
this.project.set('data', projectData);
// 🆕 立即保存到数据库
if (modificationCancelled) {
try {
await this.project.save();
console.log('✅ [改图期] 改图期标记已保存到数据库');
} catch (saveError) {
console.error('❌ [改图期] 保存改图期取消失败:', saveError);
}
}
await this.notifyTeamLeaderForApproval(event.fileCount, event.deliveryType);
}
src/app/models/project.model.tssrc/app/pages/team-leader/services/designer-workload.service.tssrc/app/pages/team-leader/services/urgent-event.service.ts实现日期:2024年12月 实现人员:AI Assistant 功能状态:✅ 已完成并可用