工学交替

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

@@ -13,17 +13,17 @@
</template> </template>
<el-form :model="searchForm" ref="searchFormRef" :inline="true" @keyup.enter="handleSearch" class="search-form"> <el-form :model="searchForm" ref="searchFormRef" :inline="true" @keyup.enter="handleSearch" class="search-form">
<el-form-item label="学年" prop="schoolYear"> <el-form-item label="学年" prop="schoolYear">
<el-select <el-select
v-model="searchForm.schoolYear" v-model="searchForm.schoolYear"
placeholder="请选择学年" placeholder="请选择学年"
clearable clearable
filterable filterable
style="width: 200px"> style="width: 200px">
<el-option <el-option
v-for="item in schoolYearList" v-for="(item, index) in schoolYearList"
:key="item.year" :key="item.year || item.id || index"
:label="item.year" :label="item.year || item.schoolYear || item.name || item"
:value="item.year"> :value="item.year || item.schoolYear || item.name || item">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -303,23 +303,38 @@ const searchForm = reactive({
dateRange: null as [string, string] | null 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>({ const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: searchForm, queryForm: searchForm,
pageList: async (params: any) => { pageList: async (params: any) => {
const res = await fetchList(params) // 处理查询参数
const data = res?.data const queryParams: any = { ...params }
const tableData = data?.tableData // 处理日期范围
return { if (searchForm.dateRange && searchForm.dateRange.length === 2) {
data: { queryParams.dateRangeStr = `${searchForm.dateRange[0]},${searchForm.dateRange[1]}`
'tableData.records': tableData?.records ?? [], }
'tableData.total': tableData?.total ?? data?.total ?? 0 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: {
records: res.data.tableData.records || [],
total: res.data.tableData.total || 0
}
} }
} }
return res
}, },
props: { props: {
item: 'tableData.records', item: 'records',
totalCount: 'tableData.total' totalCount: 'total'
}, },
createdIsNeed: true createdIsNeed: true
}) })
@@ -334,20 +349,6 @@ const {
// 查询 // 查询
const handleSearch = () => { 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() getDataList()
} }
@@ -394,10 +395,20 @@ const getDeptListData = async () => {
const getSchoolYearList = async () => { const getSchoolYearList = async () => {
try { try {
const res = await queryAllSchoolYear() const res = await queryAllSchoolYear()
if (res.data && Array.isArray(res.data)) { if (res.data) {
schoolYearList.value = 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) { } catch (err) {
console.error('获取学年列表失败', err)
schoolYearList.value = [] schoolYearList.value = []
} }
} }

View File

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