全局用到全量查询的下拉框 做模糊查询

This commit is contained in:
2026-08-27 14:40:16 +08:00
parent 26072ffe4e
commit 2328a6c938
10 changed files with 86 additions and 22 deletions
@@ -27,6 +27,7 @@
:value="activeSemester ? activeSemester.nd : ''" :value="activeSemester ? activeSemester.nd : ''"
placeholder="请选择学期" placeholder="请选择学期"
size="small" size="small"
filterable
class="semester-select" class="semester-select"
@change="handleSwitch" @change="handleSwitch"
> >
+48 -11
View File
@@ -153,7 +153,21 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="专业代号" prop="zydh"> <el-form-item label="专业代号" prop="zydh">
<el-input v-model="form.zydh" placeholder="请输入专业代号" /> <el-select
v-model="form.zydh"
:loading="majorOptionsLoading"
placeholder="请选择专业"
clearable
filterable
class="w-full"
>
<el-option
v-for="item in majorOptions"
:key="item.zydh"
:label="formatMajorLabel(item)"
:value="item.zydh"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@@ -214,11 +228,6 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="序号">
<el-input-number v-model="form.xh" :min="0" controls-position="right" style="width: 100%" />
</el-form-item>
</el-col>
</el-row> </el-row>
<el-divider content-position="left">培训与状态</el-divider> <el-divider content-position="left">培训与状态</el-divider>
@@ -308,7 +317,6 @@
<el-descriptions-item label="系统模式">{{ detailForm.xtms || '-' }}</el-descriptions-item> <el-descriptions-item label="系统模式">{{ detailForm.xtms || '-' }}</el-descriptions-item>
<el-descriptions-item label="简称">{{ detailForm.jc || '-' }}</el-descriptions-item> <el-descriptions-item label="简称">{{ detailForm.jc || '-' }}</el-descriptions-item>
<el-descriptions-item label="所属单位">{{ detailForm.ssdw || '-' }}</el-descriptions-item> <el-descriptions-item label="所属单位">{{ detailForm.ssdw || '-' }}</el-descriptions-item>
<el-descriptions-item label="序号">{{ fmtValue(detailForm.xh) }}</el-descriptions-item>
<el-descriptions-item label="任务类别">{{ detailForm.rwlb || '-' }}</el-descriptions-item> <el-descriptions-item label="任务类别">{{ detailForm.rwlb || '-' }}</el-descriptions-item>
<el-descriptions-item label="虚实类型"> <el-descriptions-item label="虚实类型">
<el-tag :type="Number(detailForm.xslx) === 1 ? 'success' : 'info'" size="mini"> <el-tag :type="Number(detailForm.xslx) === 1 ? 'success' : 'info'" size="mini">
@@ -352,11 +360,13 @@ import {
downloadTeamTemplate downloadTeamTemplate
} from '@/api/studentRecords/team' } from '@/api/studentRecords/team'
import { getDicts } from '@/api/system/dict/data' import { getDicts } from '@/api/system/dict/data'
import { listMajor } from '@/api/subjectMajor/major'
const TEAM_TYPE_DICT_CODE = 'stu_type' const TEAM_TYPE_DICT_CODE = 'stu_type'
const SESSION_CATEGORY_DICT_CODE = 'session_category' const SESSION_CATEGORY_DICT_CODE = 'session_category'
const SYSTEM_MODE_DICT_CODE = 'system_mode' const SYSTEM_MODE_DICT_CODE = 'system_mode'
const UNIT_CATEGORY_DICT_CODE = 'sys_unit_category' const UNIT_CATEGORY_DICT_CODE = 'sys_unit_category'
const MAJOR_OPTION_PAGE_SIZE = 10000
export default { export default {
name: 'ShiftTeamIndex', name: 'ShiftTeamIndex',
@@ -375,6 +385,8 @@ export default {
sessionCategoryOptions: [], sessionCategoryOptions: [],
systemModeOptions: [], systemModeOptions: [],
unitCategoryOptions: [], unitCategoryOptions: [],
majorOptions: [],
majorOptionsLoading: false,
trainingTaskOptions: [], trainingTaskOptions: [],
trainingTaskLoading: false, trainingTaskLoading: false,
@@ -399,7 +411,7 @@ export default {
xydbh: [{ required: true, message: '请输入学员队编号', trigger: 'blur' }], xydbh: [{ required: true, message: '请输入学员队编号', trigger: 'blur' }],
xydmc: [{ required: true, message: '请输入学员队名称', trigger: 'blur' }], xydmc: [{ required: true, message: '请输入学员队名称', trigger: 'blur' }],
xydrs: [{ required: true, message: '请输入学员队人数', trigger: 'change' }], xydrs: [{ required: true, message: '请输入学员队人数', trigger: 'change' }],
zydh: [{ required: true, message: '请输入专业代号', trigger: 'blur' }], zydh: [{ required: true, message: '请选择专业', trigger: 'change' }],
rwlb: [{ required: true, message: '请输入任务类别', trigger: 'blur' }], rwlb: [{ required: true, message: '请输入任务类别', trigger: 'blur' }],
xslx: [{ required: true, message: '请选择虚实类型', trigger: 'change' }], xslx: [{ required: true, message: '请选择虚实类型', trigger: 'change' }],
rxrq: [{ required: true, message: '请选择入学日期', trigger: 'change' }], rxrq: [{ required: true, message: '请选择入学日期', trigger: 'change' }],
@@ -423,6 +435,7 @@ export default {
}, },
mounted() { mounted() {
this.loadTeamDictionaries() this.loadTeamDictionaries()
this.loadMajorOptions()
this.fetchList() this.fetchList()
}, },
methods: { methods: {
@@ -441,6 +454,33 @@ export default {
this.unitCategoryOptions = unitCategoryResponse.data || [] this.unitCategoryOptions = unitCategoryResponse.data || []
}, },
/** 加载专业下拉选项,标签同时包含名称、代码和代号,便于直接模糊搜索。 */
async loadMajorOptions() {
this.majorOptionsLoading = true
try {
const response = await listMajor({
pageNum: 1,
pageSize: MAJOR_OPTION_PAGE_SIZE,
ty: false
})
const data = response.data || {}
this.majorOptions = Array.isArray(data.records) ? data.records : []
} catch (error) {
this.majorOptions = []
} finally {
this.majorOptionsLoading = false
}
},
formatMajorLabel(item) {
const identifiers = [item.zydm, item.zydh].filter(Boolean).join(' / ')
if (!item.zymc) {
return identifiers
}
return identifiers ? `${item.zymc}(${identifiers})` : item.zymc
},
createEmptyForm() { createEmptyForm() {
return { return {
xydbh: '', xydbh: '',
@@ -451,7 +491,6 @@ export default {
zyjsbh: '', zyjsbh: '',
bz: '', bz: '',
zxzt: undefined, zxzt: undefined,
xh: undefined,
rwlb: '', rwlb: '',
xslx: 1, xslx: 1,
rxrq: '', rxrq: '',
@@ -575,7 +614,6 @@ export default {
zyjsbh: d.zyjsbh || '', zyjsbh: d.zyjsbh || '',
bz: d.bz || '', bz: d.bz || '',
zxzt: this.normalizeSchoolStatus(d.zxzt), zxzt: this.normalizeSchoolStatus(d.zxzt),
xh: d.xh !== null && d.xh !== undefined ? d.xh : undefined,
rwlb: d.rwlb || '', rwlb: d.rwlb || '',
xslx: d.xslx !== null && d.xslx !== undefined ? Number(d.xslx) : 1, xslx: d.xslx !== null && d.xslx !== undefined ? Number(d.xslx) : 1,
rxrq: this.formatDate(d.rxrq), rxrq: this.formatDate(d.rxrq),
@@ -636,7 +674,6 @@ export default {
if (f.xydrs !== '' && f.xydrs !== null && f.xydrs !== undefined) payload.xydrs = Number(f.xydrs) if (f.xydrs !== '' && f.xydrs !== null && f.xydrs !== undefined) payload.xydrs = Number(f.xydrs)
// 字符串字段 // 字符串字段
if (f.zxzt !== '' && f.zxzt !== null && f.zxzt !== undefined) payload.zxzt = String(f.zxzt) if (f.zxzt !== '' && f.zxzt !== null && f.zxzt !== undefined) payload.zxzt = String(f.zxzt)
if (f.xh !== '' && f.xh !== null && f.xh !== undefined) payload.xh = String(f.xh)
// 后端字段为 LocalDateTime,日期选择器值统一补齐当天零点。 // 后端字段为 LocalDateTime,日期选择器值统一补齐当天零点。
if (f.rxrq) payload.rxrq = `${this.formatDate(f.rxrq)}T00:00:00` if (f.rxrq) payload.rxrq = `${this.formatDate(f.rxrq)}T00:00:00`
if (f.byrq) payload.byrq = `${this.formatDate(f.byrq)}T00:00:00` if (f.byrq) payload.byrq = `${this.formatDate(f.byrq)}T00:00:00`
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="app-container system-dict-data"> <div class="app-container system-dict-data">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="字典名称" prop="dictType"> <el-form-item label="字典名称" prop="dictType">
<el-select v-model="queryParams.dictType"> <el-select v-model="queryParams.dictType" filterable>
<el-option <el-option
v-for="item in typeOptions" v-for="item in typeOptions"
:key="item.dictId" :key="item.dictId"
+2 -2
View File
@@ -141,14 +141,14 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="岗位"> <el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择岗位"> <el-select v-model="form.postIds" multiple filterable placeholder="请选择岗位">
<el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId" :disabled="item.status == 1" ></el-option> <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId" :disabled="item.status == 1" ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="角色"> <el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色"> <el-select v-model="form.roleIds" multiple filterable placeholder="请选择角色">
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option> <el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -23,6 +23,7 @@
v-model="searchForm.nd" v-model="searchForm.nd"
placeholder="请选择年度" placeholder="请选择年度"
clearable clearable
filterable
style="width: 100%" style="width: 100%"
> >
<el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" />
@@ -23,7 +23,13 @@
<div class="section-card"> <div class="section-card">
<el-form :model="queryParams" :inline="true" size="small" class="search-form" @submit.native.prevent> <el-form :model="queryParams" :inline="true" size="small" class="search-form" @submit.native.prevent>
<el-form-item label="年度"> <el-form-item label="年度">
<el-select v-model="queryParams.nd" placeholder="请选择年度" clearable style="width: 140px"> <el-select
v-model="queryParams.nd"
placeholder="请选择年度"
clearable
filterable
style="width: 140px"
>
<el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -99,7 +105,13 @@
<el-dialog title="新增课表调整申请" :visible.sync="addVisible" width="640px" append-to-body> <el-dialog title="新增课表调整申请" :visible.sync="addVisible" width="640px" append-to-body>
<el-form ref="addForm" :model="addForm" :rules="addRules" label-width="110px"> <el-form ref="addForm" :model="addForm" :rules="addRules" label-width="110px">
<el-form-item label="年度" prop="nd"> <el-form-item label="年度" prop="nd">
<el-select v-model="addForm.nd" placeholder="请选择年度" style="width: 100%" @change="handleAddYearChange"> <el-select
v-model="addForm.nd"
placeholder="请选择年度"
filterable
style="width: 100%"
@change="handleAddYearChange"
>
<el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -10,7 +10,13 @@
<div class="header-actions"> <div class="header-actions">
<el-form inline class="toolbar-form" @submit.native.prevent> <el-form inline class="toolbar-form" @submit.native.prevent>
<el-form-item label="年度" class="year-item"> <el-form-item label="年度" class="year-item">
<el-select v-model="nd" placeholder="请选择年度" style="width: 130px" @change="handleNdChange"> <el-select
v-model="nd"
placeholder="请选择年度"
filterable
style="width: 130px"
@change="handleNdChange"
>
<el-option v-for="y in yearOptions" :key="y" :label="y + ' 年'" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="y + ' 年'" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -24,7 +24,7 @@
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="年度" prop="nd"> <el-form-item label="年度" prop="nd">
<el-select v-model="form.nd" placeholder="请选择年度" style="width: 100%"> <el-select v-model="form.nd" placeholder="请选择年度" filterable style="width: 100%">
<el-option v-for="y in yearOptions" :key="y" :label="`${y}年`" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="`${y}年`" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -16,7 +16,14 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="年度"> <el-form-item label="年度">
<el-select v-model="filterYear" placeholder="全部年度" clearable style="width: 140px" @change="handleYearChange"> <el-select
v-model="filterYear"
placeholder="全部年度"
clearable
filterable
style="width: 140px"
@change="handleYearChange"
>
<el-option v-for="y in yearFilterOptions" :key="y" :label="`${y}年`" :value="y" /> <el-option v-for="y in yearFilterOptions" :key="y" :label="`${y}年`" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -131,7 +138,7 @@
> >
<el-form ref="batchAddFormRef" :model="batchAddForm" :rules="batchAddRules" label-width="100px"> <el-form ref="batchAddFormRef" :model="batchAddForm" :rules="batchAddRules" label-width="100px">
<el-form-item label="年度" prop="nd"> <el-form-item label="年度" prop="nd">
<el-select v-model="batchAddForm.nd" placeholder="请选择年度" style="width: 100%"> <el-select v-model="batchAddForm.nd" placeholder="请选择年度" filterable style="width: 100%">
<el-option v-for="y in yearOptions" :key="y" :label="`${y}年`" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="`${y}年`" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -16,7 +16,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="年度"> <el-form-item label="年度">
<el-select v-model="searchForm.nd" placeholder="请选择年度" clearable style="width: 140px"> <el-select v-model="searchForm.nd" placeholder="请选择年度" clearable filterable style="width: 140px">
<el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -109,7 +109,7 @@
<el-input v-model="form.rwmc" placeholder="请输入任务名称" clearable /> <el-input v-model="form.rwmc" placeholder="请输入任务名称" clearable />
</el-form-item> </el-form-item>
<el-form-item label="年度" prop="nd"> <el-form-item label="年度" prop="nd">
<el-select v-model="form.nd" placeholder="请选择年度" style="width: 100%"> <el-select v-model="form.nd" placeholder="请选择年度" filterable style="width: 100%">
<el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" /> <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" />
</el-select> </el-select>
</el-form-item> </el-form-item>