index.js 6.8 KB

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