matching.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { serialNumberTypeList, displayList, serialNumberPositionList } from '@/views/book/courseware/data/common';
  2. import { getRandomNumber } from '@/utils';
  3. /**
  4. * 获取连线题属性
  5. * @param {number} column_num 列数 2 ~ 3
  6. */
  7. export function getMatchingProperty(column_num = 2) {
  8. if (column_num !== 2 && column_num !== 3) {
  9. throw new Error('column_num must be 2 or 3');
  10. }
  11. return {
  12. serial_number: 1,
  13. sn_type: serialNumberTypeList[0].value,
  14. sn_position: serialNumberPositionList[3].value,
  15. sn_display_mode: displayList[0].value,
  16. serial_number_type_list: serialNumberTypeList.slice(0, column_num).map((item) => item.value),
  17. row_num: 2, // 行数
  18. column_num, // 列数 2 ~ 3
  19. };
  20. }
  21. export function getOptionItem() {
  22. return {
  23. content: '',
  24. mark: getRandomNumber(),
  25. };
  26. }
  27. /**
  28. * 获取连线题选项
  29. * @param {number} column_num 列数 2 ~ 3
  30. */
  31. export function getOption(column_num = 2) {
  32. if (column_num !== 2 && column_num !== 3) {
  33. throw new Error('column_num must be 2 or 3');
  34. }
  35. let option = [];
  36. for (let i = 0; i < column_num; i++) {
  37. option.push(getOptionItem());
  38. }
  39. return option;
  40. }
  41. export const svgNS = 'http://www.w3.org/2000/svg'; // SVG命名空间
  42. export function getMatchingData() {
  43. let option_list = [getOption(), getOption()];
  44. let answer_list = option_list.map((item) =>
  45. item.map(({ mark }, i) => {
  46. return i === 0 ? { mark } : { mark: '' };
  47. }),
  48. );
  49. return {
  50. type: 'matching',
  51. title: '连线',
  52. option_list,
  53. answer: {
  54. answer_list,
  55. },
  56. min_height: 120,
  57. min_width: 290,
  58. property: getMatchingProperty(),
  59. mind_map: {
  60. node_list: [{ name: '两行两列连线组件' }],
  61. },
  62. };
  63. }