analysis-report.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <script>
  2. import _ from 'lodash';
  3. import EntryAiReport from "@/pages/ie/entry-ai-report/entry-ai-report.vue";
  4. import {getVoluntary} from "@/api/webApi/ie-voluntary";
  5. import {useProvideTransfer} from "@/hooks/useTransfer";
  6. import {useProvidePageScroll} from "@/hooks/usePageScrollInjection";
  7. import {useCacheStore} from "@/hooks/useCacheStore";
  8. import {useProvideMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
  9. import {universityDetail} from "@/api/webApi/collegemajor";
  10. export default {
  11. extends: EntryAiReport,
  12. setup() {
  13. const {prevData, usingCacheTransfer} = useProvideTransfer()
  14. const scrollTop = useProvidePageScroll()
  15. const {dispatchCache} = useCacheStore()
  16. const {majorTree} = useProvideMajorTreeService()
  17. return {
  18. scrollTop,
  19. prevData,
  20. usingCacheTransfer,
  21. majorTree,
  22. dispatchCache
  23. }
  24. },
  25. methods: {
  26. async prevInit() {
  27. let reAssignData = this.prevData
  28. if (!this.usingCacheTransfer && this.prevData.id) {
  29. const {data} = await getVoluntary(this.prevData)
  30. reAssignData = data
  31. }
  32. await this.transferToAiStructure(reAssignData)
  33. this.prevData = {...reAssignData} // NOTE: This will trigger watcher in `EntryAiReport`. Important!
  34. },
  35. async transferToAiStructure(multipleData) {
  36. // transfer to ai report structure, only `details` part.
  37. const aiDetails = []
  38. const uGrouped = _.groupBy(multipleData.details, r => r.universityCode)
  39. const tasks = Object.entries(uGrouped).map(async ([code, majorDetails]) => {
  40. const u = await this.dispatchCache(universityDetail, {code})
  41. aiDetails.push({
  42. university: u.data.baseInfo,
  43. professions: u.data.professions,
  44. majorDetails
  45. })
  46. })
  47. await Promise.all(tasks)
  48. multipleData.details = aiDetails
  49. }
  50. }
  51. }
  52. </script>
  53. <style>
  54. </style>