index.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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, 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. subject: [],
  66. questionType: [],
  67. };
  68. }
  69. const item = map[row.key];
  70. item.structIds.push(row.id);
  71. if (item.subject.indexOf(row.subject) < 0) {
  72. item.subject.push(row.subject);
  73. }
  74. if (item.questionType.indexOf(row.questionType) < 0) {
  75. item.questionType.push(row.questionType);
  76. }
  77. });
  78. const list = Object.values(map);
  79. if (needPreview) {
  80. list.push({
  81. title: '预习作业',
  82. key: 'preview',
  83. id: 'preview',
  84. });
  85. CourseModule.forEach(row => {
  86. list.push({
  87. title: row.label,
  88. key: row.value,
  89. parentId: 'preview',
  90. });
  91. });
  92. }
  93. let courseModules = null;
  94. let structIds = null;
  95. if (one === 'preview') {
  96. if (!two) {
  97. courseModules = CourseModule.map(row => row.value);
  98. } else {
  99. courseModules = [two];
  100. }
  101. } else if (one) {
  102. const resultMap = getMap(list, 'key', 'structIds');
  103. if (!two) {
  104. structIds = resultMap[one];
  105. } else {
  106. structIds = resultMap[two];
  107. }
  108. }
  109. const tree = formatTreeData(list, 'key', 'title', 'parentId');
  110. const oneSelect = tree;
  111. const twoSelectMap = getMap(tree, 'key', 'children');
  112. if (all) {
  113. oneSelect.forEach(row => {
  114. row.children.unshift({
  115. title: '全部',
  116. key: '',
  117. });
  118. });
  119. oneSelect.unshift({
  120. title: '全部',
  121. key: '',
  122. });
  123. }
  124. compontent.setState({ oneSelect, twoSelectMap });
  125. return {
  126. structIds,
  127. courseModules,
  128. };
  129. });
  130. case 'examination':
  131. return Main.getExamination().then(result => {
  132. const list = result.map(row => {
  133. row.title = `${row.titleZh}${row.titleEn}`;
  134. row.key = `${row.id}`;
  135. return row;
  136. });
  137. if (needTextbook) {
  138. list.push({
  139. title: '数学机经',
  140. key: 'textbook',
  141. id: 'textbook',
  142. });
  143. list.push({
  144. title: '最新',
  145. key: 'latest',
  146. parentId: 'textbook',
  147. });
  148. const nowYear = new Date().getFullYear();
  149. for (let i = TextbookMinYear; i <= nowYear; i += 1) {
  150. list.push({
  151. title: i.toString(),
  152. key: i.toString(),
  153. parentId: 'textbook',
  154. });
  155. }
  156. }
  157. let latest = null;
  158. let year = null;
  159. let structIds = null;
  160. if (one === 'textbook') {
  161. if (!two) {
  162. latest = false;
  163. } else if (two === 'latest') {
  164. latest = true;
  165. } else {
  166. year = two;
  167. }
  168. } else if (one) {
  169. if (!two) {
  170. structIds = [Number(one)];
  171. } else {
  172. structIds = [Number(two)];
  173. }
  174. }
  175. const tree = formatTreeData(list, 'key', 'title', 'parentId');
  176. const oneSelect = tree;
  177. const twoSelectMap = getMap(tree, 'key', 'children');
  178. if (all) {
  179. oneSelect.forEach(row => {
  180. row.children.unshift({
  181. title: '全部',
  182. key: '',
  183. });
  184. });
  185. oneSelect.unshift({
  186. title: '全部',
  187. key: '',
  188. });
  189. }
  190. compontent.setState({ oneSelect, twoSelectMap });
  191. return {
  192. structIds,
  193. latest,
  194. year,
  195. };
  196. });
  197. default:
  198. return Promise.resolve({});
  199. }
  200. }