read-aloud-question.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <!-- 朗读题 -->
  3. <view class="readaloud-area">
  4. <view class="question_title">
  5. <text class="question_number">
  6. {{ questionNumberEndIsBracket(questionData.property.question_number) }}
  7. </text>
  8. <text class="question_stem" v-html="sanitizeHTML(questionData.stem)"
  9. :ref="'richText-1-1'+questionData.question_id"
  10. @longpress="previewByRichTextImg(-1,-1,questionData.question_id)"></text>
  11. </view>
  12. <AudioPlay v-if="isEnable(questionData.property.is_enable_listening) && questionData.file_list.length>0"
  13. :fileId="questionData.file_list[0].file_id" :showSlider="true" />
  14. <view class="description"
  15. v-if="isEnable(questionData.property.is_enable_description)&&questionData.description.length > 0"
  16. v-html="sanitizeHTML(questionData.description)" :ref="'richText-2-2'+questionData.question_id"
  17. @longpress="previewByRichTextImg(-2,-2,questionData.question_id)">
  18. </view>
  19. <view class="description" v-html="sanitizeHTML(questionData.text)" :ref="'richText-3-3'+questionData.question_id"
  20. @longpress="previewByRichTextImg(-3,-3,questionData.question_id)">
  21. </view>
  22. <view class="sound-record-area">
  23. <!-- 语音作答 -->
  24. <SoundRecord @setAudioId="setFileId" :disabled="answer_control[questionData.question_id].isReadOnly"
  25. :wav-blob.sync="questionData.user_answer[questionData.question_id].answer_list[0].voice_file_id">
  26. </SoundRecord>
  27. </view>
  28. </view>
  29. </template>
  30. <script>
  31. import {
  32. questionData,
  33. sanitizeHTML,
  34. isEnable,
  35. answer_control,
  36. } from '@/pages/answer_question/common/data/common.js';
  37. import SoundRecord from '@/components/sound-record/sound-record.vue';
  38. import AnswerControlMixin from '@/pages/answer_question/common/data/AnswerControlMixin.js';
  39. export default {
  40. name: "read-aloud-question",
  41. mixins: [AnswerControlMixin],
  42. components: {
  43. SoundRecord
  44. },
  45. props: {
  46. questionData: questionData
  47. },
  48. data() {
  49. return {
  50. sanitizeHTML,
  51. isEnable,
  52. answer_control,
  53. };
  54. },
  55. watch: {
  56. 'questionData.question_id': {
  57. handler(val) {
  58. this.commonComputedAnswerControl(val);
  59. this.questionData.user_answer[this.questionData.question_id].answer_list = [{
  60. voice_file_id: '', // 录音内容
  61. }]
  62. this.setUserAnswer();
  63. },
  64. immediate: true,
  65. deep: true
  66. }
  67. },
  68. methods: {
  69. //获取用户答案
  70. setUserAnswer: function() {
  71. var that = this;
  72. var callback = function() {
  73. that.$forceUpdate();
  74. }
  75. this.$emit("getUserAnswer", this.questionData.question_id, callback);
  76. },
  77. //异步更新声音ID有问题,所以采用方法手动赋值
  78. setFileId(fileId) {
  79. this.questionData.user_answer[this.questionData.question_id].isEdit = true;
  80. this.$forceUpdate();
  81. }
  82. },
  83. }
  84. </script>
  85. <style lang="scss" scoped>
  86. .readaloud-area {
  87. /deep/ img {
  88. width: auto;
  89. height: auto;
  90. max-width: 300px;
  91. max-height: 300px;
  92. }
  93. .sound-record-area {
  94. height: 240rpx;
  95. .sound-record-wrapper {
  96. width: 88%;
  97. position: absolute;
  98. bottom: 134rpx;
  99. padding: 32rpx 0;
  100. background-color: #ffffff;
  101. }
  102. }
  103. }
  104. </style>