PreviewMixin.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // 预览混入
  2. import AudioPlay from '@/views/exercise_questions/create/components/common/AudioPlay.vue';
  3. import DOMPurify from 'dompurify';
  4. import { isEnable } from '@/views/exercise_questions/data/common';
  5. const PreviewMixin = {
  6. props: {
  7. data: {
  8. type: Object,
  9. required: true,
  10. },
  11. },
  12. components: {
  13. AudioPlay,
  14. },
  15. data() {
  16. return {
  17. isEnable,
  18. answer: { answer_list: [] }, // 答案
  19. isJudgingRightWrong: false, // 是否判断对错
  20. isShowRightAnswer: false, // 是否显示正确答案
  21. disabled: false, // 是否禁用
  22. };
  23. },
  24. watch: {
  25. answer: {
  26. handler() {
  27. this.$emit('change', this.answer);
  28. },
  29. deep: true,
  30. immediate: true,
  31. },
  32. },
  33. methods: {
  34. /**
  35. * 获取答案
  36. * @returns {Array} 答案
  37. */
  38. getAnswer() {
  39. return this.answer;
  40. },
  41. /**
  42. * 显示答案
  43. * @param {Boolean} isJudgingRightWrong 是否判断对错
  44. * @param {Boolean} isShowRightAnswer 是否显示正确答案
  45. * @param {Object} userAnswer 用户答案
  46. * @param {Boolean} disabled 是否禁用
  47. */
  48. showAnswer(isJudgingRightWrong, isShowRightAnswer, userAnswer, disabled) {
  49. this.isJudgingRightWrong = isJudgingRightWrong;
  50. this.isShowRightAnswer = isShowRightAnswer;
  51. this.disabled = disabled;
  52. if (userAnswer) this.answer = userAnswer;
  53. },
  54. /**
  55. * 题号是否有括号,如果没有则再判断是否有中文数字,如果有则加上 '、' 没有加上 '.'
  56. * @param {string} question_number 题目序号
  57. * @returns {string} 题目序号
  58. */
  59. questionNumberEndIsBracket(question_number) {
  60. if (question_number.length <= 0) return '';
  61. return `${question_number}${/[()()]/.test(question_number) ? '' : /[一二三四五六七八九十百]/.test(question_number) ? '、' : '.'}`;
  62. },
  63. /**
  64. * 过滤 html,防止 xss 攻击
  65. * @param {string} html 需要过滤的html
  66. * @returns {string} 过滤后的html
  67. */
  68. sanitizeHTML(html) {
  69. return DOMPurify.sanitize(html);
  70. },
  71. },
  72. };
  73. export default PreviewMixin;