提交 831a8d15 authored 作者: matian's avatar matian

chore:基础管理模块优化

上级 7f186850
...@@ -183,7 +183,7 @@ export const menus: IMenuItem[] = [ ...@@ -183,7 +183,7 @@ export const menus: IMenuItem[] = [
tag: 'v1-backend-lecturer-list', tag: 'v1-backend-lecturer-list',
icon: EditPen, icon: EditPen,
name: '批改大作业', name: '批改大作业',
path: '/teach/homework' path: '/teach/work'
}, },
{ {
tag: 'v1-backend-lecturer-list', tag: 'v1-backend-lecturer-list',
......
...@@ -7,12 +7,14 @@ export function useProjectList(id?: string, projectId?: string) { ...@@ -7,12 +7,14 @@ export function useProjectList(id?: string, projectId?: string) {
getProjectList({ organization_id: id, project_id: projectId }).then((res: any) => { getProjectList({ organization_id: id, project_id: projectId }).then((res: any) => {
list.value = res.data.departments list.value = res.data.departments
members.value = res.data.members members.value = res.data.members
departmentList.value = res.data.departments.reduce((a: any, b:any) => { departmentList.value = res.data.departments.reduce((a: any, b: any) => {
console.log(a, b)
if (b.organizations.length) { if (b.organizations.length) {
a.push(b.organizations) a.push(b.organizations)
} }
return a.flat(Infinity) return a.flat(Infinity)
}, []) }, [])
console.log(departmentList)
}) })
return { list, members, departmentList } return { list, members, departmentList }
} }
<script lang="ts" setup> <script lang="ts" setup>
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import { useProjectList } from '@/composables/useGetProjectList' import { useProjectList } from '@/composables/useGetProjectList'
import { addClass, updateClass, getClassDetail, searchTeacher, getProList } from '../api' import { addClass, updateClass, getClassDetail, searchTeacher, getProList } from '../api'
const ruleFormRef = ref<FormInstance>() const ruleFormRef = ref<FormInstance>()
const userStore = useUserStore()
const store = useMapStore() const store = useMapStore()
const emit = defineEmits<Emits>() const emit = defineEmits<Emits>()
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
const startYearList = store.getMapValuesByKey('class_start_year') const startYearList = store.getMapValuesByKey('class_start_year')
const statusList = store.getMapValuesByKey('system_status') const statusList = store.getMapValuesByKey('system_status')
const teacherList: any = ref([])
const form = reactive({ const allLecturers: any = ref([])
const form: any = reactive({
code: '', code: '',
name: '', name: '',
organ_id: '', organ_id: '',
...@@ -52,6 +55,30 @@ interface Emits { ...@@ -52,6 +55,30 @@ interface Emits {
const handleCancel = () => { const handleCancel = () => {
emit('update:isShowClassDialog', false) emit('update:isShowClassDialog', false)
} }
watch(
() => form.organ_id,
() => {
if (form.organ_id !== '' || form.organ_id_name !== '') {
handleGetTeacherList()
}
}
)
const handleGetTeacherList = () => {
searchTeacher({ organ_id: form.organ_id, 'per-page': '100' }).then((res: any) => {
teacherList.value = res.data.list
teacherList.value.forEach((item: any) => {
const findItem = allLecturers.value.find((cItem: any) => cItem.id === item.id)
if (!findItem) {
allLecturers.value.push(item)
}
})
})
}
if (userStore.roles[0].name !== '超级管理员') {
form.organ_id = userStore.organization?.id
handleGetTeacherList()
}
// 确认 // 确认
const handleConfirm = async (formEl: FormInstance | undefined) => { const handleConfirm = async (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return
...@@ -59,6 +86,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -59,6 +86,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
console.log(valid) console.log(valid)
if (valid) { if (valid) {
if (props.isEdit === '0') { if (props.isEdit === '0') {
form.organ_id = form.organ_id || userStore.organization?.id
const params: any = Object.assign({}, form) const params: any = Object.assign({}, form)
addClass(params).then(() => { addClass(params).then(() => {
ElMessage.success('新增学生成功') ElMessage.success('新增学生成功')
...@@ -66,6 +95,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -66,6 +95,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
emit('create') emit('create')
}) })
} else if (props.isEdit === '1') { } else if (props.isEdit === '1') {
form.organ_id = form.organ_id || userStore.organization?.id
const params: any = Object.assign({ id: props.id }, form) const params: any = Object.assign({ id: props.id }, form)
updateClass(params).then(() => { updateClass(params).then(() => {
ElMessage.success('更新学生成功') ElMessage.success('更新学生成功')
...@@ -89,26 +120,6 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -89,26 +120,6 @@ if (props.isEdit === '2' || props.isEdit === '1') {
}) })
}) })
} }
const teacherList: any = ref([])
const allLecturers: any = ref([])
watch(
() => form.organ_id,
() => {
if (form.organ_id !== '') {
searchTeacher({ organ_id: form.organ_id, 'per-page': '100' }).then((res: any) => {
teacherList.value = res.data.list
teacherList.value.forEach((item: any) => {
const findItem = allLecturers.value.find((cItem: any) => cItem.id === item.id)
if (!findItem) {
allLecturers.value.push(item)
}
})
})
} else {
allLecturers.value = []
}
}
)
const proList: any = ref([]) const proList: any = ref([])
const allPro: any = ref([]) const allPro: any = ref([])
...@@ -133,9 +144,17 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => { ...@@ -133,9 +144,17 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => {
<el-input v-model="form.name" :disabled="props.isEdit === '2'"></el-input> <el-input v-model="form.name" :disabled="props.isEdit === '2'"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="所属部门/学校:" prop="organ_id"> <el-form-item label="所属部门/学校:" prop="organ_id">
<el-select clearable v-model="form.organ_id" style="width: 100%" :disabled="props.isEdit === '2'"> <el-select
clearable
v-model="form.organ_id"
:disabled="props.isEdit === '2'"
style="width: 100%"
placeholder="请选择所属部门/学校"
v-if="userStore.roles[0].name === '超级管理员'"
>
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
<el-input :placeholder="userStore.organization?.name" v-model="form.organ_id_name" v-else disabled> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="班主任:" prop="teacher_id"> <el-form-item label="班主任:" prop="teacher_id">
<el-select <el-select
...@@ -160,7 +179,7 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => { ...@@ -160,7 +179,7 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => {
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="入学年份:" prop="start_year"> <el-form-item label="入学年份:" prop="start_year">
<el-select v-model="form.start_year" placeholder="请选择所属部门/学校" :disabled="props.isEdit === '2'"> <el-select v-model="form.start_year" placeholder="请选择入学年份" :disabled="props.isEdit === '2'">
<el-option <el-option
v-for="(item, index) in startYearList" v-for="(item, index) in startYearList"
:key="index" :key="index"
......
<script lang="ts" setup> <script lang="ts" setup>
import { ElMessage } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import AddStudentDialog from './AddStudentDialog.vue' import AddStudentDialog from './AddStudentDialog.vue'
import AddStudent from '../../student/components/AddStudent.vue' import AddStudent from '../../student/components/AddStudent.vue'
import { getClassStuList, relationClassStu } from '../api' import { getClassStuList, relationClassStu } from '../api'
...@@ -53,10 +52,12 @@ const handleDel = (row: any) => { ...@@ -53,10 +52,12 @@ const handleDel = (row: any) => {
students_id: row.id, students_id: row.id,
type: 'delete' type: 'delete'
} }
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
relationClassStu(params).then(() => { relationClassStu(params).then(() => {
ElMessage.success('移除学生成功') ElMessage.success('移除学生成功')
handleRefresh() handleRefresh()
}) })
})
} }
const handleDetail = (row: any) => { const handleDetail = (row: any) => {
console.log(row) console.log(row)
......
<script lang="ts" setup> <script lang="ts" setup>
import { ElMessage } from 'element-plus' import { ElMessage,ElMessageBox } from 'element-plus'
import AddTermDialog from './AddTermDialog.vue' import AddTermDialog from './AddTermDialog.vue'
import AddSemester from '../../semester/components/AddSemester.vue' import AddSemester from '../../semester/components/AddSemester.vue'
...@@ -56,11 +56,12 @@ const handleDel = (row: any) => { ...@@ -56,11 +56,12 @@ const handleDel = (row: any) => {
semesters_id: row.id, semesters_id: row.id,
type: 'delete' type: 'delete'
} }
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
relationClassSem(params).then(() => { relationClassSem(params).then(() => {
ElMessage.success('移除学期成功') ElMessage.success('移除学期成功')
handleFresh() handleFresh()
}) })
console.log(row) })
} }
const handleDetail = (row: any) => { const handleDetail = (row: any) => {
isShowAddSemDialog.value = true isShowAddSemDialog.value = true
......
<script setup lang="ts"> <script setup lang="ts">
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useProjectList } from '@/composables/useGetProjectList'
import AddClass from '../components/AddClass.vue' import AddClass from '../components/AddClass.vue'
import ClassStudents from '../components/ClassStudents.vue' import ClassStudents from '../components/ClassStudents.vue'
import RelatedTerm from '../components/RelatedTerm.vue' import RelatedTerm from '../components/RelatedTerm.vue'
import { useUserStore } from '@/stores/user'
import { getClassList, updateClass } from '../api' import { getClassList, updateClass } from '../api'
const departmentList: any = useProjectList('', '79806610719731712').departmentList
// 判断当前用户是不是超级管理员
const user = useUserStore().roles
const isAdmin = !!user.find((item: any) => item.name === '超级管理员')
const appList = ref() const appList = ref()
const id = ref('') const id = ref('')
const title = ref('') const title = ref('')
...@@ -18,7 +24,7 @@ const listOptions = $computed(() => { ...@@ -18,7 +24,7 @@ const listOptions = $computed(() => {
remote: { httpRequest: getClassList, params: { name: '', organ_id: '' } }, remote: { httpRequest: getClassList, params: { name: '', organ_id: '' } },
filters: [ filters: [
{ type: 'input', prop: 'name', label: '班级名称:', placeholder: '班级名称' }, { type: 'input', prop: 'name', label: '班级名称:', placeholder: '班级名称' },
{ type: 'input', prop: 'school', label: '所属部门/学校:', placeholder: '所属部门/学校' } { type: 'select', slots: 'filter-department' }
], ],
columns: [ columns: [
{ label: '序号', type: 'index', align: 'center' }, { label: '序号', type: 'index', align: 'center' },
...@@ -82,6 +88,12 @@ const handleFresh = () => { ...@@ -82,6 +88,12 @@ const handleFresh = () => {
<el-button type="primary" round @click="handleAddClass" v-permission="'v1-learning-class-create'" <el-button type="primary" round @click="handleAddClass" v-permission="'v1-learning-class-create'"
>新增班级</el-button >新增班级</el-button
> >
<template v-if="isAdmin" #filter-department="{ params }">
<div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div>
<el-select @change="handleFresh" clearable v-model="params.organ_id">
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</template>
<template #status="{ row }"> <template #status="{ row }">
<el-switch <el-switch
size="large" size="large"
......
...@@ -84,7 +84,7 @@ const handleFresh = () => { ...@@ -84,7 +84,7 @@ const handleFresh = () => {
<el-descriptions-item label="所属部门/学校:">{{ semInfo.organ_id_name }}</el-descriptions-item> <el-descriptions-item label="所属部门/学校:">{{ semInfo.organ_id_name }}</el-descriptions-item>
<el-descriptions-item label="开始日期:">{{ semInfo.start_time }}</el-descriptions-item> <el-descriptions-item label="开始日期:">{{ semInfo.start_time }}</el-descriptions-item>
<el-descriptions-item label="结束日期:"> <el-descriptions-item label="结束日期:">
<el-tag size="small">{{ semInfo.end_time }}</el-tag> {{ semInfo.end_time }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="教学周">{{ semInfo.length }}</el-descriptions-item> <el-descriptions-item label="教学周">{{ semInfo.length }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
......
...@@ -3,16 +3,18 @@ import type { FormInstance, FormRules } from 'element-plus' ...@@ -3,16 +3,18 @@ import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import { useUserStore } from '@/stores/user'
import { useProjectList } from '@/composables/useGetProjectList' import { useProjectList } from '@/composables/useGetProjectList'
import { getSemDetail, addSem, updateSem } from '../api' import { getSemDetail, addSem, updateSem } from '../api'
const store = useMapStore() const store = useMapStore()
const userStore = useUserStore()
const emit = defineEmits<Emits>() const emit = defineEmits<Emits>()
const ruleFormRef = ref<FormInstance>() const ruleFormRef = ref<FormInstance>()
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
const statusList = store.getMapValuesByKey('system_status') const statusList = store.getMapValuesByKey('system_status')
const form = reactive({ const form: any = reactive({
name: '', name: '',
organ_id: '', organ_id: '',
start_time: '', start_time: '',
...@@ -43,6 +45,9 @@ interface Emits { ...@@ -43,6 +45,9 @@ interface Emits {
(e: 'update:isShowAddSemDialog', isShowAddSemDialog: boolean): void (e: 'update:isShowAddSemDialog', isShowAddSemDialog: boolean): void
(e: 'create'): void (e: 'create'): void
} }
if (userStore.roles[0].name !== '超级管理员') {
form.organ_id = userStore.organization?.id
}
// 取消 // 取消
const handleCancel = () => { const handleCancel = () => {
emit('update:isShowAddSemDialog', false) emit('update:isShowAddSemDialog', false)
...@@ -54,6 +59,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -54,6 +59,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
console.log(valid) console.log(valid)
if (valid) { if (valid) {
if (props.isEdit === '0') { if (props.isEdit === '0') {
form.organ_id = form.organ_id || userStore.organization?.id
const params: any = Object.assign({}, form) const params: any = Object.assign({}, form)
addSem(params).then(() => { addSem(params).then(() => {
ElMessage.success('新增学期成功') ElMessage.success('新增学期成功')
...@@ -61,6 +68,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -61,6 +68,8 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
emit('create') emit('create')
}) })
} else if (props.isEdit === '1') { } else if (props.isEdit === '1') {
form.organ_id = form.organ_id || userStore.organization?.id
const params: any = Object.assign({ id: props.id }, form) const params: any = Object.assign({ id: props.id }, form)
updateSem(params).then(() => { updateSem(params).then(() => {
ElMessage.success('更新学期成功') ElMessage.success('更新学期成功')
...@@ -92,9 +101,18 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -92,9 +101,18 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<el-input v-model="form.name" :disabled="props.isEdit === '2'"></el-input> <el-input v-model="form.name" :disabled="props.isEdit === '2'"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="所属部门/学校:" prop="organ_id"> <el-form-item label="所属部门/学校:" prop="organ_id">
<el-select clearable v-model="form.organ_id" :disabled="props.isEdit === '2'" style="width: 100%"> <el-select
clearable
v-model="form.organ_id"
:disabled="props.isEdit === '2'"
style="width: 100%"
v-if="userStore.roles[0].name === '超级管理员'"
placeholder="请选择所属部门/学校"
>
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
<el-input :placeholder="userStore.organization?.name" v-model="form.organ_id_name" v-else disabled>
</el-input>
</el-form-item> </el-form-item>
<el-form-item label="学期开始日期:" prop="start_time"> <el-form-item label="学期开始日期:" prop="start_time">
<el-date-picker <el-date-picker
......
<script lang="ts" setup> <script lang="ts" setup>
import { ElMessage } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import AddSemCourse from './AddSemCourse.vue' import AddSemCourse from './AddSemCourse.vue'
import { getSemCourse, relationSemCourse } from '../api' import { getSemCourse, relationSemCourse } from '../api'
const emit = defineEmits<Emits>() const emit = defineEmits<Emits>()
...@@ -54,10 +54,13 @@ const handleDel = (row: any) => { ...@@ -54,10 +54,13 @@ const handleDel = (row: any) => {
courses_id: row.id, courses_id: row.id,
type: 'delete' type: 'delete'
} }
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
relationSemCourse(params).then(() => { relationSemCourse(params).then(() => {
ElMessage.success('移除课程成功') ElMessage.success('移除课程成功')
handleFresh() handleFresh()
}) })
})
} }
const handleCancel = () => { const handleCancel = () => {
......
<script setup lang="ts"> <script setup lang="ts">
import { useUserStore } from '@/stores/user'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useProjectList } from '@/composables/useGetProjectList' import { useProjectList } from '@/composables/useGetProjectList'
import AddSemester from '../components/AddSemester.vue' import AddSemester from '../components/AddSemester.vue'
import SemesterCourse from '../components/SemesterCourse.vue' import SemesterCourse from '../components/SemesterCourse.vue'
import { getSemList, updateSem } from '../api' import { getSemList, updateSem } from '../api'
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
// 判断当前用户是不是超级管理员
const user = useUserStore().roles
const isAdmin = !!user.find((item: any) => item.name === '超级管理员')
const appList = ref() const appList = ref()
const title = ref('') const title = ref('')
const id = ref('') const id = ref('')
...@@ -74,9 +77,9 @@ const handleChangeStatus = (row: any) => { ...@@ -74,9 +77,9 @@ const handleChangeStatus = (row: any) => {
<el-button type="primary" round @click="handleAddSemester" v-permission="'v1-learning-semester-create'" <el-button type="primary" round @click="handleAddSemester" v-permission="'v1-learning-semester-create'"
>新增学期</el-button >新增学期</el-button
> >
<template #filter-department="{ params }"> <template v-if="isAdmin" #filter-department="{ params }">
<div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div> <div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div>
<el-select @change="handleFresh" clearable v-model="params.organ_id"> <el-select @change="handleFresh" clearable v-model="params.organ_id" placeholder="请选择所属部门/学校">
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</template> </template>
......
...@@ -33,7 +33,7 @@ const departmentList: any = useProjectList('', '79806610719731712').departmentLi ...@@ -33,7 +33,7 @@ const departmentList: any = useProjectList('', '79806610719731712').departmentLi
const sexList = store.getMapValuesByKey('system_gender') const sexList = store.getMapValuesByKey('system_gender')
const roleList = store.getMapValuesByKey('teacher_role') const roleList = store.getMapValuesByKey('teacher_role')
const statusList = store.getMapValuesByKey('system_status') const statusList = store.getMapValuesByKey('system_status')
const form = reactive({ const form: any = reactive({
organ_id: '', organ_id: '',
name: '', name: '',
gender: '1', gender: '1',
...@@ -45,6 +45,7 @@ const form = reactive({ ...@@ -45,6 +45,7 @@ const form = reactive({
const rules = reactive<FormRules>({ const rules = reactive<FormRules>({
organ_id: [{ required: true, message: '请选择部门/学校', trigger: 'change' }], organ_id: [{ required: true, message: '请选择部门/学校', trigger: 'change' }],
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
gender: [{ required: true, message: '请选择性别', trigger: 'change' }], gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
mobile: [ mobile: [
...@@ -105,22 +106,18 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -105,22 +106,18 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<template> <template>
<el-dialog :model-value="isShowStaffDialog" draggable :title="props.title" :before-close="handleCancel" width="30%"> <el-dialog :model-value="isShowStaffDialog" draggable :title="props.title" :before-close="handleCancel" width="30%">
<el-form :model="form" label-position="right" label-width="auto" :rules="rules" ref="ruleFormRef"> <el-form :model="form" label-position="right" label-width="auto" :rules="rules" ref="ruleFormRef">
<el-form-item label="所属部门/学校:" prop="school"> <el-form-item label="所属部门/学校:" prop="organ_id">
<el-select <el-select
clearable clearable
v-model="form.organ_id" v-model="form.organ_id"
:disabled="props.isEdit === '2'" :disabled="props.isEdit === '2'"
placeholder="请选择所属部门/学校"
style="width: 100%" style="width: 100%"
v-if="userStore.roles[0].name === '超级管理员'" v-if="userStore.roles[0].name === '超级管理员'"
> >
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
<el-input <el-input :placeholder="userStore.organization?.name" v-model="form.organ_id_name" v-else disabled> </el-input>
:placeholder="userStore.organization.name"
v-model="form.organ_id"
v-else-if="userStore.roles[0].name === '部门管理员'"
disabled
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="姓名:" prop="name"> <el-form-item label="姓名:" prop="name">
<el-input v-model="form.name" :disabled="props.isEdit === '2'"></el-input> <el-input v-model="form.name" :disabled="props.isEdit === '2'"></el-input>
......
...@@ -2,8 +2,12 @@ ...@@ -2,8 +2,12 @@
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import AddStaff from '../components/AddStaff.vue' import AddStaff from '../components/AddStaff.vue'
import { useProjectList } from '@/composables/useGetProjectList' import { useProjectList } from '@/composables/useGetProjectList'
import { getStaffList, updateStaff } from '../api' import { getStaffList, updateStaff } from '../api'
import { useUserStore } from '@/stores/user'
// 判断当前用户是不是超级管理员
const user = useUserStore().roles
const isAdmin = !!user.find((item: any) => item.name === '超级管理员')
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
...@@ -83,9 +87,9 @@ const handleChangeStatus = (row: any) => { ...@@ -83,9 +87,9 @@ const handleChangeStatus = (row: any) => {
<el-button type="primary" round @click="handleAddStudent" v-permission="'v1-learning-teacher-create'" <el-button type="primary" round @click="handleAddStudent" v-permission="'v1-learning-teacher-create'"
>新增教工</el-button >新增教工</el-button
> >
<template #filter-department="{ params }"> <template v-if="isAdmin" #filter-department="{ params }">
<div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div> <div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div>
<el-select @change="handleFresh" clearable v-model="params.organ_id"> <el-select @change="handleFresh" clearable v-model="params.organ_id" placeholder="请选择所属部门/学校">
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</template> </template>
......
<script lang="ts" setup> <script lang="ts" setup>
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useProjectList } from '@/composables/useGetProjectList' import { useProjectList } from '@/composables/useGetProjectList'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import { useUserStore } from '@/stores/user'
import { addStudent, updateStudent, getStuDetail, getClassList, getProList } from '../api' import { addStudent, updateStudent, getStuDetail, getClassList, getProList } from '../api'
const store = useMapStore() const store = useMapStore()
const userStore = useUserStore()
const ruleFormRef = ref<FormInstance>() const ruleFormRef = ref<FormInstance>()
const emit = defineEmits<Emits>() const emit = defineEmits<Emits>()
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
const sexList = store.mapList.filter((item: any) => item.key === 'system_gender')[0].values const sexList = store.mapList.filter((item: any) => item.key === 'system_gender')[0].values
const idTypeList = store.mapList.filter((item: any) => item.key === 'system_id_type')[0].values const idTypeList = store.mapList.filter((item: any) => item.key === 'system_id_type')[0].values
const statusList = store.getMapValuesByKey('system_status') const statusList = store.getMapValuesByKey('system_status')
const loading = ref(false)
const form = reactive({ const classList: any = ref([])
const allLecturers: any = ref([])
const form: any = reactive({
sno_number: '', sno_number: '',
name: '', name: '',
gender: '1', gender: '1',
...@@ -59,8 +61,71 @@ interface Emits { ...@@ -59,8 +61,71 @@ interface Emits {
// 取消 // 取消
const handleCancel = () => { const handleCancel = () => {
emit('update:isShowAddDialog', false) emit('update:isShowAddDialog', false)
}
const proList: any = ref([])
const allPro: any = ref([])
watch(
() => form.organ_id,
() => {
if (form.organ_id !== '' || form.organ_id_name !== '') {
handleGetProList()
}
}
)
watch(
() => form.specialty_id,
() => {
if (form.specialty_id !== '') {
handleClassList()
}
}
)
// 修改部门/学校为空的时候班级专业要清除数据
console.log('999') const handleChangeOrgan = () => {
form.specialty_id = ''
proList.value = []
form.class_id = ''
classList.value = []
}
// 修改专业为空的时候班级要清除数据
const handleChangeSpe = () => {
form.class_id = ''
classList.value = []
}
// 获取专业列表
const handleGetProList = () => {
getProList({ name: '', 'per-page': '100' }).then((res: any) => {
proList.value = res.data.list
proList.value.forEach((item: any) => {
const findItem = allPro.value.find((cItem: any) => cItem.id === item.id)
if (!findItem) {
allPro.value.push(item)
}
})
})
}
if (userStore.roles[0].name !== '超级管理员') {
form.organ_id = userStore.organization?.id
handleGetProList()
}
// 获取班级列表
const handleClassList = () => {
getClassList({
specialty_id: form.specialty_id,
organ_id: form.organ_id || userStore.organization?.id,
'per-page': '100'
}).then((res: any) => {
loading.value = false
classList.value = res.data.list
classList.value.forEach((item: any) => {
const findItem = allLecturers.value.find((cItem: any) => cItem.id === item.id)
if (!findItem) {
allLecturers.value.push(item)
}
})
})
} }
// 确认 // 确认
const handleConfirm = async (formEl: FormInstance | undefined) => { const handleConfirm = async (formEl: FormInstance | undefined) => {
...@@ -69,6 +134,7 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -69,6 +134,7 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
console.log(valid) console.log(valid)
if (valid) { if (valid) {
if (props.isEdit === '0') { if (props.isEdit === '0') {
form.organ_id = form.organ_id || userStore.organization?.id
const params: any = Object.assign({}, form) const params: any = Object.assign({}, form)
addStudent(params).then(() => { addStudent(params).then(() => {
ElMessage.success('新增学生成功') ElMessage.success('新增学生成功')
...@@ -76,7 +142,10 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -76,7 +142,10 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
emit('create') emit('create')
}) })
} else if (props.isEdit === '1') { } else if (props.isEdit === '1') {
form.organ_id = form.organ_id || userStore.organization?.id
const params: any = Object.assign({ id: props.id }, form) const params: any = Object.assign({ id: props.id }, form)
updateStudent(params).then(() => { updateStudent(params).then(() => {
ElMessage.success('更新学生成功') ElMessage.success('更新学生成功')
emit('update:isShowAddDialog', false) emit('update:isShowAddDialog', false)
...@@ -99,59 +168,6 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -99,59 +168,6 @@ if (props.isEdit === '2' || props.isEdit === '1') {
}) })
}) })
} }
const proList: any = ref([])
const allPro: any = ref([])
watch(
() => form.organ_id,
() => {
if (form.organ_id !== '') {
getProList({ name: '', 'per-page': '100' }).then((res: any) => {
proList.value = res.data.list
proList.value.forEach((item: any) => {
const findItem = allPro.value.find((cItem: any) => cItem.id === item.id)
if (!findItem) {
allPro.value.push(item)
}
})
})
}
}
)
const loading = ref(false)
const classList: any = ref([])
const allLecturers: any = ref([])
watch(
() => form.specialty_id,
() => {
if (form.organ_id !== '') {
getClassList({ specialty_id: form.specialty_id, organ_id: form.organ_id, 'per-page': '100' }).then((res: any) => {
loading.value = false
classList.value = res.data.list
classList.value.forEach((item: any) => {
const findItem = allLecturers.value.find((cItem: any) => cItem.id === item.id)
if (!findItem) {
allLecturers.value.push(item)
}
})
})
}
}
)
const handleChangeOrgan = (val: any) => {
if (val === '') {
form.specialty_id = ''
proList.value = []
form.class_id = ''
classList.value = []
}
}
const handleChangeSpe = (val: any) => {
if (val === '') {
form.class_id = ''
classList.value = []
}
}
</script> </script>
<template> <template>
<el-dialog :model-value="isShowAddDialog" draggable :before-close="handleCancel" :title="props.title" width="30%"> <el-dialog :model-value="isShowAddDialog" draggable :before-close="handleCancel" :title="props.title" width="30%">
...@@ -186,10 +202,12 @@ const handleChangeSpe = (val: any) => { ...@@ -186,10 +202,12 @@ const handleChangeSpe = (val: any) => {
:disabled="props.isEdit === '2'" :disabled="props.isEdit === '2'"
style="width: 100%" style="width: 100%"
placeholder="请选择所属部门/学校" placeholder="请选择所属部门/学校"
v-if="userStore.roles[0].name === '超级管理员'"
@change="handleChangeOrgan" @change="handleChangeOrgan"
> >
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
<el-input :placeholder="userStore.organization?.name" v-model="form.organ_id_name" v-else disabled> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="专业:" prop="specialty_id"> <el-form-item label="专业:" prop="specialty_id">
<el-select <el-select
......
...@@ -4,6 +4,11 @@ import { useProjectList } from '@/composables/useGetProjectList' ...@@ -4,6 +4,11 @@ import { useProjectList } from '@/composables/useGetProjectList'
import AddStudent from '../components/AddStudent.vue' import AddStudent from '../components/AddStudent.vue'
import ImportStudent from '../components/ImportStudent.vue' import ImportStudent from '../components/ImportStudent.vue'
import { getStudentList, exportStudent, updateStudent } from '../api' import { getStudentList, exportStudent, updateStudent } from '../api'
import { useUserStore } from '@/stores/user'
// 判断当前用户是不是超级管理员
const user = useUserStore().roles
const isAdmin = !!user.find((item: any) => item.name === '超级管理员')
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
const appList = ref() const appList = ref()
const id = ref('') const id = ref('')
...@@ -118,9 +123,9 @@ const handleSelectionChange = (val: any) => { ...@@ -118,9 +123,9 @@ const handleSelectionChange = (val: any) => {
>导出</el-button >导出</el-button
> >
<el-button type="primary" round>生源地分析</el-button> <el-button type="primary" round>生源地分析</el-button>
<template #filter-department="{ params }"> <template v-if="isAdmin" #filter-department="{ params }">
<div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div> <div class="name" style="font-size: 14px; color: #606266; padding-right: 12px">所属部门/学校:</div>
<el-select @change="handleRefresh" clearable v-model="params.organ_id"> <el-select @change="handleRefresh" clearable v-model="params.organ_id" placeholder="请选择所属部门/学校">
<el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</template> </template>
......
...@@ -181,7 +181,10 @@ const basicInfo = computed((): IBasicInfo[] => { ...@@ -181,7 +181,10 @@ const basicInfo = computed((): IBasicInfo[] => {
width: 230px; width: 230px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center;
.list-name { .list-name {
margin-left: 25px;
width: 18px; width: 18px;
height: 40px; height: 40px;
font-size: 18px; font-size: 18px;
......
...@@ -3,8 +3,8 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,8 +3,8 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teach/homework', path: '/teach/work',
component: AppLayout, component: AppLayout,
children: [{ path: '', component: () => import('./views/List.vue') }] children: [{ path: '/teach/work', component: () => import('./views/List.vue') }]
} }
] ]
\ No newline at end of file
<script setup lang="ts"> <script setup lang="ts">
// import { getProList } from '../api' // import { getProList } from '../api'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore() import CheckWork from '../components/CheckWork.vue'
import CheckHomework from '../components/CheckHomework.vue'
const appList = ref() const appList = ref()
const isShowCheckDialog = ref(false) const isShowCheckDialog = ref(false)
...@@ -50,5 +49,5 @@ const handleCheckPaper = (row: any) => { ...@@ -50,5 +49,5 @@ const handleCheckPaper = (row: any) => {
</template> </template>
</AppList> </AppList>
</AppCard> </AppCard>
<CheckHomework v-if="isShowCheckDialog === true" v-model:isShowCheckDialog="isShowCheckDialog" /> <CheckWork v-if="isShowCheckDialog === true" v-model:isShowCheckDialog="isShowCheckDialog" />
</template> </template>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论