Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-resource
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-resource
Commits
61321542
提交
61321542
authored
7月 19, 2022
作者:
matian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore:基础管理接口对接
上级
39760f25
隐藏空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
909 行增加
和
449 行删除
+909
-449
AppList.vue
src/components/base/AppList.vue
+1
-1
api.ts
src/modules/admin/class/api.ts
+69
-3
AddClass.vue
src/modules/admin/class/components/AddClass.vue
+127
-43
AddStudentDialog.vue
src/modules/admin/class/components/AddStudentDialog.vue
+52
-64
AddTermDialog.vue
src/modules/admin/class/components/AddTermDialog.vue
+45
-6
ClassStudents.vue
src/modules/admin/class/components/ClassStudents.vue
+44
-36
RelatedTerm.vue
src/modules/admin/class/components/RelatedTerm.vue
+44
-29
List.vue
src/modules/admin/class/views/List.vue
+25
-16
api.ts
src/modules/admin/pro/api.ts
+30
-3
AddPro.vue
src/modules/admin/pro/components/AddPro.vue
+84
-40
List.vue
src/modules/admin/pro/views/List.vue
+14
-13
api.ts
src/modules/admin/semester/api.ts
+48
-3
AddSemCourse.vue
src/modules/admin/semester/components/AddSemCourse.vue
+52
-30
AddSemester.vue
src/modules/admin/semester/components/AddSemester.vue
+60
-29
SemesterCourse.vue
src/modules/admin/semester/components/SemesterCourse.vue
+40
-30
List.vue
src/modules/admin/semester/views/List.vue
+28
-22
api.ts
src/modules/admin/staff/api.ts
+1
-1
api.ts
src/modules/admin/student/api.ts
+10
-1
AddStudent.vue
src/modules/admin/student/components/AddStudent.vue
+77
-40
ImportStudent.vue
src/modules/admin/student/components/ImportStudent.vue
+2
-2
List.vue
src/modules/admin/student/views/List.vue
+53
-34
ViewCourseInfo.vue
src/modules/course/my/components/ViewCourseInfo.vue
+3
-3
没有找到文件。
src/components/base/AppList.vue
浏览文件 @
61321542
...
@@ -125,7 +125,7 @@ onMounted(() => {
...
@@ -125,7 +125,7 @@ onMounted(() => {
fetchList
()
fetchList
()
})
})
defineExpose
({
refetch
,
tableRef
})
defineExpose
({
refetch
,
tableRef
,
params
})
</
script
>
</
script
>
<
template
>
<
template
>
...
...
src/modules/admin/class/api.ts
浏览文件 @
61321542
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取
学生
列表
// 获取
班级
列表
export
function
get
ProList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
get
ClassList
(
params
?:
{
name
?:
string
;
organ_id
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/
psp/backend/video/index
'
,
{
params
})
return
httpRequest
.
get
(
'/api/
resource/v1/learning/class/list
'
,
{
params
})
}
}
// 添加班级
export
function
addClass
(
data
:
{
name
?:
string
organ_id
?:
string
start_year
?:
string
code
:
string
specialty_id
:
string
teacher_id
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/class/create'
,
data
)
}
// 更新班级
export
function
updateClass
(
data
:
{
id
:
string
name
:
string
organ_id
:
string
start_year
:
string
code
:
string
specialty_id
:
string
teacher_id
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/class/update'
,
data
)
}
// 添加班级
export
function
getClassDetail
(
params
:
{
id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/class/view'
,
{
params
})
}
// 搜索班主任
export
function
searchTeacher
(
params
:
{
organ_id
:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/class/search-teacher'
,
{
params
})
}
// 获取专业列表
export
function
getProList
(
params
?:
{
name
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/specialty/list'
,
{
params
})
}
// 获取班级学员列表
export
function
getClassStuList
(
params
?:
{
class_id
?:
string
;
name
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/class/students'
,
{
params
})
}
// 获取班级学期列表
export
function
getClassSemList
(
params
?:
{
class_id
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/class/semesters'
,
{
params
})
}
// 关联学生-获取学生列表
export
function
getRelationClassStuList
(
params
?:
{
class_id
?:
string
name
?:
string
page
?:
string
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/class/add-students'
,
{
params
})
}
// 关联学期-获取学期列表
export
function
getRelationSemList
(
params
?:
{
class_id
:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/class/add-semesters'
,
{
params
})
}
// 关联学生-关联/移除学生
export
function
relationClassStu
(
data
?:
{
class_id
:
string
;
students_id
:
string
;
type
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/class/add-students '
,
data
)
}
// 关联学生-关联/移除学生
export
function
relationClassSem
(
data
?:
{
class_id
:
string
;
semesters_id
:
string
;
type
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/class/add-semesters'
,
data
)
}
src/modules/admin/class/components/AddClass.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
type
{
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
{
useMapStore
}
from
'@/stores/map'
import
{
useProjectList
}
from
'@/composables/useGetProjectList'
import
{
addClass
,
updateClass
,
getClassDetail
,
searchTeacher
,
getProList
}
from
'../api'
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
store
=
useMapStore
()
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
schoolList
=
[
const
departmentList
:
any
=
useProjectList
(
''
,
'79806610719731712'
).
departmentList
{
id
:
'111'
,
const
startYearList
=
store
.
getMapValuesByKey
(
'class_start_year'
)
name
:
'清华'
},
{
id
:
'222'
,
name
:
'北大'
}
]
const
form
=
reactive
({
const
form
=
reactive
({
code
:
''
,
code
:
''
,
name
:
''
,
name
:
''
,
school
:
''
,
organ_id
:
''
,
headmaster
:
''
,
teacher_id
:
''
,
major
:
''
,
specialty_id
:
''
,
enter_month
:
''
start_year
:
''
,
status
:
'1'
})
})
const
rules
=
reactive
<
FormRules
>
({
const
rules
=
reactive
<
FormRules
>
({
code
:
[{
required
:
true
,
message
:
'请输入专业代码'
,
trigger
:
'change'
}],
code
:
[{
required
:
true
,
message
:
'请输入班级代码'
,
trigger
:
'change'
}],
name
:
[{
required
:
true
,
message
:
'请输入专业名称'
,
trigger
:
'blur'
}],
name
:
[{
required
:
true
,
message
:
'请输入班级名称'
,
trigger
:
'blur'
}],
school
:
[{
required
:
true
,
message
:
'请选择所属部门/学校'
,
trigger
:
'change'
}],
organ_id
:
[{
required
:
true
,
message
:
'请选择所属部门/学校'
,
trigger
:
'change'
}],
headmaster
:
[{
required
:
true
,
message
:
'请选择班主任'
,
trigger
:
'change'
}],
teacher_id
:
[{
required
:
true
,
message
:
'请选择班主任'
,
trigger
:
'change'
}],
major
:
[{
required
:
true
,
message
:
'请选择所属专业'
,
trigger
:
'blur'
}],
specialty_id
:
[{
required
:
true
,
message
:
'请选择所属专业'
,
trigger
:
'blur'
}],
enter_month
:
[{
required
:
true
,
message
:
'请选择入学年份'
,
trigger
:
'change'
}]
start_year
:
[{
required
:
true
,
message
:
'请选择入学年份'
,
trigger
:
'change'
}],
status
:
[{
required
:
true
,
message
:
'请选择状态'
,
trigger
:
'change'
}]
})
})
const
props
=
defineProps
({
const
props
=
defineProps
({
isShowClassDialog
:
{
isShowClassDialog
:
{
...
@@ -36,6 +38,9 @@ const props = defineProps({
...
@@ -36,6 +38,9 @@ const props = defineProps({
},
},
id
:
{
id
:
{
type
:
String
type
:
String
},
isEdit
:
{
type
:
String
}
}
})
})
interface
Emits
{
interface
Emits
{
...
@@ -46,48 +51,127 @@ interface Emits {
...
@@ -46,48 +51,127 @@ interface Emits {
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowClassDialog'
,
false
)
emit
(
'update:isShowClassDialog'
,
false
)
}
}
const
handleConfirm
=
()
=>
{
// 确认
emit
(
'update:isShowClassDialog'
,
false
)
const
handleConfirm
=
async
(
formEl
:
FormInstance
|
undefined
)
=>
{
emit
(
'create'
)
if
(
!
formEl
)
return
await
formEl
.
validate
(
valid
=>
{
console
.
log
(
valid
)
if
(
valid
)
{
if
(
props
.
isEdit
===
'0'
)
{
const
params
:
any
=
Object
.
assign
({},
form
)
addClass
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'新增学生成功'
)
emit
(
'update:isShowClassDialog'
,
false
)
emit
(
'create'
)
})
}
else
if
(
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
Object
.
assign
({
id
:
props
.
id
},
form
)
updateClass
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'更新学生成功'
)
emit
(
'update:isShowClassDialog'
,
false
)
emit
(
'create'
)
})
}
else
{
emit
(
'update:isShowClassDialog'
,
false
)
emit
(
'create'
)
}
}
})
}
}
// 获取详情
if
(
props
.
isEdit
===
'2'
||
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
{
id
:
props
.
id
}
getClassDetail
(
params
).
then
((
res
:
any
)
=>
{
console
.
log
(
res
)
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
res
.
data
[
key
]
})
})
}
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
allPro
:
any
=
ref
([])
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
)
}
})
})
</
script
>
</
script
>
<
template
>
<
template
>
<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=
"
f
ormRef"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"
ruleF
ormRef"
>
<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.title === '查看详情'"
></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.title === '查看详情'"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"所属部门/学校:"
prop=
"school"
>
<el-form-item
label=
"所属部门/学校:"
prop=
"organ_id"
>
<el-select
v-model=
"form.school"
placeholder=
"请选择所属部门/学校"
:disabled=
"props.title === '查看详情'"
>
<el-select
clearable
v-model=
"form.organ_id"
:disabled=
"props.title === '查看详情'"
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in schoolList"
:key=
"index"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in departmentList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"班主任:"
prop=
"teacher_id"
>
<el-select
v-model=
"form.teacher_id"
clearable
placeholder=
"请输入班主任"
style=
"width: 230px"
>
<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=
"headmaster
"
>
<el-form-item
label=
"
所属专业:"
prop=
"specialty_id
"
>
<el-select
v-model=
"form.
headmaster"
placeholder=
"请选择所属部门/学校"
:disabled=
"props.title === '查看详情'
"
>
<el-select
v-model=
"form.
specialty_id"
clearable
placeholder=
"请输入所属专业"
style=
"width: 230px
"
>
<el-option
v-for=
"
(item, index) in schoolList"
:key=
"index"
:label=
"item.name"
:value=
"item.id"
></el-option
>
<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=
"major"
>
<el-form-item
label=
"入学年份:"
prop=
"start_year"
>
<el-select
v-model=
"form.major"
placeholder=
"请选择所属部门/学校"
:disabled=
"props.title === '查看详情'"
>
<el-select
v-model=
"form.start_year"
placeholder=
"请选择所属部门/学校"
:disabled=
"props.title === '查看详情'"
>
<el-option
v-for=
"(item, index) in schoolList"
:key=
"index"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"(item, index) in startYearList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"入学年份:"
prop=
"enter_month"
>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-date-picker
<el-switch
v-model=
"form.enter_month"
size=
"large"
type=
"year"
v-model=
"form.status"
placeholder=
"请选择入学年份"
active-value=
"1"
inactive-value=
"0"
inline-prompt
style=
"--el-switch-on-color: #aa1941"
:disabled=
"props.title === '查看详情'"
:disabled=
"props.title === '查看详情'"
/
>
></el-switch
>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
v-if=
"props.isEdit === '1'"
>
<span>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确认
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm
(ruleFormRef)
"
>
确认
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
...
...
src/modules/admin/class/components/AddStudentDialog.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
AddStudent
from
'../../student/components/AddStudent.vue
'
import
{
ElMessage
}
from
'element-plus
'
import
{
getRelationClassStuList
,
relationClassStu
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
defineProps
({
const
props
=
defineProps
({
isAddStuDialog
:
{
isAddStuDialog
:
{
type
:
Boolean
type
:
Boolean
},
},
...
@@ -13,95 +13,83 @@ defineProps({
...
@@ -13,95 +13,83 @@ defineProps({
})
})
interface
Emits
{
interface
Emits
{
(
e
:
'update:isAddStuDialog'
,
isAddStuDialog
:
boolean
):
void
(
e
:
'update:isAddStuDialog'
,
isAddStuDialog
:
boolean
):
void
(
e
:
'create'
):
void
}
}
const
isShowAddDialog
=
ref
(
false
)
const
title
=
ref
(
''
)
const
classInfo
:
any
=
ref
({})
// 班级信息
const
id
=
ref
(
''
)
const
multiSelection
=
ref
([]
)
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getRelationClassStuList
,
params
:
{
name
:
''
,
class_id
:
props
.
id
},
callback
(
data
:
any
)
{
classInfo
.
value
=
data
.
info
return
{
list
:
data
.
list
,
total
:
data
.
total
}
}
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
columns
:
[
columns
:
[
{
type
:
'selection'
},
{
type
:
'selection'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno
_number
'
,
align
:
'center'
},
{
label
:
'姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'性别'
,
prop
:
'
sex
'
,
align
:
'center'
},
{
label
:
'性别'
,
prop
:
'
gender_name
'
,
align
:
'center'
},
{
label
:
'出生年月'
,
prop
:
'birth'
,
align
:
'center'
},
{
label
:
'出生年月'
,
prop
:
'birth
day
'
,
align
:
'center'
},
{
label
:
'省'
,
prop
:
'province'
,
align
:
'center'
},
{
label
:
'省'
,
prop
:
'province
_name
'
,
align
:
'center'
},
{
label
:
'市'
,
prop
:
'city'
,
align
:
'center'
},
{
label
:
'市'
,
prop
:
'city
_name
'
,
align
:
'center'
},
{
label
:
'县'
,
prop
:
'county'
,
align
:
'center'
},
{
label
:
'县'
,
prop
:
'county
_name
'
,
align
:
'center'
},
{
label
:
'联系电话'
,
prop
:
'mobile'
,
align
:
'center'
},
{
label
:
'联系电话'
,
prop
:
'mobile'
,
align
:
'center'
},
{
label
:
'部门/学校'
,
prop
:
'school'
,
align
:
'center'
},
{
label
:
'部门/学校'
,
prop
:
'organ_id_name'
,
align
:
'center'
},
{
label
:
'专业'
,
prop
:
'major'
,
align
:
'center'
},
{
label
:
'专业'
,
prop
:
'specialty_id_name'
,
align
:
'center'
},
{
label
:
'班级'
,
prop
:
'class'
,
align
:
'center'
},
{
label
:
'班级'
,
prop
:
'class_id_name'
,
align
:
'center'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'300'
,
fixed
:
'right'
}
],
data
:
[
{
name
:
111
},
{
name
:
111
},
{
name
:
111
},
{
name
:
111
}
]
]
}
}
})
})
const
handle
AddStu
=
(
)
=>
{
const
handle
SelectChange
=
(
val
:
any
)
=>
{
console
.
log
(
111
)
multiSelection
.
value
=
val
}
}
const
handleDel
=
(
row
:
any
)
=>
{
const
handleAddStu
=
()
=>
{
console
.
log
(
row
)
const
params
:
any
=
{
}
class_id
:
props
.
id
,
const
handleDetail
=
(
row
:
any
)
=>
{
students_id
:
multiSelection
.
value
.
map
((
item
:
any
)
=>
item
.
id
).
toString
(),
console
.
log
(
row
)
type
:
'add'
id
.
value
=
row
.
id
}
isShowAddDialog
.
value
=
true
relationClassStu
(
params
).
then
(()
=>
{
title
.
value
=
'查看详情'
ElMessage
.
success
(
'关联学生成功'
)
emit
(
'update:isAddStuDialog'
,
false
)
emit
(
'create'
)
})
}
}
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isAddStuDialog'
,
false
)
emit
(
'update:isAddStuDialog'
,
false
)
}
}
const
handleRefresh
=
()
=>
{
console
.
log
(
'ppp'
)
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"isAddStuDialog"
draggable
title=
"添加班级学生"
width=
"60%"
:before-close=
"handleCancel"
>
<el-dialog
:model-value=
"isAddStuDialog"
draggable
title=
"添加班级学生"
width=
"60%"
:before-close=
"handleCancel"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<el-descriptions>
<el-descriptions>
<el-descriptions-item
label=
"班级代码:"
>
kooriookami
</el-descriptions-item>
<el-descriptions-item
label=
"班级代码:"
>
{{
classInfo
.
code
}}
</el-descriptions-item>
<el-descriptions-item
label=
"班级名称"
>
18100000000
</el-descriptions-item>
<el-descriptions-item
label=
"班级名称"
>
{{
classInfo
.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
Suzhou
</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"
>
School
</el-tag>
<el-tag
size=
"small"
>
{{
classInfo
.
teacher_id_name
}}
</el-tag>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"所属专业"
>
工商管理
</el-descriptions-item>
<el-descriptions-item
label=
"所属专业"
>
{{
classInfo
.
specialty_id_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"入学年份"
>
2021
</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"
@
selection-change=
"handleSelectChange"
>
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
>
关联选择学生
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
>
关联选择学生
</el-button>
<template
#
table-operate=
"
{ row }">
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
<el-link
plain
@
click=
"handleDel(row)"
>
移除
</el-link>
</el-space>
</
template
>
</AppList>
</AppList>
</div>
</div>
<!-- 新增学生 -->
<!-- 新增学生 -->
</el-dialog>
</el-dialog>
<AddStudent
v-if=
"isShowAddDialog === true"
v-model:isShowAddDialog=
"isShowAddDialog"
:id=
"id"
:title=
"title"
@
create=
"handleRefresh"
/>
</
template
>
</
template
>
src/modules/admin/class/components/AddTermDialog.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
}
from
'element-plus'
import
{
getRelationSemList
,
relationClassSem
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
props
=
defineProps
({
const
props
=
defineProps
({
...
@@ -16,18 +19,45 @@ interface Emits {
...
@@ -16,18 +19,45 @@ interface Emits {
(
e
:
'update:isShowTermDialog'
,
isShowTermDialog
:
boolean
):
void
(
e
:
'update:isShowTermDialog'
,
isShowTermDialog
:
boolean
):
void
(
e
:
'create'
):
void
(
e
:
'create'
):
void
}
}
const
termList
:
any
=
ref
([])
const
formInfo
=
ref
({})
const
form
=
reactive
({
const
form
=
reactive
({
name
:
''
,
name
:
''
,
start_time
:
''
,
start_time
:
''
,
end_time
:
''
,
end_time
:
''
,
week
:
''
length
:
''
})
})
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowTermDialog'
,
false
)
emit
(
'update:isShowTermDialog'
,
false
)
}
}
const
handleConfirm
=
()
=>
{
const
handleConfirm
=
()
=>
{
emit
(
'update:isShowTermDialog'
,
false
)
const
params
:
any
=
{
emit
(
'create'
)
class_id
:
props
.
id
,
semesters_id
:
termList
.
value
.
filter
((
item
:
any
)
=>
item
.
name
===
form
.
name
)[
0
].
id
,
type
:
'add'
}
relationClassSem
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'关联学期成功'
)
emit
(
'update:isShowTermDialog'
,
false
)
emit
(
'create'
)
})
}
const
params
:
any
=
{
class_id
:
props
.
id
,
'per-page'
:
'1000'
}
getRelationSemList
(
params
).
then
(
res
=>
{
termList
.
value
=
res
.
data
.
list
})
const
handleChangeTerm
=
(
val
:
any
)
=>
{
if
(
val
!==
''
)
{
formInfo
.
value
=
termList
.
value
.
filter
((
item
:
any
)
=>
item
.
id
===
val
)[
0
]
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
formInfo
.
value
[
key
]
})
}
else
{
form
.
start_time
=
''
form
.
end_time
=
''
form
.
length
=
''
}
}
}
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -41,7 +71,16 @@ const handleConfirm = () => {
...
@@ -41,7 +71,16 @@ const handleConfirm = () => {
>
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
>
<el-form-item
label=
"学期名称:"
prop=
"name"
>
<el-form-item
label=
"学期名称:"
prop=
"name"
>
<el-input
v-model=
"form.name"
:disabled=
"props.title === '查看详情'"
></el-input>
<el-select
clearable
v-model=
"form.name"
:disabled=
"props.title === '查看详情'"
style=
"width: 100%"
placeholder=
"请选择学期"
@
change=
"handleChangeTerm"
>
<el-option
v-for=
"item in termList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"学期开始日期:"
prop=
"start_time"
>
<el-form-item
label=
"学期开始日期:"
prop=
"start_time"
>
<el-input
v-model=
"form.start_time"
disabled
></el-input>
<el-input
v-model=
"form.start_time"
disabled
></el-input>
...
@@ -49,8 +88,8 @@ const handleConfirm = () => {
...
@@ -49,8 +88,8 @@ const handleConfirm = () => {
<el-form-item
label=
"学期结束日期:"
prop=
"end_time"
>
<el-form-item
label=
"学期结束日期:"
prop=
"end_time"
>
<el-input
v-model=
"form.end_time"
disabled
></el-input>
<el-input
v-model=
"form.end_time"
disabled
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"教学周:"
prop=
"
week
"
>
<el-form-item
label=
"教学周:"
prop=
"
length
"
>
<el-input
v-model=
"form.
week
"
disabled
></el-input>
<el-input
v-model=
"form.
length
"
disabled
></el-input>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
...
...
src/modules/admin/class/components/ClassStudents.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
}
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'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
appList
=
ref
()
const
isAddStuDialog
=
ref
(
false
)
const
isAddStuDialog
=
ref
(
false
)
defineProps
({
const
props
=
defineProps
({
isShowClassStuDialog
:
{
isShowClassStuDialog
:
{
type
:
Boolean
type
:
Boolean
},
},
...
@@ -18,47 +21,46 @@ interface Emits {
...
@@ -18,47 +21,46 @@ interface Emits {
const
isShowAddDialog
=
ref
(
false
)
const
isShowAddDialog
=
ref
(
false
)
const
title
=
ref
(
''
)
const
title
=
ref
(
''
)
const
id
=
ref
(
''
)
const
id
=
ref
(
''
)
const
classInfo
:
any
=
ref
({})
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getClassStuList
,
params
:
{
name
:
''
,
class_id
:
props
.
id
},
callback
(
data
:
any
)
{
classInfo
.
value
=
data
.
info
return
{
list
:
data
.
list
,
total
:
data
.
total
}
}
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'班级代码'
,
prop
:
'code'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno_number'
,
align
:
'center'
},
{
label
:
'班级名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'所属部门/学校'
,
prop
:
'school'
,
align
:
'center'
},
{
label
:
'性别'
,
prop
:
'gender'
,
align
:
'center'
},
{
label
:
'人数'
,
prop
:
'number'
,
align
:
'center'
},
{
label
:
'有效状态'
,
prop
:
'status_name'
,
align
:
'center'
},
{
label
:
'班主任'
,
prop
:
'headmaster'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'updated_time'
,
align
:
'center'
},
{
label
:
'专业'
,
prop
:
'major'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'200'
,
fixed
:
'right'
}
{
label
:
'入学年份'
,
prop
:
'enter_month'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'300'
,
fixed
:
'right'
}
],
data
:
[
{
name
:
111
},
{
name
:
111
},
{
name
:
111
},
{
name
:
111
}
]
]
}
}
})
})
const
handleAddStu
=
()
=>
{
const
handleAddStu
=
()
=>
{
isAddStuDialog
.
value
=
true
isAddStuDialog
.
value
=
true
console
.
log
(
isAddStuDialog
)
}
}
const
handleDel
=
(
row
:
any
)
=>
{
const
handleDel
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
const
params
:
any
=
{
class_id
:
props
.
id
,
students_id
:
row
.
id
,
type
:
'delete'
}
relationClassStu
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'移除学生成功'
)
handleRefresh
()
})
}
}
const
handleDetail
=
(
row
:
any
)
=>
{
const
handleDetail
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
console
.
log
(
row
)
id
.
value
=
row
.
id
isShowAddDialog
.
value
=
true
isShowAddDialog
.
value
=
true
title
.
value
=
'查看详情'
title
.
value
=
'查看详情'
}
}
...
@@ -66,21 +68,21 @@ const handleCancel = () => {
...
@@ -66,21 +68,21 @@ const handleCancel = () => {
emit
(
'update:isShowClassStuDialog'
,
false
)
emit
(
'update:isShowClassStuDialog'
,
false
)
}
}
const
handleRefresh
=
()
=>
{
const
handleRefresh
=
()
=>
{
console
.
log
(
'ppp'
)
appList
.
value
.
refetch
(
)
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"isShowClassStuDialog"
draggable
title=
"班级学生"
width=
"70%"
:before-close=
"handleCancel"
>
<el-dialog
:model-value=
"isShowClassStuDialog"
draggable
title=
"班级学生"
width=
"70%"
:before-close=
"handleCancel"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<el-descriptions>
<el-descriptions>
<el-descriptions-item
label=
"班级代码:"
>
kooriookami
</el-descriptions-item>
<el-descriptions-item
label=
"班级代码:"
>
{{
classInfo
?.
code
}}
</el-descriptions-item>
<el-descriptions-item
label=
"班级名称"
>
18100000000
</el-descriptions-item>
<el-descriptions-item
label=
"班级名称"
>
{{
classInfo
?.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
Suzhou
</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"
>
School
</el-tag>
<el-tag
size=
"small"
>
{{
classInfo
?.
teacher_id_name
}}
</el-tag>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"所属专业"
>
工商管理
</el-descriptions-item>
<el-descriptions-item
label=
"所属专业"
>
{{
classInfo
?.
specialty_id_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"入学年份"
>
2021
</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"
>
添加学生
</el-button>
...
@@ -92,13 +94,19 @@ const handleRefresh = () => {
...
@@ -92,13 +94,19 @@ const handleRefresh = () => {
</
template
>
</
template
>
</AppList>
</AppList>
</div>
</div>
<AddStudentDialog
v-model:isAddStuDialog=
"isAddStuDialog"
v-if=
"isAddStuDialog === true"
/>
<AddStudentDialog
v-model:isAddStuDialog=
"isAddStuDialog"
v-if=
"isAddStuDialog === true"
:id=
"props.id"
@
create=
"handleRefresh"
/>
<AddStudent
<AddStudent
v-if=
"isShowAddDialog === true"
v-if=
"isShowAddDialog === true"
v-model:isShowAddDialog=
"isShowAddDialog"
v-model:isShowAddDialog=
"isShowAddDialog"
:id=
"id"
:id=
"id"
:title=
"title"
:title=
"title"
@
create=
"handleRefresh"
@
create=
"handleRefresh"
:isEdit=
"'2'"
/>
/>
</el-dialog>
</el-dialog>
</template>
</template>
src/modules/admin/class/components/RelatedTerm.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
}
from
'element-plus'
import
AddTermDialog
from
'./AddTermDialog.vue'
import
AddTermDialog
from
'./AddTermDialog.vue'
import
AddSemester
from
'../../semester/components/AddSemester.vue'
import
{
getClassSemList
,
relationClassSem
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
appList
=
ref
()
const
appList
=
ref
()
const
title
=
ref
(
''
)
const
title
=
ref
(
''
)
const
id
=
ref
(
''
)
const
id
:
any
=
ref
(
''
)
const
isShowTermDialog
=
ref
(
false
)
const
isShowTermDialog
=
ref
(
false
)
defineProps
({
const
isShowAddSemDialog
=
ref
(
false
)
const
classInfo
:
any
=
ref
({})
const
props
=
defineProps
({
isRelatingDialog
:
{
isRelatingDialog
:
{
type
:
Boolean
type
:
Boolean
},
},
...
@@ -18,46 +26,46 @@ interface Emits {
...
@@ -18,46 +26,46 @@ interface Emits {
}
}
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getClassSemList
,
params
:
{
class_id
:
props
.
id
},
callback
(
data
:
any
)
{
classInfo
.
value
=
data
.
info
return
{
list
:
data
.
list
,
total
:
data
.
total
}
}
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'学期名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学期名称'
,
prop
:
'name'
,
align
:
'center'
},
{
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
:
'week'
,
align
:
'center'
},
{
label
:
'教学周'
,
prop
:
'length'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'300'
,
fixed
:
'right'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'200'
,
fixed
:
'right'
}
],
data
:
[
{
name
:
111
},
{
name
:
111
},
{
name
:
111
},
{
name
:
111
}
]
]
}
}
})
})
const
handleAddTerm
=
()
=>
{
const
handleAddTerm
=
()
=>
{
isShowTermDialog
.
value
=
true
isShowTermDialog
.
value
=
true
title
.
value
=
'添加班级关联学期'
title
.
value
=
'添加班级关联学期'
id
.
value
=
props
.
id
console
.
log
(
111
)
}
}
const
handleDel
=
(
row
:
any
)
=>
{
const
handleDel
=
(
row
:
any
)
=>
{
const
params
:
any
=
{
class_id
:
props
.
id
,
semesters_id
:
row
.
id
,
type
:
'delete'
}
relationClassSem
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'移除学期成功'
)
handleFresh
()
})
console
.
log
(
row
)
console
.
log
(
row
)
}
}
const
handleDetail
=
(
row
:
any
)
=>
{
const
handleDetail
=
(
row
:
any
)
=>
{
isShow
Ter
mDialog
.
value
=
true
isShow
AddSe
mDialog
.
value
=
true
id
.
value
=
row
.
id
id
.
value
=
row
.
id
title
.
value
=
'查看详情'
title
.
value
=
'查看详情'
console
.
log
(
row
)
}
}
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isRelatingDialog'
,
false
)
emit
(
'update:isRelatingDialog'
,
false
)
...
@@ -70,14 +78,14 @@ const handleFresh = () => {
...
@@ -70,14 +78,14 @@ const handleFresh = () => {
<el-dialog
:model-value=
"isRelatingDialog"
draggable
title=
"班级关联学期"
width=
"70%"
:before-close=
"handleCancel"
>
<el-dialog
:model-value=
"isRelatingDialog"
draggable
title=
"班级关联学期"
width=
"70%"
:before-close=
"handleCancel"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<el-descriptions>
<el-descriptions>
<el-descriptions-item
label=
"班级代码:"
>
kooriookami
</el-descriptions-item>
<el-descriptions-item
label=
"班级代码:"
>
{{
classInfo
?.
code
}}
</el-descriptions-item>
<el-descriptions-item
label=
"班级名称"
>
18100000000
</el-descriptions-item>
<el-descriptions-item
label=
"班级名称"
>
{{
classInfo
?.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
Suzhou
</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"
>
School
</el-tag>
<el-tag
size=
"small"
>
{{
classInfo
?.
teacher_id_name
}}
</el-tag>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"所属专业"
>
工商管理
</el-descriptions-item>
<el-descriptions-item
label=
"所属专业"
>
{{
classInfo
?.
specialty_id_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"入学年份"
>
2021
</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>
...
@@ -96,5 +104,12 @@ const handleFresh = () => {
...
@@ -96,5 +104,12 @@ const handleFresh = () => {
:title=
"title"
:title=
"title"
@
create=
"handleFresh"
@
create=
"handleFresh"
/>
/>
<AddSemester
v-if=
"isShowAddSemDialog === true"
v-model:isShowAddSemDialog=
"isShowAddSemDialog"
:id=
"id"
:title=
"title"
:isEdit=
"'2'"
/>
</el-dialog>
</el-dialog>
</template>
</template>
src/modules/admin/class/views/List.vue
浏览文件 @
61321542
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
// import { getPro
List } from '../api'
import
{
getClass
List
}
from
'../api'
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'
...
@@ -9,12 +9,13 @@ import RelatedTerm from '../components/RelatedTerm.vue'
...
@@ -9,12 +9,13 @@ import RelatedTerm from '../components/RelatedTerm.vue'
const
appList
=
ref
()
const
appList
=
ref
()
const
id
=
ref
(
''
)
const
id
=
ref
(
''
)
const
title
=
ref
(
''
)
const
title
=
ref
(
''
)
const
isEdit
=
ref
(
''
)
const
isShowClassDialog
=
ref
(
false
)
const
isShowClassDialog
=
ref
(
false
)
const
isShowClassStuDialog
=
ref
(
false
)
const
isShowClassStuDialog
=
ref
(
false
)
const
isRelatingDialog
=
ref
(
false
)
const
isRelatingDialog
=
ref
(
false
)
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name
: '' } },
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
:
'input'
,
prop
:
'school'
,
label
:
'所属部门/学校:'
,
placeholder
:
'所属部门/学校'
}
...
@@ -23,34 +24,32 @@ const listOptions = $computed(() => {
...
@@ -23,34 +24,32 @@ const listOptions = $computed(() => {
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'班级代码'
,
prop
:
'code'
,
align
:
'center'
},
{
label
:
'班级代码'
,
prop
:
'code'
,
align
:
'center'
},
{
label
:
'班级名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'班级名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'所属部门/学校'
,
prop
:
'
school
'
,
align
:
'center'
},
{
label
:
'所属部门/学校'
,
prop
:
'
organ_id_name
'
,
align
:
'center'
},
{
label
:
'人数'
,
prop
:
'
number
'
,
align
:
'center'
},
{
label
:
'人数'
,
prop
:
'
student_nums
'
,
align
:
'center'
},
{
label
:
'班主任'
,
prop
:
'
headmaster
'
,
align
:
'center'
},
{
label
:
'班主任'
,
prop
:
'
teacher_id_name
'
,
align
:
'center'
},
{
label
:
'专业'
,
prop
:
'
major
'
,
align
:
'center'
},
{
label
:
'专业'
,
prop
:
'
specialty_id_name
'
,
align
:
'center'
},
{
label
:
'入学年份'
,
prop
:
'
enter_month
'
,
align
:
'center'
},
{
label
:
'入学年份'
,
prop
:
'
start_year_name
'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update
d
_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'300'
,
fixed
:
'right'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'300'
,
fixed
:
'right'
}
],
data
:
[
{
name
:
111
}
]
]
}
}
})
})
const
handleAddClass
=
()
=>
{
const
handleAddClass
=
()
=>
{
isShowClassDialog
.
value
=
true
isShowClassDialog
.
value
=
true
title
.
value
=
'新增班级'
title
.
value
=
'新增班级'
isEdit
.
value
=
'0'
}
}
const
handleEdit
=
(
row
:
any
)
=>
{
const
handleEdit
=
(
row
:
any
)
=>
{
isShowClassDialog
.
value
=
true
isShowClassDialog
.
value
=
true
title
.
value
=
'编辑班级'
title
.
value
=
'编辑班级'
id
.
value
=
row
.
id
id
.
value
=
row
.
id
isEdit
.
value
=
'1'
}
}
const
handleDetail
=
(
row
:
any
)
=>
{
const
handleDetail
=
(
row
:
any
)
=>
{
isShowClassDialog
.
value
=
true
isShowClassDialog
.
value
=
true
title
.
value
=
'查看详情'
title
.
value
=
'查看详情'
id
.
value
=
row
.
id
id
.
value
=
row
.
id
isEdit
.
value
=
'2'
}
}
const
handleClassStu
=
(
row
:
any
)
=>
{
const
handleClassStu
=
(
row
:
any
)
=>
{
isShowClassStuDialog
.
value
=
true
isShowClassStuDialog
.
value
=
true
...
@@ -61,6 +60,9 @@ const handleRelating = (row: any) => {
...
@@ -61,6 +60,9 @@ const handleRelating = (row: any) => {
isRelatingDialog
.
value
=
true
isRelatingDialog
.
value
=
true
id
.
value
=
row
.
id
id
.
value
=
row
.
id
}
}
const
handleFresh
=
()
=>
{
appList
.
value
.
refetch
()
}
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -77,7 +79,14 @@ const handleRelating = (row: any) => {
...
@@ -77,7 +79,14 @@ const handleRelating = (row: any) => {
</
template
>
</
template
>
</AppList>
</AppList>
</AppCard>
</AppCard>
<AddClass
v-model:isShowClassDialog=
"isShowClassDialog"
v-if=
"isShowClassDialog === true"
:title=
"title"
:id=
"id"
/>
<AddClass
<ClassStudents
v-model:isShowClassStuDialog=
"isShowClassStuDialog"
v-if=
"isShowClassStuDialog === true"
/>
v-model:isShowClassDialog=
"isShowClassDialog"
<RelatedTerm
v-model:isRelatingDialog=
"isRelatingDialog"
v-if=
"isRelatingDialog === true"
/>
v-if=
"isShowClassDialog === true"
:title=
"title"
:id=
"id"
:isEdit=
"isEdit"
@
create=
"handleFresh"
/>
<ClassStudents
v-model:isShowClassStuDialog=
"isShowClassStuDialog"
v-if=
"isShowClassStuDialog === true"
:id=
"id"
/>
<RelatedTerm
v-model:isRelatingDialog=
"isRelatingDialog"
v-if=
"isRelatingDialog === true"
:id=
"id"
/>
</template>
</template>
src/modules/admin/pro/api.ts
浏览文件 @
61321542
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学生列表
// 获取专业列表
export
function
getProList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getProList
(
params
?:
{
name
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/psp/backend/video/index'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/backend/specialty/list'
,
{
params
})
}
// 创建专业
export
function
createPro
(
data
:
{
name
:
string
code
:
string
education_background
:
string
length_of_schooling
:
string
degree_category
:
string
degree
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/specialty/create'
,
data
)
}
// 更新专业
export
function
updatePro
(
data
:
{
id
:
string
name
:
string
code
:
string
education_background
:
string
length_of_schooling
:
string
degree_category
:
string
degree
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/specialty/update'
,
data
)
}
// 获取专业详情
export
function
getProDetail
(
params
:
{
id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/specialty/view'
,
{
params
})
}
}
src/modules/admin/pro/components/AddPro.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
type
{
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
{
useMapStore
}
from
'@/stores/map'
import
{
createPro
,
updatePro
,
getProDetail
}
from
'../api'
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
store
=
useMapStore
()
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
schoolList
=
[
const
categoryList
=
store
.
getMapValuesByKey
(
'specialty_category'
)
{
const
educationList
=
store
.
getMapValuesByKey
(
'specialty_education_background'
)
id
:
'111'
,
const
schoolingList
=
store
.
getMapValuesByKey
(
'specialty_length_of_schooling'
)
name
:
'清华'
const
degreeCategoryList
=
store
.
getMapValuesByKey
(
'specialty_degree_category'
)
},
const
specialtyDegreeList
=
store
.
getMapValuesByKey
(
'specialty_degree'
)
{
id
:
'222'
,
name
:
'北大'
}
]
const
form
=
reactive
({
const
form
=
reactive
({
code
:
''
,
code
:
''
,
name
:
''
,
name
:
''
,
category
:
''
,
category
:
''
,
education
:
1
,
education
_background
:
'1'
,
schoolLength
:
1
,
length_of_schooling
:
'1'
,
degree
C
ategory
:
''
,
degree
_c
ategory
:
''
,
degree
:
0
degree
:
'1'
})
})
const
rules
=
reactive
<
FormRules
>
({
const
rules
=
reactive
<
FormRules
>
({
code
:
[{
required
:
true
,
message
:
'请输入专业代码'
,
trigger
:
'change'
}],
code
:
[{
required
:
true
,
message
:
'请输入专业代码'
,
trigger
:
'change'
}],
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
:
[{
required
:
true
,
message
:
'请选择学历'
,
trigger
:
'blur'
}],
education
_background
:
[{
required
:
true
,
message
:
'请选择学历'
,
trigger
:
'blur'
}],
schoolLength
:
[{
required
:
true
,
message
:
'请选择学制'
,
trigger
:
'change'
}],
length_of_schooling
:
[{
required
:
true
,
message
:
'请选择学制'
,
trigger
:
'change'
}],
degree
C
ategory
:
[{
required
:
true
,
message
:
'请选择学位门类'
,
trigger
:
'blur'
}],
degree
_c
ategory
:
[{
required
:
true
,
message
:
'请选择学位门类'
,
trigger
:
'blur'
}],
degree
:
[{
required
:
true
,
message
:
'请选择学位'
,
trigger
:
'blur'
}]
degree
:
[{
required
:
true
,
message
:
'请选择学位'
,
trigger
:
'blur'
}]
})
})
const
props
=
defineProps
({
const
props
=
defineProps
({
...
@@ -38,6 +40,9 @@ const props = defineProps({
...
@@ -38,6 +40,9 @@ const props = defineProps({
},
},
id
:
{
id
:
{
type
:
String
type
:
String
},
isEdit
:
{
type
:
String
}
}
})
})
interface
Emits
{
interface
Emits
{
...
@@ -48,14 +53,47 @@ interface Emits {
...
@@ -48,14 +53,47 @@ interface Emits {
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowProDialog'
,
false
)
emit
(
'update:isShowProDialog'
,
false
)
}
}
const
handleConfirm
=
()
=>
{
emit
(
'update:isShowProDialog'
,
false
)
const
handleConfirm
=
async
(
formEl
:
FormInstance
|
undefined
)
=>
{
emit
(
'create'
)
if
(
!
formEl
)
return
await
formEl
.
validate
(
valid
=>
{
console
.
log
(
valid
)
if
(
valid
)
{
if
(
props
.
isEdit
===
'0'
)
{
const
params
:
any
=
Object
.
assign
({},
form
)
createPro
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'新增专业成功'
)
emit
(
'update:isShowProDialog'
,
false
)
emit
(
'create'
)
})
}
else
if
(
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
Object
.
assign
({
id
:
props
.
id
},
form
)
updatePro
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'更新专业成功'
)
emit
(
'update:isShowProDialog'
,
false
)
emit
(
'create'
)
})
}
else
{
emit
(
'update:isShowProDialog'
,
false
)
emit
(
'create'
)
}
}
})
}
// 获取详情
if
(
props
.
isEdit
===
'2'
||
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
{
id
:
props
.
id
}
getProDetail
(
params
).
then
((
res
:
any
)
=>
{
console
.
log
(
res
)
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
res
.
data
[
key
]
})
})
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<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=
"
f
ormRef"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"
ruleF
ormRef"
>
<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.title === '查看详情'"
></el-input>
</el-form-item>
</el-form-item>
...
@@ -63,39 +101,45 @@ const handleConfirm = () => {
...
@@ -63,39 +101,45 @@ const handleConfirm = () => {
<el-input
v-model=
"form.name"
:disabled=
"props.title === '查看详情'"
></el-input>
<el-input
v-model=
"form.name"
:disabled=
"props.title === '查看详情'"
></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.title === '查看详情'"
>
<el-option
v-for=
"(item, index) in schoolList"
:key=
"index"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"(item, index) in categoryList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"学历:"
prop=
"education"
>
<el-form-item
label=
"学历:"
prop=
"education_background"
>
<el-radio-group
v-model=
"form.education"
:disabled=
"props.title === '查看详情'"
>
<el-radio-group
v-model=
"form.education_background"
:disabled=
"props.title === '查看详情'"
>
<el-radio
:label=
"0"
>
专科
</el-radio>
<el-radio
v-for=
"item in educationList"
:key=
"item.id"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
<el-radio
:label=
"1"
>
本科
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"学制:"
prop=
"schoolLength"
>
<el-form-item
label=
"学制:"
prop=
"length_of_schooling"
>
<el-radio-group
v-model=
"form.schoolLength"
:disabled=
"props.title === '查看详情'"
>
<el-radio-group
v-model=
"form.length_of_schooling"
:disabled=
"props.title === '查看详情'"
>
<el-radio
:label=
"0"
>
3年
</el-radio>
<el-radio
v-for=
"item in schoolingList"
:key=
"item.id"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
<el-radio
:label=
"1"
>
4年
</el-radio>
<el-radio
:label=
"2"
>
5年
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"学位门类:"
prop=
"degreeCategory"
>
<el-form-item
label=
"学位门类:"
prop=
"degree_category"
>
<el-select
v-model=
"form.degreeCategory"
:disabled=
"props.title === '查看详情'"
>
<el-select
v-model=
"form.degree_category"
:disabled=
"props.title === '查看详情'"
placeholder=
"请选择学位门类"
>
<el-option
v-for=
"(item, index) in schoolList"
:key=
"index"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"(item, index) in degreeCategoryList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
></el-option>
</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.title === '查看详情'"
>
<el-radio
:label=
"0"
>
学士
</el-radio>
<el-radio
v-for=
"item in specialtyDegreeList"
:key=
"item.id"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
<el-radio
:label=
"1"
>
硕士
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
v-if=
"props.isEdit !== '1'"
>
<span>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确认
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm
(ruleFormRef)
"
>
确认
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
...
...
src/modules/admin/pro/views/List.vue
浏览文件 @
61321542
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
//
import { getProList } from '../api'
import
{
getProList
}
from
'../api'
import
AddPro
from
'../components/AddPro.vue'
import
AddPro
from
'../components/AddPro.vue'
// import { useMapStore } from '@/stores/map'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore()
// const store = useMapStore()
const
appList
=
ref
()
const
appList
=
ref
()
const
title
=
ref
(
''
)
const
title
=
ref
(
''
)
const
id
=
ref
(
''
)
const
id
=
ref
(
''
)
const
isEdit
=
ref
(
''
)
const
isShowProDialog
=
ref
(
false
)
const
isShowProDialog
=
ref
(
false
)
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
//
remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getProList
,
params
:
{
name
:
''
}
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'专业名称:'
,
placeholder
:
'专业名称'
}],
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'专业名称:'
,
placeholder
:
'专业名称'
}],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'专业代码'
,
prop
:
'code'
,
align
:
'center'
},
{
label
:
'专业代码'
,
prop
:
'code'
,
align
:
'center'
},
{
label
:
'专业名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'专业名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'专业类别'
,
prop
:
'category'
,
align
:
'center'
},
{
label
:
'专业类别'
,
prop
:
'category
_name
'
,
align
:
'center'
},
{
label
:
'学历'
,
prop
:
'education'
,
align
:
'center'
},
{
label
:
'学历'
,
prop
:
'education
_background_name
'
,
align
:
'center'
},
{
label
:
'学制'
,
prop
:
'
schoolLength
'
,
align
:
'center'
},
{
label
:
'学制'
,
prop
:
'
length_of_schooling_name
'
,
align
:
'center'
},
{
label
:
'学位门类'
,
prop
:
'degree
Category
'
,
align
:
'center'
},
{
label
:
'学位门类'
,
prop
:
'degree
_category_name
'
,
align
:
'center'
},
{
label
:
'学位'
,
prop
:
'degree'
,
align
:
'center'
},
{
label
:
'学位'
,
prop
:
'degree
_name
'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update
d
_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
data
:
[
{
name
:
222
}
]
]
}
}
})
})
const
handleAddPro
=
()
=>
{
const
handleAddPro
=
()
=>
{
isShowProDialog
.
value
=
true
isShowProDialog
.
value
=
true
title
.
value
=
'新增专业'
title
.
value
=
'新增专业'
isEdit
.
value
=
'0'
}
}
const
handleDetail
=
(
row
:
any
)
=>
{
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'
}
}
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'
}
}
const
handleFresh
=
()
=>
{
const
handleFresh
=
()
=>
{
appList
.
value
.
refetch
()
appList
.
value
.
refetch
()
...
@@ -64,7 +63,9 @@ const handleFresh = () => {
...
@@ -64,7 +63,9 @@ const handleFresh = () => {
<AddPro
<AddPro
v-if=
"isShowProDialog === true"
v-if=
"isShowProDialog === true"
v-model:isShowProDialog=
"isShowProDialog"
v-model:isShowProDialog=
"isShowProDialog"
:id=
"id"
:title=
"title"
:title=
"title"
:isEdit=
"isEdit"
@
create=
"handleFresh"
@
create=
"handleFresh"
/>
/>
</template>
</template>
src/modules/admin/semester/api.ts
浏览文件 @
61321542
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学生列表
// 获取学期列表
export
function
getProList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getSemList
(
params
?:
{
name
?:
string
;
organ_id
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/psp/backend/video/index'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/learning/semester/list'
,
{
params
})
}
// 添加学期
export
function
addSem
(
data
?:
{
organ_id
:
string
name
:
string
start_time
?:
string
end_time
?:
string
length
?:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/semester/create'
,
data
)
}
// 获取学期详情
export
function
getSemDetail
(
params
?:
{
id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/semester/view'
,
{
params
})
}
// 更新学期
export
function
updateSem
(
data
?:
{
id
:
string
organ_id
:
string
name
:
string
start_time
?:
string
end_time
?:
string
length
?:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/semester/update'
,
data
)
}
// 获取学期中的课程列表
export
function
getSemCourse
(
params
?:
{
semester_id
:
string
;
name
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/semester/courses'
,
{
params
})
}
// 关联课程-获取课程列表
export
function
getRelationSemCourse
(
params
?:
{
semester_id
:
string
classification
?:
string
name
?:
string
page
?:
string
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/semester/add-courses'
,
{
params
})
}
// 关联学期-关联/移除学期
export
function
relationSemCourse
(
data
:
{
semester_id
:
string
;
courses_id
:
string
;
type
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/learning/semester/add-courses'
,
data
)
}
}
src/modules/admin/semester/components/AddSemCourse.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
}
from
'element-plus'
import
{
getRelationSemCourse
,
relationSemCourse
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
defineProps
({
const
props
=
defineProps
({
isShowCourse
:
{
isShowCourse
:
{
type
:
Boolean
type
:
Boolean
},
},
...
@@ -10,43 +14,54 @@ defineProps({
...
@@ -10,43 +14,54 @@ defineProps({
})
})
interface
Emits
{
interface
Emits
{
(
e
:
'update:isShowCourse'
,
isShowCourse
:
boolean
):
void
(
e
:
'update:isShowCourse'
,
isShowCourse
:
boolean
):
void
(
e
:
'create'
):
void
}
}
const
semInfo
:
any
=
ref
({})
const
multiSelection
=
ref
([])
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getRelationSemCourse
,
params
:
{
semester_id
:
props
.
id
,
name
:
''
,
classification
:
''
},
callback
(
data
:
any
)
{
semInfo
.
value
=
data
.
info
return
{
list
:
data
.
list
,
total
:
data
.
total
}
}
},
filters
:
[
filters
:
[
{
type
:
'select'
,
prop
:
'
name
'
,
label
:
'课程分类:'
,
placeholder
:
'课程分类'
},
{
type
:
'select'
,
prop
:
'
classification
'
,
label
:
'课程分类:'
,
placeholder
:
'课程分类'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'课程名称:'
,
placeholder
:
'课程名称'
}
{
type
:
'input'
,
prop
:
'name'
,
label
:
'课程名称:'
,
placeholder
:
'课程名称'
}
],
],
columns
:
[
columns
:
[
{
type
:
'selection'
},
{
type
:
'selection'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'课程名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'课程名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'课程类型'
,
prop
:
'
school
'
,
align
:
'center'
},
{
label
:
'课程类型'
,
prop
:
'
online_type_name
'
,
align
:
'center'
},
{
label
:
'选课类型'
,
prop
:
'
number
'
,
align
:
'center'
},
{
label
:
'选课类型'
,
prop
:
'
elective_type_name
'
,
align
:
'center'
},
{
label
:
'课程分类'
,
prop
:
'
headmaster
'
,
align
:
'center'
},
{
label
:
'课程分类'
,
prop
:
'
classification_name
'
,
align
:
'center'
},
{
label
:
'课程学分'
,
prop
:
'
major
'
,
align
:
'center'
},
{
label
:
'课程学分'
,
prop
:
'
credit
'
,
align
:
'center'
},
{
label
:
'讲师'
,
prop
:
'enter_month'
,
align
:
'center'
},
{
label
:
'讲师'
,
prop
:
'enter_month'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update
d
_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'200'
,
fixed
:
'right'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'200'
,
fixed
:
'right'
}
],
data
:
[
{
name
:
111
},
{
name
:
111
},
{
name
:
111
},
{
name
:
111
}
]
]
}
}
})
})
const
handleSelectChange
=
(
val
:
any
)
=>
{
multiSelection
.
value
=
val
}
const
handleAddStu
=
()
=>
{
const
handleAddStu
=
()
=>
{
const
params
:
any
=
{
semester_id
:
props
.
id
,
courses_id
:
multiSelection
.
value
.
map
((
item
:
any
)
=>
item
.
id
).
toString
(),
type
:
'add'
}
relationSemCourse
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'关联课程成功'
)
emit
(
'update:isShowCourse'
,
false
)
emit
(
'create'
)
})
console
.
log
(
111
)
console
.
log
(
111
)
}
}
...
@@ -58,19 +73,26 @@ const handleCancel = () => {
...
@@ -58,19 +73,26 @@ const handleCancel = () => {
<el-dialog
:model-value=
"isShowCourse"
draggable
title=
"关联选择课程"
width=
"50%"
:before-close=
"handleCancel"
>
<el-dialog
:model-value=
"isShowCourse"
draggable
title=
"关联选择课程"
width=
"50%"
:before-close=
"handleCancel"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<el-descriptions>
<el-descriptions>
<el-descriptions-item
label=
"学期名称:"
>
kooriookami
</el-descriptions-item>
<el-descriptions-item
label=
"学期名称:"
>
{{
semInfo
.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
18100000000
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
{{
semInfo
.
organ_id_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"开始日期:"
>
Suzhou
</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"
>
School
</el-tag>
<el-tag
size=
"small"
>
{{
semInfo
.
end_time
}}
</el-tag>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"教学周"
>
工商管理
</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"
@
selection-change=
"handleSelectChange"
>
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
>
关联选择课程
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
>
关联选择课程
</el-button>
<template
#
table-operate
>
<template
#
table-operate
=
"
{ row }"
>
<el-space>
<el-space>
<router-link
:to=
"
'/course/my/view?id=6952509530357891072'
"
target=
"_blank"
>
<router-link
:to=
"
`/course/my/view?id=$
{row.id}`
" target="_blank">
<el-link
type=
"primary"
plain
>
查看
</el-link>
<el-link
type=
"primary"
plain
>
查看
</el-link>
</router-link>
</router-link>
</el-space>
</el-space>
...
...
src/modules/admin/semester/components/AddSemester.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
type
{
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
{
useProjectList
}
from
'@/composables/useGetProjectList'
import
{
getSemDetail
,
addSem
,
updateSem
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
schoolList
=
[
const
ruleFormRef
=
ref
<
FormInstance
>
()
{
id
:
'111'
,
const
departmentList
:
any
=
useProjectList
(
''
,
'79806610719731712'
).
departmentList
name
:
'清华'
},
{
id
:
'222'
,
name
:
'北大'
}
]
const
form
=
reactive
({
const
form
=
reactive
({
name
:
''
,
name
:
''
,
school
:
''
,
organ_id
:
''
,
start_time
:
''
,
start_time
:
''
,
end_time
:
''
,
end_time
:
''
,
week
:
''
length
:
''
})
})
const
rules
=
reactive
<
FormRules
>
({
const
rules
=
reactive
<
FormRules
>
({
name
:
[{
required
:
true
,
message
:
'请输入学期名称'
,
trigger
:
'blur'
}],
name
:
[{
required
:
true
,
message
:
'请输入学期名称'
,
trigger
:
'blur'
}],
school
:
[{
required
:
true
,
message
:
'请选择所属部门/学校'
,
trigger
:
'change'
}]
organ_id
:
[{
required
:
true
,
message
:
'请选择所属部门/学校'
,
trigger
:
'change'
}]
})
})
const
props
=
defineProps
({
const
props
=
defineProps
({
isShowAddSemDialog
:
{
isShowAddSemDialog
:
{
...
@@ -33,7 +32,7 @@ const props = defineProps({
...
@@ -33,7 +32,7 @@ const props = defineProps({
type
:
String
type
:
String
},
},
isEdit
:
{
isEdit
:
{
type
:
Boolean
type
:
String
}
}
})
})
interface
Emits
{
interface
Emits
{
...
@@ -44,21 +43,53 @@ interface Emits {
...
@@ -44,21 +43,53 @@ interface Emits {
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowAddSemDialog'
,
false
)
emit
(
'update:isShowAddSemDialog'
,
false
)
}
}
const
handleConfirm
=
()
=>
{
// 确定
emit
(
'update:isShowAddSemDialog'
,
false
)
const
handleConfirm
=
async
(
formEl
:
FormInstance
|
undefined
)
=>
{
emit
(
'create'
)
if
(
!
formEl
)
return
await
formEl
.
validate
(
valid
=>
{
console
.
log
(
valid
)
if
(
valid
)
{
if
(
props
.
isEdit
===
'0'
)
{
const
params
:
any
=
Object
.
assign
({},
form
)
addSem
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'新增学期成功'
)
emit
(
'update:isShowAddSemDialog'
,
false
)
emit
(
'create'
)
})
}
else
if
(
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
Object
.
assign
({
id
:
props
.
id
},
form
)
updateSem
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'更新学期成功'
)
emit
(
'update:isShowAddSemDialog'
,
false
)
emit
(
'create'
)
})
}
else
{
emit
(
'update:isShowAddSemDialog'
,
false
)
emit
(
'create'
)
}
}
})
}
// 获取详情
if
(
props
.
isEdit
===
'2'
||
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
{
id
:
props
.
id
}
getSemDetail
(
params
).
then
((
res
:
any
)
=>
{
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
res
.
data
[
key
]
})
})
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"isShowAddSemDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-dialog
:model-value=
"isShowAddSemDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"
f
ormRef"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"
ruleF
ormRef"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
>
<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=
"
school
"
>
<el-form-item
label=
"所属部门/学校:"
prop=
"
organ_id
"
>
<el-select
v-model=
"form.school"
placeholder=
"请选择所属部门/学校"
:disabled=
"props.title === '查看详情'
"
>
<el-select
clearable
v-model=
"form.organ_id"
:disabled=
"props.isEdit === '2'"
style=
"width: 100%
"
>
<el-option
v-for=
"
(item, index) in schoolList"
:key=
"index"
:label=
"item.name"
:value=
"item.id"
></el-option
>
<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=
"start_time"
>
<el-form-item
label=
"学期开始日期:"
prop=
"start_time"
>
...
@@ -66,7 +97,7 @@ const handleConfirm = () => {
...
@@ -66,7 +97,7 @@ const handleConfirm = () => {
v-model=
"form.start_time"
v-model=
"form.start_time"
type=
"date"
type=
"date"
placeholder=
"学期开始日期"
placeholder=
"学期开始日期"
:disabled=
"props.
title === '查看详情
'"
:disabled=
"props.
isEdit === '2
'"
/>
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"学期结束日期:"
prop=
"end_time"
>
<el-form-item
label=
"学期结束日期:"
prop=
"end_time"
>
...
@@ -74,18 +105,18 @@ const handleConfirm = () => {
...
@@ -74,18 +105,18 @@ const handleConfirm = () => {
v-model=
"form.end_time"
v-model=
"form.end_time"
type=
"date"
type=
"date"
placeholder=
"学期结束日期"
placeholder=
"学期结束日期"
:disabled=
"props.
title === '查看详情
'"
:disabled=
"props.
isEdit === '2
'"
/>
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"教学周:"
prop=
"
week
"
>
<el-form-item
label=
"教学周:"
prop=
"
length
"
>
<el-input
v-model=
"form.
week"
:disabled=
"props.title === '查看详情
'"
></el-input>
<el-input
v-model=
"form.
length"
:disabled=
"props.isEdit === '2
'"
></el-input>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</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"
>
确认
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm
(ruleFormRef)
"
>
确认
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
...
...
src/modules/admin/semester/components/SemesterCourse.vue
浏览文件 @
61321542
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
}
from
'element-plus'
import
AddSemCourse
from
'./AddSemCourse.vue'
import
AddSemCourse
from
'./AddSemCourse.vue'
import
{
getSemCourse
,
relationSemCourse
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
defineProps
({
const
props
=
defineProps
({
isShowSemCourseDialog
:
{
isShowSemCourseDialog
:
{
type
:
Boolean
type
:
Boolean
},
},
...
@@ -12,50 +14,58 @@ defineProps({
...
@@ -12,50 +14,58 @@ defineProps({
interface
Emits
{
interface
Emits
{
(
e
:
'update:isShowSemCourseDialog'
,
isShowSemCourseDialog
:
boolean
):
void
(
e
:
'update:isShowSemCourseDialog'
,
isShowSemCourseDialog
:
boolean
):
void
}
}
const
appList
=
ref
()
const
id
:
any
=
ref
(
''
)
const
isShowCourse
=
ref
(
false
)
const
isShowCourse
=
ref
(
false
)
const
semInfo
:
any
=
ref
({})
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getSemCourse
,
params
:
{
semester_id
:
props
.
id
,
name
:
''
},
callback
(
data
:
any
)
{
semInfo
.
value
=
data
.
info
return
{
list
:
data
.
list
,
total
:
data
.
total
}
}
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'课程名称:'
,
placeholder
:
'课程名称'
}],
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'课程名称:'
,
placeholder
:
'课程名称'
}],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'课程名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'课程名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'课程类型'
,
prop
:
'
school
'
,
align
:
'center'
},
{
label
:
'课程类型'
,
prop
:
'
online_type_name
'
,
align
:
'center'
},
{
label
:
'选课类型'
,
prop
:
'
number
'
,
align
:
'center'
},
{
label
:
'选课类型'
,
prop
:
'
elective_type_name
'
,
align
:
'center'
},
{
label
:
'课程分类'
,
prop
:
'
headmaster
'
,
align
:
'center'
},
{
label
:
'课程分类'
,
prop
:
'
classification_name
'
,
align
:
'center'
},
{
label
:
'课程学分'
,
prop
:
'
major
'
,
align
:
'center'
},
{
label
:
'课程学分'
,
prop
:
'
credit
'
,
align
:
'center'
},
{
label
:
'讲师'
,
prop
:
'enter_month'
,
align
:
'center'
},
{
label
:
'讲师'
,
prop
:
'enter_month'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update_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
:
'200'
,
fixed
:
'right'
}
],
data
:
[
{
name
:
111
},
{
name
:
111
},
{
name
:
111
},
{
name
:
111
}
]
]
}
}
})
})
const
handleAddCourse
=
()
=>
{
const
handleAddCourse
=
()
=>
{
isShowCourse
.
value
=
true
isShowCourse
.
value
=
true
console
.
log
(
111
)
console
.
log
(
111
)
id
.
value
=
props
.
id
}
}
const
handleDel
=
(
row
:
any
)
=>
{
const
handleDel
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
console
.
log
(
row
)
const
params
:
any
=
{
semester_id
:
props
.
id
,
courses_id
:
row
.
id
,
type
:
'delete'
}
relationSemCourse
(
params
).
then
(()
=>
{
ElMessage
.
success
(
'移除课程成功'
)
handleFresh
()
})
}
}
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowSemCourseDialog'
,
false
)
emit
(
'update:isShowSemCourseDialog'
,
false
)
}
}
const
handleFresh
=
()
=>
{
appList
.
value
.
refetch
()
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
<el-dialog
...
@@ -67,19 +77,19 @@ const handleCancel = () => {
...
@@ -67,19 +77,19 @@ const handleCancel = () => {
>
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<div
style=
"overflow-y: auto; height: 70vh"
>
<el-descriptions>
<el-descriptions>
<el-descriptions-item
label=
"学期名称:"
>
kooriookami
</el-descriptions-item>
<el-descriptions-item
label=
"学期名称:"
>
{{
semInfo
.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
18100000000
</el-descriptions-item>
<el-descriptions-item
label=
"所属部门/学校:"
>
{{
semInfo
.
organ_id_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"开始日期:"
>
Suzhou
</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"
>
School
</el-tag>
<el-tag
size=
"small"
>
{{
semInfo
.
end_time
}}
</el-tag>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"教学周"
>
工商管理
</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>
<template
#
table-operate=
"
{ row }">
<template
#
table-operate=
"
{ row }">
<el-space>
<el-space>
<router-link
:to=
"
'/course/my/view?id=6952509530357891072'
"
target=
"_blank"
>
<router-link
:to=
"
`/course/my/view??id=$
{row.id}`
" target="_blank">
<el-link
type=
"primary"
plain
>
查看
</el-link>
<el-link
type=
"primary"
plain
>
查看
</el-link>
</router-link>
</router-link>
<el-link
plain
@
click=
"handleDel(row)"
>
移除
</el-link>
<el-link
plain
@
click=
"handleDel(row)"
>
移除
</el-link>
...
@@ -87,6 +97,6 @@ const handleCancel = () => {
...
@@ -87,6 +97,6 @@ const handleCancel = () => {
</
template
>
</
template
>
</AppList>
</AppList>
</div>
</div>
<AddSemCourse
v-model:isShowCourse=
"isShowCourse"
v-if=
"isShowCourse === true"
/>
<AddSemCourse
v-model:isShowCourse=
"isShowCourse"
v-if=
"isShowCourse === true"
:id=
"id"
@
create=
"handleFresh"
/>
</el-dialog>
</el-dialog>
</template>
</template>
src/modules/admin/semester/views/List.vue
浏览文件 @
61321542
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
// import { getPro
List } from '../api'
import
{
getSem
List
}
from
'../api'
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 { useMapStore } from '@/stores/map'
...
@@ -7,52 +7,53 @@ import SemesterCourse from '../components/SemesterCourse.vue'
...
@@ -7,52 +7,53 @@ import SemesterCourse from '../components/SemesterCourse.vue'
const
appList
=
ref
()
const
appList
=
ref
()
const
title
=
ref
(
''
)
const
title
=
ref
(
''
)
const
id
=
ref
(
''
)
const
id
=
ref
(
''
)
const
isEdit
=
ref
(
false
)
const
isEdit
=
ref
(
''
)
const
isShowAddSemDialog
=
ref
(
false
)
const
isShowAddSemDialog
=
ref
(
false
)
const
isShowSemCourseDialog
=
ref
(
false
)
const
isShowSemCourseDialog
=
ref
(
false
)
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name
: '' } },
remote
:
{
httpRequest
:
getSemList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学期名称'
,
placeholder
:
'学期名称'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学期名称
:
'
,
placeholder
:
'学期名称'
},
{
type
:
'input'
,
prop
:
'
name'
,
label
:
'所属部门/学校
'
,
placeholder
:
'所属部门/学校'
}
{
type
:
'input'
,
prop
:
'
organ_id'
,
label
:
'所属部门/学校:
'
,
placeholder
:
'所属部门/学校'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'学期名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学期名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'所属部门/学校'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'所属部门/学校'
,
prop
:
'
organ_id_
name'
,
align
:
'center'
},
{
label
:
'学期开始日期'
,
prop
:
'
na
me'
,
align
:
'center'
},
{
label
:
'学期开始日期'
,
prop
:
'
start_ti
me'
,
align
:
'center'
},
{
label
:
'学期结束日期'
,
prop
:
'
na
me'
,
align
:
'center'
},
{
label
:
'学期结束日期'
,
prop
:
'
end_ti
me'
,
align
:
'center'
},
{
label
:
'教学周'
,
prop
:
'
name
'
,
align
:
'center'
},
{
label
:
'教学周'
,
prop
:
'
length
'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update
d
_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
data
:
[
{
name
:
'1111'
}
]
]
}
}
})
})
const
handleAddSemester
=
()
=>
{
const
handleAddSemester
=
()
=>
{
isShowAddSemDialog
.
value
=
true
isShowAddSemDialog
.
value
=
true
title
.
value
=
'新增学期'
title
.
value
=
'新增学期'
isEdit
.
value
=
'0'
}
}
const
handle
Detail
=
(
row
:
any
)
=>
{
const
handle
Edit
=
(
row
:
any
)
=>
{
isShowAddSemDialog
.
value
=
true
isShowAddSemDialog
.
value
=
true
title
.
value
=
'
查看详情
'
title
.
value
=
'
编辑学期
'
id
.
value
=
row
.
id
id
.
value
=
row
.
id
isEdit
.
value
=
'1'
}
}
const
handle
Edit
=
(
row
:
any
)
=>
{
const
handle
Detail
=
(
row
:
any
)
=>
{
isShowAddSemDialog
.
value
=
true
isShowAddSemDialog
.
value
=
true
title
.
value
=
'
编辑学期
'
title
.
value
=
'
查看详情
'
id
.
value
=
row
.
id
id
.
value
=
row
.
id
isEdit
.
value
=
true
isEdit
.
value
=
'2'
}
}
const
handleCourse
=
(
row
:
any
)
=>
{
const
handleCourse
=
(
row
:
any
)
=>
{
isShowSemCourseDialog
.
value
=
true
isShowSemCourseDialog
.
value
=
true
id
.
value
=
row
.
id
id
.
value
=
row
.
id
}
}
const
handleFresh
=
()
=>
{
appList
.
value
.
refetch
()
}
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -72,8 +73,13 @@ const handleCourse = (row: any) => {
...
@@ -72,8 +73,13 @@ const handleCourse = (row: any) => {
v-model:isShowAddSemDialog=
"isShowAddSemDialog"
v-model:isShowAddSemDialog=
"isShowAddSemDialog"
v-if=
"isShowAddSemDialog === true"
v-if=
"isShowAddSemDialog === true"
:title=
"title"
:title=
"title"
:id=
"
title
"
:id=
"
id
"
:isEdit=
"isEdit"
:isEdit=
"isEdit"
@
create=
"handleFresh"
/>
<SemesterCourse
v-model:isShowSemCourseDialog=
"isShowSemCourseDialog"
v-if=
"isShowSemCourseDialog === true"
:id=
"id"
/>
/>
<SemesterCourse
v-model:isShowSemCourseDialog=
"isShowSemCourseDialog"
v-if=
"isShowSemCourseDialog === true"
/>
</template>
</template>
src/modules/admin/staff/api.ts
浏览文件 @
61321542
...
@@ -4,7 +4,7 @@ import httpRequest from '@/utils/axios'
...
@@ -4,7 +4,7 @@ import httpRequest from '@/utils/axios'
export
function
getStaffList
(
params
?:
{
name
?:
string
;
organ_id
?:
string
;
page
?:
string
;
[
'per-page'
]?:
string
})
{
export
function
getStaffList
(
params
?:
{
name
?:
string
;
organ_id
?:
string
;
page
?:
string
;
[
'per-page'
]?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/teacher/list'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/learning/teacher/list'
,
{
params
})
}
}
//
// 获取学生列表
//
添加学生
export
function
addStaff
(
data
?:
{
export
function
addStaff
(
data
?:
{
school
:
string
school
:
string
name
:
string
name
:
string
...
...
src/modules/admin/student/api.ts
浏览文件 @
61321542
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学生列表
// 获取学生列表
export
function
getStudentList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getStudentList
(
params
?:
{
name
?:
string
;
organ_id
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/student/list'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/learning/student/list'
,
{
params
})
}
}
// // 导入学生
// // 导入学生
...
@@ -10,6 +10,11 @@ export function importStudent(data: { file: any }) {
...
@@ -10,6 +10,11 @@ export function importStudent(data: { file: any }) {
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
})
}
}
// 导出学生
export
function
exportStudent
(
params
:
{
name
:
string
;
organ_id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/student/download'
,
{
params
,
responseType
:
'blob'
})
}
// 导出学生
// 添加学生
// 添加学生
export
function
addStudent
(
data
?:
{
export
function
addStudent
(
data
?:
{
name
:
string
name
:
string
...
@@ -48,3 +53,7 @@ export function getStuDetail(params?: { id: string }) {
...
@@ -48,3 +53,7 @@ export function getStuDetail(params?: { id: string }) {
export
function
getClassList
(
params
?:
{
specialty_id
:
string
;
organ_id
:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
export
function
getClassList
(
params
?:
{
specialty_id
:
string
;
organ_id
:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/learning/student/search-class'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/learning/student/search-class'
,
{
params
})
}
}
// 获取专业列表
export
function
getProList
(
params
?:
{
name
?:
string
;
page
?:
string
;
'per-page'
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/specialty/list'
,
{
params
})
}
src/modules/admin/student/components/AddStudent.vue
浏览文件 @
61321542
...
@@ -4,7 +4,7 @@ import { ElMessage } from 'element-plus'
...
@@ -4,7 +4,7 @@ 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
{
addStudent
,
updateStudent
,
getStuDetail
,
getClassList
}
from
'../api'
import
{
addStudent
,
updateStudent
,
getStuDetail
,
getClassList
,
getProList
}
from
'../api'
const
store
=
useMapStore
()
const
store
=
useMapStore
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
...
@@ -14,7 +14,6 @@ const departmentList: any = useProjectList('', '79806610719731712').departmentLi
...
@@ -14,7 +14,6 @@ const departmentList: any = useProjectList('', '79806610719731712').departmentLi
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
majorList
=
store
.
getMapValuesByKey
(
'specialty_category'
)
const
form
=
reactive
({
const
form
=
reactive
({
sno_number
:
''
,
sno_number
:
''
,
...
@@ -35,8 +34,8 @@ const rules = reactive<FormRules>({
...
@@ -35,8 +34,8 @@ const rules = reactive<FormRules>({
mobile
:
[{
required
:
true
,
message
:
'请输入手机号'
,
trigger
:
'blur'
}],
mobile
:
[{
required
:
true
,
message
:
'请输入手机号'
,
trigger
:
'blur'
}],
id_type
:
[{
required
:
true
,
message
:
'请选择证件类型'
,
trigger
:
'change'
}],
id_type
:
[{
required
:
true
,
message
:
'请选择证件类型'
,
trigger
:
'change'
}],
id_number
:
[{
required
:
true
,
message
:
'请输入证件号码'
,
trigger
:
'blur'
}],
id_number
:
[{
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' }]
status
:
[{
required
:
true
,
message
:
'请选择状态'
,
trigger
:
'change'
}]
})
})
const
props
=
defineProps
({
const
props
=
defineProps
({
isShowAddDialog
:
{
isShowAddDialog
:
{
...
@@ -100,23 +99,56 @@ if (props.isEdit === '2' || props.isEdit === '1') {
...
@@ -100,23 +99,56 @@ 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
loading
=
ref
(
false
)
const
classList
:
any
=
ref
([])
const
classList
:
any
=
ref
([])
const
allLecturers
:
any
=
ref
([])
const
allLecturers
:
any
=
ref
([])
const
handleClassList
=
(
query
:
string
)
=>
{
watch
(
if
(
query
)
{
()
=>
form
.
specialty_id
,
loading
.
value
=
true
()
=>
{
getClassList
({
specialty_id
:
query
,
organ_id
:
form
.
organ_id
,
'per-page'
:
'100'
}).
then
((
res
:
any
)
=>
{
if
(
form
.
organ_id
!==
''
)
{
loading
.
value
=
false
getClassList
({
specialty_id
:
form
.
specialty_id
,
organ_id
:
form
.
organ_id
,
'per-page'
:
'100'
}).
then
((
res
:
any
)
=>
{
classList
.
value
=
res
.
data
.
list
loading
.
value
=
false
classList
.
value
.
forEach
((
item
:
any
)
=>
{
classList
.
value
=
res
.
data
.
list
const
findItem
=
allLecturers
.
value
.
find
((
cItem
:
any
)
=>
cItem
.
id
===
item
.
id
)
classList
.
value
.
forEach
((
item
:
any
)
=>
{
if
(
!
findItem
)
{
const
findItem
=
allLecturers
.
value
.
find
((
cItem
:
any
)
=>
cItem
.
id
===
item
.
id
)
allLecturers
.
value
.
push
(
item
)
if
(
!
findItem
)
{
}
allLecturers
.
value
.
push
(
item
)
}
})
})
})
})
}
}
else
{
}
)
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
=
[]
classList
.
value
=
[]
}
}
}
}
...
@@ -125,65 +157,70 @@ const handleClassList = (query: string) => {
...
@@ -125,65 +157,70 @@ const handleClassList = (query: string) => {
<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%"
>
<el-form
:model=
"form"
label-width=
"120px"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form
:model=
"form"
label-width=
"120px"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form-item
label=
"学号:"
prop=
"sno_number"
>
<el-form-item
label=
"学号:"
prop=
"sno_number"
>
<el-input
v-model=
"form.sno_number"
:disabled=
"props.
title === '查看详情
'"
></el-input>
<el-input
v-model=
"form.sno_number"
: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=
"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=
"card_type"
>
<el-form-item
label=
"证件类型:"
prop=
"card_type"
>
<el-radio-group
v-model=
"form.id_type"
:disabled=
"props.
title === '查看详情
'"
>
<el-radio-group
v-model=
"form.id_type"
:disabled=
"props.
isEdit === '2
'"
>
<el-radio
v-for=
"(item, index) in idTypeList"
:key=
"index"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
<el-radio
v-for=
"(item, index) in idTypeList"
: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=
"id_number"
>
<el-form-item
label=
"证件号码:"
prop=
"id_number"
>
<el-input
v-model=
"form.id_number"
:disabled=
"props.
title === '查看详情
'"
/>
<el-input
v-model=
"form.id_number"
:disabled=
"props.
isEdit === '2
'"
/>
</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"
:disabled=
"props.isEdit === '2'"
style=
"width: 100%"
placeholder=
"请选择所属部门/学校"
@
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-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"
placeholder=
"请选择专业"
:disabled=
"props.title === '查看详情'"
>
<el-select
<el-option
v-model=
"form.specialty_id"
v-for=
"(item, index) in majorList"
clearable
:key=
"index"
placeholder=
"请选择专业"
:label=
"item.label"
style=
"width: 230px"
:value=
"item.value"
@
change=
"handleChangeSpe"
></el-option>
:disabled=
"props.isEdit === '2'"
>
<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=
"class_id"
>
<el-form-item
label=
"班级:"
prop=
"class_id"
>
<el-select
<el-select
v-model=
"form.class_id"
v-model=
"form.class_id"
clearable
clearable
filterable
placeholder=
"请选择班级"
remote
multiple
placeholder=
"请输入班级"
:remote-method=
"handleClassList"
:loading=
"loading"
style=
"width: 230px"
style=
"width: 230px"
:disabled=
"props.isEdit === '2'"
>
>
<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.
title === '查看详情
'"
>
<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>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
v-if=
"isEdit !== '2'"
>
<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>
...
...
src/modules/admin/student/components/ImportStudent.vue
浏览文件 @
61321542
...
@@ -37,14 +37,14 @@ const fetchFileUpload = (option: any) => {
...
@@ -37,14 +37,14 @@ const fetchFileUpload = (option: any) => {
return
new
Promise
(()
=>
{
return
new
Promise
(()
=>
{
importStudent
({
file
:
option
.
file
}).
then
(()
=>
{
importStudent
({
file
:
option
.
file
}).
then
(()
=>
{
ElMessage
.
success
(
'导入数据成功'
)
ElMessage
.
success
(
'导入数据成功'
)
emit
(
'update:isShowImportDialog'
,
false
)
emit
(
'create'
)
})
})
})
})
}
}
const
handleSubmitUpload
=
()
=>
{
const
handleSubmitUpload
=
()
=>
{
upload
.
value
.
submit
()
upload
.
value
.
submit
()
emit
(
'update:isShowImportDialog'
,
false
)
emit
(
'create'
)
}
}
</
script
>
</
script
>
<
template
>
<
template
>
...
...
src/modules/admin/student/views/List.vue
浏览文件 @
61321542
...
@@ -2,45 +2,40 @@
...
@@ -2,45 +2,40 @@
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
}
from
'../api'
import
{
getStudentList
,
exportStudent
}
from
'../api'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore()
const
departmentList
:
any
=
useProjectList
(
''
,
'79806610719731712'
).
departmentList
const
departmentList
:
any
=
useProjectList
(
''
,
'79806610719731712'
).
departmentList
const
appList
=
ref
()
const
appList
=
ref
()
const
id
=
ref
(
''
)
const
id
=
ref
(
''
)
const
title
=
ref
(
''
)
const
title
=
ref
(
''
)
const
isEdit
=
ref
(
''
)
const
isEdit
=
ref
(
''
)
const
isShowAddDialog
=
ref
(
false
)
const
isShowAddDialog
=
ref
(
false
)
const
isShowImportDialog
=
ref
(
false
)
const
isShowImportDialog
=
ref
(
false
)
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
{
return
{
remote
:
{
httpRequest
:
getStudentList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
remote
:
{
httpRequest
:
getStudentList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
},
{
type
:
'select'
,
slots
:
'filter-department'
}
{
type
:
'select'
,
slots
:
'filter-department'
}
],
],
columns
:
[
columns
:
[
{
type
:
'selection'
},
{
type
:
'selection'
},
{
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'
,
align
:
'center'
},
{
label
:
'出生年月'
,
prop
:
'birthday'
,
align
:
'center'
},
{
label
:
'出生年月'
,
prop
:
'birthday'
,
align
:
'center'
},
{
label
:
'省'
,
prop
:
'province_name'
,
align
:
'center'
},
{
label
:
'省'
,
prop
:
'province_name'
,
align
:
'center'
},
{
label
:
'市'
,
prop
:
'city_name'
,
align
:
'center'
},
{
label
:
'市'
,
prop
:
'city_name'
,
align
:
'center'
},
{
label
:
'县'
,
prop
:
'county_name'
,
align
:
'center'
},
{
label
:
'县'
,
prop
:
'county_name'
,
align
:
'center'
},
{
label
:
'联系电话'
,
prop
:
'mobile'
,
align
:
'center'
},
{
label
:
'联系电话'
,
prop
:
'mobile'
,
align
:
'center'
},
{
label
:
'部门/学校'
,
prop
:
'organ_id_name'
,
align
:
'center'
},
{
label
:
'部门/学校'
,
prop
:
'organ_id_name'
,
align
:
'center'
},
{
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
:
'有效状态'
,
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'
,
fixed
:
'right'
}
]
]
}
}
})
// 刷新页面
// 刷新页面
const
handleRefresh
=
()
=>
{
const
handleRefresh
=
()
=>
{
...
@@ -72,13 +67,37 @@ const handleImport = () => {
...
@@ -72,13 +67,37 @@ const handleImport = () => {
}
}
// 导出
// 导出
const
handleExport
=
()
=>
{
const
handleExport
=
()
=>
{
console
.
log
(
'000'
)
const
params
=
Object
.
assign
({},
appList
.
value
?.
params
)
exportStudent
(
params
).
then
((
r
:
any
)
=>
{
const
blob
=
new
Blob
([
r
],
{
type
:
'application/vnd.ms-excel'
})
if
(
'download'
in
document
.
createElement
(
'a'
))
{
const
elink
=
document
.
createElement
(
'a'
)
elink
.
download
=
'学员数据.xlsx'
elink
.
style
.
display
=
'none'
elink
.
href
=
URL
.
createObjectURL
(
blob
)
document
.
body
.
appendChild
(
elink
)
elink
.
click
()
URL
.
revokeObjectURL
(
elink
.
href
)
document
.
body
.
removeChild
(
elink
)
}
})
}
const
multipleSelection
:
any
=
ref
([])
const
handleSelectionChange
=
(
val
:
any
)
=>
{
multipleSelection
.
value
=
val
}
}
</
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"
@
selection-change=
"handleSelectionChange"
border
stripe
style=
"margin-top: 30px"
>
<el-button
type=
"primary"
round
@
click=
"handleAddStudent"
>
新增学生
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleAddStudent"
>
新增学生
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleImport"
>
批量导入
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleImport"
>
批量导入
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleExport"
>
导出
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleExport"
>
导出
</el-button>
...
...
src/modules/course/my/components/ViewCourseInfo.vue
浏览文件 @
61321542
...
@@ -207,18 +207,18 @@ const liveOptions = computed(() => {
...
@@ -207,18 +207,18 @@ const liveOptions = computed(() => {
</div>
</div>
<div
class=
"other-info"
>
<div
class=
"other-info"
>
<div
class=
"item"
>
<div
class=
"item"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/course-view-icon1
0
.png"
/>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/course-view-icon1
1
.png"
/>
<div
class=
"label"
>
课程所属部门
</div>
<div
class=
"label"
>
课程所属部门
</div>
<div
class=
"value"
>
{{ props.data.organ_id_name }}
</div>
<div
class=
"value"
>
{{ props.data.organ_id_name }}
</div>
</div>
</div>
<div
class=
"item"
>
<div
class=
"item"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/course-view-icon1
1
.png"
/>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/course-view-icon1
2
.png"
/>
<div
class=
"label"
>
课程公开信息
</div>
<div
class=
"label"
>
课程公开信息
</div>
<div
class=
"value"
>
{{ props.data.department_public_name }}
</div>
<div
class=
"value"
>
{{ props.data.department_public_name }}
</div>
<div
class=
"value"
>
{{ props.data.platform_public_name }}
</div>
<div
class=
"value"
>
{{ props.data.platform_public_name }}
</div>
</div>
</div>
<div
class=
"item"
>
<div
class=
"item"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/course-view-icon1
2
.png"
/>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/course-view-icon1
5
.png"
/>
<div
class=
"label"
>
课程授权信息
</div>
<div
class=
"label"
>
课程授权信息
</div>
<div
class=
"value"
v-for=
"(item, index) in props.data.auth_departments"
:key=
"index"
>
<div
class=
"value"
v-for=
"(item, index) in props.data.auth_departments"
:key=
"index"
>
{{ item.department_name }}
{{ item.department_name }}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论