matching.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import {
  2. serialNumberTypeList,
  3. displayList,
  4. serialNumberPositionList,
  5. pinyinPositionList,
  6. serialNumberStyleList,
  7. } from '@/views/book/courseware/data/common';
  8. import { getRandomNumber } from '@/utils';
  9. /**
  10. * 获取连线题属性
  11. * @param {number} column_num 列数 2 ~ 3
  12. */
  13. export function getMatchingProperty(column_num = 2) {
  14. if (column_num !== 2 && column_num !== 3) {
  15. throw new Error('column_num must be 2 or 3');
  16. }
  17. return {
  18. serial_number: 1,
  19. sn_type: serialNumberTypeList[0].value,
  20. sn_position: serialNumberPositionList[3].value,
  21. sn_display_mode: displayList[1].value,
  22. sn_style: serialNumberStyleList[0].value,
  23. sn_background_color: '#ea3232', // 序号背景色
  24. serial_number_type_list: serialNumberTypeList.slice(0, column_num).map((item) => item.value),
  25. row_num: 2, // 行数
  26. column_num, // 列数 2 ~ 3
  27. view_pinyin: 'false', // 显示拼音
  28. pinyin_position: pinyinPositionList[0].value,
  29. is_first_sentence_first_hz_pinyin_first_char_upper_case: displayList[0].value, // 句首大写
  30. };
  31. }
  32. export function getOptionItem() {
  33. return {
  34. content: '',
  35. mark: getRandomNumber(),
  36. multilingual: [], // 多语言
  37. paragraph_list: [], // 段落列表
  38. // 段落列表参数
  39. paragraph_list_parameter: {
  40. text: '',
  41. pinyin_proofread_word_list: [],
  42. },
  43. };
  44. }
  45. /**
  46. * 获取连线题选项
  47. * @param {number} column_num 列数 2 ~ 3
  48. */
  49. export function getOption(column_num = 2) {
  50. if (column_num !== 2 && column_num !== 3) {
  51. throw new Error('column_num must be 2 or 3');
  52. }
  53. let option = [];
  54. for (let i = 0; i < column_num; i++) {
  55. option.push(getOptionItem());
  56. }
  57. return option;
  58. }
  59. export const svgNS = 'http://www.w3.org/2000/svg'; // SVG命名空间
  60. export function getMatchingData() {
  61. let option_list = [getOption(), getOption()];
  62. let answer_list = option_list.map((item) =>
  63. item.map(({ mark }, i) => {
  64. return i === 0 ? { mark } : { mark: '' };
  65. }),
  66. );
  67. return {
  68. type: 'matching',
  69. title: '连线',
  70. option_list,
  71. answer: {
  72. answer_list,
  73. },
  74. min_height: 120,
  75. min_width: 290,
  76. property: getMatchingProperty(),
  77. mind_map: {
  78. node_list: [{ name: '两行两列连线组件' }],
  79. },
  80. answer_list: [], // 答案列表
  81. analysis_list: [], // 解析列表
  82. };
  83. }