Ei kuvausta
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

document-list.component.html 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <div class="document-list-container">
  2. <div class="document-list-header">
  3. <mat-icon class="header-icon">folder_open</mat-icon>
  4. <h3 class="header-title">项目文档</h3>
  5. </div>
  6. <div class="document-items">
  7. @for (docType of documentTypeOrder; track docType) {
  8. @let doc = getDocumentByType(docType);
  9. @if (doc) {
  10. <div class="document-item" [class.has-content]="hasContent(doc)" [class.loading]="doc.isLoading">
  11. <!-- 文档标题区域 -->
  12. <div class="document-header" (click)="toggleDocument(docType)">
  13. <div class="document-icon-title">
  14. <mat-icon class="document-icon">{{ getIcon(docType) }}</mat-icon>
  15. <span class="document-title">{{ getDisplayName(docType) }}</span>
  16. @if (doc.isLoading) {
  17. <mat-spinner diameter="16" class="document-loading-spinner"></mat-spinner>
  18. }
  19. </div>
  20. <div class="document-actions">
  21. @if (hasContent(doc)) {
  22. <span class="document-updated" matTooltip="最后更新时间">
  23. {{ getLastUpdatedText(doc) }}
  24. </span>
  25. }
  26. <mat-icon class="expand-icon">
  27. {{ expandedStates[docType] ? 'expand_less' : 'expand_more' }}
  28. </mat-icon>
  29. </div>
  30. </div>
  31. <!-- 文档内容区域(可折叠) -->
  32. @if (expandedStates[docType]) {
  33. <div class="document-content">
  34. @if (hasContent(doc)) {
  35. <div class="document-content-inner" [innerHTML]="doc.content | markdown"></div>
  36. } @else {
  37. <div class="document-empty">
  38. <mat-icon>inbox</mat-icon>
  39. <p>暂无内容</p>
  40. @if (doc.isLoading) {
  41. <p class="loading-text">正在加载中...</p>
  42. }
  43. </div>
  44. }
  45. </div>
  46. } @else {
  47. <!-- 折叠状态下的预览 -->
  48. @if (hasContent(doc)) {
  49. <div class="document-preview">
  50. <span class="preview-text">{{ getContentPreview(doc.content) }}</span>
  51. </div>
  52. }
  53. }
  54. </div>
  55. } @else {
  56. <!-- 文档不存在的情况 -->
  57. <div class="document-item empty">
  58. <div class="document-header">
  59. <div class="document-icon-title">
  60. <mat-icon class="document-icon">{{ getIcon(docType) }}</mat-icon>
  61. <span class="document-title">{{ getDisplayName(docType) }}</span>
  62. </div>
  63. <div class="document-status">
  64. <span class="status-text">未创建</span>
  65. </div>
  66. </div>
  67. </div>
  68. }
  69. }
  70. </div>
  71. </div>