AnswerControlMixin.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. const AnswerControlMixin = {
  2. props: {},
  3. data() {
  4. return {
  5. answer_comparison: {
  6. answer_list: []
  7. },
  8. // answer_control: {},
  9. };
  10. },
  11. methods: {
  12. /**
  13. * 显示答案
  14. * @param {Boolean} isJudgeAnswer 是否判断对错
  15. * @param {Boolean} isViewRightAnswer 是否显示正确答案
  16. * @param {Boolean} isReadOnly 是否只读
  17. */
  18. showAnswer(isJudgeAnswer, isViewRightAnswer, isReadOnly, question_id, answer_comparison, is_objective) {
  19. this.answer_control[question_id] = {
  20. isJudgeAnswer: isJudgeAnswer,
  21. isViewRightAnswer: isViewRightAnswer,
  22. isReadOnly: isReadOnly,
  23. is_objective: is_objective
  24. };
  25. this.question_id = question_id;
  26. if (answer_comparison) this.answer_comparison = answer_comparison;
  27. this.$forceUpdate();
  28. },
  29. //初始化控制
  30. commonComputedAnswerControl(question_id) {
  31. var cur = this.answer_control[question_id];
  32. if (!cur) {
  33. this.answer_control[question_id] = {
  34. isJudgeAnswer: false, //是否判断答案
  35. isViewRightAnswer: false, //是否显示标准答案
  36. isReadOnly: false, //是否只读
  37. is_objective: true, //是否客观题
  38. };
  39. cur = this.answer_control[question_id];
  40. }
  41. return cur;
  42. },
  43. //初始化整个答题控制
  44. initAnswerControl() {
  45. for (const key in this.answer_control) {
  46. this.answer_control[key] = {
  47. isJudgeAnswer: false,
  48. isViewRightAnswer: false,
  49. isReadOnly: false,
  50. is_objective: true,
  51. };
  52. }
  53. },
  54. /**
  55. * 题目序号以括号结尾,如果不是则加上 '.'
  56. * @param {题目序号} question_number
  57. * @returns {题目序号}
  58. */
  59. questionNumberEndIsBracket(question_number) {
  60. return question_number ? (
  61. `${question_number}${/[()()]/.test(question_number) ? '' :(/[一二三四五六七八九十]+/.test(question_number) ? '、' :'.')}`
  62. ) : '';
  63. },
  64. /**
  65. * 预览图片
  66. * @param {图片地址} url
  67. */
  68. preview(url) {
  69. uni.previewImage({
  70. current: url,
  71. urls: [url],
  72. });
  73. },
  74. /**
  75. * 预览富文本里面的图片(连线题,朗读题等调用这个)
  76. * @param {索引,定位富文本元素} i,j
  77. */
  78. previewByRichTextImg(i, j, question_id) {
  79. var _richText = 'richText' + i + j + question_id;
  80. if ('sort' === i && 'sort' === j) {
  81. _richText = question_id; //排序题特殊处理(这里question_id实际为mark)
  82. };
  83. let html = '';
  84. if (i < 0 && j < 0) {
  85. html = this.$refs[_richText].$el.innerHTML;
  86. } else {
  87. html = this.$refs[_richText][0].$el.innerHTML;
  88. }
  89. const srcReg = /<img.*?src=["']?(.*?)["'\s]/g;
  90. const results = [...html.matchAll(srcReg)];
  91. if (!results) return;
  92. const srcList = results.map(result => result[1]);
  93. if (!srcList) return;
  94. if (srcList.length > 1) {
  95. uni.previewImage({
  96. current: 0,
  97. urls: srcList,
  98. });
  99. } else {
  100. this.preview(srcList[0]);
  101. }
  102. },
  103. },
  104. };
  105. export default AnswerControlMixin;