Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
9adacf96
提交
9adacf96
authored
9月 02, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bug fixes
上级
ba5b000e
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
67 行增加
和
14 行删除
+67
-14
UploadVideo.vue
src/components/UploadVideo.vue
+18
-1
AppUpload.vue
src/components/base/AppUpload.vue
+12
-7
FormDialog.vue
src/modules/admin/lab/book/components/FormDialog.vue
+10
-1
FormDialog.vue
src/modules/admin/lab/video/components/FormDialog.vue
+12
-2
Result.vue
src/modules/student/lab/components/Result.vue
+1
-1
Index.vue
src/modules/student/lab/views/Index.vue
+14
-2
没有找到文件。
src/components/UploadVideo.vue
浏览文件 @
9adacf96
...
@@ -23,16 +23,33 @@ interface UploadInfo {
...
@@ -23,16 +23,33 @@ interface UploadInfo {
videoInfo
:
any
videoInfo
:
any
progress
:
number
progress
:
number
}
}
interface
Props
{
beforeUpload
?:
(
file
:
any
)
=>
void
}
const
props
=
defineProps
<
Props
>
()
const
emit
=
defineEmits
([
'success'
])
const
emit
=
defineEmits
([
'success'
])
const
uploader
=
createUploader
()
const
uploader
=
createUploader
()
let
fileList
=
$ref
<
UploadInfo
[]
>
([])
let
fileList
=
$ref
<
UploadInfo
[]
>
([])
const
fileChange
=
(
event
:
Event
)
=>
{
onUnmounted
(()
=>
{
uploader
&&
uploader
.
stopUpload
()
})
const
fileChange
=
async
(
event
:
Event
)
=>
{
const
element
=
event
.
currentTarget
as
HTMLInputElement
const
element
=
event
.
currentTarget
as
HTMLInputElement
const
files
:
FileList
|
null
=
element
.
files
const
files
:
FileList
|
null
=
element
.
files
if
(
!
files
)
return
if
(
!
files
)
return
if
(
props
.
beforeUpload
)
{
try
{
await
props
.
beforeUpload
(
files
)
uploader
.
cleanList
()
}
catch
(
error
)
{
console
.
log
(
error
)
return
false
}
}
for
(
const
file
of
files
)
{
for
(
const
file
of
files
)
{
// 是否重复上传
// 是否重复上传
const
hasRepeat
=
!!
fileList
.
find
(
const
hasRepeat
=
!!
fileList
.
find
(
...
...
src/components/base/AppUpload.vue
浏览文件 @
9adacf96
...
@@ -10,6 +10,7 @@ interface Props {
...
@@ -10,6 +10,7 @@ interface Props {
prefix
?:
string
prefix
?:
string
size
?:
number
size
?:
number
limit
?:
number
limit
?:
number
beforeUpload
?:
(
file
:
any
)
=>
void
}
}
const
props
=
withDefaults
(
defineProps
<
Props
>
(),
{
const
props
=
withDefaults
(
defineProps
<
Props
>
(),
{
...
@@ -32,7 +33,7 @@ const showFileList = computed(() => {
...
@@ -32,7 +33,7 @@ const showFileList = computed(() => {
// 上传之前
// 上传之前
const
handleBeforeUpload
=
async
(
file
:
any
)
=>
{
const
handleBeforeUpload
=
async
(
file
:
any
)
=>
{
if
(
props
.
limit
&&
fileList
.
value
.
length
>=
props
.
limit
)
{
if
(
props
.
limit
&&
fileList
.
value
.
length
>=
props
.
limit
&&
props
.
limit
>
1
)
{
ElMessage
.
error
(
`只能上传
${
props
.
limit
}
个文件`
)
ElMessage
.
error
(
`只能上传
${
props
.
limit
}
个文件`
)
return
false
return
false
}
}
...
@@ -52,6 +53,9 @@ const handleBeforeUpload = async (file: any) => {
...
@@ -52,6 +53,9 @@ const handleBeforeUpload = async (file: any) => {
url
:
`
${
response
.
host
}
/
${
key
}
`
url
:
`
${
response
.
host
}
/
${
key
}
`
}
}
file
.
url
=
`
${
response
.
host
}
/
${
key
}
`
file
.
url
=
`
${
response
.
host
}
/
${
key
}
`
if
(
props
.
beforeUpload
)
{
return
props
.
beforeUpload
(
file
)
}
}
}
// 上传成功
// 上传成功
...
@@ -60,7 +64,8 @@ const handleSuccess = (response: any, file: any, files: any) => {
...
@@ -60,7 +64,8 @@ const handleSuccess = (response: any, file: any, files: any) => {
if
(
showFileList
.
value
)
{
if
(
showFileList
.
value
)
{
emit
(
emit
(
'update:modelValue'
,
'update:modelValue'
,
files
.
map
((
item
:
any
)
=>
{
files
.
map
((
item
:
any
)
=>
{
return
{
return
{
name
:
item
.
name
,
name
:
item
.
name
,
url
:
item
.
url
||
item
.
raw
?.
url
,
url
:
item
.
url
||
item
.
raw
?.
url
,
...
@@ -68,11 +73,11 @@ const handleSuccess = (response: any, file: any, files: any) => {
...
@@ -68,11 +73,11 @@ const handleSuccess = (response: any, file: any, files: any) => {
type
:
item
.
type
||
item
.
raw
?.
type
type
:
item
.
type
||
item
.
raw
?.
type
}
}
})
})
//
.reverse()
.
reverse
()
//
.filter((item: any, index: number) => {
.
filter
((
item
:
any
,
index
:
number
)
=>
{
//
return props.limit ? index
<
props
.
limit
:
true
return
props
.
limit
?
index
<
props
.
limit
:
true
//
})
})
//
.reverse()
.
reverse
()
)
)
}
else
{
}
else
{
emit
(
'update:modelValue'
,
file
.
raw
.
url
)
emit
(
'update:modelValue'
,
file
.
raw
.
url
)
...
...
src/modules/admin/lab/book/components/FormDialog.vue
浏览文件 @
9adacf96
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
BookItem
,
BookCreateItem
}
from
'../types'
import
type
{
BookItem
,
BookCreateItem
}
from
'../types'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
Box
,
ElMessage
}
from
'element-plus'
import
AppUpload
from
'@/components/base/AppUpload.vue'
import
AppUpload
from
'@/components/base/AppUpload.vue'
import
{
createBook
,
updateBook
}
from
'../api'
import
{
createBook
,
updateBook
}
from
'../api'
...
@@ -73,6 +73,14 @@ const experimentList = $computed(() => {
...
@@ -73,6 +73,14 @@ const experimentList = $computed(() => {
?
[{
id
:
props
.
data
.
experiment_id
,
name
:
props
.
data
.
experiment_id_name
},
...
experiments
.
value
]
?
[{
id
:
props
.
data
.
experiment_id
,
name
:
props
.
data
.
experiment_id_name
},
...
experiments
.
value
]
:
experiments
.
value
:
experiments
.
value
})
})
function
handleBeforeUpload
()
{
if
(
form
.
files
.
length
)
{
return
ElMessageBox
.
confirm
(
'系统仅支持1个实验指导书,此操作将覆盖原有实验指导书文件,确认上传新文件吗?'
,
'提示'
)
}
return
true
}
function
handleUploadSuccess
(
file
:
any
)
{
function
handleUploadSuccess
(
file
:
any
)
{
form
.
name
=
file
.
name
.
split
(
'.'
).
shift
()
form
.
name
=
file
.
name
.
split
(
'.'
).
shift
()
form
.
size
=
(
file
.
size
/
1024
/
1024
).
toString
()
form
.
size
=
(
file
.
size
/
1024
/
1024
).
toString
()
...
@@ -110,6 +118,7 @@ function handleUpdate(params: BookCreateItem) {
...
@@ -110,6 +118,7 @@ function handleUpdate(params: BookCreateItem) {
<AppUpload
<AppUpload
v-model=
"form.files"
v-model=
"form.files"
:limit=
"1"
:limit=
"1"
:beforeUpload=
"handleBeforeUpload"
accept=
".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,.pdf,application/pdf,.ppt,.pptx,application/vnd.ms-powerpoint,.csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
accept=
".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,.pdf,application/pdf,.ppt,.pptx,application/vnd.ms-powerpoint,.csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
@
success=
"handleUploadSuccess"
@
success=
"handleUploadSuccess"
>
>
...
...
src/modules/admin/lab/video/components/FormDialog.vue
浏览文件 @
9adacf96
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
VideoItem
,
VideoCreateItem
}
from
'../types'
import
type
{
VideoItem
,
VideoCreateItem
}
from
'../types'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
Box
,
ElMessage
}
from
'element-plus'
import
UploadVideo
from
'@/components/UploadVideo.vue'
import
UploadVideo
from
'@/components/UploadVideo.vue'
import
{
createVideo
,
updateVideo
}
from
'../api'
import
{
createVideo
,
updateVideo
}
from
'../api'
...
@@ -63,6 +63,16 @@ const title = $computed(() => {
...
@@ -63,6 +63,16 @@ const title = $computed(() => {
return
isUpdate
?
'编辑实验操作视频'
:
'新增实验操作视频'
return
isUpdate
?
'编辑实验操作视频'
:
'新增实验操作视频'
})
})
function
handleBeforeUpload
()
{
if
(
form
.
source_id
)
{
return
ElMessageBox
.
confirm
(
'系统仅支持1个实验操作视频,此操作将覆盖原有实验操作视频文件,确认上传新文件吗?'
,
'提示'
)
}
return
true
}
function
handleUploadSuccess
(
uploadInfo
:
any
)
{
function
handleUploadSuccess
(
uploadInfo
:
any
)
{
form
.
name
=
uploadInfo
.
file
.
name
.
split
(
'.'
).
shift
()
form
.
name
=
uploadInfo
.
file
.
name
.
split
(
'.'
).
shift
()
form
.
source_id
=
uploadInfo
.
videoId
form
.
source_id
=
uploadInfo
.
videoId
...
@@ -95,7 +105,7 @@ function handleUpdate(params: VideoCreateItem) {
...
@@ -95,7 +105,7 @@ function handleUpdate(params: VideoCreateItem) {
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"140px"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"140px"
>
<el-form-item
label=
"实验操作视频文件"
prop=
"source_id"
>
<el-form-item
label=
"实验操作视频文件"
prop=
"source_id"
>
<UploadVideo
@
success=
"handleUploadSuccess"
>
<UploadVideo
:beforeUpload=
"handleBeforeUpload"
@
success=
"handleUploadSuccess"
>
<template
#
tip
>
实验操作视频文件支持格式包含:doc docx xls xlsx pdf ppt pptx,大小不超过50M
</
template
>
<template
#
tip
>
实验操作视频文件支持格式包含:doc docx xls xlsx pdf ppt pptx,大小不超过50M
</
template
>
</UploadVideo>
</UploadVideo>
</el-form-item>
</el-form-item>
...
...
src/modules/student/lab/components/Result.vue
浏览文件 @
9adacf96
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
ExperimentRecord
,
ExperimentRecordFile
}
from
'../types'
import
type
{
ExperimentRecord
}
from
'../types'
import
{
ElMessageBox
}
from
'element-plus'
import
{
ElMessageBox
}
from
'element-plus'
import
ImageViewer
from
'@/components/ImageViewer.vue'
import
ImageViewer
from
'@/components/ImageViewer.vue'
import
{
uploadExperimentPicture
}
from
'../api'
import
{
uploadExperimentPicture
}
from
'../api'
...
...
src/modules/student/lab/views/Index.vue
浏览文件 @
9adacf96
...
@@ -39,6 +39,18 @@ watchEffect(() => {
...
@@ -39,6 +39,18 @@ watchEffect(() => {
form
.
experiment_id
=
first
.
id
form
.
experiment_id
=
first
.
id
}
}
})
})
// 课程改变
function
handleCourseChange
(
value
:
string
)
{
ElMessageBox
.
confirm
(
'切换实验,将会导致当前操作内容变化,请确认当前操作无误并确认切换实验。'
,
'提示'
).
then
(()
=>
{
form
.
course_id
=
value
})
}
// 实验改变
function
handleExperimentChange
(
value
:
string
)
{
ElMessageBox
.
confirm
(
'切换实验,将会导致当前操作内容变化,请确认当前操作无误并确认切换实验。'
,
'提示'
).
then
(()
=>
{
form
.
experiment_id
=
value
})
}
let
detail
=
$ref
<
ExperimentRecord
>
()
let
detail
=
$ref
<
ExperimentRecord
>
()
provide
(
'detail'
,
$$
(
detail
))
provide
(
'detail'
,
$$
(
detail
))
...
@@ -136,12 +148,12 @@ function handleSubmit() {
...
@@ -136,12 +148,12 @@ function handleSubmit() {
<div
class=
"lab-left__inner"
>
<div
class=
"lab-left__inner"
>
<el-form
:model=
"form"
label-suffix=
":"
hide-required-asterisk
>
<el-form
:model=
"form"
label-suffix=
":"
hide-required-asterisk
>
<el-form-item
label=
"请选择课程"
>
<el-form-item
label=
"请选择课程"
>
<el-select
v-model=
"form.course_id
"
style=
"width: 100%"
>
<el-select
:model-value=
"form.course_id"
@
change=
"handleCourseChange
"
style=
"width: 100%"
>
<el-option
v-for=
"item in courses"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in courses"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"请选择实验"
prop=
"experiment_id"
>
<el-form-item
label=
"请选择实验"
prop=
"experiment_id"
>
<el-select
v-model=
"form.experiment_id
"
style=
"width: 100%"
>
<el-select
:model-value=
"form.experiment_id"
@
change=
"handleExperimentChange
"
style=
"width: 100%"
>
<el-option
v-for=
"item in experimentList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in experimentList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论