| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import {createEventHook, injectLocal, provideLocal} from "@vueuse/core";
- import {
- getPaperBatches,
- getPaperExamTypes,
- getPaperKnowledges,
- getPaperMajors,
- getPaperProvinces,
- getPaperSubjects,
- getPaperUniversities
- } from "@/api/dz/papers.js";
- const key = Symbol('PaperExactCondition')
- export const useProvidePaperExactCondition = function () {
- const batchId = ref('')
- const batchList = ref([])
- const location = ref('')
- const provinces = ref([])
- const examType = ref('')
- const examTypes = ref([])
- const universityId = ref('')
- const universities = ref([])
- const majorPlanId = ref('')
- const majors = ref([])
- const subjects = ref([])
- const subjectId = ref('')
- const knowledges = ref([])
- const knowledgeNode = ref(null) // 单选节点
- const knowledgeCheckNodes = ref([]) // 多选的节点
- const knowledgeIds = computed(() => knowledgeCheckNodes.value.map(k => k.id))
- const knowledgeId = computed(() => knowledgeNode.value?.id || '') // 单选
- const knowledgeRemoveEvent = createEventHook()
- const removeKnowledge = async (k) => {
- const nodes = knowledgeCheckNodes.value
- const idx = nodes.indexOf(k)
- if (idx > -1) {
- nodes.splice(idx, 1)
- await knowledgeRemoveEvent.trigger(k)
- }
- }
- const payload = {
- location, provinces, examType, examTypes, universityId, universities,
- batchId, batchList, majorPlanId, majors, subjects, subjectId,
- knowledges, knowledgeNode, knowledgeId, knowledgeCheckNodes, knowledgeIds,
- removeKnowledge, onKnowledgeRemove: knowledgeRemoveEvent.on
- }
- provideLocal(key, payload)
- // hooks
- onMounted(async () => {
- const res = await getPaperProvinces()
- provinces.value = res.data
- })
- onMounted(async () => {
- const res = await getPaperBatches()
- batchList.value = res.data
- })
- watch(location, async (location) => {
- // clean
- examType.value = ''
- examTypes.value = []
- if (!location) return
- const resT = await getPaperExamTypes({location})
- examTypes.value = resT.data
- })
- watch([location, batchId], async ([location, batchId]) => {
- // clean
- universityId.value = ''
- universities.value = []
- if (!location || !batchId) return
- const resU = await getPaperUniversities({location, batchId})
- universities.value = resU.data
- })
- watch([location, examType, batchId, universityId], async ([location, examType, batchId, universityId]) => {
- // clean
- majorPlanId.value = ''
- majors.value = []
- if (!location || !examType || !batchId || !universityId) return
- const res = await getPaperMajors({location, examType, batchId, universityId})
- majors.value = res.data
- if (res.data.length) majorPlanId.value = res.data[0].id
- })
- watch(universityId, async (universityId) => {
- // clean
- subjects.value = []
- subjectId.value = ''
- if (!universityId) return
- const res = await getPaperSubjects({universityId})
- subjects.value = res.data
- if (res.data.length) subjectId.value = res.data[0].subjectId
- })
- watch([majorPlanId, subjectId], async ([majorPlanId, subjectId]) => {
- // clean
- knowledges.value = []
- knowledgeNode.value = null // 单选的情况
- knowledgeCheckNodes.value = [] // 多选的情况
- if (!subjectId || !majorPlanId) return
- // 获取知识点数据
- const res = await getPaperKnowledges({subjectId, majorPlanId})
- knowledges.value = res.data
- })
- return payload
- }
- export const useInjectPaperExactCondition = function () {
- return injectLocal(key)
- }
|