|  | @@ -1,46 +1,46 @@
 | 
	
		
			
				|  |  |  <!-- 项目详情页面内容 -->
 | 
	
		
			
				|  |  | -<div class="project-detail-container">
 | 
	
		
			
				|  |  | +<div class="project-detail-container ios-style">
 | 
	
		
			
				|  |  |    <!-- 顶部导航/Header -->
 | 
	
		
			
				|  |  | -  <header class="project-header-blue">
 | 
	
		
			
				|  |  | -    <div class="header-content">
 | 
	
		
			
				|  |  | -      <div class="project-info">
 | 
	
		
			
				|  |  | -        <h1 class="project-title">{{ project()?.name || '现代简约风格三居室设计' }}</h1>
 | 
	
		
			
				|  |  | -        <div class="project-meta">
 | 
	
		
			
				|  |  | -          <span class="project-status {{ getProjectStatusClass(project()?.status) }}">
 | 
	
		
			
				|  |  | -            {{ project()?.status || '进行中' }}
 | 
	
		
			
				|  |  | -          </span>
 | 
	
		
			
				|  |  | -          <span class="project-stage">当前阶段:{{ project()?.currentStage || '方案修改与确认' }}</span>
 | 
	
		
			
				|  |  | -          <span class="project-date">最后更新:{{ formatDate(currentDate()) }}</span>
 | 
	
		
			
				|  |  | +    <header class="project-header ios-header">
 | 
	
		
			
				|  |  | +      <div class="header-content">
 | 
	
		
			
				|  |  | +        <div class="project-info">
 | 
	
		
			
				|  |  | +          <h1 class="project-title">{{ project()?.name || '现代简约风格三居室设计' }}</h1>
 | 
	
		
			
				|  |  | +          <div class="project-meta">
 | 
	
		
			
				|  |  | +            <span class="project-status {{ getProjectStatusClass(project()?.status) }}">
 | 
	
		
			
				|  |  | +              {{ project()?.status || '进行中' }}
 | 
	
		
			
				|  |  | +            </span>
 | 
	
		
			
				|  |  | +            <span class="project-stage">当前阶段:{{ project()?.currentStage || '方案修改与确认' }}</span>
 | 
	
		
			
				|  |  | +            <span class="project-date">最后更新:{{ formatDate(currentDate()) }}</span>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div class="header-actions">
 | 
	
		
			
				|  |  | +          <button class="secondary-btn btn-hover-effect">
 | 
	
		
			
				|  |  | +            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | +              <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
 | 
	
		
			
				|  |  | +              <polyline points="14 2 14 8 20 8"></polyline>
 | 
	
		
			
				|  |  | +              <line x1="16" y1="13" x2="8" y2="13"></line>
 | 
	
		
			
				|  |  | +              <line x1="16" y1="17" x2="8" y2="17"></line>
 | 
	
		
			
				|  |  | +              <polyline points="10 9 9 9 8 9"></polyline>
 | 
	
		
			
				|  |  | +            </svg>
 | 
	
		
			
				|  |  | +            <span>导出报告</span>
 | 
	
		
			
				|  |  | +          </button>
 | 
	
		
			
				|  |  | +          <button class="primary-btn btn-hover-effect">
 | 
	
		
			
				|  |  | +            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | +              <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
 | 
	
		
			
				|  |  | +              <polyline points="22 4 12 14.01 9 11.01"></polyline>
 | 
	
		
			
				|  |  | +            </svg>
 | 
	
		
			
				|  |  | +            <span>联系客户</span>
 | 
	
		
			
				|  |  | +          </button>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  | -      <div class="header-actions">
 | 
	
		
			
				|  |  | -        <button class="secondary-btn">
 | 
	
		
			
				|  |  | -          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -            <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
 | 
	
		
			
				|  |  | -            <polyline points="14 2 14 8 20 8"></polyline>
 | 
	
		
			
				|  |  | -            <line x1="16" y1="13" x2="8" y2="13"></line>
 | 
	
		
			
				|  |  | -            <line x1="16" y1="17" x2="8" y2="17"></line>
 | 
	
		
			
				|  |  | -            <polyline points="10 9 9 9 8 9"></polyline>
 | 
	
		
			
				|  |  | -          </svg>
 | 
	
		
			
				|  |  | -          <span>导出报告</span>
 | 
	
		
			
				|  |  | -        </button>
 | 
	
		
			
				|  |  | -        <button class="primary-btn">
 | 
	
		
			
				|  |  | -          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -            <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
 | 
	
		
			
				|  |  | -            <polyline points="22 4 12 14.01 9 11.01"></polyline>
 | 
	
		
			
				|  |  | -          </svg>
 | 
	
		
			
				|  |  | -          <span>联系客户</span>
 | 
	
		
			
				|  |  | -        </button>
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -    </div>
 | 
	
		
			
				|  |  | -  </header>
 | 
	
		
			
				|  |  | +    </header>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    <!-- 主要内容区域 -->
 | 
	
		
			
				|  |  | -  <div class="main-content-area">
 | 
	
		
			
				|  |  | +  <div class="main-content-area ios-content">
 | 
	
		
			
				|  |  |      <!-- 主内容区 (居中) -->
 | 
	
		
			
				|  |  | -    <div class="project-content-main">
 | 
	
		
			
				|  |  | +    <div class="project-content-main ios-main">
 | 
	
		
			
				|  |  |        <!-- 项目进度卡片 -->
 | 
	
		
			
				|  |  | -      <div class="progress-card">
 | 
	
		
			
				|  |  | +      <div class="card progress-card">
 | 
	
		
			
				|  |  |          <div class="progress-header">
 | 
	
		
			
				|  |  |            <h3>项目进度</h3>
 | 
	
		
			
				|  |  |            <span class="progress-percentage">{{ completionProgress() }}%</span>
 | 
	
	
		
			
				|  | @@ -53,9 +53,60 @@
 | 
	
		
			
				|  |  |            <span>预计完成:{{ formatDate(project()?.deadline || '2023-07-15') }}</span>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      <!-- 历史服务记录 -->
 | 
	
		
			
				|  |  | +      <div class="card historical-records-card">
 | 
	
		
			
				|  |  | +        <div class="records-header">
 | 
	
		
			
				|  |  | +          <h3>历史服务记录</h3>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        <!-- 过往咨询记录 -->
 | 
	
		
			
				|  |  | +        <div class="record-section">
 | 
	
		
			
				|  |  | +          <h4>过往咨询记录</h4>
 | 
	
		
			
				|  |  | +          <div class="consultation-list">
 | 
	
		
			
				|  |  | +            <div class="consultation-item" *ngFor="let record of consultationRecords()">
 | 
	
		
			
				|  |  | +              <div class="consultation-date">{{ formatDate(record.date) }}</div>
 | 
	
		
			
				|  |  | +              <div class="consultation-content">{{ record.content }}</div>
 | 
	
		
			
				|  |  | +              <div class="consultation-status">{{ record.status }}</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        <!-- 合作项目 -->
 | 
	
		
			
				|  |  | +        <div class="record-section">
 | 
	
		
			
				|  |  | +          <h4>合作项目</h4>
 | 
	
		
			
				|  |  | +          <div class="projects-list">
 | 
	
		
			
				|  |  | +            <div class="project-item" *ngFor="let proj of cooperationProjects()">
 | 
	
		
			
				|  |  | +              <div class="project-name">{{ proj.name }}</div>
 | 
	
		
			
				|  |  | +              <div class="project-period">{{ formatDate(proj.startDate) }} - {{ formatDate(proj.endDate) }}</div>
 | 
	
		
			
				|  |  | +              <div class="project-description">{{ proj.description }}</div>
 | 
	
		
			
				|  |  | +              <div class="project-status">{{ proj.status }}</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        <!-- 历史反馈/评价 -->
 | 
	
		
			
				|  |  | +        <div class="record-section">
 | 
	
		
			
				|  |  | +          <h4>历史反馈/评价</h4>
 | 
	
		
			
				|  |  | +          <div class="feedback-list">
 | 
	
		
			
				|  |  | +            <div class="feedback-item" *ngFor="let feedback of historicalFeedbacks()">
 | 
	
		
			
				|  |  | +              <div class="feedback-date">{{ formatDate(feedback.date) }}</div>
 | 
	
		
			
				|  |  | +              <div class="feedback-rating">
 | 
	
		
			
				|  |  | +                <span *ngFor="let star of [1,2,3,4,5]">
 | 
	
		
			
				|  |  | +                  <i class="fa" [ngClass]="{ 'fa-star': star <= feedback.rating, 'fa-star-o': star > feedback.rating }" style="color: #FFD700;"></i>
 | 
	
		
			
				|  |  | +                </span>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class="feedback-content">{{ feedback.content }}</div>
 | 
	
		
			
				|  |  | +              <div class="feedback-response" *ngIf="feedback.response">
 | 
	
		
			
				|  |  | +                <strong>回复:</strong>{{ feedback.response }}
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <!-- 进度时间轴 -->
 | 
	
		
			
				|  |  | -      <div class="timeline-card">
 | 
	
		
			
				|  |  | +      <div class="card timeline-card">
 | 
	
		
			
				|  |  |          <h3 class="card-title">项目阶段时间轴</h3>
 | 
	
		
			
				|  |  |          <div class="project-timeline">
 | 
	
		
			
				|  |  |            <div *ngFor="let stage of projectStages; index as i" class="timeline-item" [class.stage-completed]="stage.completed" [class.stage-in-progress]="stage.inProgress">
 | 
	
	
		
			
				|  | @@ -90,87 +141,33 @@
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <!-- 项目详情标签页 -->
 | 
	
		
			
				|  |  | -      <div class="project-tabs">
 | 
	
		
			
				|  |  | -        <div class="tab-header">
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'overview'" (click)="switchTab('overview')">
 | 
	
		
			
				|  |  | -            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -              <path d="M5 12h14M12 5l7 7-7 7"></path>
 | 
	
		
			
				|  |  | -            </svg>
 | 
	
		
			
				|  |  | -            <span>概览</span>
 | 
	
		
			
				|  |  | -          </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'milestones'" (click)="switchTab('milestones')">
 | 
	
		
			
				|  |  | -            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -              <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>
 | 
	
		
			
				|  |  | -            </svg>
 | 
	
		
			
				|  |  | -            <span>里程碑</span>
 | 
	
		
			
				|  |  | -          </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'tasks'" (click)="switchTab('tasks')">
 | 
	
		
			
				|  |  | -            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -              <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>
 | 
	
		
			
				|  |  | -            </svg>
 | 
	
		
			
				|  |  | -            <span>任务</span>
 | 
	
		
			
				|  |  | -          </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'messages'" (click)="switchTab('messages')">
 | 
	
		
			
				|  |  | -            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -              <path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path>
 | 
	
		
			
				|  |  | -            </svg>
 | 
	
		
			
				|  |  | -            <span>消息</span>
 | 
	
		
			
				|  |  | -          </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'files'" (click)="switchTab('files')">
 | 
	
		
			
				|  |  | -            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  | -              <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
 | 
	
		
			
				|  |  | -              <polyline points="14 2 14 8 20 8"></polyline>
 | 
	
		
			
				|  |  | -              <line x1="16" y1="13" x2="8" y2="13"></line>
 | 
	
		
			
				|  |  | -              <line x1="16" y1="17" x2="8" y2="17"></line>
 | 
	
		
			
				|  |  | -              <polyline points="10 9 9 9 8 9"></polyline>
 | 
	
		
			
				|  |  | -            </svg>
 | 
	
		
			
				|  |  | -            <span>文件</span>
 | 
	
		
			
				|  |  | -          </button>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      <!-- 项目进度卡片 -->
 | 
	
		
			
				|  |  | -      <div class="progress-card">
 | 
	
		
			
				|  |  | -        <div class="progress-header">
 | 
	
		
			
				|  |  | -          <h3>项目进度</h3>
 | 
	
		
			
				|  |  | -          <span class="progress-percentage">{{ completionProgress() }}%</span>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -        <div class="progress-bar">
 | 
	
		
			
				|  |  | -          <div class="progress-fill" [style.width]="progressFillWidth()"></div>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -        <div class="progress-meta">
 | 
	
		
			
				|  |  | -          <span>开始时间:{{ formatDate(project()?.createdAt || '2023-06-01') }}</span>
 | 
	
		
			
				|  |  | -          <span>预计完成:{{ formatDate(project()?.deadline || '2023-07-15') }}</span>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      <!-- 项目详情标签页 -->
 | 
	
		
			
				|  |  | -      <div class="project-tabs">
 | 
	
		
			
				|  |  | +      <div class="project-tabs ios-tabs">
 | 
	
		
			
				|  |  |          <div class="tab-header">
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'overview'" (click)="switchTab('overview')">
 | 
	
		
			
				|  |  | +          <button class="tab-btn btn-hover-effect" [class.active]="activeTab() === 'overview'" (click)="switchTab('overview')">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <path d="M5 12h14M12 5l7 7-7 7"></path>
 | 
	
		
			
				|  |  |              </svg>
 | 
	
		
			
				|  |  |              <span>概览</span>
 | 
	
		
			
				|  |  |            </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'milestones'" (click)="switchTab('milestones')">
 | 
	
		
			
				|  |  | +          <button class="tab-btn btn-hover-effect" [class.active]="activeTab() === 'milestones'" (click)="switchTab('milestones')">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>
 | 
	
		
			
				|  |  |              </svg>
 | 
	
		
			
				|  |  |              <span>里程碑</span>
 | 
	
		
			
				|  |  |            </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'tasks'" (click)="switchTab('tasks')">
 | 
	
		
			
				|  |  | +          <button class="tab-btn btn-hover-effect" [class.active]="activeTab() === 'tasks'" (click)="switchTab('tasks')">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>
 | 
	
		
			
				|  |  |              </svg>
 | 
	
		
			
				|  |  |              <span>任务</span>
 | 
	
		
			
				|  |  |            </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'messages'" (click)="switchTab('messages')">
 | 
	
		
			
				|  |  | +          <button class="tab-btn btn-hover-effect" [class.active]="activeTab() === 'messages'" (click)="switchTab('messages')">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path>
 | 
	
		
			
				|  |  |              </svg>
 | 
	
		
			
				|  |  |              <span>消息</span>
 | 
	
		
			
				|  |  |            </button>
 | 
	
		
			
				|  |  | -          <button class="tab-btn" [class.active]="activeTab() === 'files'" (click)="switchTab('files')">
 | 
	
		
			
				|  |  | +          <button class="tab-btn btn-hover-effect" [class.active]="activeTab() === 'files'" (click)="switchTab('files')">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
 | 
	
		
			
				|  |  |                <polyline points="14 2 14 8 20 8"></polyline>
 | 
	
	
		
			
				|  | @@ -182,14 +179,24 @@
 | 
	
		
			
				|  |  |            </button>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <!-- 消息标签内容 - 只保留一个消息输入区域 -->
 | 
	
		
			
				|  |  | +        <!-- 消息标签内容 -->
 | 
	
		
			
				|  |  |          <div *ngIf="activeTab() === 'messages'" class="tab-content">
 | 
	
		
			
				|  |  |            <div class="messages-container">
 | 
	
		
			
				|  |  |              <div class="messages-list">
 | 
	
		
			
				|  |  | -              <!-- 消息列表内容保持不变 -->
 | 
	
		
			
				|  |  | +              <div *ngFor="let message of messages()" class="message-item">
 | 
	
		
			
				|  |  | +                <div class="message-avatar">
 | 
	
		
			
				|  |  | +                  {{ message.sender.charAt(0) }}
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div class="message-content">
 | 
	
		
			
				|  |  | +                  <div class="message-header">
 | 
	
		
			
				|  |  | +                    <span class="message-sender">{{ message.sender }}</span>
 | 
	
		
			
				|  |  | +                    <span class="message-time">{{ formatDateTime(message.timestamp) }}</span>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                  <div class="message-text">{{ message.content }}</div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |              <div class="message-input-area">
 | 
	
		
			
				|  |  | -              <!-- 只使用单向绑定 + input事件,移除双向绑定 -->
 | 
	
		
			
				|  |  |                <textarea 
 | 
	
		
			
				|  |  |                  [value]="newMessage()"
 | 
	
		
			
				|  |  |                  (input)="onMessageInput($event)"
 | 
	
	
		
			
				|  | @@ -199,14 +206,14 @@
 | 
	
		
			
				|  |  |                  (keydown.enter)="sendMessage()"
 | 
	
		
			
				|  |  |                ></textarea>
 | 
	
		
			
				|  |  |                <div class="message-actions">
 | 
	
		
			
				|  |  | -                <button class="secondary-btn">
 | 
	
		
			
				|  |  | +                <button class="secondary-btn btn-hover-effect">
 | 
	
		
			
				|  |  |                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                      <path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"></path>
 | 
	
		
			
				|  |  |                      <polyline points="14 2 14 8 20 8"></polyline>
 | 
	
		
			
				|  |  |                    </svg>
 | 
	
		
			
				|  |  |                    <span>上传文件</span>
 | 
	
		
			
				|  |  |                  </button>
 | 
	
		
			
				|  |  | -                <button class="primary-btn" (click)="sendMessage()" [disabled]="!newMessage().trim()">
 | 
	
		
			
				|  |  | +                <button class="primary-btn btn-hover-effect" (click)="sendMessage()" [disabled]="!newMessage().trim()">
 | 
	
		
			
				|  |  |                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                      <line x1="22" y1="2" x2="11" y2="13"></line>
 | 
	
		
			
				|  |  |                      <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
 | 
	
	
		
			
				|  | @@ -291,29 +298,6 @@
 | 
	
		
			
				|  |  |                <h4 class="card-title">客户反馈</h4>
 | 
	
		
			
				|  |  |                <div class="feedback-list">
 | 
	
		
			
				|  |  |                  <div *ngFor="let feedback of feedbacks()" class="feedback-item">
 | 
	
		
			
				|  |  | -                  <!-- 修改前 -->
 | 
	
		
			
				|  |  | -                  <div class="feedback-item">
 | 
	
		
			
				|  |  | -                    <div class="feedback-header">
 | 
	
		
			
				|  |  | -                      <div class="feedback-author">{{ feedback?.customerName || '未知客户' }}</div>
 | 
	
		
			
				|  |  | -                      <div class="feedback-rating">
 | 
	
		
			
				|  |  | -                        <span class="rating-stars">★★★★☆</span>
 | 
	
		
			
				|  |  | -                        <span class="rating-number">{{ feedback?.rating || 0 }}.0</span>
 | 
	
		
			
				|  |  | -                      </div>
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                    <div class="feedback-content">{{ feedback?.content || '' }}</div>
 | 
	
		
			
				|  |  | -                    <div class="feedback-response" *ngIf="feedback?.response">
 | 
	
		
			
				|  |  | -                      <div class="response-label">客服回复:</div>
 | 
	
		
			
				|  |  | -                      <div class="response-text">{{ feedback.response }}</div>
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                    <div class="feedback-meta">
 | 
	
		
			
				|  |  | -                      <span class="feedback-date">{{ formatDate(feedback?.createdAt) }}</span>
 | 
	
		
			
				|  |  | -                      <span class="feedback-status" [class.status-processed]="feedback?.status === '已解决'" [class.status-pending]="feedback?.status === '待处理'">
 | 
	
		
			
				|  |  | -                        {{ feedback?.status || '未知状态' }}
 | 
	
		
			
				|  |  | -                      </span>
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                  </div>
 | 
	
		
			
				|  |  | -                  
 | 
	
		
			
				|  |  | -                  <!-- 修改后 -->
 | 
	
		
			
				|  |  |                    <div class="feedback-item">
 | 
	
		
			
				|  |  |                      <div class="feedback-header">
 | 
	
		
			
				|  |  |                        <div class="feedback-author">{{ getFeedbackCustomerName(feedback) }}</div>
 | 
	
	
		
			
				|  | @@ -334,7 +318,8 @@
 | 
	
		
			
				|  |  |                        </span>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                    </div>
 | 
	
		
			
				|  |  | -                  <button class="view-all-btn" *ngIf="feedbacks().length > 0">查看全部反馈</button>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <button class="view-all-btn btn-hover-effect" *ngIf="feedbacks().length > 0">查看全部反馈</button>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            </div>
 | 
	
	
		
			
				|  | @@ -365,7 +350,7 @@
 | 
	
		
			
				|  |  |                    </div>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |                  <div class="milestone-actions" *ngIf="!milestone.isCompleted">
 | 
	
		
			
				|  |  | -                  <button class="primary-btn small" (click)="completeMilestone(milestone.id)">
 | 
	
		
			
				|  |  | +                  <button class="primary-btn small btn-hover-effect" (click)="completeMilestone(milestone.id)">
 | 
	
		
			
				|  |  |                      <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                        <polyline points="20 6 9 17 4 12"></polyline>
 | 
	
		
			
				|  |  |                      </svg>
 | 
	
	
		
			
				|  | @@ -514,12 +499,12 @@
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  |                <div class="file-actions">
 | 
	
		
			
				|  |  | -                <button class="action-btn" (click)="previewFile(file)" title="预览">
 | 
	
		
			
				|  |  | +                <button class="action-btn btn-hover-effect" (click)="previewFile(file)" title="预览">
 | 
	
		
			
				|  |  |                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                      <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
 | 
	
		
			
				|  |  |                    </svg>
 | 
	
		
			
				|  |  |                  </button>
 | 
	
		
			
				|  |  | -                <button class="action-btn" (click)="downloadFile(file)" title="下载">
 | 
	
		
			
				|  |  | +                <button class="action-btn btn-hover-effect" (click)="downloadFile(file)" title="下载">
 | 
	
		
			
				|  |  |                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                      <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
 | 
	
		
			
				|  |  |                      <polyline points="7 10 12 15 17 10"></polyline>
 | 
	
	
		
			
				|  | @@ -534,7 +519,7 @@
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <!-- 右侧边栏 - 企业微信聊天集成 -->
 | 
	
		
			
				|  |  | -    <div class="wechat-sidebar">
 | 
	
		
			
				|  |  | +    <div class="wechat-sidebar ios-sidebar">
 | 
	
		
			
				|  |  |        <div class="wechat-header">
 | 
	
		
			
				|  |  |          <h3>项目群聊</h3>
 | 
	
		
			
				|  |  |          <div class="wechat-actions">
 | 
	
	
		
			
				|  | @@ -572,14 +557,14 @@
 | 
	
		
			
				|  |  |        <!-- 消息输入框 -->
 | 
	
		
			
				|  |  |        <div class="wechat-input-area">
 | 
	
		
			
				|  |  |          <div class="input-actions">
 | 
	
		
			
				|  |  | -          <button class="action-btn">
 | 
	
		
			
				|  |  | +          <button class="action-btn btn-hover-effect">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>
 | 
	
		
			
				|  |  |                <circle cx="8.5" cy="8.5" r="1.5"></circle>
 | 
	
		
			
				|  |  |                <polyline points="21 15 16 10 5 21"></polyline>
 | 
	
		
			
				|  |  |              </svg>
 | 
	
		
			
				|  |  |            </button>
 | 
	
		
			
				|  |  | -          <button class="action-btn">
 | 
	
		
			
				|  |  | +          <button class="action-btn btn-hover-effect">
 | 
	
		
			
				|  |  |              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |                <path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"></path>
 | 
	
		
			
				|  |  |                <polyline points="14 2 14 8 20 8"></polyline>
 | 
	
	
		
			
				|  | @@ -593,7 +578,7 @@
 | 
	
		
			
				|  |  |            class="wechat-input"
 | 
	
		
			
				|  |  |            (keydown.enter)="sendWechatMessage()"
 | 
	
		
			
				|  |  |          />
 | 
	
		
			
				|  |  | -        <button class="send-btn" (click)="sendWechatMessage()" [disabled]="!wechatInput.trim()">
 | 
	
		
			
				|  |  | +        <button class="send-btn btn-hover-effect" (click)="sendWechatMessage()" [disabled]="!wechatInput.trim()">
 | 
	
		
			
				|  |  |            发送
 | 
	
		
			
				|  |  |          </button>
 | 
	
		
			
				|  |  |        </div>
 | 
	
	
		
			
				|  | @@ -601,16 +586,16 @@
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    <!-- 售后处理入口 (固定在底部) -->
 | 
	
		
			
				|  |  | -  <div class="after-sales-actions">
 | 
	
		
			
				|  |  | +  <div class="after-sales-actions ios-actions">
 | 
	
		
			
				|  |  |      <div class="actions-container">
 | 
	
		
			
				|  |  | -      <button class="action-btn primary" (click)="openModificationRequest()">
 | 
	
		
			
				|  |  | +      <button class="action-btn primary btn-hover-effect" (click)="openModificationRequest()">
 | 
	
		
			
				|  |  |          <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |            <path d="M12 20h9"></path>
 | 
	
		
			
				|  |  |            <path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"></path>
 | 
	
		
			
				|  |  |          </svg>
 | 
	
		
			
				|  |  |          <span>申请修改</span>
 | 
	
		
			
				|  |  |        </button>
 | 
	
		
			
				|  |  | -      <button class="action-btn warning" (click)="openComplaintWarning()">
 | 
	
		
			
				|  |  | +      <button class="action-btn warning btn-hover-effect" (click)="openComplaintWarning()">
 | 
	
		
			
				|  |  |          <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |            <path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>
 | 
	
		
			
				|  |  |            <line x1="12" y1="9" x2="12" y2="13"></line>
 | 
	
	
		
			
				|  | @@ -618,7 +603,7 @@
 | 
	
		
			
				|  |  |          </svg>
 | 
	
		
			
				|  |  |          <span>投诉预警</span>
 | 
	
		
			
				|  |  |        </button>
 | 
	
		
			
				|  |  | -      <button class="action-btn secondary" (click)="openRefundRequest()">
 | 
	
		
			
				|  |  | +      <button class="action-btn secondary btn-hover-effect" (click)="openRefundRequest()">
 | 
	
		
			
				|  |  |          <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
 | 
	
		
			
				|  |  |            <path d="M22 12h-4l-3 9L9 3l-3 9H2"></path>
 | 
	
		
			
				|  |  |          </svg>
 |