perf: 所有基础数据下拉统一使用 Store 缓存

修改以下组件使用 baseDataStore:
- business/school/components/GradeDialog.vue (年级)
- business/school/components/ClassDialog.vue (班级)
- school/index.vue (区域树)
- school/components/GradeDialog.vue (年级)
- school/components/ClassDialog.vue (年级+班级)
- member/components/MemberDialog.vue (区域树)

登录后预加载数据,后续全部命中缓存
This commit is contained in:
神码-方晓辉 2026-02-03 17:40:59 +08:00
parent e8489536d6
commit d0d0f0ee6d
6 changed files with 49 additions and 48 deletions

View File

@ -39,7 +39,10 @@
*/
import { ElMessage } from 'element-plus'
import { onMounted, ref } from 'vue'
import { addGradeClass, getClassOptions } from '@/api/pangu/school'
import { addGradeClass } from '@/api/pangu/school'
import useBaseDataStore from '@/store/modules/baseData'
const baseDataStore = useBaseDataStore()
const emit = defineEmits(['success'])
@ -59,18 +62,16 @@ const form = ref({
// ID
const existingClassIds = ref([])
//
// 使 Store
const fetchClassOptions = async () => {
try {
const res = await getClassOptions()
if (res.code === 200) {
// { value: classId, label: className }
classOptions.value = (res.data || []).map(item => ({
value: item.classId,
label: item.className,
disabled: existingClassIds.value.includes(item.classId)
}))
}
const data = await baseDataStore.fetchClasses()
// { value: classId, label: className }
classOptions.value = (data || []).map(item => ({
value: item.classId,
label: item.className,
disabled: existingClassIds.value.includes(item.classId)
}))
} catch (error) {
console.error('获取班级选项失败:', error)
}

View File

@ -39,7 +39,10 @@
*/
import { ElMessage } from 'element-plus'
import { onMounted, ref } from 'vue'
import { addSchoolGrade, getGradeOptions } from '@/api/pangu/school'
import { addSchoolGrade } from '@/api/pangu/school'
import useBaseDataStore from '@/store/modules/baseData'
const baseDataStore = useBaseDataStore()
const emit = defineEmits(['success'])
@ -58,18 +61,16 @@ const form = ref({
// ID
const existingGradeIds = ref([])
//
// 使 Store
const fetchGradeOptions = async () => {
try {
const res = await getGradeOptions()
if (res.code === 200) {
// { value: gradeId, label: gradeName }
gradeOptions.value = (res.data || []).map(item => ({
value: item.gradeId,
label: item.gradeName,
disabled: existingGradeIds.value.includes(item.gradeId)
}))
}
const data = await baseDataStore.fetchGrades()
// { value: gradeId, label: gradeName }
gradeOptions.value = (data || []).map(item => ({
value: item.gradeId,
label: item.gradeName,
disabled: existingGradeIds.value.includes(item.gradeId)
}))
} catch (error) {
console.error('获取年级选项失败:', error)
}

View File

@ -147,10 +147,13 @@
</template>
<script setup>
import { addMember, getClassList, getGradeList, getMember, getRegionTree, getSchoolList, updateMember } from '@/api/pangu/member'
import { addMember, getClassList, getGradeList, getMember, getSchoolList, updateMember } from '@/api/pangu/member'
import { Plus } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import { computed, reactive, ref, watch } from 'vue'
import useBaseDataStore from '@/store/modules/baseData'
const baseDataStore = useBaseDataStore()
const props = defineProps({
modelValue: {
@ -207,10 +210,9 @@ const classList = ref([])
* 弹窗打开时加载数据
*/
const handleOpen = async () => {
//
// 使 Store
try {
const res = await getRegionTree()
regionTree.value = res.data || []
regionTree.value = await baseDataStore.fetchRegionTree()
} catch (e) {
//
}

View File

@ -50,7 +50,10 @@
*/
import { ElMessage } from 'element-plus'
import { onMounted, ref } from 'vue'
import { addGradeClass, getClassOptions, getGradeOptions } from '@/api/pangu/school'
import { addGradeClass } from '@/api/pangu/school'
import useBaseDataStore from '@/store/modules/baseData'
const baseDataStore = useBaseDataStore()
const emit = defineEmits(['success'])
@ -68,25 +71,19 @@ const form = ref({
classIds: []
})
//
// 使 Store
const fetchGradeOptions = async () => {
try {
const res = await getGradeOptions()
if (res.code === 200) {
gradeOptions.value = res.data
}
gradeOptions.value = await baseDataStore.fetchGrades()
} catch (error) {
console.error('获取年级选项失败:', error)
}
}
//
// 使 Store
const fetchClassOptions = async () => {
try {
const res = await getClassOptions()
if (res.code === 200) {
classOptions.value = res.data
}
classOptions.value = await baseDataStore.fetchClasses()
} catch (error) {
console.error('获取班级选项失败:', error)
}

View File

@ -39,7 +39,10 @@
*/
import { ElMessage } from 'element-plus'
import { onMounted, ref } from 'vue'
import { addSchoolGrade, getGradeOptions } from '@/api/pangu/school'
import { addSchoolGrade } from '@/api/pangu/school'
import useBaseDataStore from '@/store/modules/baseData'
const baseDataStore = useBaseDataStore()
const emit = defineEmits(['success'])
@ -55,13 +58,10 @@ const form = ref({
gradeIds: []
})
//
// 使 Store
const fetchGradeOptions = async () => {
try {
const res = await getGradeOptions()
if (res.code === 200) {
gradeOptions.value = res.data
}
gradeOptions.value = await baseDataStore.fetchGrades()
} catch (error) {
console.error('获取年级选项失败:', error)
}

View File

@ -112,6 +112,9 @@ import request from '@/utils/request'
import ClassDialog from './components/ClassDialog.vue'
import GradeDialog from './components/GradeDialog.vue'
import SchoolDialog from './components/SchoolDialog.vue'
import useBaseDataStore from '@/store/modules/baseData'
const baseDataStore = useBaseDataStore()
//
const treeRef = ref()
@ -149,12 +152,9 @@ const filterNode = (value, data) => {
return data.regionName.includes(value)
}
//
// 使 Store
const getRegionTree = async () => {
const res = await request.get('/api/region/tree')
if (res.code === 200) {
regionTree.value = res.data
}
regionTree.value = await baseDataStore.fetchRegionTree()
}
//