提交 d40826b4 authored 作者: matian's avatar matian

chore:部分权限添加以及页面调整

上级 61321542
...@@ -94,13 +94,13 @@ export const menus: IMenuItem[] = [ ...@@ -94,13 +94,13 @@ export const menus: IMenuItem[] = [
path: '/admin/teacher' path: '/admin/teacher'
}, },
{ {
tag: 'v1-backend-lecturer-list', tag: 'v1-learning-teacher-list',
icon: School, icon: School,
name: '教工用户管理', name: '教工用户管理',
path: '/admin/staff' path: '/admin/staff'
}, },
{ {
tag: 'v1-backend-lecturer-list', tag: 'v1-learning-student-list',
icon: User, icon: User,
name: '学生管理', name: '学生管理',
path: '/admin/student' path: '/admin/student'
...@@ -112,13 +112,13 @@ export const menus: IMenuItem[] = [ ...@@ -112,13 +112,13 @@ export const menus: IMenuItem[] = [
path: '/admin/pro' path: '/admin/pro'
}, },
{ {
tag: 'v1-backend-lecturer-list', tag: 'v1-learning-class-list',
icon: School, icon: School,
name: '班级管理', name: '班级管理',
path: '/admin/class' path: '/admin/class'
}, },
{ {
tag: 'v1-backend-lecturer-list', tag: 'v1-learning-semester-list',
icon: Guide, icon: Guide,
name: '学期管理', name: '学期管理',
path: '/admin/semester' path: '/admin/semester'
......
...@@ -10,6 +10,7 @@ const emit = defineEmits<Emits>() ...@@ -10,6 +10,7 @@ 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 form = reactive({ const form = reactive({
code: '', code: '',
...@@ -21,11 +22,11 @@ const form = reactive({ ...@@ -21,11 +22,11 @@ const form = reactive({
status: '1' status: '1'
}) })
const rules = reactive<FormRules>({ const rules = reactive<FormRules>({
code: [{ required: true, message: '请输入班级代码', trigger: 'change' }], code: [{ required: true, message: '请输入班级代码', trigger: 'blur' }],
name: [{ required: true, message: '请输入班级名称', trigger: 'blur' }], name: [{ required: true, message: '请输入班级名称', trigger: 'blur' }],
organ_id: [{ required: true, message: '请选择所属部门/学校', trigger: 'change' }], organ_id: [{ required: true, message: '请选择所属部门/学校', trigger: 'change' }],
teacher_id: [{ required: true, message: '请选择班主任', trigger: 'change' }], teacher_id: [{ required: true, message: '请选择班主任', trigger: 'change' }],
specialty_id: [{ required: true, message: '请选择所属专业', trigger: 'blur' }], specialty_id: [{ required: true, message: '请选择所属专业', trigger: 'change' }],
start_year: [{ required: true, message: '请选择入学年份', trigger: 'change' }], start_year: [{ required: true, message: '请选择入学年份', trigger: 'change' }],
status: [{ required: true, message: '请选择状态', trigger: 'change' }] status: [{ required: true, message: '请选择状态', trigger: 'change' }]
}) })
...@@ -126,28 +127,40 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => { ...@@ -126,28 +127,40 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => {
<el-dialog :model-value="isShowClassDialog" draggable :before-close="handleCancel" :title="props.title" width="30%"> <el-dialog :model-value="isShowClassDialog" draggable :before-close="handleCancel" :title="props.title" 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="code"> <el-form-item label="班级代码:" prop="code">
<el-input v-model="form.code" :disabled="props.title === '查看详情'"></el-input> <el-input v-model="form.code" :disabled="props.isEdit === '2'"></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.title === '查看详情'"></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.title === '查看详情'" style="width: 100%"> <el-select clearable v-model="form.organ_id" style="width: 100%" :disabled="props.isEdit === '2'">
<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-form-item> </el-form-item>
<el-form-item label="班主任:" prop="teacher_id"> <el-form-item label="班主任:" prop="teacher_id">
<el-select v-model="form.teacher_id" clearable placeholder="请输入班主任" style="width: 230px"> <el-select
v-model="form.teacher_id"
clearable
placeholder="请输入班主任"
style="width: 230px"
:disabled="props.isEdit === '2'"
>
<el-option v-for="item in teacherList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in teacherList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="所属专业:" prop="specialty_id"> <el-form-item label="所属专业:" prop="specialty_id">
<el-select v-model="form.specialty_id" clearable placeholder="请输入所属专业" style="width: 230px"> <el-select
v-model="form.specialty_id"
clearable
placeholder="请输入所属专业"
style="width: 230px"
:disabled="props.isEdit === '2'"
>
<el-option v-for="item in proList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in proList" :key="item.id" :label="item.name" :value="item.id" />
</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.title === '查看详情'"> <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"
...@@ -156,19 +169,13 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => { ...@@ -156,19 +169,13 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => {
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="生效状态:" prop="status">
<el-switch <el-radio-group v-model="form.status" :disabled="props.isEdit === '2'">
size="large" <el-radio v-for="(item, index) in statusList" :key="index" :label="item.value">{{ item.label }}</el-radio>
v-model="form.status" </el-radio-group>
active-value="1"
inactive-value="0"
inline-prompt
style="--el-switch-on-color: #aa1941"
:disabled="props.title === '查看详情'"
></el-switch>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer v-if="props.isEdit === '1'"> <template #footer v-if="props.isEdit !== '2'">
<span> <span>
<el-button @click="handleCancel">取消</el-button> <el-button @click="handleCancel">取消</el-button>
<el-button type="primary" @click="handleConfirm(ruleFormRef)">确认</el-button> <el-button type="primary" @click="handleConfirm(ruleFormRef)">确认</el-button>
......
...@@ -87,7 +87,9 @@ const handleCancel = () => { ...@@ -87,7 +87,9 @@ const handleCancel = () => {
style="margin-top: 30px" style="margin-top: 30px"
@selection-change="handleSelectChange" @selection-change="handleSelectChange"
> >
<el-button type="primary" round @click="handleAddStu">关联选择学生</el-button> <el-button type="primary" round @click="handleAddStu" v-permission="'v1-learning-class-add-students'"
>关联选择学生</el-button
>
</AppList> </AppList>
</div> </div>
<!-- 新增学生 --> <!-- 新增学生 -->
......
...@@ -37,7 +37,7 @@ const listOptions = $computed(() => { ...@@ -37,7 +37,7 @@ const listOptions = $computed(() => {
{ label: '序号', type: 'index', align: 'center' }, { label: '序号', type: 'index', align: 'center' },
{ label: '学号', prop: 'sno_number', align: 'center' }, { label: '学号', prop: 'sno_number', align: 'center' },
{ label: '姓名', prop: 'name', align: 'center' }, { label: '姓名', prop: 'name', align: 'center' },
{ label: '性别', prop: 'gender', align: 'center' }, { label: '性别', prop: 'gender_name', align: 'center' },
{ label: '有效状态', prop: 'status_name', align: 'center' }, { label: '有效状态', prop: 'status_name', align: 'center' },
{ label: '更新时间', prop: 'updated_time', align: 'center' }, { label: '更新时间', prop: 'updated_time', align: 'center' },
{ label: '操作', slots: 'table-operate', align: 'center', minWidth: '200', fixed: 'right' } { label: '操作', slots: 'table-operate', align: 'center', minWidth: '200', fixed: 'right' }
...@@ -76,16 +76,18 @@ const handleRefresh = () => { ...@@ -76,16 +76,18 @@ const handleRefresh = () => {
<div style="overflow-y: auto; height: 70vh"> <div style="overflow-y: auto; height: 70vh">
<el-descriptions> <el-descriptions>
<el-descriptions-item label="班级代码:">{{ classInfo?.code }}</el-descriptions-item> <el-descriptions-item label="班级代码:">{{ classInfo?.code }}</el-descriptions-item>
<el-descriptions-item label="班级名称">{{ classInfo?.name }}</el-descriptions-item> <el-descriptions-item label="班级名称:">{{ classInfo?.name }}</el-descriptions-item>
<el-descriptions-item label="所属部门/学校:">{{ classInfo?.organ_id_name }}</el-descriptions-item> <el-descriptions-item label="所属部门/学校:">{{ classInfo?.organ_id_name }}</el-descriptions-item>
<el-descriptions-item label="班 主 任:"> <el-descriptions-item label="班 主 任:">
<el-tag size="small">{{ classInfo?.teacher_id_name }}</el-tag> {{ classInfo?.teacher_id_name }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="所属专业">{{ classInfo?.specialty_id_name }}</el-descriptions-item> <el-descriptions-item label="所属专业:">{{ classInfo?.specialty_id_name }}</el-descriptions-item>
<el-descriptions-item label="入学年份">{{ classInfo?.start_year_name }}</el-descriptions-item> <el-descriptions-item label="入学年份:">{{ classInfo?.start_year_name }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddStu">添加学生</el-button> <el-button type="primary" round @click="handleAddStu" v-permission="'v1-learning-class-add-students'"
>添加学生</el-button
>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<el-link type="primary" plain @click="handleDetail(row)">查看</el-link> <el-link type="primary" plain @click="handleDetail(row)">查看</el-link>
......
...@@ -79,13 +79,13 @@ const handleFresh = () => { ...@@ -79,13 +79,13 @@ const handleFresh = () => {
<div style="overflow-y: auto; height: 70vh"> <div style="overflow-y: auto; height: 70vh">
<el-descriptions> <el-descriptions>
<el-descriptions-item label="班级代码:">{{ classInfo?.code }}</el-descriptions-item> <el-descriptions-item label="班级代码:">{{ classInfo?.code }}</el-descriptions-item>
<el-descriptions-item label="班级名称">{{ classInfo?.name }}</el-descriptions-item> <el-descriptions-item label="班级名称:">{{ classInfo?.name }}</el-descriptions-item>
<el-descriptions-item label="所属部门/学校:">{{ classInfo?.organ_id_name }}</el-descriptions-item> <el-descriptions-item label="所属部门/学校:">{{ classInfo?.organ_id_name }}</el-descriptions-item>
<el-descriptions-item label="班 主 任:"> <el-descriptions-item label="班 主 任:">
<el-tag size="small">{{ classInfo?.teacher_id_name }}</el-tag> {{ classInfo?.teacher_id_name }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="所属专业">{{ classInfo?.specialty_id_name }}</el-descriptions-item> <el-descriptions-item label="所属专业:">{{ classInfo?.specialty_id_name }}</el-descriptions-item>
<el-descriptions-item label="入学年份">{{ classInfo?.start_year_name }}</el-descriptions-item> <el-descriptions-item label="入学年份:">{{ classInfo?.start_year_name }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddTerm">添加学期</el-button> <el-button type="primary" round @click="handleAddTerm">添加学期</el-button>
......
<script setup lang="ts"> <script setup lang="ts">
import { getClassList } from '../api' import { ElMessage } from 'element-plus'
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 { getClassList, updateClass } from '../api'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore()
const appList = ref() const appList = ref()
const id = ref('') const id = ref('')
const title = ref('') const title = ref('')
...@@ -29,6 +29,7 @@ const listOptions = $computed(() => { ...@@ -29,6 +29,7 @@ const listOptions = $computed(() => {
{ label: '班主任', prop: 'teacher_id_name', align: 'center' }, { label: '班主任', prop: 'teacher_id_name', align: 'center' },
{ label: '专业', prop: 'specialty_id_name', align: 'center' }, { label: '专业', prop: 'specialty_id_name', align: 'center' },
{ label: '入学年份', prop: 'start_year_name', align: 'center' }, { label: '入学年份', prop: 'start_year_name', align: 'center' },
{ label: '生效状态', slots: 'status', align: 'center' },
{ label: '更新时间', prop: 'updated_time', align: 'center' }, { label: '更新时间', prop: 'updated_time', align: 'center' },
{ label: '操作', slots: 'table-operate', align: 'center', minWidth: '300', fixed: 'right' } { label: '操作', slots: 'table-operate', align: 'center', minWidth: '300', fixed: 'right' }
] ]
...@@ -60,6 +61,16 @@ const handleRelating = (row: any) => { ...@@ -60,6 +61,16 @@ const handleRelating = (row: any) => {
isRelatingDialog.value = true isRelatingDialog.value = true
id.value = row.id id.value = row.id
} }
// 更新班级状态
const handleChangeStatus = (row: any) => {
if (row.id !== undefined) {
const params: any = Object.assign({}, row)
updateClass(params).then(() => {
ElMessage.success('更新班级成功')
handleFresh()
})
}
}
const handleFresh = () => { const handleFresh = () => {
appList.value.refetch() appList.value.refetch()
} }
...@@ -68,13 +79,34 @@ const handleFresh = () => { ...@@ -68,13 +79,34 @@ const handleFresh = () => {
<template> <template>
<AppCard title="班级管理"> <AppCard title="班级管理">
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddClass">新增班级</el-button> <el-button type="primary" round @click="handleAddClass" v-permission="'v1-learning-class-create'"
>新增班级</el-button
>
<template #status="{ row }">
<el-switch
size="large"
v-model="row.status"
active-value="1"
inactive-value="0"
inline-prompt
style="--el-switch-on-color: #aa1941"
@change="handleChangeStatus(row)"
></el-switch>
</template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<el-link type="primary" plain @click="handleDetail(row)">查看</el-link> <el-link type="primary" plain @click="handleDetail(row)" v-permission="'v1-learning-class-view'"
<el-link type="primary" plain @click="handleEdit(row)">编辑</el-link> >查看</el-link
<el-link type="primary" plain @click="handleClassStu(row)">班级学生</el-link> >
<el-link type="primary" plain @click="handleRelating(row)">关联学期</el-link> <el-link type="primary" plain @click="handleEdit(row)" v-permission="'v1-learning-class-update'"
>编辑</el-link
>
<el-link type="primary" plain @click="handleClassStu(row)" v-permission="'v1-learning-class-students'"
>班级学生</el-link
>
<el-link type="primary" plain @click="handleRelating(row)" v-permission="'v1-learning-class-add-semesters'"
>关联学期</el-link
>
</el-space> </el-space>
</template> </template>
</AppList> </AppList>
......
...@@ -12,6 +12,7 @@ const educationList = store.getMapValuesByKey('specialty_education_background') ...@@ -12,6 +12,7 @@ const educationList = store.getMapValuesByKey('specialty_education_background')
const schoolingList = store.getMapValuesByKey('specialty_length_of_schooling') const schoolingList = store.getMapValuesByKey('specialty_length_of_schooling')
const degreeCategoryList = store.getMapValuesByKey('specialty_degree_category') const degreeCategoryList = store.getMapValuesByKey('specialty_degree_category')
const specialtyDegreeList = store.getMapValuesByKey('specialty_degree') const specialtyDegreeList = store.getMapValuesByKey('specialty_degree')
const statusList = store.getMapValuesByKey('system_status')
const form = reactive({ const form = reactive({
code: '', code: '',
...@@ -20,16 +21,18 @@ const form = reactive({ ...@@ -20,16 +21,18 @@ const form = reactive({
education_background: '1', education_background: '1',
length_of_schooling: '1', length_of_schooling: '1',
degree_category: '', degree_category: '',
degree: '1' degree: '1',
status: '1'
}) })
const rules = reactive<FormRules>({ const rules = reactive<FormRules>({
code: [{ required: true, message: '请输入专业代码', trigger: 'change' }], code: [{ required: true, message: '请输入专业代码', trigger: 'blur' }],
name: [{ required: true, message: '请输入专业名称', trigger: 'blur' }], name: [{ required: true, message: '请输入专业名称', trigger: 'blur' }],
category: [{ required: true, message: '请选择专业类别', trigger: 'change' }], category: [{ required: true, message: '请选择专业类别', trigger: 'change' }],
education_background: [{ required: true, message: '请选择学历', trigger: 'blur' }], education_background: [{ required: true, message: '请选择学历', trigger: 'change' }],
length_of_schooling: [{ required: true, message: '请选择学制', trigger: 'change' }], length_of_schooling: [{ required: true, message: '请选择学制', trigger: 'change' }],
degree_category: [{ required: true, message: '请选择学位门类', trigger: 'blur' }], degree_category: [{ required: true, message: '请选择学位门类', trigger: 'change' }],
degree: [{ required: true, message: '请选择学位', trigger: 'blur' }] degree: [{ required: true, message: '请选择学位', trigger: 'change' }],
status: [{ required: true, message: '请选择生效状态', trigger: 'change' }]
}) })
const props = defineProps({ const props = defineProps({
isShowProDialog: { isShowProDialog: {
...@@ -95,13 +98,13 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -95,13 +98,13 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<el-dialog :model-value="isShowProDialog" draggable :before-close="handleCancel" :title="props.title" width="30%"> <el-dialog :model-value="isShowProDialog" draggable :before-close="handleCancel" :title="props.title" 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="code"> <el-form-item label="专业代码:" prop="code">
<el-input v-model="form.code" :disabled="props.title === '查看详情'"></el-input> <el-input v-model="form.code" :disabled="props.isEdit === '2'"></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.title === '查看详情'"></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="category"> <el-form-item label="专业类别:" prop="category">
<el-select v-model="form.category" placeholder="请选择专业类别" :disabled="props.title === '查看详情'"> <el-select v-model="form.category" placeholder="请选择专业类别" :disabled="props.isEdit === '2'">
<el-option <el-option
v-for="(item, index) in categoryList" v-for="(item, index) in categoryList"
:key="index" :key="index"
...@@ -111,17 +114,17 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -111,17 +114,17 @@ if (props.isEdit === '2' || props.isEdit === '1') {
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="学历:" prop="education_background"> <el-form-item label="学历:" prop="education_background">
<el-radio-group v-model="form.education_background" :disabled="props.title === '查看详情'"> <el-radio-group v-model="form.education_background" :disabled="props.isEdit === '2'">
<el-radio v-for="item in educationList" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="item in educationList" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="学制:" prop="length_of_schooling"> <el-form-item label="学制:" prop="length_of_schooling">
<el-radio-group v-model="form.length_of_schooling" :disabled="props.title === '查看详情'"> <el-radio-group v-model="form.length_of_schooling" :disabled="props.isEdit === '2'">
<el-radio v-for="item in schoolingList" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="item in schoolingList" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="学位门类:" prop="degree_category"> <el-form-item label="学位门类:" prop="degree_category">
<el-select v-model="form.degree_category" :disabled="props.title === '查看详情'" placeholder="请选择学位门类"> <el-select v-model="form.degree_category" :disabled="props.isEdit === '2'" placeholder="请选择学位门类">
<el-option <el-option
v-for="(item, index) in degreeCategoryList" v-for="(item, index) in degreeCategoryList"
:key="index" :key="index"
...@@ -131,12 +134,17 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -131,12 +134,17 @@ if (props.isEdit === '2' || props.isEdit === '1') {
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="学位:" prop="degree"> <el-form-item label="学位:" prop="degree">
<el-radio-group v-model="form.degree" :disabled="props.title === '查看详情'"> <el-radio-group v-model="form.degree" :disabled="props.isEdit === '2'">
<el-radio v-for="item in specialtyDegreeList" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="item in specialtyDegreeList" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="生效状态:" prop="status">
<el-radio-group v-model="form.status" :disabled="props.isEdit === '2'">
<el-radio v-for="item in statusList" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-form> </el-form>
<template #footer v-if="props.isEdit !== '1'"> <template #footer v-if="props.isEdit !== '2'">
<span> <span>
<el-button @click="handleCancel">取消</el-button> <el-button @click="handleCancel">取消</el-button>
<el-button type="primary" @click="handleConfirm(ruleFormRef)">确认</el-button> <el-button type="primary" @click="handleConfirm(ruleFormRef)">确认</el-button>
......
<script setup lang="ts"> <script setup lang="ts">
import { getProList } from '../api' import { ElMessage } from 'element-plus'
import { getProList, updatePro } from '../api'
import AddPro from '../components/AddPro.vue' import AddPro from '../components/AddPro.vue'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore()
const appList = ref() const appList = ref()
const title = ref('') const title = ref('')
const id = ref('') const id = ref('')
...@@ -21,6 +21,7 @@ const listOptions = $computed(() => { ...@@ -21,6 +21,7 @@ const listOptions = $computed(() => {
{ label: '学制', prop: 'length_of_schooling_name', align: 'center' }, { label: '学制', prop: 'length_of_schooling_name', align: 'center' },
{ label: '学位门类', prop: 'degree_category_name', align: 'center' }, { label: '学位门类', prop: 'degree_category_name', align: 'center' },
{ label: '学位', prop: 'degree_name', align: 'center' }, { label: '学位', prop: 'degree_name', align: 'center' },
{ label: '生效状态', slots: 'status', align: 'center' },
{ label: '更新时间', prop: 'updated_time', align: 'center' }, { label: '更新时间', prop: 'updated_time', align: 'center' },
{ label: '操作', slots: 'table-operate', align: 'center' } { label: '操作', slots: 'table-operate', align: 'center' }
] ]
...@@ -35,23 +36,43 @@ const handleDetail = (row: any) => { ...@@ -35,23 +36,43 @@ const handleDetail = (row: any) => {
isShowProDialog.value = true isShowProDialog.value = true
title.value = '查看详情' title.value = '查看详情'
id.value = row.id id.value = row.id
isEdit.value = '1' isEdit.value = '2'
} }
const handleEdit = (row: any) => { const handleEdit = (row: any) => {
isShowProDialog.value = true isShowProDialog.value = true
title.value = '编辑专业' title.value = '编辑专业'
id.value = row.id id.value = row.id
isEdit.value = '2' isEdit.value = '1'
} }
const handleFresh = () => { const handleFresh = () => {
appList.value.refetch() appList.value.refetch()
} }
const handleChangeStatus = (row: any) => {
if (row.id !== undefined) {
const params: any = Object.assign({}, row)
updatePro(params).then(() => {
ElMessage.success('更新专业成功')
handleFresh()
})
}
}
</script> </script>
<template> <template>
<AppCard title="专业管理"> <AppCard title="专业管理">
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddPro">新增专业</el-button> <el-button type="primary" round @click="handleAddPro">新增专业</el-button>
<template #status="{ row }">
<el-switch
size="large"
v-model="row.status"
active-value="1"
inactive-value="0"
inline-prompt
style="--el-switch-on-color: #aa1941"
@change="handleChangeStatus(row)"
></el-switch>
</template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<el-link type="primary" plain @click="handleDetail(row)">查看</el-link> <el-link type="primary" plain @click="handleDetail(row)">查看</el-link>
......
<script lang="ts" setup> <script lang="ts" setup>
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useGetCategoryList } from '@/composables/useGetCategoryList'
import { getRelationSemCourse, relationSemCourse } from '../api' import { getRelationSemCourse, relationSemCourse } from '../api'
...@@ -16,8 +17,12 @@ interface Emits { ...@@ -16,8 +17,12 @@ interface Emits {
(e: 'update:isShowCourse', isShowCourse: boolean): void (e: 'update:isShowCourse', isShowCourse: boolean): void
(e: 'create'): void (e: 'create'): void
} }
const appList = ref()
const semInfo: any = ref({}) const semInfo: any = ref({})
const multiSelection = ref([]) const multiSelection = ref([])
// 下拉选择tree 视频分类
let { list: selectTree } = useGetCategoryList()
const defaultProps = { children: 'children', label: 'category_name', value: 'id' }
const listOptions = $computed(() => { const listOptions = $computed(() => {
return { return {
...@@ -30,7 +35,7 @@ const listOptions = $computed(() => { ...@@ -30,7 +35,7 @@ const listOptions = $computed(() => {
} }
}, },
filters: [ filters: [
{ type: 'select', prop: 'classification', label: '课程分类:', placeholder: '课程分类' }, { type: 'select', slots: 'course-category' },
{ type: 'input', prop: 'name', label: '课程名称:', placeholder: '课程名称' } { type: 'input', prop: 'name', label: '课程名称:', placeholder: '课程名称' }
], ],
columns: [ columns: [
...@@ -59,7 +64,6 @@ const handleAddStu = () => { ...@@ -59,7 +64,6 @@ const handleAddStu = () => {
relationSemCourse(params).then(() => { relationSemCourse(params).then(() => {
ElMessage.success('关联课程成功') ElMessage.success('关联课程成功')
emit('update:isShowCourse', false) emit('update:isShowCourse', false)
emit('create') emit('create')
}) })
console.log(111) console.log(111)
...@@ -68,6 +72,9 @@ const handleAddStu = () => { ...@@ -68,6 +72,9 @@ const handleAddStu = () => {
const handleCancel = () => { const handleCancel = () => {
emit('update:isShowCourse', false) emit('update:isShowCourse', false)
} }
const handleFresh = () => {
appList.value.refetch()
}
</script> </script>
<template> <template>
<el-dialog :model-value="isShowCourse" draggable title="关联选择课程" width="50%" :before-close="handleCancel"> <el-dialog :model-value="isShowCourse" draggable title="关联选择课程" width="50%" :before-close="handleCancel">
...@@ -90,6 +97,19 @@ const handleCancel = () => { ...@@ -90,6 +97,19 @@ const handleCancel = () => {
@selection-change="handleSelectChange" @selection-change="handleSelectChange"
> >
<el-button type="primary" round @click="handleAddStu">关联选择课程</el-button> <el-button type="primary" round @click="handleAddStu">关联选择课程</el-button>
<template #course-category="{ params }">
课程分类:&nbsp;&nbsp;
<el-tree-select
:render-after-expand="false"
:props="defaultProps"
v-model="params.classification"
:data="selectTree"
clearable
placeholder="课程分类"
@change="handleFresh"
/>
</template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<router-link :to="`/course/my/view?id=${row.id}`" target="_blank"> <router-link :to="`/course/my/view?id=${row.id}`" target="_blank">
......
...@@ -2,24 +2,28 @@ ...@@ -2,24 +2,28 @@
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 { useMapStore } from '@/stores/map'
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 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 form = reactive({ const form = reactive({
name: '', name: '',
organ_id: '', organ_id: '',
start_time: '', start_time: '',
end_time: '', end_time: '',
length: '' length: '',
status: '1'
}) })
const rules = reactive<FormRules>({ const rules = reactive<FormRules>({
name: [{ required: true, message: '请输入学期名称', trigger: 'blur' }], name: [{ required: true, message: '请输入学期名称', trigger: 'blur' }],
organ_id: [{ required: true, message: '请选择所属部门/学校', trigger: 'change' }] organ_id: [{ required: true, message: '请选择所属部门/学校', trigger: 'change' }],
status: [{ required: true, message: '请选择生效状态', trigger: 'change' }]
}) })
const props = defineProps({ const props = defineProps({
isShowAddSemDialog: { isShowAddSemDialog: {
...@@ -111,6 +115,11 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -111,6 +115,11 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<el-form-item label="教学周:" prop="length"> <el-form-item label="教学周:" prop="length">
<el-input v-model="form.length" :disabled="props.isEdit === '2'"></el-input> <el-input v-model="form.length" :disabled="props.isEdit === '2'"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="生效状态:" prop="status">
<el-radio-group v-model="form.status" :disabled="props.isEdit === '2'">
<el-radio v-for="(item, id) in statusList" :key="id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-form> </el-form>
</el-form> </el-form>
<template #footer v-if="props.isEdit !== '2'"> <template #footer v-if="props.isEdit !== '2'">
......
...@@ -81,9 +81,9 @@ const handleFresh = () => { ...@@ -81,9 +81,9 @@ 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>
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddCourse">添加课程</el-button> <el-button type="primary" round @click="handleAddCourse">添加课程</el-button>
......
<script setup lang="ts"> <script setup lang="ts">
import { getSemList } from '../api' import { ElMessage } from 'element-plus'
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 { useMapStore } from '@/stores/map' import { getSemList, updateSem } from '../api'
// const store = useMapStore() const departmentList: any = useProjectList('', '79806610719731712').departmentList
const appList = ref() const appList = ref()
const title = ref('') const title = ref('')
const id = ref('') const id = ref('')
...@@ -15,7 +17,7 @@ const listOptions = $computed(() => { ...@@ -15,7 +17,7 @@ const listOptions = $computed(() => {
remote: { httpRequest: getSemList, params: { name: '', organ_id: '' } }, remote: { httpRequest: getSemList, params: { name: '', organ_id: '' } },
filters: [ filters: [
{ type: 'input', prop: 'name', label: '学期名称:', placeholder: '学期名称' }, { type: 'input', prop: 'name', label: '学期名称:', placeholder: '学期名称' },
{ type: 'input', prop: 'organ_id', label: '所属部门/学校:', placeholder: '所属部门/学校' } { type: 'select', slots: 'filter-department' }
], ],
columns: [ columns: [
{ label: '序号', type: 'index', align: 'center' }, { label: '序号', type: 'index', align: 'center' },
...@@ -24,6 +26,7 @@ const listOptions = $computed(() => { ...@@ -24,6 +26,7 @@ const listOptions = $computed(() => {
{ label: '学期开始日期', prop: 'start_time', align: 'center' }, { label: '学期开始日期', prop: 'start_time', align: 'center' },
{ label: '学期结束日期', prop: 'end_time', align: 'center' }, { label: '学期结束日期', prop: 'end_time', align: 'center' },
{ label: '教学周', prop: 'length', align: 'center' }, { label: '教学周', prop: 'length', align: 'center' },
{ label: '生效状态', slots: 'status', align: 'center' },
{ label: '更新时间', prop: 'updated_time', align: 'center' }, { label: '更新时间', prop: 'updated_time', align: 'center' },
{ label: '操作', slots: 'table-operate', align: 'center' } { label: '操作', slots: 'table-operate', align: 'center' }
] ]
...@@ -54,17 +57,51 @@ const handleCourse = (row: any) => { ...@@ -54,17 +57,51 @@ const handleCourse = (row: any) => {
const handleFresh = () => { const handleFresh = () => {
appList.value.refetch() appList.value.refetch()
} }
const handleChangeStatus = (row: any) => {
if (row.id !== undefined) {
const params: any = Object.assign({}, row)
updateSem(params).then(() => {
ElMessage.success('更新学期成功')
handleFresh()
})
}
}
</script> </script>
<template> <template>
<AppCard title="学期管理"> <AppCard title="学期管理">
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddSemester">新增学期</el-button> <el-button type="primary" round @click="handleAddSemester" v-permission="'v1-learning-semester-create'"
>新增学期</el-button
>
<template #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 }">
<el-switch
size="large"
v-model="row.status"
active-value="1"
inactive-value="0"
inline-prompt
style="--el-switch-on-color: #aa1941"
@change="handleChangeStatus(row)"
></el-switch>
</template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<el-link type="primary" plain @click="handleDetail(row)">查看</el-link> <el-link type="primary" plain @click="handleDetail(row)" v-permission="'v1-learning-semester-view'"
<el-link type="primary" plain @click="handleEdit(row)">编辑</el-link> >查看</el-link
<el-link type="primary" plain @click="handleCourse(row)">关联课程</el-link> >
<el-link type="primary" plain @click="handleEdit(row)" v-permission="'v1-learning-semester-update'"
>编辑</el-link
>
<el-link type="primary" plain @click="handleCourse(row)" v-permission="'v1-learning-semester-add-courses'"
>关联课程</el-link
>
</el-space> </el-space>
</template> </template>
</AppList> </AppList>
......
...@@ -3,8 +3,12 @@ import type { FormInstance, FormRules } from 'element-plus' ...@@ -3,8 +3,12 @@ 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 { addStaff, updateStaff, getStaffDetail } from '../api' import { addStaff, updateStaff, getStaffDetail } 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 props = defineProps({ const props = defineProps({
...@@ -26,16 +30,17 @@ interface Emits { ...@@ -26,16 +30,17 @@ interface Emits {
(e: 'create'): void (e: 'create'): void
} }
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.getMapValuesByKey('system_gender')
const roleList = store.mapList.filter((item: any) => item.key === 'teacher_role')[0].values const roleList = store.getMapValuesByKey('teacher_role')
const statusList = store.getMapValuesByKey('system_status')
const form = reactive({ const form = reactive({
organ_id: '', organ_id: '',
name: '', name: '',
gender: '1', gender: '1',
mobile: '', mobile: '',
role: '2', role: '2',
email: '' email: '',
status: '1'
}) })
const rules = reactive<FormRules>({ const rules = reactive<FormRules>({
...@@ -47,7 +52,8 @@ const rules = reactive<FormRules>({ ...@@ -47,7 +52,8 @@ const rules = reactive<FormRules>({
{ pattern: /^1(3|4|5|7|8)\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' } { pattern: /^1(3|4|5|7|8)\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
], ],
role: [{ required: true, message: '请选择角色类型', trigger: 'change' }], role: [{ required: true, message: '请选择角色类型', trigger: 'change' }],
email: [{ required: true, message: '请输入邮箱', trigger: 'blur' }] email: [{ required: true, message: '请输入邮箱', trigger: 'blur' }],
status: [{ required: true, message: '请选择生效状态', trigger: 'change' }]
}) })
// 取消 // 取消
...@@ -63,6 +69,9 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -63,6 +69,9 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
if (valid) { if (valid) {
if (props.isEdit === '0') { if (props.isEdit === '0') {
const params: any = Object.assign({}, form) const params: any = Object.assign({}, form)
if (userStore.roles[0].name === '部门管理员') {
params.organ_id = userStore.organization?.id
}
addStaff(params).then(() => { addStaff(params).then(() => {
ElMessage.success('新增教工成功') ElMessage.success('新增教工成功')
emit('update:isShowStaffDialog', false) emit('update:isShowStaffDialog', false)
...@@ -97,32 +106,49 @@ if (props.isEdit === '2' || props.isEdit === '1') { ...@@ -97,32 +106,49 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<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="school">
<el-select clearable v-model="form.organ_id" :disabled="props.title === '查看详情'" style="width: 100%"> <el-select
clearable
v-model="form.organ_id"
:disabled="props.isEdit === '2'"
style="width: 100%"
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"
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.title === '查看详情'"></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="gender"> <el-form-item label="性别:" prop="gender">
<el-radio-group v-model="form.gender" :disabled="props.title === '查看详情'"> <el-radio-group v-model="form.gender" :disabled="props.isEdit === '2'">
<el-radio v-for="(item, index) in sexList" :key="index" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="(item, index) in sexList" :key="index" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="手机号:" prop="mobile"> <el-form-item label="手机号:" prop="mobile">
<el-input v-model="form.mobile" :disabled="props.title === '查看详情'"></el-input> <el-input v-model="form.mobile" :disabled="props.isEdit === '2'"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="角色类型:" prop="role"> <el-form-item label="角色类型:" prop="role">
<el-radio-group v-model="form.role" :disabled="props.title === '查看详情'"> <el-radio-group v-model="form.role" :disabled="props.isEdit === '2'">
<el-radio v-for="(item, index) in roleList" :key="index" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="(item, index) in roleList" :key="index" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="邮箱:" prop="email"> <el-form-item label="邮箱:" prop="email">
<el-input v-model="form.email" :disabled="props.title === '查看详情'" /> <el-input v-model="form.email" :disabled="props.isEdit === '2'" />
</el-form-item>
<el-form-item label="生效状态:" prop="status">
<el-radio-group v-model="form.status" :disabled="props.isEdit === '2'">
<el-radio v-for="(item, index) in statusList" :key="index" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer v-if="props.isEdit !== '2'">
<span> <span>
<el-button @click="handleCancel">取消</el-button> <el-button @click="handleCancel">取消</el-button>
<el-button type="primary" @click="handleConfirm(ruleFormRef)">确认</el-button> <el-button type="primary" @click="handleConfirm(ruleFormRef)">确认</el-button>
......
<script setup lang="ts"> <script setup lang="ts">
import { getStaffList } from '../api' import { ElMessage } from 'element-plus'
// import { useMapStore } from '@/stores/map' import AddStaff from '../components/AddStaff.vue'
// const store = useMapStore()
import { useProjectList } from '@/composables/useGetProjectList' import { useProjectList } from '@/composables/useGetProjectList'
import AddStaff from '../components/AddStaff.vue' import { getStaffList, updateStaff } from '../api'
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
const appList = ref() const appList = ref()
...@@ -34,24 +34,22 @@ const listOptions = $computed(() => { ...@@ -34,24 +34,22 @@ const listOptions = $computed(() => {
{ label: '性别', prop: 'gender_name', align: 'center' }, { label: '性别', prop: 'gender_name', align: 'center' },
{ label: '邮箱', prop: 'email', align: 'center' }, { label: '邮箱', prop: 'email', align: 'center' },
{ label: '角色类型', prop: 'role_name', align: 'center' }, { label: '角色类型', prop: 'role_name', align: 'center' },
{ label: '生效状态', slots: 'status', align: 'center' },
{ label: '更新时间', prop: 'updated_time', align: 'center' }, { label: '更新时间', prop: 'updated_time', align: 'center' },
{ label: '操作', slots: 'table-operate', align: 'center', fixed: 'right' } { label: '操作', slots: 'table-operate', align: 'center', fixed: 'right' }
] ]
} }
}) })
// 刷新页面
// const handleRefresh = () => {
// appList.value.refetch()
// }
// 新增学生 // 新增学生
const handleAddStudent = () => { const handleAddStudent = () => {
isShowStaffDialog.value = true isShowStaffDialog.value = true
title.value = '新增教工' title.value = '新增教工'
isEdit.value = '0' isEdit.value = '0'
} }
// 编辑学生 // 编辑教工
const handleEdit = (row: any) => { const handleEdit = (row: any) => {
id.value = row.id
isShowStaffDialog.value = true isShowStaffDialog.value = true
title.value = '编辑教工' title.value = '编辑教工'
studentId.value = row.id studentId.value = row.id
...@@ -68,22 +66,48 @@ const handleDetail = (row: any) => { ...@@ -68,22 +66,48 @@ const handleDetail = (row: any) => {
const handleFresh = () => { const handleFresh = () => {
appList.value.refetch() appList.value.refetch()
} }
const handleChangeStatus = (row: any) => {
if (row.id !== undefined) {
const params: any = Object.assign({}, row)
updateStaff(params).then(() => {
ElMessage.success('更新教工成功')
handleFresh()
})
}
}
</script> </script>
<template> <template>
<AppCard title="教工用户管理"> <AppCard title="教工用户管理">
<AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px"> <AppList v-bind="listOptions" ref="appList" border stripe style="margin-top: 30px">
<el-button type="primary" round @click="handleAddStudent">新增教工</el-button> <el-button type="primary" round @click="handleAddStudent" v-permission="'v1-learning-teacher-create'"
>新增教工</el-button
>
<template #filter-department="{ params }"> <template #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.authorized"> <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-option v-for="item in departmentList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</template> </template>
<template #status="{ row }">
<el-switch
size="large"
v-model="row.status"
active-value="1"
inactive-value="0"
inline-prompt
style="--el-switch-on-color: #aa1941"
@change="handleChangeStatus(row)"
></el-switch>
</template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<el-link type="primary" plain @click="handleDetail(row)">查看</el-link> <el-link type="primary" plain @click="handleDetail(row)" v-permission="'v1-learning-teacher-view'"
<el-link type="primary" plain @click="handleEdit(row)">编辑</el-link> >查看</el-link
>
<el-link type="primary" plain @click="handleEdit(row)" v-permission="'v1-learning-teacher-update'"
>编辑</el-link
>
</el-space> </el-space>
</template> </template>
</AppList> </AppList>
......
...@@ -14,7 +14,7 @@ export function importStudent(data: { file: any }) { ...@@ -14,7 +14,7 @@ export function importStudent(data: { file: any }) {
export function exportStudent(params: { name: string; organ_id: string }) { export function exportStudent(params: { name: string; organ_id: string }) {
return httpRequest.get('/api/resource/v1/learning/student/download', { params, responseType: 'blob' }) return httpRequest.get('/api/resource/v1/learning/student/download', { params, responseType: 'blob' })
} }
// 导出学生
// 添加学生 // 添加学生
export function addStudent(data?: { export function addStudent(data?: {
name: string name: string
......
...@@ -78,7 +78,7 @@ const handleConfirm = async (formEl: FormInstance | undefined) => { ...@@ -78,7 +78,7 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
} else if (props.isEdit === '1') { } else if (props.isEdit === '1') {
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)
emit('create') emit('create')
}) })
...@@ -214,7 +214,7 @@ const handleChangeSpe = (val: any) => { ...@@ -214,7 +214,7 @@ const handleChangeSpe = (val: any) => {
<el-option v-for="item in classList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in classList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态:" prop="status"> <el-form-item label="生效状态:" prop="status">
<el-radio-group v-model="form.status" :disabled="props.isEdit === '2'"> <el-radio-group v-model="form.status" :disabled="props.isEdit === '2'">
<el-radio v-for="(item, id) in statusList" :key="id" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="(item, id) in statusList" :key="id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
......
<script setup lang="ts"> <script setup lang="ts">
import { ElMessage } from 'element-plus'
import { useProjectList } from '@/composables/useGetProjectList' 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 } from '../api' import { getStudentList, exportStudent, updateStudent } from '../api'
const departmentList: any = useProjectList('', '79806610719731712').departmentList const departmentList: any = useProjectList('', '79806610719731712').departmentList
const appList = ref() const appList = ref()
const id = ref('') const id = ref('')
...@@ -31,7 +32,7 @@ const listOptions = { ...@@ -31,7 +32,7 @@ const listOptions = {
{ label: '专业', prop: 'specialty_id_name', align: 'center' }, { label: '专业', prop: 'specialty_id_name', align: 'center' },
{ label: '班级', prop: 'class_id_name', align: 'center' }, { label: '班级', prop: 'class_id_name', align: 'center' },
{ label: '身份证号', prop: 'id_number', align: 'center' }, { label: '身份证号', prop: 'id_number', align: 'center' },
{ label: '有效状态', prop: 'status_name', align: 'center' }, { label: '生效状态', slots: 'status', align: 'center' },
{ label: '更新时间', prop: 'updated_time', align: 'center' }, { label: '更新时间', prop: 'updated_time', align: 'center' },
{ label: '操作', slots: 'table-operate', align: 'center', minWidth: '200', fixed: 'right' } { label: '操作', slots: 'table-operate', align: 'center', minWidth: '200', fixed: 'right' }
] ]
...@@ -61,6 +62,15 @@ const handleDetail = (row: any) => { ...@@ -61,6 +62,15 @@ const handleDetail = (row: any) => {
id.value = row.id id.value = row.id
isEdit.value = '2' isEdit.value = '2'
} }
const handleChangeStatus = (row: any) => {
if (row.id !== undefined) {
const params: any = Object.assign({}, row)
updateStudent(params).then(() => {
ElMessage.success('更新学生成功')
handleRefresh()
})
}
}
// 批量导入 // 批量导入
const handleImport = () => { const handleImport = () => {
isShowImportDialog.value = true isShowImportDialog.value = true
...@@ -98,19 +108,41 @@ const handleSelectionChange = (val: any) => { ...@@ -98,19 +108,41 @@ const handleSelectionChange = (val: any) => {
stripe stripe
style="margin-top: 30px" style="margin-top: 30px"
> >
<el-button type="primary" round @click="handleAddStudent">新增学生</el-button> <el-button type="primary" round @click="handleAddStudent" v-permission="'v1-learning-student-create'"
<el-button type="primary" round @click="handleImport">批量导入</el-button> >新增学生</el-button
<el-button type="primary" round @click="handleExport">导出</el-button> >
<el-button type="primary" round @click="handleImport" v-permission="'v1-learning-student-import'"
>批量导入</el-button
>
<el-button type="primary" round @click="handleExport" v-permission="'v1-learning-student-download'"
>导出</el-button
>
<el-button type="primary" round>生源地分析</el-button>
<template #filter-department="{ params }"> <template #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">
<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>
<template #status="{ row }">
<el-switch
size="large"
v-model="row.status"
active-value="1"
inactive-value="0"
inline-prompt
style="--el-switch-on-color: #aa1941"
@change="handleChangeStatus(row)"
></el-switch>
</template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<el-link type="primary" plain @click="handleDetail(row)">查看</el-link> <el-link type="primary" plain @click="handleDetail(row)" v-permission="'v1-learning-student-view'"
<el-link type="primary" plain @click="handleEdit(row)">编辑</el-link> >查看</el-link
>
<el-link type="primary" plain @click="handleEdit(row)" v-permission="'v1-learning-student-update'"
>编辑</el-link
>
</el-space> </el-space>
</template> </template>
</AppList> </AppList>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论