common.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. // 选项类型
  2. export const optionTypeList = [
  3. { value: 'letter', label: '字母' },
  4. { value: 'number', label: '数字' },
  5. { value: 'capital', label: '大写字母' },
  6. { value: 'bracket_number', label: '括号数字' },
  7. ];
  8. // 计算选项方法
  9. export const computeOptionMethods = {
  10. [optionTypeList[0].value]: (i) => `${String.fromCharCode(97 + i)}.`,
  11. [optionTypeList[1].value]: (i) => `${i + 1}.`,
  12. [optionTypeList[2].value]: (i) => `${String.fromCharCode(65 + i)}.`,
  13. [optionTypeList[3].value]: (i) => `(${i + 1})`,
  14. };
  15. /**
  16. * 改变选项类型
  17. * @param {object} data 数据
  18. */
  19. export function changeOptionType(data) {
  20. let index = optionTypeList.findIndex(({ value }) => value === data.option_number_show_mode);
  21. data.option_number_show_mode = optionTypeList[index + 1]?.value || optionTypeList[0].value;
  22. }
  23. /**
  24. * 计算选项题号
  25. * @param {Number} i 序号
  26. * @param {String} option_number_show_mode 选项类型
  27. * @returns String 题号
  28. */
  29. export function computedQuestionNumber(i, option_number_show_mode) {
  30. const computationMethod = computeOptionMethods[option_number_show_mode];
  31. if (computationMethod) {
  32. return computationMethod(i);
  33. }
  34. return '';
  35. }
  36. // 题干类型
  37. export const stemTypeList = [
  38. { value: 'text', label: '纯文本' },
  39. { value: 'rich', label: '富文本' },
  40. ];
  41. // 分值类型
  42. export const scoreTypeList = [
  43. { value: 'aggregate', label: '总分' },
  44. { value: 'subdivision', label: '细分' },
  45. ];
  46. // 选择类型
  47. export const selectTypeList = [
  48. { value: 'single', label: '单选' },
  49. { value: 'multiple', label: '多选' },
  50. ];
  51. // 开关选项
  52. export const switchOption = [
  53. { value: 'true', label: '开启' },
  54. { value: 'false', label: '关闭' },
  55. ];
  56. // 字体大小列表
  57. export const fontSizeList = [
  58. '8pt',
  59. '10pt',
  60. '11pt',
  61. '12pt',
  62. '14pt',
  63. '16pt',
  64. '18pt',
  65. '20pt',
  66. '22pt',
  67. '24pt',
  68. '26pt',
  69. '28pt',
  70. '30pt',
  71. '32pt',
  72. '34pt',
  73. '36pt',
  74. ];
  75. /**
  76. * 是否开启
  77. * @param {String} value 值
  78. * @returns Boolean
  79. */
  80. export function isEnable(value) {
  81. return value === switchOption[0].value;
  82. }
  83. // 题号类型
  84. export const questionNumberTypeList = [
  85. { value: 'recalculate', label: '重新计算' },
  86. { value: 'follow', label: '跟随上题' },
  87. ];
  88. export const svgNS = 'http://www.w3.org/2000/svg'; // SVG命名空间
  89. export const tone_data = [
  90. ['ā', 'á', 'ǎ', 'à', 'a'],
  91. ['ō', 'ó', 'ǒ', 'ò', 'o'],
  92. ['ē', 'é', 'ě', 'è', 'e'],
  93. ['ī', 'í', 'ǐ', 'ì', 'i'],
  94. ['ū', 'ú', 'ǔ', 'ù', 'u'],
  95. ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü'],
  96. ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü'],
  97. ['Ā', 'Á', 'Â', 'À', 'A'],
  98. ['Ō', 'Ó', 'Ô', 'Ò', 'O'],
  99. ['Ē', 'É', 'Ê', 'È', 'E'],
  100. ['Ī', 'Í', 'Î', 'Ì', 'I'],
  101. ['Ū', 'Ú', 'Û', 'Ù', 'U'],
  102. ];
  103. /**
  104. * 添加声调
  105. * @param {Number} number
  106. * @param {String} con
  107. * @returns String
  108. */
  109. export function addTone(number, con) {
  110. const zmList = ['a', 'o', 'e', 'i', 'u', 'v', 'ü', 'A', 'O', 'E', 'I', 'U'];
  111. let cons = con;
  112. if (number) {
  113. for (let i = 0; i < zmList.length; i++) {
  114. let zm = zmList[i];
  115. if (con.includes(zm)) {
  116. let zm2 = tone_data[i][number - 1];
  117. if (con.includes('iu')) {
  118. zm2 = tone_data[4][number - 1];
  119. cons = con.replace('u', zm2);
  120. } else if (con.includes('ui')) {
  121. zm2 = tone_data[3][number - 1];
  122. cons = con.replace('i', zm2);
  123. } else if (/yv|jv|qv|xv/.test(con)) {
  124. zm2 = tone_data[4][number - 1];
  125. cons = con.replace('v', zm2);
  126. } else if (/yü|jü|qü|xü/.test(con)) {
  127. zm2 = tone_data[4][number - 1];
  128. cons = con.replace('ü', zm2);
  129. } else {
  130. cons = con.replace(zm, zm2);
  131. }
  132. break;
  133. }
  134. }
  135. }
  136. return cons;
  137. }
  138. /**
  139. * 输入框输入小于0的返回0 且为整数
  140. * @param {number|string} number
  141. */
  142. export function handleInputNumber(number) {
  143. const number_int = Number(number);
  144. return number_int > 0 ? Math.floor(number_int) : 1;
  145. }