entry-single.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <view class="page-content">
  3. <large-header v-bind="singleTitleBinding" :scroll-top="scrollTop"/>
  4. <pretty-card style="margin-top: -50px"/>
  5. <view class="mx-20 bg-white mx-card px-40 py-30">
  6. <ai-form ref="form" :model="model" :rules="rules" :render-rules="renderRules"
  7. :render-rule-loading="renderRuleLoading">
  8. <template #prefix>
  9. <ai-form-item prop="universityCode">
  10. <ai-form-college v-model="model.universityCode"/>
  11. </ai-form-item>
  12. <ai-form-item prop="majorCode">
  13. <ai-form-college-major v-model="model.majorCode" v-model:enroll-code="model.majorEnrollCode"
  14. :university-code="model.universityCode"/>
  15. </ai-form-item>
  16. </template>
  17. <template #suffix>
  18. <uv-form-item>
  19. <uv-text size="12" color="var(--primary-light-color)"
  20. text="*成绩填写的准确性关系到院校录取概率及准确性,请认准填写"/>
  21. </uv-form-item>
  22. <uv-form-item>
  23. <uv-button :text="next" v-bind="gradientBtnBinding" @click="handleNext"/>
  24. </uv-form-item>
  25. </template>
  26. </ai-form>
  27. </view>
  28. <uv-gap height="20"/>
  29. </view>
  30. </template>
  31. <script>
  32. import {ref, watch} from 'vue';
  33. import MxConst from "@/common/MxConst";
  34. import LargeHeader from "@/pages/ie/components/large-header.vue";
  35. import PrettyCard from "@/pages/ie/components/card/pretty-card.vue";
  36. import AiForm from "@/pages/ie/components/ai-form/ai-form.vue";
  37. import AiFormItem from "@/pages/ie/components/ai-form/ai-form-item.vue";
  38. import AiFormCollege from "@/pages/ie/components/ai-form/items/ai-form-college.vue";
  39. import AiFormCollegeMajor from "@/pages/ie/components/ai-form/items/ai-form-college-major.vue";
  40. import AIFormCommonStyle from "@/pages/ie/components/AIFormCommonStyle";
  41. import {useAIRenderRules} from "@/pages/ie/hooks/useAIRenderRules";
  42. import {useProvideMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
  43. import {useProvidePageScroll} from "@/hooks/usePageScrollInjection";
  44. import {useTransfer} from "@/hooks/useTransfer";
  45. export default {
  46. components: {AiFormCollegeMajor, AiFormCollege, AiFormItem, AiForm, PrettyCard, LargeHeader},
  47. mixins: [AIFormCommonStyle],
  48. setup() {
  49. const next = ref('确认提交')
  50. const nextPath = ref('/pages/ie/entry-single-result/entry-single-result')
  51. useProvideMajorTreeService()
  52. const scrollTop = useProvidePageScroll()
  53. const form = ref(null)
  54. const model = ref({
  55. universityCode: '',
  56. majorCode: '',
  57. majorEnrollCode: ''
  58. })
  59. const rules = ref({
  60. universityCode: [{required: true, message: '请选择学校'}],
  61. majorCode: [{required: true, message: '请选择专业'}]
  62. })
  63. const paramFactory = () => {
  64. const renderType = MxConst.enum.ai.renderType.def
  65. const {universityCode, majorCode, majorEnrollCode} = model.value
  66. return {renderType, universityCode, majorCodes: [majorCode], majorEnrollCodes: [majorEnrollCode]}
  67. }
  68. const {
  69. renderRules,
  70. renderRuleLoading,
  71. reloadRenderRules,
  72. validateRenderRule
  73. } = useAIRenderRules(paramFactory)
  74. const {transferTo} = useTransfer()
  75. watch(() => model.value.majorEnrollCode, val => {
  76. renderRules.value = []
  77. if (val) reloadRenderRules()
  78. })
  79. watch(() => model.value.universityCode, _ => scrollTop.value = 0)
  80. const handleNext = async () => {
  81. await form.value.validate()
  82. await validateRenderRule()
  83. transferTo(nextPath.value, model.value)
  84. }
  85. return {
  86. scrollTop,
  87. next,
  88. nextPath,
  89. form,
  90. model,
  91. rules,
  92. renderRules,
  93. renderRuleLoading,
  94. handleNext
  95. }
  96. }
  97. }
  98. </script>
  99. <style scoped>
  100. </style>