Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-resource
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-resource
Commits
7f186850
提交
7f186850
authored
7月 20, 2022
作者:
matian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore:新增大作业模块,修改课程章节展开问题
上级
b532f1cf
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
222 行增加
和
91 行删除
+222
-91
menus.ts
src/assets/menus.ts
+7
-1
StepTwo.vue
src/modules/course/create/views/StepTwo.vue
+3
-0
api.ts
src/modules/system/question/api.ts
+0
-76
api.ts
src/modules/system/suggestion/api.ts
+24
-0
DealDialog.vue
src/modules/system/suggestion/components/DealDialog.vue
+0
-0
index.ts
src/modules/system/suggestion/index.ts
+10
-0
List.vue
src/modules/system/suggestion/views/List.vue
+54
-13
api.ts
src/modules/teach/homework/api.ts
+6
-0
CheckHomework.vue
src/modules/teach/homework/components/CheckHomework.vue
+63
-0
index.ts
src/modules/teach/homework/index.ts
+1
-1
LIst.vue
src/modules/teach/homework/views/LIst.vue
+54
-0
没有找到文件。
src/assets/menus.ts
浏览文件 @
7f186850
...
@@ -158,7 +158,7 @@ export const menus: IMenuItem[] = [
...
@@ -158,7 +158,7 @@ export const menus: IMenuItem[] = [
tag
:
'v1-backend-cover-list'
,
tag
:
'v1-backend-cover-list'
,
icon
:
Picture
,
icon
:
Picture
,
name
:
' 投诉建议管理'
,
name
:
' 投诉建议管理'
,
path
:
'/system/
qu
estion'
path
:
'/system/
sugg
estion'
}
}
]
]
},
},
...
@@ -179,6 +179,12 @@ export const menus: IMenuItem[] = [
...
@@ -179,6 +179,12 @@ export const menus: IMenuItem[] = [
name
:
'批改试卷'
,
name
:
'批改试卷'
,
path
:
'/teach/exam'
path
:
'/teach/exam'
},
},
{
tag
:
'v1-backend-lecturer-list'
,
icon
:
EditPen
,
name
:
'批改大作业'
,
path
:
'/teach/homework'
},
{
{
tag
:
'v1-backend-lecturer-list'
,
tag
:
'v1-backend-lecturer-list'
,
icon
:
DataAnalysis
,
icon
:
DataAnalysis
,
...
...
src/modules/course/create/views/StepTwo.vue
浏览文件 @
7f186850
...
@@ -93,6 +93,7 @@ const handleAddSection = (node: any) => {
...
@@ -93,6 +93,7 @@ const handleAddSection = (node: any) => {
chapterID
.
value
=
node
.
key
chapterID
.
value
=
node
.
key
isShowSectionDialog
.
value
=
true
isShowSectionDialog
.
value
=
true
isEdit
.
value
=
false
isEdit
.
value
=
false
defaultExpandedKeys
.
value
=
[
node
.
key
]
}
}
//编辑章节
//编辑章节
const
handleEdit
=
(
node
:
any
)
=>
{
const
handleEdit
=
(
node
:
any
)
=>
{
...
@@ -124,6 +125,8 @@ const handleAddDialog = (node: any, item: any) => {
...
@@ -124,6 +125,8 @@ const handleAddDialog = (node: any, item: any) => {
chapterID
.
value
=
node
.
key
chapterID
.
value
=
node
.
key
chapterName
.
value
=
node
.
label
chapterName
.
value
=
node
.
label
btnInfo
.
value
=
item
btnInfo
.
value
=
item
defaultExpandedKeys
.
value
=
[
node
.
key
]
if
(
item
.
resource_type
===
'6'
)
{
if
(
item
.
resource_type
===
'6'
)
{
isShowLiveDialog
.
value
=
true
isShowLiveDialog
.
value
=
true
}
else
if
(
}
else
if
(
...
...
src/modules/system/question/api.ts
deleted
100644 → 0
浏览文件 @
b532f1cf
import
httpRequest
from
'@/utils/axios'
// 获取视频列表
export
function
getVideoList
(
params
?:
{
type
?:
string
;
page
?:
number
;
[
'per-page'
]?:
number
})
{
return
httpRequest
.
get
(
'/api/resource/backend/video/index'
,
{
params
})
}
// 获取字典列表
export
function
getDictionaryList
(
params
?:
{
name
?:
string
key
?:
string
status
?:
string
created_time_start
?:
string
created_time_end
?:
string
page
?:
number
[
'per-page'
]?:
number
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/data-dictionary/list'
,
{
params
})
}
// 新增字典
export
function
createDictionary
(
data
:
{
name
:
string
key
:
string
status
?:
string
remark
?:
string
can_edit
?:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/data-dictionary/create'
,
data
)
}
// 更新字典
export
function
updateDictionary
(
data
:
{
id
:
string
name
:
string
key
:
string
status
?:
string
remark
?:
string
can_edit
?:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/data-dictionary/update'
,
data
)
}
// 删除字典
export
function
delDictionary
(
data
:
{
id
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/data-dictionary/delete'
,
data
)
}
// 获取字典的值的列表
export
function
getDictionaryItemList
(
params
?:
{
data_dictionary_id
:
string
;
page
?:
number
;
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/data-dictionary/value-list'
,
{
params
})
}
// 新增字典的值
export
function
createDictionaryItem
(
data
:
{
data_dictionary_id
:
string
label
:
string
value
:
string
sort
:
string
remark
:
string
can_edit
:
string
status
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/data-dictionary/value-create'
,
data
)
}
// 更新字典的值
export
function
updateDictionaryItem
(
data
:
{
id
:
any
data_dictionary_id
:
string
label
:
string
value
:
string
sort
:
string
remark
:
string
can_edit
:
string
status
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/data-dictionary/value-update'
,
data
)
}
// 删除字典的值
export
function
delDictionaryItem
(
data
:
{
id
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/data-dictionary/value-delete'
,
data
)
}
src/modules/system/suggestion/api.ts
0 → 100644
浏览文件 @
7f186850
import
httpRequest
from
'@/utils/axios'
// 获取视频列表
export
function
getSuggestionList
(
params
?:
{
sso_id
?:
string
created_time_start
?:
string
created_time_end
?:
string
page
?:
string
[
'per-page'
]?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/suggestion/list'
,
{
params
})
}
// 用户检索
export
function
getUserList
(
params
?:
{
q
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/suggestion/search-user'
,
{
params
})
}
// 投诉建议详情
export
function
getSuggestionDetail
(
params
?:
{
id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/suggestion/view'
,
{
params
})
}
// 回复投诉建议
export
function
replySuggestion
(
data
:
{
id
:
string
;
reply
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/suggestion/update'
,
data
)
}
src/modules/system/
qu
estion/components/DealDialog.vue
→
src/modules/system/
sugg
estion/components/DealDialog.vue
浏览文件 @
7f186850
File moved
src/modules/system/suggestion/index.ts
0 → 100644
浏览文件 @
7f186850
import
type
{
RouteRecordRaw
}
from
'vue-router'
import
AppLayout
from
'@/components/layout/Index.vue'
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
{
path
:
'/system/suggestion'
,
component
:
AppLayout
,
children
:
[{
path
:
''
,
component
:
()
=>
import
(
'./views/List.vue'
)
}]
}
]
src/modules/system/
qu
estion/views/List.vue
→
src/modules/system/
sugg
estion/views/List.vue
浏览文件 @
7f186850
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
DealDialog
from
'../components/DealDialog.vue'
import
DealDialog
from
'../components/DealDialog.vue'
import
{
getSuggestionList
,
getUserList
}
from
'../api'
const
appList
=
ref
()
const
appList
=
ref
()
const
isShowDialog
=
ref
(
false
)
const
isShowDialog
=
ref
(
false
)
const
userList
:
any
=
ref
([])
// 状态
// 状态
//表单每行数据
//表单每行数据
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
remote
:
{
remote
:
{
// httpRequest: getDictionary
List,
httpRequest
:
getSuggestion
List
,
params
:
{
params
:
{
status
:
''
,
sso_id
:
[],
type
:
''
,
created_time_start
:
''
,
created_time_start
:
''
,
created_time_end
:
''
created_time_end
:
''
},
beforeRequest
(
params
:
any
)
{
console
.
log
(
params
)
if
(
params
.
sso_id
.
length
)
{
params
.
sso_id
=
params
.
sso_id
[
0
].
id
return
params
}
}
}
},
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'字典名称:'
,
placeholder
:
'请输入字典名称'
},
{
type
:
'input'
,
prop
:
'sso_id_name'
,
slots
:
'user_name'
},
{
type
:
'input'
,
prop
:
'key'
,
label
:
'字典类型:'
,
placeholder
:
'请输入字典类型'
}
{
type
:
'input'
,
label
:
'投诉时间:'
,
slots
:
'created_time_start'
,
prop
:
'created_time_start'
},
{
slots
:
'created_time_end'
,
prop
:
'created_time_end'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'问题描述'
,
prop
:
'
nam
e'
,
align
:
'center'
},
{
label
:
'问题描述'
,
prop
:
'
titl
e'
,
align
:
'center'
},
{
label
:
'投诉人'
,
prop
:
'
complaint
_name'
,
align
:
'center'
},
{
label
:
'投诉人'
,
prop
:
'
sso_id
_name'
,
align
:
'center'
},
{
{
label
:
'投诉时间'
,
label
:
'投诉时间'
,
prop
:
'c
omplaint
_time'
,
prop
:
'c
reated
_time'
,
align
:
'center'
align
:
'center'
},
},
{
label
:
'处理人'
,
prop
:
'
deal_operator
'
,
align
:
'center'
},
{
label
:
'处理人'
,
prop
:
'
operator_name
'
,
align
:
'center'
},
{
label
:
'处理时间'
,
prop
:
'
deal
_time'
,
align
:
'center'
},
{
label
:
'处理时间'
,
prop
:
'
updated
_time'
,
align
:
'center'
},
{
label
:
'处理状态'
,
prop
:
'status'
,
align
:
'center'
},
{
label
:
'处理状态'
,
prop
:
'status
_name
'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
width
:
300
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
width
:
300
}
],
]
data
:
[{
name
:
111
}]
}
}
})
})
const
handleDeal
=
()
=>
{
const
handleDeal
=
()
=>
{
isShowDialog
.
value
=
true
isShowDialog
.
value
=
true
}
}
// 用户检索
const
handleGetUserList
=
(
query
:
string
)
=>
{
if
(
!
query
)
return
getUserList
({
q
:
query
}).
then
((
res
:
any
)
=>
{
userList
.
value
=
res
.
data
})
}
</
script
>
</
script
>
<
template
>
<
template
>
<AppCard
title=
"投诉建议管理"
>
<AppCard
title=
"投诉建议管理"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<template
v-slot:user_name=
"
{ params }">
用户姓名:
<el-select
v-model=
"params.sso_id"
multiple
filterable
remote
value-key=
"id"
:reserve-keyword=
"false"
:remote-method=
"handleGetUserList"
>
<el-option
v-for=
"item in userList"
:key=
"item.id"
:label=
"item.username"
:value=
"item"
/>
</el-select>
</
template
>
<
template
v-slot:created_time_start=
"{ params }"
>
<el-date-picker
v-model=
"params.created_time_start"
type=
"date"
placeholder=
"开始时间"
>
</el-date-picker>
<p
class=
"separator"
>
-
</p>
</
template
>
<
template
v-slot:created_time_end=
"{ params }"
>
<el-date-picker
v-model=
"params.created_time_end"
type=
"date"
placeholder=
"结束时间"
>
</el-date-picker>
</
template
>
<
template
#
table-operate
>
<
template
#
table-operate
>
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleDeal"
>
查看
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleDeal"
>
查看
</el-link>
...
...
src/modules/teach/homework/api.ts
0 → 100644
浏览文件 @
7f186850
import
httpRequest
from
'@/utils/axios'
// 获取学生列表
export
function
getProList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/psp/backend/video/index'
,
{
params
})
}
src/modules/teach/homework/components/CheckHomework.vue
0 → 100644
浏览文件 @
7f186850
<
script
lang=
"ts"
setup
>
import
type
{
FormInstance
}
from
'element-plus'
const
emit
=
defineEmits
<
Emits
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
// 封面类型
// 封面状态
const
form
=
reactive
({
desc
:
''
,
detail
:
''
,
answer
:
''
})
defineProps
({
isShowCheckDialog
:
{
type
:
Boolean
,
required
:
true
}
})
interface
Emits
{
(
e
:
'update:isShowCheckDialog'
,
isShowCheckDialog
:
boolean
):
void
}
// 取消
const
handleCancel
=
()
=>
{
emit
(
'update:isShowCheckDialog'
,
false
)
}
// 确定
const
handleConfirm
=
()
=>
{
emit
(
'update:isShowCheckDialog'
,
false
)
}
</
script
>
<
template
>
<el-dialog
:model-value=
"isShowCheckDialog"
draggable
:before-close=
"handleCancel"
width=
"50%"
title=
"批改大作业"
>
<el-form
:model=
"form"
ref=
"ruleFormRef"
label-width=
"100px"
>
<el-row>
<el-col
:span=
"10"
>
<el-form-item
label=
"课程名称:"
prop=
"type"
>
投诉建议人:lisi
</el-form-item></el-col>
</el-row>
<el-row>
<el-col
:span=
"10"
>
<el-form-item
label=
"学生姓名:"
prop=
"type"
>
投诉建议人:lisi
</el-form-item></el-col>
<el-col
:span=
"10"
>
<el-form-item
label=
"学号:"
prop=
"type"
>
提交时间:2022-07-19
</el-form-item></el-col>
</el-row>
<el-form-item
label=
"得分:"
prop=
"desc"
>
<el-input
v-model=
"form.desc"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
</el-form-item>
<el-divider
border-style=
"desdashedc"
/>
<el-form-item
label=
"大作业标题:"
prop=
"desc"
>
<el-input
v-model=
"form.desc"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
</el-form-item>
<el-form-item
label=
"大作业正文:"
prop=
"detail"
>
<el-input
v-model=
"form.detail"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
</el-form-item>
<el-form-item
label=
"相关附件:"
prop=
"type"
>
<a
href=
"1"
>
11
</a>
</el-form-item>
</el-form>
<template
#
footer
>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
</span>
</
template
>
</el-dialog>
</template>
src/modules/
system/question
/index.ts
→
src/modules/
teach/homework
/index.ts
浏览文件 @
7f186850
...
@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
...
@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
{
{
path
:
'/
system/question
'
,
path
:
'/
teach/homework
'
,
component
:
AppLayout
,
component
:
AppLayout
,
children
:
[{
path
:
''
,
component
:
()
=>
import
(
'./views/List.vue'
)
}]
children
:
[{
path
:
''
,
component
:
()
=>
import
(
'./views/List.vue'
)
}]
}
}
...
...
src/modules/teach/homework/views/LIst.vue
0 → 100644
浏览文件 @
7f186850
<
script
setup
lang=
"ts"
>
// import { getProList } from '../api'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore()
import
CheckHomework
from
'../components/CheckHomework.vue'
const
appList
=
ref
()
const
isShowCheckDialog
=
ref
(
false
)
const
listOptions
=
$computed
(()
=>
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
filters
:
[
{
type
:
'select'
,
prop
:
'course'
,
label
:
'所属课程:'
,
placeholder
:
'所属课程'
},
{
type
:
'input'
,
prop
:
'paper_name'
,
label
:
'大作业名称:'
,
placeholder
:
'大作业名称'
}
],
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course'
,
align
:
'center'
},
{
label
:
'学生姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno_number'
,
align
:
'center'
},
{
label
:
'提交时间'
,
prop
:
'created_time'
,
align
:
'center'
},
{
label
:
'批改人'
,
prop
:
'operator_name'
,
align
:
'center'
},
{
label
:
'批改时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'得分'
,
prop
:
'score'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
data
:
[
{
name
:
111
,
exam_id
:
'6952903190949920768'
,
student_id
:
'6953256575158976512'
}
]
}
})
const
handleCheckPaper
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
isShowCheckDialog
.
value
=
true
console
.
log
(
isShowCheckDialog
.
value
)
}
</
script
>
<
template
>
<AppCard
title=
"批改试卷"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<template
#
table-operate=
"
{ row }">
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
>
批改
</el-link>
</el-space>
</
template
>
</AppList>
</AppCard>
<CheckHomework
v-if=
"isShowCheckDialog === true"
v-model:isShowCheckDialog=
"isShowCheckDialog"
/>
</template>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论