page-question-bank.html 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <div class="question-bank-container">
  2. <!-- 分类列表视图 -->
  3. <div class="categories-view" *ngIf="!selectedCategory && !showAnalysis">
  4. <div class="search-box">
  5. <input
  6. type="text"
  7. [(ngModel)]="searchTerm"
  8. placeholder="搜索面试问题...">
  9. <fa-icon [icon]="icons.search"></fa-icon>
  10. </div>
  11. <div class="categories-list">
  12. <div
  13. class="category-card"
  14. *ngFor="let category of filteredCategories"
  15. (click)="selectCategory(category)">
  16. <div class="category-header">
  17. <fa-icon [icon]="icons.book"></fa-icon>
  18. <h3>{{category.name}}</h3>
  19. </div>
  20. <div class="question-count">
  21. {{category.questions.length}}个问题
  22. </div>
  23. <fa-icon [icon]="icons.arrowRight"></fa-icon>
  24. </div>
  25. </div>
  26. </div>
  27. <!-- 问题列表视图 -->
  28. <div class="questions-view" *ngIf="selectedCategory && !showAnalysis">
  29. <div class="back-btn" (click)="backToCategories()">
  30. <fa-icon [icon]="icons.arrowRight" class="back-icon"></fa-icon>
  31. 返回分类
  32. </div>
  33. <h2>{{selectedCategory.name}}问题</h2>
  34. <div class="questions-list">
  35. <div
  36. class="question-item"
  37. *ngFor="let question of selectedCategory.questions"
  38. (click)="currentQuestion = question">
  39. {{question}}
  40. </div>
  41. </div>
  42. </div>
  43. <!-- 问题回答视图 -->
  44. <div class="answer-view" *ngIf="currentQuestion && !showAnalysis">
  45. <div class="back-btn" (click)="currentQuestion = ''">
  46. <fa-icon [icon]="icons.arrowRight" class="back-icon"></fa-icon>
  47. 返回问题列表
  48. </div>
  49. <div class="question-card">
  50. <h3>问题:</h3>
  51. <p>{{currentQuestion}}</p>
  52. </div>
  53. <div class="answer-section">
  54. <h3>您的回答:</h3>
  55. <textarea [(ngModel)]="userAnswer" placeholder="输入或录制您的回答..."></textarea>
  56. <div class="voice-controls">
  57. <button
  58. class="voice-btn"
  59. (mousedown)="startRecording()"
  60. (mouseup)="isRecording = false"
  61. [class.active]="isRecording">
  62. <fa-icon [icon]="icons.mic"></fa-icon>
  63. 按住录音
  64. </button>
  65. <button class="play-btn" (click)="speakQuestion()">
  66. <fa-icon [icon]="icons.play"></fa-icon>
  67. 播放问题
  68. </button>
  69. </div>
  70. <button class="submit-btn" (click)="submitAnswer()">
  71. <fa-icon [icon]="icons.check"></fa-icon>
  72. 提交分析
  73. </button>
  74. </div>
  75. </div>
  76. <!-- 分析报告视图 -->
  77. <div class="analysis-view" *ngIf="showAnalysis">
  78. <div class="back-btn" (click)="showAnalysis = false">
  79. <fa-icon [icon]="icons.arrowRight" class="back-icon"></fa-icon>
  80. 返回
  81. </div>
  82. <h2>回答分析报告</h2>
  83. <div class="analysis-card">
  84. <div class="question-section">
  85. <h3>问题:</h3>
  86. <p>{{analysisResult.question}}</p>
  87. </div>
  88. <div class="answer-section">
  89. <h3>您的回答:</h3>
  90. <p>{{analysisResult.answer}}</p>
  91. </div>
  92. <div class="score-section">
  93. <h3>评估分数:</h3>
  94. <div class="score-metrics">
  95. <div class="metric">
  96. <div class="metric-name">相关性</div>
  97. <div class="metric-bar">
  98. <div
  99. class="metric-fill"
  100. [style.width.%]="analysisResult.scores.relevance">
  101. {{analysisResult.scores.relevance}}%
  102. </div>
  103. </div>
  104. </div>
  105. <div class="metric">
  106. <div class="metric-name">清晰度</div>
  107. <div class="metric-bar">
  108. <div
  109. class="metric-fill"
  110. [style.width.%]="analysisResult.scores.clarity">
  111. {{analysisResult.scores.clarity}}%
  112. </div>
  113. </div>
  114. </div>
  115. <div class="metric">
  116. <div class="metric-name">深度</div>
  117. <div class="metric-bar">
  118. <div
  119. class="metric-fill"
  120. [style.width.%]="analysisResult.scores.depth">
  121. {{analysisResult.scores.depth}}%
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. <div class="feedback-section">
  128. <h3>反馈建议:</h3>
  129. <p>{{analysisResult.feedback}}</p>
  130. <div class="suggestions">
  131. <h4>改进建议:</h4>
  132. <ul>
  133. <li *ngFor="let suggestion of analysisResult.suggestions">{{suggestion}}</li>
  134. </ul>
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. </div>