elective-generation.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. const Mock = require('mockjs')
  2. const Random = Mock['Random']
  3. const mockGeneration = 7 // primary
  4. const mockGroups = [1, 2, 3, 4, 5, 6]
  5. const mockPreferenceCount = 3 // 1 or 3 // 1志愿/3志愿
  6. module.exports = [
  7. {
  8. url: '/mock/front/elective/generation/getElectiveStatus',
  9. type: 'get',
  10. response: config => {
  11. return {
  12. code: 200,
  13. msg: 'success',
  14. data: {
  15. year: 2021,
  16. roundId: 1,
  17. roundName: '第X次选科',
  18. groupIds: mockGroups.toString(),
  19. roundGroups: mockGroups.map(groupId => ({
  20. groupId: groupId,
  21. classCount: Random.integer(2, 6),
  22. personCount: function() {
  23. return this.classCount * 50
  24. },
  25. limitPerson: false,
  26. rankOut: false
  27. })),
  28. allMatched: true,
  29. currentGeneration: mockGeneration,
  30. // +
  31. disenrollCount: 0, // 未录人数
  32. enablePushNextDMGeneration: true,
  33. allowDMAlgorithm: true,
  34. doneDMAlgorithm: true,
  35. allowForce: true,
  36. }
  37. }
  38. }
  39. },
  40. {
  41. url: '/mock/front/elective/generation/getElectiveSummary',
  42. type: 'get',
  43. response: config => {
  44. const results = []
  45. for (let generation = 1; generation <= mockGeneration; generation++) {
  46. const copyGeneration = generation
  47. switch (generation) {
  48. case 1:
  49. // primary
  50. const allPreferences = []
  51. for (let pref = 0; pref < mockPreferenceCount; pref++) {
  52. const preferences = []
  53. const groupDefines = [
  54. {
  55. category: 'actualCount',
  56. queryCode: Random.cname(),
  57. displayName: '已报名',
  58. detailName: '报名组合',
  59. values: mockGroups.map(groupId => ({
  60. groupId: groupId,
  61. value: Random.integer(120, 400),
  62. color: 'B',
  63. bold: false,
  64. star: false,
  65. disabled: false
  66. }))
  67. }
  68. ]
  69. const nonGroupDefines = [
  70. {
  71. category: 'unfinishedCount',
  72. queryCode: Random.cname(),
  73. displayName: '未报名',
  74. detailName: '',
  75. values: [{
  76. groupId: 0,
  77. value: Random.integer(0, 10),
  78. color: '',
  79. bold: false,
  80. star: false,
  81. disabled: false
  82. }]
  83. }
  84. ]
  85. preferences.push(...groupDefines)
  86. preferences.push(...nonGroupDefines)
  87. allPreferences.push(preferences)
  88. }
  89. const primary = {
  90. roundId: 1,
  91. generation: copyGeneration,
  92. categories: allPreferences
  93. }
  94. results.push(primary)
  95. break
  96. default:
  97. const accumulateDefine = {
  98. generations: [2, 4, 6, 7],
  99. factory: () => [
  100. {
  101. category: 'approvedCount',
  102. queryCode: Random.cname(),
  103. displayName: '正常录取',
  104. detailName: '录取组合',
  105. values: mockGroups.map(groupId => ({
  106. groupId: groupId,
  107. value: Random.integer(120, 300),
  108. color: '',
  109. bold: false,
  110. star: false,
  111. disabled: false
  112. }))
  113. },
  114. {
  115. category: 'forcedCount',
  116. queryCode: Random.cname(),
  117. displayName: '调剂录取',
  118. detailName: '调剂组合',
  119. values: mockGroups.map(groupId => ({
  120. groupId: groupId,
  121. value: Random.integer(0, 10),
  122. color: '',
  123. bold: false,
  124. star: false,
  125. disabled: false
  126. }))
  127. }
  128. ]
  129. }
  130. const commonDefines = [
  131. {
  132. generations: [2],
  133. factory: () => [
  134. {
  135. category: 'indicateCount',
  136. displayName: '指标',
  137. values: mockGroups.map(groupId => ({
  138. groupId: groupId,
  139. value: Random.integer(120, 400),
  140. color: '',
  141. bold: false,
  142. star: true,
  143. queryCode: 'abc',
  144. disabled: false
  145. }))
  146. },
  147. {
  148. category: 'approvedCount',
  149. queryCode: Random.cname(),
  150. displayName: '录取人数',
  151. detailName: '录取组合',
  152. values: mockGroups.map(groupId => ({
  153. groupId: groupId,
  154. value: Random.integer(120, 400),
  155. color: '',
  156. bold: false,
  157. star: false,
  158. disabled: false
  159. }))
  160. },
  161. {
  162. category: 'adjustCount',
  163. queryCode: Random.cname(),
  164. displayName: '调剂人数',
  165. detailName: '调剂组合',
  166. values: mockGroups.map(groupId => ({
  167. groupId: groupId,
  168. value: Random.integer(120, 400),
  169. color: '',
  170. bold: false,
  171. star: false,
  172. disabled: false
  173. }))
  174. },
  175. {
  176. category: 'matchedCount',
  177. queryCode: Random.cname(),
  178. displayName: '专业符合',
  179. detailName: '推荐组合',
  180. values: mockGroups.map(groupId => ({
  181. groupId: groupId,
  182. value: Random.integer(120, 400),
  183. color: '',
  184. bold: false,
  185. star: false,
  186. disabled: false
  187. }))
  188. },
  189. {
  190. category: 'nonmatchedCount',
  191. queryCode: Random.cname(),
  192. displayName: '专业不符',
  193. detailName: '推荐组合',
  194. values: mockGroups.map(groupId => ({
  195. groupId: groupId,
  196. value: Random.integer(120, 400),
  197. color: '',
  198. bold: false,
  199. star: false,
  200. disabled: false
  201. }))
  202. }
  203. ]
  204. },
  205. {
  206. generations: [3, 5],
  207. factory: () => [
  208. {
  209. category: 'matchedApproved',
  210. queryCode: Random.cname(),
  211. displayName: '专业符合同意',
  212. detailName: '报名组合',
  213. values: mockGroups.map(groupId => ({
  214. groupId: groupId,
  215. value: Random.integer(120, 400),
  216. color: '',
  217. bold: false,
  218. star: false,
  219. disabled: false
  220. }))
  221. },
  222. {
  223. category: 'matchedNotOptional',
  224. queryCode: Random.cname(),
  225. displayName: '专业符合改选',
  226. detailName: '报名组合',
  227. values: mockGroups.map(groupId => ({
  228. groupId: groupId,
  229. value: Random.integer(120, 400),
  230. color: '',
  231. bold: false,
  232. star: false,
  233. disabled: false
  234. }))
  235. },
  236. {
  237. category: 'matchedRejected',
  238. queryCode: Random.cname(),
  239. displayName: '专业符合拒绝',
  240. detailName: '拒绝组合',
  241. values: mockGroups.map(groupId => ({
  242. groupId: groupId,
  243. value: Random.integer(120, 400),
  244. color: '',
  245. bold: false,
  246. star: false,
  247. disabled: false
  248. }))
  249. },
  250. {
  251. category: 'matchedNonaction',
  252. queryCode: Random.cname(),
  253. displayName: '专业符合未填',
  254. detailName: '推荐组合',
  255. values: mockGroups.map(groupId => ({
  256. groupId: groupId,
  257. value: Random.integer(120, 400),
  258. color: '',
  259. bold: false,
  260. star: false,
  261. disabled: false
  262. }))
  263. },
  264. {
  265. category: 'matchedRankout',
  266. queryCode: Random.cname(),
  267. displayName: '专业符合被挤出',
  268. detailName: '报名组合',
  269. values: mockGroups.map(groupId => ({
  270. groupId: groupId,
  271. value: Random.integer(120, 400),
  272. color: '',
  273. bold: false,
  274. star: false,
  275. disabled: false
  276. }))
  277. },
  278. {
  279. category: 'nonmatchedApproved',
  280. queryCode: Random.cname(),
  281. displayName: '专业符合已填',
  282. detailName: '报名组合',
  283. values: mockGroups.map(groupId => ({
  284. groupId: groupId,
  285. value: Random.integer(120, 400),
  286. color: '',
  287. bold: false,
  288. star: false,
  289. disabled: false
  290. }))
  291. },
  292. {
  293. category: 'nonmatchedRejected',
  294. queryCode: Random.cname(),
  295. displayName: '不可调剂拒绝',
  296. detailName: '报名组合',
  297. values: mockGroups.map(groupId => ({
  298. groupId: groupId,
  299. value: Random.integer(120, 400),
  300. color: '',
  301. bold: false,
  302. star: false,
  303. disabled: false
  304. }))
  305. },
  306. {
  307. category: 'nonmatchedNonaction',
  308. queryCode: Random.cname(),
  309. displayName: '不可调剂未填',
  310. detailName: '报名组合',
  311. values: mockGroups.map(groupId => ({
  312. groupId: groupId,
  313. value: Random.integer(120, 400),
  314. color: '',
  315. bold: false,
  316. star: false,
  317. disabled: false
  318. }))
  319. }
  320. ]
  321. },
  322. {
  323. generations: [4],
  324. factory: () => [
  325. {
  326. category: 'approvedCount',
  327. queryCode: Random.cname(),
  328. displayName: '补录录取',
  329. detailName: '录取组合',
  330. values: mockGroups.map(groupId => ({
  331. groupId: groupId,
  332. value: Random.integer(120, 400),
  333. color: '',
  334. bold: false,
  335. star: false,
  336. disabled: false
  337. }))
  338. },
  339. {
  340. category: 'forcedCount',
  341. queryCode: Random.cname(),
  342. displayName: '调剂录取',
  343. detailName: '录取组合',
  344. values: mockGroups.map(groupId => ({
  345. groupId: groupId,
  346. value: Random.integer(120, 400),
  347. color: '',
  348. bold: false,
  349. star: false,
  350. disabled: false
  351. }))
  352. },
  353. {
  354. category: 'matchedCount',
  355. queryCode: Random.cname(),
  356. displayName: '可调剂人数',
  357. detailName: '调剂组合',
  358. values: mockGroups.map(groupId => ({
  359. groupId: groupId,
  360. value: Random.integer(120, 400),
  361. color: '',
  362. bold: false,
  363. star: false,
  364. disabled: false
  365. }))
  366. },
  367. {
  368. category: 'nonmatchedCount',
  369. queryCode: Random.cname(),
  370. displayName: '不可调剂人数',
  371. detailName: '报名组合',
  372. values: mockGroups.map(groupId => ({
  373. groupId: groupId,
  374. value: Random.integer(120, 400),
  375. color: '',
  376. bold: false,
  377. star: false,
  378. disabled: false
  379. }))
  380. }
  381. ]
  382. },
  383. {
  384. generations: [6],
  385. factory: () => [
  386. {
  387. category: 'approvedCount',
  388. queryCode: Random.cname(),
  389. displayName: '补录录取',
  390. detailName: '录取组合',
  391. values: mockGroups.map(groupId => ({
  392. groupId: groupId,
  393. value: Random.integer(120, 400),
  394. color: '',
  395. bold: false,
  396. star: false,
  397. disabled: false
  398. }))
  399. },
  400. {
  401. category: 'forcedCount',
  402. queryCode: Random.cname(),
  403. displayName: '调剂录取',
  404. detailName: '录取组合',
  405. values: mockGroups.map(groupId => ({
  406. groupId: groupId,
  407. value: Random.integer(120, 400),
  408. color: '',
  409. bold: false,
  410. star: false,
  411. disabled: false
  412. }))
  413. }
  414. ]
  415. },
  416. {
  417. generations: [7],
  418. factory: () => [
  419. {
  420. category: 'forcedCount',
  421. queryCode: Random.cname(),
  422. displayName: '调剂录取',
  423. detailName: '录取组合',
  424. values: mockGroups.map(groupId => ({
  425. groupId: groupId,
  426. value: Random.integer(120, 400),
  427. color: '',
  428. bold: false,
  429. star: false,
  430. disabled: false
  431. }))
  432. }
  433. ]
  434. }
  435. ]
  436. const defines = commonDefines.find(d => d.generations.includes(generation))
  437. const inAccDef = accumulateDefine.generations.includes(generation)
  438. if (defines) {
  439. results.push({
  440. roundId: 1,
  441. generation: copyGeneration,
  442. categories: defines.factory(),
  443. accumulates: inAccDef ? accumulateDefine.factory() : undefined
  444. })
  445. }
  446. break
  447. }
  448. }
  449. return {
  450. code: 200,
  451. msg: 'success',
  452. data: results
  453. }
  454. }
  455. },
  456. {
  457. url: '/mock/front/elective/generation/getElectiveGenerationDetails',
  458. type: 'get',
  459. response: config => {
  460. return {
  461. code: 200,
  462. msg: 'success',
  463. total: Random.integer(5, 200),
  464. data: {
  465. groupDescriptors: mockGroups.map(groupId => {
  466. return {
  467. groupId,
  468. descriptors: [
  469. { key: 'setting', value: Random.integer(100, 9999), description: '设置人数' },
  470. { key: 'actual', value: Random.integer(0, 9999), description: '实报人数' }
  471. ]
  472. }
  473. }),
  474. 'details|5-20': [
  475. {
  476. 'id|+1': 1000,
  477. 'roundId': 1,
  478. 'studentId|+1': 100,
  479. 'studentName': Random.cname(),
  480. 'groupId': config.query.groupId,
  481. 'groupName': Random.cname(),
  482. 'classId|+1': 20,
  483. 'className': Random.cname(),
  484. 'datetime': Random.date(),
  485. 'histories|4-15': [
  486. {
  487. 'generation|1': [1, 2, 3, 4, 5, 6, 7],
  488. 'groupId|1': mockGroups,
  489. 'description': Random.cname(),
  490. 'rankDescriptors|1-3': [
  491. { key: Random.cname(), value: Random.integer(1, 300), description: Random.cname() }
  492. ]
  493. }
  494. ]
  495. }
  496. ]
  497. }
  498. }
  499. }
  500. },
  501. {
  502. url: '/mock/front/elective/generation/getGenerationOptionalMajorsBatch',
  503. type: 'get',
  504. response: config => {
  505. let studentIds = config.query.studentIds
  506. if (typeof studentIds === 'string') studentIds = studentIds.split(',')
  507. const majorsMap = {}
  508. studentIds.forEach(id => {
  509. majorsMap[id] = {
  510. 'bestMatchedGroupId|1': mockGroups,
  511. 'majors|0-6': [{
  512. 'collegeId|+1': 5000,
  513. 'collegeName': Random.cname(),
  514. 'majorCategoryCode': Random.cname(),
  515. 'majorCategoryName': Random.cname(),
  516. 'majors': {},
  517. 'limitationA': '', // 选科限制1
  518. 'limitationB': '', // 选科限制2
  519. 'matchedGroupIds|0-3': mockGroups // 匹配的组合
  520. }]
  521. }
  522. })
  523. return {
  524. code: 200,
  525. msg: 'success',
  526. data: majorsMap
  527. }
  528. }
  529. }
  530. ]