school-info-fields.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <template>
  2. <mx-form-item v-if="!disabled" prop="schoolId" label="所在学校">
  3. <mx-picker v-model="model.schoolId" :data="schoolOptions" label-prop="label" value-prop="value"
  4. tree-prop="children" placeholder="请选择学校"/>
  5. </mx-form-item>
  6. <mx-form-item v-if="model.schoolId<0" v-model="model.customSchoolName" prop="customSchoolName" label="学校名称"/>
  7. <mx-form-item v-else-if="model.schoolId&&disabled" v-model="model.schoolName" label="学校" disabled/>
  8. <mx-form-item v-model="model.customClassName" prop="customClassName" label="班级名称"/>
  9. </template>
  10. <script setup>
  11. import {ref, watch, watchEffect} from 'vue'
  12. import {useInjectFormData} from "@/pages/login/components/hooks/useFormDataInjection";
  13. import {createPropDefine} from "@/utils";
  14. import {getAreaSchoolTree} from "@/api/login";
  15. const props = defineProps({
  16. // 只是控制学校,班级因为是自定义的,是可以直接修改的
  17. disabled: createPropDefine(false, Boolean)
  18. })
  19. const [model] = useInjectFormData()
  20. const schoolOptions = ref([])
  21. watch(() => model.value.provinceName, () => {
  22. if (props.disabled) return
  23. // 省份变更时,清空原值
  24. model.value.schoolId = ''
  25. model.value.customSchoolName = ''
  26. })
  27. watchEffect(async () => {
  28. if (props.disabled) return
  29. // 在绑卡场景下才能解析出username,password,此时卡的优先级就提高了
  30. // 如果在bindPhone场景下,相当于没有传入username, password,后台使用当前用户的权限信息
  31. const {provinceName, username, password} = model.value
  32. if (!provinceName) return
  33. const res = await getAreaSchoolTree({provinceName, username, password})
  34. schoolOptions.value = res.data
  35. })
  36. </script>
  37. <style scoped>
  38. </style>