|
|
@@ -102,14 +102,28 @@
|
|
|
<el-table v-loading="loading" :data="teacherList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
<el-table-column label="教师ID/账号" align="center" prop="teacherId" />
|
|
|
+ <el-table-column label="密码" align="center" prop="password2" />
|
|
|
<el-table-column label="教师姓名" align="center" prop="name" />
|
|
|
<el-table-column label="所在学校" align="center" prop="schoolName" />
|
|
|
+ <el-table-column label="所在学校班级" align="center" prop="schoolClass" />
|
|
|
<el-table-column label="培训校区" align="center" prop="campusName" />
|
|
|
+ <el-table-column label="培训校区班级" align="center" prop="campusClass" />
|
|
|
<el-table-column label="所在机构" align="center" prop="deptName" />
|
|
|
<el-table-column label="用户ID" align="center" prop="userId" />
|
|
|
+ <el-table-column label="状态" align="center" key="status">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-switch
|
|
|
+ v-model="scope.row.status"
|
|
|
+ active-value="0"
|
|
|
+ inactive-value="1"
|
|
|
+ @change="handleStatusChange(scope.row)"
|
|
|
+ ></el-switch>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
<template #default="scope">
|
|
|
- <el-button link type="primary" icon="" @click="handleUpdateTeacherClass(scope.row)" v-hasPermi="['dz:teacher:edit']">关联班级</el-button>
|
|
|
+ <el-button link type="primary" icon="" @click="handleUpdateTeacherClass(scope.row)" v-hasPermi="['dz:teacher:edit']">学校班级</el-button>
|
|
|
+ <el-button link type="primary" icon="" @click="handleUpdateCampusClass(scope.row)" v-hasPermi="['dz:teacher:edit']">校区班级</el-button>
|
|
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dz:teacher:edit']">修改</el-button>
|
|
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dz:teacher:remove']">删除</el-button>
|
|
|
</template>
|
|
|
@@ -192,6 +206,52 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!-- 关联校区班级 -->
|
|
|
+ <el-dialog :title="titleCampusClass" v-model="openCampusClass" width="500px" append-to-body>
|
|
|
+ <el-form ref="campusClassRef" :model="formCampusClass" :rules="rulesCampusClass" label-width="80px">
|
|
|
+ <el-form-item label="教师姓名" prop="name">
|
|
|
+ <el-input v-model="formCampusClass.name" placeholder="请输入教师姓名" disabled/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="培训校区" prop="campusId">
|
|
|
+ <el-select
|
|
|
+ v-model="formCampusClass.campusId"
|
|
|
+ placeholder="请选择培训校区"
|
|
|
+ style="width: 100%"
|
|
|
+ @change="handleCampusChange"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in campusOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="关联班级" prop="classIds">
|
|
|
+ <el-select
|
|
|
+ v-model="formCampusClass.classIds"
|
|
|
+ multiple
|
|
|
+ placeholder="请选择班级"
|
|
|
+ style="width: 100%"
|
|
|
+ :disabled="!formCampusClass.campusId"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in campusClassOptions"
|
|
|
+ :key="item.classId"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.classId"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="submitFormCampusClass">确 定</el-button>
|
|
|
+ <el-button @click="cancelCampusClass">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -202,6 +262,7 @@ import {listCampus} from "@/api/dz/campus"
|
|
|
import { listAllClass } from "@/api/dz/classes"
|
|
|
import { batchBindTeacherClass,listAllTeacherClass } from "@/api/dz/teacherclass"
|
|
|
import {getCampusSchoolList} from "@/api/dz/cards.js";
|
|
|
+import { changeUserStatus } from "@/api/system/user"
|
|
|
|
|
|
const { proxy } = getCurrentInstance()
|
|
|
|
|
|
@@ -209,8 +270,10 @@ const teacherList = ref([])
|
|
|
const schoolOptions = ref([])
|
|
|
const campusOptions = ref([])
|
|
|
const classOptions = ref([])
|
|
|
+const campusClassOptions = ref([])
|
|
|
const open = ref(false)
|
|
|
const openTeacherClass = ref(false)
|
|
|
+const openCampusClass = ref(false)
|
|
|
const loading = ref(true)
|
|
|
const showSearch = ref(true)
|
|
|
const ids = ref([])
|
|
|
@@ -219,6 +282,7 @@ const multiple = ref(true)
|
|
|
const total = ref(0)
|
|
|
const title = ref("")
|
|
|
const titleTeacherClass = ref("")
|
|
|
+const titleCampusClass = ref("")
|
|
|
|
|
|
const data = reactive({
|
|
|
form: {},
|
|
|
@@ -228,6 +292,12 @@ const data = reactive({
|
|
|
name: null,
|
|
|
classIds: []
|
|
|
},
|
|
|
+ formCampusClass: {
|
|
|
+ teacherId: null,
|
|
|
+ campusId: null,
|
|
|
+ name: null,
|
|
|
+ classIds: []
|
|
|
+ },
|
|
|
queryParams: {
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
@@ -243,10 +313,18 @@ const data = reactive({
|
|
|
classIds: [
|
|
|
{ required: true, message: "请选择至少一个班级", trigger: "change" }
|
|
|
]
|
|
|
+ },
|
|
|
+ rulesCampusClass: {
|
|
|
+ campusId: [
|
|
|
+ { required: true, message: "请选择培训校区", trigger: "change" }
|
|
|
+ ],
|
|
|
+ classIds: [
|
|
|
+ { required: true, message: "请选择至少一个班级", trigger: "change" }
|
|
|
+ ]
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-const { queryParams, form, formTeacherClass, rules, rulesTeacherClass } = toRefs(data)
|
|
|
+const { queryParams, form, formTeacherClass, formCampusClass, rules, rulesTeacherClass, rulesCampusClass } = toRefs(data)
|
|
|
|
|
|
/** 查询老师列表 */
|
|
|
function getList() {
|
|
|
@@ -314,6 +392,7 @@ function resetTeacherClass() {
|
|
|
classIds: [],
|
|
|
name: null
|
|
|
}
|
|
|
+ classOptions.value = []
|
|
|
proxy.resetForm("teacherClassRef")
|
|
|
}
|
|
|
|
|
|
@@ -393,9 +472,25 @@ function handleExport() {
|
|
|
}, `teacher_${new Date().getTime()}.xlsx`)
|
|
|
}
|
|
|
|
|
|
+/** 用户状态修改 */
|
|
|
+function handleStatusChange(row) {
|
|
|
+ let text = row.status === "0" ? "启用" : "关闭"
|
|
|
+ proxy.$modal.confirm('确认要"' + text + '""' + row.name + '"用户吗?').then(function () {
|
|
|
+ return changeUserStatus(row.userId, row.status)
|
|
|
+ }).then(() => {
|
|
|
+ proxy.$modal.msgSuccess(text + "成功")
|
|
|
+ }).catch(function () {
|
|
|
+ row.status = row.status === "0" ? "1" : "0"
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
/** 关联老师班级,按钮操作 */
|
|
|
function handleUpdateTeacherClass(row) {
|
|
|
resetTeacherClass()
|
|
|
+ // 先清空班级选项和已选班级
|
|
|
+ classOptions.value = []
|
|
|
+ formTeacherClass.value.classIds = []
|
|
|
+
|
|
|
// const _schoolId = row.schoolId
|
|
|
const submitData = {
|
|
|
schoolId: row.schoolId,
|
|
|
@@ -442,6 +537,94 @@ function submitFormTeacherClass() {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+/** 关联校区班级,按钮操作 */
|
|
|
+function handleUpdateCampusClass(row) {
|
|
|
+ resetCampusClass()
|
|
|
+ // 先清空班级选项和已选班级
|
|
|
+ campusClassOptions.value = []
|
|
|
+ formCampusClass.value.classIds = []
|
|
|
+
|
|
|
+ // 设置数据
|
|
|
+ formCampusClass.value.teacherId = row.teacherId
|
|
|
+ formCampusClass.value.name = row.name
|
|
|
+ // 如果有培训校区,默认选中
|
|
|
+ if (row.campusId) {
|
|
|
+ formCampusClass.value.campusId = row.campusId
|
|
|
+ // 加载该校区的班级列表
|
|
|
+ loadCampusClasses(row.campusId, row.teacherId)
|
|
|
+ }
|
|
|
+ openCampusClass.value = true
|
|
|
+ titleCampusClass.value = "关联校区班级"
|
|
|
+}
|
|
|
+
|
|
|
+/** 校区选择变化时,加载该校区的班级列表 */
|
|
|
+function handleCampusChange(campusId) {
|
|
|
+ if (campusId) {
|
|
|
+ loadCampusClasses(campusId, formCampusClass.value.teacherId)
|
|
|
+ // 清空已选择的班级
|
|
|
+ formCampusClass.value.classIds = []
|
|
|
+ } else {
|
|
|
+ campusClassOptions.value = []
|
|
|
+ formCampusClass.value.classIds = []
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 加载校区的班级列表 */
|
|
|
+function loadCampusClasses(campusId, teacherId) {
|
|
|
+ const submitData = {
|
|
|
+ schoolId: campusId,
|
|
|
+ teacherId: teacherId
|
|
|
+ }
|
|
|
+ listAllClass(submitData).then(response => {
|
|
|
+ campusClassOptions.value = response.data || []
|
|
|
+ // 加载已关联的班级
|
|
|
+ listAllTeacherClass(submitData).then(response => {
|
|
|
+ formCampusClass.value.classIds = (response.data || []).map(item => item.classId)
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/** 关联校区班级,提交按钮 */
|
|
|
+function submitFormCampusClass() {
|
|
|
+ proxy.$refs["campusClassRef"].validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ // 构建提交参数
|
|
|
+ const submitData = {
|
|
|
+ teacherId: formCampusClass.value.teacherId,
|
|
|
+ classIds: formCampusClass.value.classIds
|
|
|
+ }
|
|
|
+ // 调用关联班级的API
|
|
|
+ batchBindTeacherClass(submitData).then(response => {
|
|
|
+ proxy.$modal.msgSuccess("关联成功")
|
|
|
+ openCampusClass.value = false
|
|
|
+ getList()
|
|
|
+ }).catch(() => {
|
|
|
+ proxy.$modal.msgError("关联失败")
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+// 取消按钮
|
|
|
+function cancelCampusClass() {
|
|
|
+ openCampusClass.value = false
|
|
|
+ resetCampusClass()
|
|
|
+}
|
|
|
+
|
|
|
+// 表单重置
|
|
|
+function resetCampusClass() {
|
|
|
+ formCampusClass.value = {
|
|
|
+ teacherId: null,
|
|
|
+ campusId: null,
|
|
|
+ name: null,
|
|
|
+ classIds: []
|
|
|
+ }
|
|
|
+ campusClassOptions.value = []
|
|
|
+ if (proxy.$refs["campusClassRef"]) {
|
|
|
+ proxy.$refs["campusClassRef"].resetFields()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
getSchoolList()
|
|
|
getCampusList()
|