工学交替

This commit is contained in:
yaojian
2026-03-11 16:26:14 +08:00
parent e33ac977d4
commit 4af5660df2
2 changed files with 101 additions and 60 deletions

View File

@@ -20,10 +20,10 @@
filterable
style="width: 200px">
<el-option
v-for="item in schoolYearList"
:key="item.year"
:label="item.year"
:value="item.year">
v-for="(item, index) in schoolYearList"
:key="item.year || item.id || index"
:label="item.year || item.schoolYear || item.name || item"
:value="item.year || item.schoolYear || item.name || item">
</el-option>
</el-select>
</el-form-item>
@@ -303,23 +303,38 @@ const searchForm = reactive({
dateRange: null as [string, string] | null
})
// 配置 useTable接口返回 data.tableData.records / data.tableData.total,需包装以适配 hook 的 res.data[props.item] 取数
// 配置 useTable接口返回 data.tableData.records / data.tableData.total
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: searchForm,
pageList: async (params: any) => {
const res = await fetchList(params)
const data = res?.data
const tableData = data?.tableData
// 处理查询参数
const queryParams: any = { ...params }
// 处理日期范围
if (searchForm.dateRange && searchForm.dateRange.length === 2) {
queryParams.dateRangeStr = `${searchForm.dateRange[0]},${searchForm.dateRange[1]}`
}
delete queryParams.dateRange
// 处理学年数组
if (queryParams.schoolYear) {
queryParams.schoolYear = [queryParams.schoolYear]
}
const res = await fetchList(queryParams)
// 将嵌套的 tableData 提升到 data 层级,适配 useTable hook
if (res.data && res.data.tableData) {
return {
...res,
data: {
'tableData.records': tableData?.records ?? [],
'tableData.total': tableData?.total ?? data?.total ?? 0
records: res.data.tableData.records || [],
total: res.data.tableData.total || 0
}
}
}
return res
},
props: {
item: 'tableData.records',
totalCount: 'tableData.total'
item: 'records',
totalCount: 'total'
},
createdIsNeed: true
})
@@ -334,20 +349,6 @@ const {
// 查询
const handleSearch = () => {
// 处理日期范围
const params: any = { ...searchForm }
if (searchForm.dateRange && searchForm.dateRange.length === 2) {
params.dateRangeStr = `${searchForm.dateRange[0]},${searchForm.dateRange[1]}`
}
delete params.dateRange
// 处理学年数组
if (params.schoolYear) {
params.schoolYear = [params.schoolYear]
}
// 更新查询参数
Object.assign(searchForm, params)
getDataList()
}
@@ -394,10 +395,20 @@ const getDeptListData = async () => {
const getSchoolYearList = async () => {
try {
const res = await queryAllSchoolYear()
if (res.data && Array.isArray(res.data)) {
if (res.data) {
// 兼容多种数据格式
if (Array.isArray(res.data)) {
schoolYearList.value = res.data
} else if (res.data.records && Array.isArray(res.data.records)) {
schoolYearList.value = res.data.records
} else {
schoolYearList.value = []
}
} else {
schoolYearList.value = []
}
} catch (err) {
console.error('获取学年列表失败', err)
schoolYearList.value = []
}
}

View File

@@ -19,10 +19,10 @@
filterable
style="width: 100%">
<el-option
v-for="item in schoolYearList"
:key="item.year"
:label="item.year"
:value="item.year">
v-for="(item, index) in schoolYearList"
:key="item.year || item.id || index"
:label="item.year || item.schoolYear || item.name || item"
:value="item.year || item.schoolYear || item.name || item">
</el-option>
</el-select>
</el-form-item>
@@ -34,9 +34,9 @@
style="width: 100%">
<el-option
v-for="item in schoolTermList"
:key="item.value"
:label="item.label"
:value="item.value">
:key="item.value || item.dictValue"
:label="item.label || item.dictLabel || item.name"
:value="item.value || item.dictValue">
</el-option>
</el-select>
</el-form-item>
@@ -50,16 +50,18 @@
<el-form-item label="教师" prop="teacherNo">
<el-select
v-model="form.teacherNo"
placeholder="请选择教师"
placeholder="请输入姓名或工号搜索"
clearable
filterable
style="width: 100%"
@search="handleTeacherSearch">
remote
:remote-method="handleTeacherSearch"
:loading="teacherLoading"
style="width: 100%">
<el-option
v-for="item in teacherList"
:key="item.teacherNo"
:label="`${item.realName}(${item.teacherNo})`"
:value="item.teacherNo">
:key="item.teacherNo || item.id"
:label="`${item.realName || item.name}(${item.teacherNo || item.id})`"
:value="item.teacherNo || item.id">
</el-option>
</el-select>
</el-form-item>
@@ -87,6 +89,7 @@ const emit = defineEmits(['refresh'])
const dataFormRef = ref()
const visible = ref(false)
const loading = ref(false)
const teacherLoading = ref(false)
const schoolYearList = ref<any[]>([])
const schoolTermList = ref<any[]>([])
const teacherList = ref<any[]>([])
@@ -117,17 +120,29 @@ const dataRules = {
// 教师搜索
const handleTeacherSearch = async (keyword: string) => {
if (!keyword) {
if (!keyword || keyword.length < 1) {
teacherList.value = []
return
}
teacherLoading.value = true
try {
const res = await getTeacherInfoCommon({ searchKeywords: keyword })
if (res.data && Array.isArray(res.data)) {
if (res.data) {
if (Array.isArray(res.data)) {
teacherList.value = res.data
} else if (res.data.records && Array.isArray(res.data.records)) {
teacherList.value = res.data.records
} else {
teacherList.value = []
}
} else {
teacherList.value = []
}
} catch (err) {
console.error('获取教师列表失败', err)
teacherList.value = []
} finally {
teacherLoading.value = false
}
}
@@ -174,10 +189,19 @@ const onSubmit = async () => {
const getSchoolYearList = async () => {
try {
const res = await queryAllSchoolYear()
if (res.data && Array.isArray(res.data)) {
if (res.data) {
if (Array.isArray(res.data)) {
schoolYearList.value = res.data
} else if (res.data.records && Array.isArray(res.data.records)) {
schoolYearList.value = res.data.records
} else {
schoolYearList.value = []
}
} else {
schoolYearList.value = []
}
} catch (err) {
console.error('获取学年列表失败', err)
schoolYearList.value = []
}
}
@@ -187,9 +211,15 @@ const getSchoolTermList = async () => {
try {
const res = await getDicts('school_term')
if (res.data && Array.isArray(res.data)) {
schoolTermList.value = res.data
schoolTermList.value = res.data.map((item: any) => ({
label: item.label ?? item.dictLabel ?? item.name,
value: item.value ?? item.dictValue
}))
} else {
schoolTermList.value = []
}
} catch (err) {
console.error('获取学期列表失败', err)
schoolTermList.value = []
}
}