| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | <div class="header">  <div class="toolbar">    <!-- <div class="buttons-start">      <button class="back-button" (click)="goBack()">        <svg class="icon" viewBox="0 0 512 512">          <path fill="currentColor" d="M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48zm35.31 292.69a16 16 0 11-22.62 22.62l-96-96a16 16 0 010-22.62l96-96a16 16 0 0122.62 22.62L206.63 256z"/>        </svg>      </button>    </div> -->    <div class="title">{{ project?.get('title') || '项目详情' }}</div>    <!-- <div class="buttons-end">      <button class="icon-button">        <svg class="icon" viewBox="0 0 512 512">          <path fill="currentColor" d="M256 176a32 32 0 11-32 32 32 32 0 0132-32zM256 80a32 32 0 11-32 32 32 32 0 0132-32zM256 272a32 32 0 11-32 32 32 32 0 0132-32z"/>        </svg>      </button>    </div> -->  </div>  <!-- 四阶段导航 -->  <div class="stage-toolbar">    <div class="stage-navigation">      @for (stage of stages; track stage.id) {        <div          class="stage-item"          [class.completed]="getStageStatus(stage.id) === 'completed'"          [class.active]="getStageStatus(stage.id) === 'active'"          [class.pending]="getStageStatus(stage.id) === 'pending'"          (click)="switchStage(stage.id)">          <div class="stage-circle">            @if (getStageStatus(stage.id) === 'completed') {              <svg class="icon" viewBox="0 0 512 512">                <path fill="currentColor" d="M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192z" opacity=".3"/>                <path fill="currentColor" d="M352 176L217.6 336 160 272"/>              </svg>            } @else {              <span>{{ stage.number }}</span>            }          </div>          <div class="stage-label">{{ stage.name }}</div>        </div>        @if (!$last) {          <div class="stage-connector" [class.completed]="getStageStatus(stage.id) === 'completed'"></div>        }      }    </div>  </div></div><div class="content">  <!-- 加载中 -->  @if (loading) {    <div class="loading-container">      <div class="spinner">        <div class="spinner-circle"></div>      </div>      <p>加载项目信息...</p>    </div>  }  <!-- 错误 -->  @if (error && !loading) {    <div class="error-container">      <svg class="icon error-icon" viewBox="0 0 512 512">        <path fill="currentColor" d="M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm0 319.91a20 20 0 1120-20 20 20 0 01-20 20zm21.72-201.15l-5.74 122a16 16 0 01-32 0l-5.74-121.94v-.05a21.74 21.74 0 1143.44 0z"/>      </svg>      <p>{{ error }}</p>      <button class="button outline" (click)="loadData()">重试</button>    </div>  }  <!-- 项目详情内容 -->  @if (!loading && !error && project) {    <!-- 客户信息快速查看卡片 -->    <div class="customer-quick-view">      <div class="card">        <div class="card-content">          <div class="customer-info">            <div class="avatar">              @if (customer?.get('data')?.avatar) {                <img [src]="customer?.get('data')?.avatar" alt="客户头像" />              } @else {                <svg class="icon avatar-icon" viewBox="0 0 512 512">                  <path fill="currentColor" d="M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm0 60a60 60 0 11-60 60 60 60 0 0160-60zm0 336c-63.6 0-119.92-36.47-146.39-89.68C109.74 329.09 176.24 296 256 296s146.26 33.09 146.39 58.32C376.92 407.53 319.6 444 256 444z"/>                </svg>              }            </div>            <div class="info-text">              <h3>{{ customer?.get('name') || '待设置' }}</h3>              @if (canViewCustomerPhone) {                <p>{{ customer?.get('mobile') }}</p>              }              <div class="tags">                <span class="badge badge-primary">{{ customer?.get('source') }}</span>                <span class="badge" [class.badge-success]="project.get('status') === '进行中'" [class.badge-warning]="project.get('status') !== '进行中'">                  {{ project.get('status') }}                </span>              </div>            </div>          </div>        </div>      </div>    </div>    <!-- 子路由内容(各阶段组件) -->    <div class="stage-content">      <router-outlet></router-outlet>    </div>  }</div>
 |