123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <template>
- <view class="page-content">
- <large-header v-bind="analysisTitleBinding" :scroll-top="scrollTop"/>
- <pretty-card style="margin-top: -60px"/>
- <view class="mx-20 mx-card bg-white p-20">
- <uv-text v-bind="formGroupBinding" text="专业方向"/>
- <ai-form ref="categoryForm" :model="form" :rules="rules">
- <template #prefix>
- <ai-form-item prop="majorCategory">
- <major-category-picker v-model="form.majorCategory"/>
- </ai-form-item>
- </template>
- </ai-form>
- </view>
- <view class="m-20 fx-col gap-20">
- <college-major-picker v-for="m in form.universities" ref="picker" :num="m.num"/>
- </view>
- <view class="m-20 fx-row gap-20">
- <uv-button text="我的志愿表" v-bind="plainBtnBinding" @click="handleMyVoluntary"/>
- <uv-button text="生成分析" v-bind="gradientBtnBinding" @click="handleNext"/>
- </view>
- <uv-gap height="10"/>
- </view>
- </template>
- <script>
- import {ref} from 'vue';
- import _ from 'lodash';
- import LargeHeader from "@/pages/ie/components/large-header.vue";
- import PrettyCard from "@/pages/ie/components/card/pretty-card.vue";
- import CollegeMajorPicker from "@/pages/ie/entry-analysis/components/college-major-picker.vue";
- import AIFormCommonStyle from "@/pages/ie/components/AIFormCommonStyle";
- import AiFormItem from "@/pages/ie/components/ai-form/ai-form-item.vue";
- import AiForm from "@/pages/ie/components/ai-form/ai-form.vue";
- import MajorCategoryPicker from "@/pages/ie/components/ai-form/items/major-category-picker.vue";
- import {useProvidePageScroll} from "@/hooks/usePageScrollInjection";
- import {useProvideAnalysisDataService} from "@/pages/ie/entry-analysis/components/useAnalysisDataInjection";
- import {useProvideMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
- import {useTransfer} from "@/hooks/useTransfer";
- export default {
- components: {MajorCategoryPicker, AiForm, AiFormItem, CollegeMajorPicker, PrettyCard, LargeHeader},
- mixins: [AIFormCommonStyle],
- setup() {
- const collegeLimit = 2
- const scrollTop = useProvidePageScroll()
- useProvideMajorTreeService()
- const form = ref({
- majorCategory: '',
- universities: _.times(collegeLimit, i => ({num: i, university: {}, majors: []}))
- })
- const rules = {majorCategory: [{required: true, message: '请选择专业种类'}]}
- useProvideAnalysisDataService(form)
- const {transferTo} = useTransfer()
- const categoryForm = ref(null)
- const picker = ref(null)
- const handleMyVoluntary = () => {
- transferTo('/pages/ie/entry-ai-list/entry-ai-list', {tab: 1})
- }
- const handleNext = async () => {
- await categoryForm.value.validate()
- for (const item of picker.value) {
- await item.validate()
- }
- const toSimple = (model) => {
- const copy = {
- ...model,
- code: model.university.code,
- majorCodes: model.majors.map(m => m.code),
- majorEnrollCodes: model.majors.map(m => m.enrollCode)
- }
- delete copy.university
- delete copy.majors
- return copy
- }
- const nextData = {
- ...form.value,
- universities: form.value.universities.map(toSimple)
- }
- const nextPath = '/pages/ie/entry-analysis/analysis-result'
- transferTo(nextPath, nextData)
- }
- return {
- scrollTop,
- collegeLimit,
- form,
- rules,
- categoryForm,
- picker,
- handleMyVoluntary,
- handleNext
- }
- }
- }
- </script>
- <style>
- </style>
|