index.js 6.8 KB

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