1、学员队期下拉选择;

2、学员信息管理,操作列改为两行显示
This commit is contained in:
2026-09-23 14:58:19 +08:00
parent 90fb852cf2
commit fb3d20def6
6 changed files with 79 additions and 10 deletions
@@ -3,6 +3,7 @@ package com.roomroot.web.controller.jwgl;
import com.roomroot.jwgl.entity.XYXX; import com.roomroot.jwgl.entity.XYXX;
import com.roomroot.jwgl.entity.XYDNDXQJBXXB; import com.roomroot.jwgl.entity.XYDNDXQJBXXB;
import com.roomroot.jwgl.entity.XYDB; import com.roomroot.jwgl.entity.XYDB;
import com.roomroot.jwgl.entity.XYDQB;
import com.roomroot.jwgl.entity.PXRW; import com.roomroot.jwgl.entity.PXRW;
import com.roomroot.jwgl.entity.XYXJYDSQB; import com.roomroot.jwgl.entity.XYXJYDSQB;
import com.roomroot.jwgl.entity.XYXJYJJGB; import com.roomroot.jwgl.entity.XYXJYJJGB;
@@ -94,6 +95,14 @@ public class StudentRecordsController {
return Result.success(studentRecordsService.pageList(query, xyxx)); return Result.success(studentRecordsService.pageList(query, xyxx));
} }
/**
* 学员队期下拉选项(编号+名称),供学员信息表单选择学员队期编号。
*/
@GetMapping("/period-options")
public Result<List<XYDQB>> periodOptions() {
return Result.success(studentRecordsService.listPeriodOptions());
}
// ======================== 学员信息批量导入 ======================== // ======================== 学员信息批量导入 ========================
/** /**
@@ -2,6 +2,7 @@ package com.roomroot.jwgl.service;
import com.roomroot.jwgl.entity.XYXX; import com.roomroot.jwgl.entity.XYXX;
import com.roomroot.jwgl.entity.XYDB; import com.roomroot.jwgl.entity.XYDB;
import com.roomroot.jwgl.entity.XYDQB;
import com.roomroot.jwgl.entity.PXRW; import com.roomroot.jwgl.entity.PXRW;
import com.roomroot.jwgl.entity.XYXJYDSQB; import com.roomroot.jwgl.entity.XYXJYDSQB;
import com.roomroot.jwgl.entity.XYXJYJJGB; import com.roomroot.jwgl.entity.XYXJYJJGB;
@@ -39,6 +40,9 @@ public interface StudentRecordsService {
/** 分页查询学员列表 */ /** 分页查询学员列表 */
PageResult<XYXX> pageList(PageQuery query, XYXX xyxx); PageResult<XYXX> pageList(PageQuery query, XYXX xyxx);
/** 学员队期下拉选项(编号+名称) */
List<XYDQB> listPeriodOptions();
/** 学籍异动——留级 */ /** 学籍异动——留级 */
void retainGrade(String bh); void retainGrade(String bh);
@@ -240,6 +240,13 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
query.getPageNum(), query.getPageSize()); query.getPageNum(), query.getPageSize());
} }
@Override
public List<XYDQB> listPeriodOptions() {
return xydqbMapper.selectList(new LambdaQueryWrapper<XYDQB>()
.select(XYDQB::getBh, XYDQB::getMc, XYDQB::getXydbh)
.orderByAsc(XYDQB::getXydbh));
}
/** /**
* 当前班次编号关联学员队表、专业表、学员课程成绩,回显年级、专业、班次、考试情况、不及格门数、管理机构。 * 当前班次编号关联学员队表、专业表、学员课程成绩,回显年级、专业、班次、考试情况、不及格门数、管理机构。
*/ */
@@ -9,6 +9,14 @@ export function listStudentRecord(query) {
}) })
} }
// 学员队期下拉选项(bh 编号、mc 名称、xydbh 学员队编号)
export function listPeriodOptions() {
return request({
url: '/student-records/period-options',
method: 'get'
})
}
// 查询学员信息详情(bh 编号必传) // 查询学员信息详情(bh 编号必传)
export function getStudentRecord(bh) { export function getStudentRecord(bh) {
return request({ return request({
@@ -222,12 +222,12 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"><el-form-item label="学员队期编号" prop="xydqbh"><el-input v-model="formData.xydqbh" placeholder="请输入学员队期编号" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="学员队期编号" prop="xydqbh"><el-select v-model="formData.xydqbh" filterable clearable placeholder="请选择学员队期" class="full-width"><el-option v-for="item in periodOptions" :key="item.bh" :label="item.mc" :value="item.bh" /></el-select></el-form-item></el-col>
<el-col :span="12"><el-form-item label="证件号码" prop="zjhm"><el-input v-model="formData.zjhm" placeholder="请输入证件号码" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="证件号码" prop="zjhm"><el-input v-model="formData.zjhm" placeholder="请输入证件号码" /></el-form-item></el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"><el-form-item label="所属军区" prop="ssjq"><el-input v-model="formData.ssjq" placeholder="请输入所属军区" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="所属军区" prop="ssjq"><el-input v-model="formData.ssjq" placeholder="请输入所属军区" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="当前班次编号" prop="dqbzbh"><el-input v-model="formData.dqbzbh" placeholder="请输入当前班次编号" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="当前班次编号" prop="dqbzbh"><el-select v-model="formData.dqbzbh" filterable clearable placeholder="请选择班次" class="full-width"><el-option v-for="item in teamOptions" :key="item.xydbh" :label="item.xydmc" :value="item.xydbh" /></el-select></el-form-item></el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"><el-form-item label="军人证件类型" prop="jrzjlx"><el-input v-model="formData.jrzjlx" placeholder="请输入军人证件类型" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="军人证件类型" prop="jrzjlx"><el-input v-model="formData.jrzjlx" placeholder="请输入军人证件类型" /></el-form-item></el-col>
@@ -327,6 +327,7 @@
<script> <script>
import { import {
listStudentRecord, listStudentRecord,
listPeriodOptions,
getStudentRecord, getStudentRecord,
addStudentRecord, addStudentRecord,
updateStudentRecord, updateStudentRecord,
@@ -336,6 +337,7 @@ import {
exportStudentGrades, exportStudentGrades,
exportStudentProcessGrades exportStudentProcessGrades
} from "@/api/studentRecords/studentRecords" } from "@/api/studentRecords/studentRecords"
import { listTeam } from '@/api/studentRecords/team'
import { getDicts } from '@/api/system/dict/data' import { getDicts } from '@/api/system/dict/data'
import { optionselect } from '@/api/system/dict/type' import { optionselect } from '@/api/system/dict/type'
@@ -423,10 +425,14 @@ export default {
dialogVisible: false, dialogVisible: false,
dialogTitle: '新增学员', dialogTitle: '新增学员',
submitting: false, submitting: false,
periodOptions: [],
periodOptionsLoaded: false,
teamOptions: [],
teamOptionsLoaded: false,
formData: this.createEmptyForm(), formData: this.createEmptyForm(),
formRules: { formRules: {
xm: [{ required: true, message: '请输入姓名', trigger: 'blur' }], xm: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
xydqbh: [{ required: true, message: '请输入学员队期编号', trigger: 'blur' }], xydqbh: [{ required: true, message: '请选择学员队期', trigger: 'change' }],
zjhm: [ zjhm: [
{ required: true, message: '请输入证件号码', trigger: 'blur' }, { required: true, message: '请输入证件号码', trigger: 'blur' },
{ validator: validateCertificateNumber, trigger: 'blur' } { validator: validateCertificateNumber, trigger: 'blur' }
@@ -444,7 +450,7 @@ export default {
ssjq: [{ required: true, message: '请输入所属军区', trigger: 'blur' }], ssjq: [{ required: true, message: '请输入所属军区', trigger: 'blur' }],
gfs: [{ required: true, message: '请选择国防生', trigger: 'change' }], gfs: [{ required: true, message: '请选择国防生', trigger: 'change' }],
yxckcj: [{ required: true, message: '请选择允许查看成绩', trigger: 'change' }], yxckcj: [{ required: true, message: '请选择允许查看成绩', trigger: 'change' }],
dqbzbh: [{ required: true, message: '请输入当前班次编号', trigger: 'blur' }], dqbzbh: [{ required: true, message: '请选择当前班次', trigger: 'change' }],
yzc: [{ required: true, message: '请选择已注册', trigger: 'change' }], yzc: [{ required: true, message: '请选择已注册', trigger: 'change' }],
jrzjlx: [{ required: true, message: '请输入军人证件类型', trigger: 'blur' }], jrzjlx: [{ required: true, message: '请输入军人证件类型', trigger: 'blur' }],
lxdh: [{ validator: validatePhoneNumber, trigger: 'blur' }] lxdh: [{ validator: validatePhoneNumber, trigger: 'blur' }]
@@ -620,15 +626,36 @@ export default {
}) })
}, },
loadPeriodOptions() {
if (this.periodOptionsLoaded) return
listPeriodOptions().then(res => {
this.periodOptions = (res && res.data) || []
this.periodOptionsLoaded = true
}).catch(() => {})
},
loadTeamOptions() {
if (this.teamOptionsLoaded) return
listTeam({ pageNum: 1, pageSize: 1000 }).then(res => {
const data = (res && res.data) || {}
this.teamOptions = data.records || []
this.teamOptionsLoaded = true
}).catch(() => {})
},
handleAdd() { handleAdd() {
this.dialogTitle = '新增学员' this.dialogTitle = '新增学员'
this.resetForm() this.resetForm()
this.loadPeriodOptions()
this.loadTeamOptions()
this.dialogVisible = true this.dialogVisible = true
}, },
handleEdit(row) { handleEdit(row) {
this.dialogTitle = '编辑学员' this.dialogTitle = '编辑学员'
this.resetForm() this.resetForm()
this.loadPeriodOptions()
this.loadTeamOptions()
if (!row.bh) { if (!row.bh) {
Object.assign(this.formData, this.createEmptyForm(), row) Object.assign(this.formData, this.createEmptyForm(), row)
this.dialogVisible = true this.dialogVisible = true
@@ -120,13 +120,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bz" label="备注" min-width="120" align="left" header-align="center" show-overflow-tooltip /> <el-table-column prop="bz" label="备注" min-width="120" align="left" header-align="center" show-overflow-tooltip />
<el-table-column label="操作" width="310" align="center" fixed="right" class-name="table-action-column"> <el-table-column label="操作" width="210" align="center" fixed="right" class-name="table-action-column">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-button type="text" size="small" @click="handleEdit(row)">编辑</el-button> <div class="op-btn-grid">
<el-button type="text" size="small" @click="handleEditEventCalendar(row)">班历</el-button> <el-button type="text" size="small" @click="handleEdit(row)">编辑</el-button>
<el-button type="text" size="small" @click="handleEditCalendar(row)">次课程</el-button> <el-button type="text" size="small" @click="handleEditEventCalendar(row)"></el-button>
<el-button type="text" size="small" @click="handleSchedule(row)">排课</el-button> <el-button type="text" size="small" @click="handleEditCalendar(row)">班次课程</el-button>
<el-button type="text" size="small" class="text-danger" @click="handleDeleteRow(row)">删除</el-button> <el-button type="text" size="small" @click="handleSchedule(row)">排课</el-button>
<el-button type="text" size="small" class="text-danger" @click="handleDeleteRow(row)">删除</el-button>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -1034,6 +1036,18 @@ export default {
width: 100%; width: 100%;
} }
// ========== 操作列:按钮分两行(三列网格)显示 ==========
.op-btn-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
justify-items: center;
row-gap: 2px;
.el-button {
margin-left: 0;
}
}
.text-danger { .text-danger {
color: #f56c6c; color: #f56c6c;
} }