index.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import { getMap, formatTreeData } from '@src/services/Tools';
  2. import main from './main';
  3. import course from './course';
  4. import tools from './tools';
  5. import error from './error';
  6. import note from './note';
  7. import answer from './answer';
  8. import report from './report';
  9. import data from './data';
  10. import collect from './collect';
  11. import order from './order';
  12. import message from './message';
  13. import { TextbookMinYear, CourseModule } from '../../../Constant';
  14. import { Main } from '../../stores/main';
  15. export default [main, course, tools, error, note, answer, report, data, collect, order, message];
  16. export function refreshQuestionType(compontent, subject, questionType, { all, needSentence, allSubject }) {
  17. return Main.getExercise().then(result => {
  18. const list = result.filter(row => (needSentence ? true : row.isExamination)).map(row => {
  19. row.title = `${row.titleZh}${row.titleEn}`;
  20. row.key = row.extend;
  21. return row;
  22. });
  23. const tree = formatTreeData(list, 'id', 'title', 'parentId');
  24. compontent.questionSubjectMap = getMap(tree, 'key', 'children');
  25. compontent.questionSubjectSelect = tree.filter(row => row.level === 1 && (allSubject ? true : row.children.length > 1));
  26. if (all) {
  27. compontent.questionSubjectSelect.forEach(row => {
  28. row.children.unshift({
  29. title: '全部',
  30. key: '',
  31. });
  32. });
  33. compontent.questionSubjectSelect.unshift({
  34. title: '全部',
  35. key: '',
  36. });
  37. }
  38. compontent.setState({
  39. questionSubjectSelect: compontent.questionSubjectSelect,
  40. questionSubjectMap: compontent.questionSubjectMap,
  41. });
  42. return {
  43. questionTypes: questionType || (subject ? compontent.questionSubjectMap[subject].map(row => row.key).filter(row => row) : null),
  44. };
  45. });
  46. }
  47. export function refreshStruct(compontent, questionTypes, module, one, two, { all, needTextbook, needPreview }) {
  48. switch (module) {
  49. case 'exercise':
  50. return Main.getExerciseAll().then(result => {
  51. const tmp = result.filter(row => row.level > 2).map(row => {
  52. row.title = `${row.titleZh}`;
  53. row.key = row.titleEn;
  54. return row;
  55. });
  56. const idsMap = getMap(tmp, 'id', 'key');
  57. const map = {};
  58. tmp.forEach(row => {
  59. if (!map[row.key]) {
  60. map[row.key] = {
  61. title: row.title,
  62. key: row.key,
  63. structIds: [],
  64. parentId: row.level > 3 ? idsMap[row.parentId] : null,
  65. questionTypes: [],
  66. };
  67. }
  68. const item = map[row.key];
  69. item.structIds.push(row.id);
  70. if (item.questionTypes.indexOf(row.extend) < 0) {
  71. item.questionTypes.push(row.extend);
  72. }
  73. });
  74. let list = Object.values(map);
  75. if (questionTypes && questionTypes.length > 0) {
  76. list = list.filter(row => row.questionTypes.filter((v) => questionTypes.indexOf(v) >= 0).length);
  77. }
  78. if (needPreview) {
  79. list.push({
  80. title: '预习作业',
  81. key: 'preview',
  82. id: 'preview',
  83. });
  84. CourseModule.forEach(row => {
  85. list.push({
  86. title: row.label,
  87. key: row.value,
  88. parentId: 'preview',
  89. });
  90. });
  91. }
  92. let courseModules = null;
  93. let structIds = null;
  94. if (one === 'preview') {
  95. if (!two) {
  96. courseModules = CourseModule.map(row => row.value);
  97. } else {
  98. courseModules = [two];
  99. }
  100. } else if (one) {
  101. const resultMap = getMap(list, 'key', 'structIds');
  102. if (!two) {
  103. structIds = resultMap[one];
  104. } else {
  105. structIds = resultMap[two];
  106. }
  107. }
  108. const tree = formatTreeData(list, 'key', 'title', 'parentId');
  109. const oneSelect = tree;
  110. const twoSelectMap = getMap(tree, 'key', 'children');
  111. if (all) {
  112. oneSelect.forEach(row => {
  113. row.children.unshift({
  114. title: '全部',
  115. key: '',
  116. });
  117. });
  118. oneSelect.unshift({
  119. title: '全部',
  120. key: '',
  121. });
  122. }
  123. compontent.setState({ oneSelect, twoSelectMap });
  124. return {
  125. structIds,
  126. courseModules,
  127. };
  128. });
  129. case 'examination':
  130. return Main.getExamination().then(result => {
  131. const list = result.map(row => {
  132. row.title = `${row.titleZh}${row.titleEn}`;
  133. row.key = `${row.id}`;
  134. return row;
  135. });
  136. if (needTextbook) {
  137. list.push({
  138. title: '数学机经',
  139. key: 'textbook',
  140. id: 'textbook',
  141. });
  142. list.push({
  143. title: '最新',
  144. key: 'latest',
  145. parentId: 'textbook',
  146. });
  147. const nowYear = new Date().getFullYear();
  148. for (let i = TextbookMinYear; i <= nowYear; i += 1) {
  149. list.push({
  150. title: i.toString(),
  151. key: i.toString(),
  152. parentId: 'textbook',
  153. });
  154. }
  155. }
  156. let latest = null;
  157. let year = null;
  158. let structIds = null;
  159. if (one === 'textbook') {
  160. if (!two) {
  161. latest = false;
  162. } else if (two === 'latest') {
  163. latest = true;
  164. } else {
  165. year = two;
  166. }
  167. } else if (one) {
  168. if (!two) {
  169. structIds = [Number(one)];
  170. } else {
  171. structIds = [Number(two)];
  172. }
  173. }
  174. const tree = formatTreeData(list, 'key', 'title', 'parentId');
  175. const oneSelect = tree;
  176. const twoSelectMap = getMap(tree, 'key', 'children');
  177. if (all) {
  178. oneSelect.forEach(row => {
  179. row.children.unshift({
  180. title: '全部',
  181. key: '',
  182. });
  183. });
  184. oneSelect.unshift({
  185. title: '全部',
  186. key: '',
  187. });
  188. }
  189. compontent.setState({ oneSelect, twoSelectMap });
  190. return {
  191. structIds,
  192. latest,
  193. year,
  194. };
  195. });
  196. default:
  197. return Promise.resolve({});
  198. }
  199. }