entry-analysis.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <view class="page-content">
  3. <large-header v-bind="analysisTitleBinding" :scroll-top="scrollTop"/>
  4. <pretty-card style="margin-top: -60px"/>
  5. <view class="mx-20 mx-card bg-white p-20">
  6. <uv-text v-bind="formGroupBinding" text="专业方向"/>
  7. <ai-form ref="categoryForm" :model="form" :rules="rules">
  8. <template #prefix>
  9. <ai-form-item prop="majorCategory">
  10. <major-category-picker v-model="form.majorCategory"/>
  11. </ai-form-item>
  12. </template>
  13. </ai-form>
  14. </view>
  15. <view class="m-20 fx-col gap-20">
  16. <college-major-picker v-for="m in form.universities" ref="picker" :num="m.num"/>
  17. </view>
  18. <view class="m-20 fx-row gap-20">
  19. <uv-button text="我的志愿表" v-bind="plainBtnBinding" @click="handleMyVoluntary"/>
  20. <uv-button text="生成分析" v-bind="gradientBtnBinding" @click="handleNext"/>
  21. </view>
  22. <uv-gap height="10"/>
  23. </view>
  24. </template>
  25. <script>
  26. import {ref} from 'vue';
  27. import _ from 'lodash';
  28. import LargeHeader from "@/pages/ie/components/large-header.vue";
  29. import PrettyCard from "@/pages/ie/components/card/pretty-card.vue";
  30. import CollegeMajorPicker from "@/pages/ie/entry-analysis/components/college-major-picker.vue";
  31. import AIFormCommonStyle from "@/pages/ie/components/AIFormCommonStyle";
  32. import AiFormItem from "@/pages/ie/components/ai-form/ai-form-item.vue";
  33. import AiForm from "@/pages/ie/components/ai-form/ai-form.vue";
  34. import MajorCategoryPicker from "@/pages/ie/components/ai-form/items/major-category-picker.vue";
  35. import {useProvidePageScroll} from "@/hooks/usePageScrollInjection";
  36. import {useProvideAnalysisDataService} from "@/pages/ie/entry-analysis/components/useAnalysisDataInjection";
  37. import {useProvideMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
  38. import {useTransfer} from "@/hooks/useTransfer";
  39. export default {
  40. components: {MajorCategoryPicker, AiForm, AiFormItem, CollegeMajorPicker, PrettyCard, LargeHeader},
  41. mixins: [AIFormCommonStyle],
  42. setup() {
  43. const collegeLimit = 2
  44. const scrollTop = useProvidePageScroll()
  45. useProvideMajorTreeService()
  46. const form = ref({
  47. majorCategory: '',
  48. universities: _.times(collegeLimit, i => ({num: i, university: {}, majors: []}))
  49. })
  50. const rules = {majorCategory: [{required: true, message: '请选择专业种类'}]}
  51. useProvideAnalysisDataService(form)
  52. const {transferTo} = useTransfer()
  53. const categoryForm = ref(null)
  54. const picker = ref(null)
  55. const handleMyVoluntary = () => {
  56. transferTo('/pages/ie/entry-ai-list/entry-ai-list', {tab: 1})
  57. }
  58. const handleNext = async () => {
  59. await categoryForm.value.validate()
  60. for (const item of picker.value) {
  61. await item.validate()
  62. }
  63. const toSimple = (model) => {
  64. const copy = {
  65. ...model,
  66. code: model.university.code,
  67. majorCodes: model.majors.map(m => m.code),
  68. majorEnrollCodes: model.majors.map(m => m.enrollCode)
  69. }
  70. delete copy.university
  71. delete copy.majors
  72. return copy
  73. }
  74. const nextData = {
  75. ...form.value,
  76. universities: form.value.universities.map(toSimple)
  77. }
  78. const nextPath = '/pages/ie/entry-analysis/analysis-result'
  79. transferTo(nextPath, nextData)
  80. }
  81. return {
  82. scrollTop,
  83. collegeLimit,
  84. form,
  85. rules,
  86. categoryForm,
  87. picker,
  88. handleMyVoluntary,
  89. handleNext
  90. }
  91. }
  92. }
  93. </script>
  94. <style>
  95. </style>