|
@@ -61,37 +61,40 @@
|
|
|
|
|
|
<!-- 项目看板 - 横向展开10个项目阶段 -->
|
|
<!-- 项目看板 - 横向展开10个项目阶段 -->
|
|
<div class="project-kanban">
|
|
<div class="project-kanban">
|
|
- <!-- 阶段标题 -->
|
|
|
|
- <div class="kanban-header">
|
|
|
|
- <div class="kanban-column-header" *ngFor="let stage of projectStages">
|
|
|
|
- <h3>{{ stage.name }}</h3>
|
|
|
|
- <span class="stage-count">{{ getProjectCountByStage(stage.id) }}</span>
|
|
|
|
|
|
+ <!-- 新增:公共横向滚动容器,保证表头与表体同步滚动 -->
|
|
|
|
+ <div class="kanban-scroll">
|
|
|
|
+ <!-- 阶段标题 -->
|
|
|
|
+ <div class="kanban-header">
|
|
|
|
+ <div class="kanban-column-header" *ngFor="let stage of projectStages">
|
|
|
|
+ <h3>{{ stage.name }}</h3>
|
|
|
|
+ <span class="stage-count">{{ getProjectCountByStage(stage.id) }}</span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <!-- 项目卡片 -->
|
|
|
|
- <div class="kanban-body">
|
|
|
|
- <div class="kanban-column" *ngFor="let stage of projectStages">
|
|
|
|
- <div *ngFor="let project of getProjectsByStage(stage.id)"
|
|
|
|
- class="project-card"
|
|
|
|
- [class.overdue]="project.isOverdue"
|
|
|
|
- [class.high-urgency]="project.urgency === 'high'">
|
|
|
|
- <div class="project-card-header">
|
|
|
|
- <h4 [routerLink]="['/team-leader/project-review', project.id]">{{ project.name }}</h4>
|
|
|
|
- <span class="project-urgency" [class]="'urgency-' + project.urgency">{{ getUrgencyLabel(project.urgency) }}</span>
|
|
|
|
|
|
+ <!-- 项目卡片 -->
|
|
|
|
+ <div class="kanban-body">
|
|
|
|
+ <div class="kanban-column" *ngFor="let stage of projectStages">
|
|
|
|
+ <div *ngFor="let project of getProjectsByStage(stage.id)"
|
|
|
|
+ class="project-card"
|
|
|
|
+ [class.overdue]="project.isOverdue"
|
|
|
|
+ [class.high-urgency]="project.urgency === 'high'">
|
|
|
|
+ <div class="project-card-header">
|
|
|
|
+ <h4 [routerLink]="['/team-leader/project-review', project.id]">{{ project.name }}</h4>
|
|
|
|
+ <span class="project-urgency" [class]="'urgency-' + project.urgency">{{ getUrgencyLabel(project.urgency) }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="project-card-content">
|
|
|
|
+ <p>负责人: {{ project.designerName }}</p>
|
|
|
|
+ <p class="deadline">{{ project.isOverdue ? '超期' + project.overdueDays + '天' : '截止: ' + (project.expectedEndDate | date:'MM-dd') }}</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="project-card-footer">
|
|
|
|
+ <button (click)="viewProjectDetails(project.id)" class="btn-view">查看详情</button>
|
|
|
|
+ <button (click)="quickAssignProject(project.id)" *ngIf="stage.id === 'pendingAssignment'" class="btn-assign">分配</button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div class="project-card-content">
|
|
|
|
- <p>负责人: {{ project.designerName }}</p>
|
|
|
|
- <p class="deadline">{{ project.isOverdue ? '超期' + project.overdueDays + '天' : '截止: ' + (project.expectedEndDate | date:'MM-dd') }}</p>
|
|
|
|
|
|
+ <!-- 空状态 -->
|
|
|
|
+ <div *ngIf="getProjectsByStage(stage.id).length === 0" class="empty-column">
|
|
|
|
+ <span class="empty-icon">📦</span>
|
|
|
|
+ <p>暂无项目</p>
|
|
</div>
|
|
</div>
|
|
- <div class="project-card-footer">
|
|
|
|
- <button (click)="viewProjectDetails(project.id)" class="btn-view">查看详情</button>
|
|
|
|
- <button (click)="quickAssignProject(project.id)" *ngIf="stage.id === 'pendingAssignment'" class="btn-assign">分配</button>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <!-- 空状态 -->
|
|
|
|
- <div *ngIf="getProjectsByStage(stage.id).length === 0" class="empty-column">
|
|
|
|
- <span class="empty-icon">📦</span>
|
|
|
|
- <p>暂无项目</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|