Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-resource
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-resource
Commits
030d2095
提交
030d2095
authored
6月 14, 2022
作者:
matian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bug修改
上级
be59d92a
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
182 行增加
和
111 行删除
+182
-111
.eslintrc-auto-import.json
.eslintrc-auto-import.json
+0
-1
auto-imports.d.ts
auto-imports.d.ts
+0
-1
AppList.vue
src/components/base/AppList.vue
+21
-3
AddDialog.vue
src/modules/admin/category/components/AddDialog.vue
+3
-3
TreeDialog.vue
src/modules/admin/category/components/TreeDialog.vue
+1
-1
List.vue
src/modules/admin/category/views/List.vue
+2
-2
Add.vue
src/modules/admin/teacher/views/Add.vue
+14
-8
Detail.vue
src/modules/admin/teacher/views/Detail.vue
+5
-1
List.vue
src/modules/admin/teacher/views/List.vue
+42
-23
TopInfo.vue
src/modules/resource/courseware/components/TopInfo.vue
+35
-29
View.vue
src/modules/resource/courseware/views/View.vue
+1
-1
AddDialog.vue
src/modules/system/cover/components/AddDialog.vue
+5
-5
List.vue
src/modules/system/cover/views/List.vue
+40
-21
AddDialog.vue
src/modules/system/dictionary/components/AddDialog.vue
+5
-4
ListAddDialog.vue
src/modules/system/dictionary/components/ListAddDialog.vue
+6
-6
List.vue
src/modules/system/dictionary/views/List.vue
+2
-2
没有找到文件。
.eslintrc-auto-import.json
浏览文件 @
030d2095
...
@@ -134,7 +134,6 @@
...
@@ -134,7 +134,6 @@
"useDisplayMedia"
:
true
,
"useDisplayMedia"
:
true
,
"useDocumentVisibility"
:
true
,
"useDocumentVisibility"
:
true
,
"useDraggable"
:
true
,
"useDraggable"
:
true
,
"useDropZone"
:
true
,
"useElementBounding"
:
true
,
"useElementBounding"
:
true
,
"useElementByPoint"
:
true
,
"useElementByPoint"
:
true
,
"useElementHover"
:
true
,
"useElementHover"
:
true
,
...
...
auto-imports.d.ts
浏览文件 @
030d2095
...
@@ -135,7 +135,6 @@ declare global {
...
@@ -135,7 +135,6 @@ declare global {
const
useDisplayMedia
:
typeof
import
(
'@vueuse/core'
)[
'useDisplayMedia'
]
const
useDisplayMedia
:
typeof
import
(
'@vueuse/core'
)[
'useDisplayMedia'
]
const
useDocumentVisibility
:
typeof
import
(
'@vueuse/core'
)[
'useDocumentVisibility'
]
const
useDocumentVisibility
:
typeof
import
(
'@vueuse/core'
)[
'useDocumentVisibility'
]
const
useDraggable
:
typeof
import
(
'@vueuse/core'
)[
'useDraggable'
]
const
useDraggable
:
typeof
import
(
'@vueuse/core'
)[
'useDraggable'
]
const
useDropZone
:
typeof
import
(
'@vueuse/core'
)[
'useDropZone'
]
const
useElementBounding
:
typeof
import
(
'@vueuse/core'
)[
'useElementBounding'
]
const
useElementBounding
:
typeof
import
(
'@vueuse/core'
)[
'useElementBounding'
]
const
useElementByPoint
:
typeof
import
(
'@vueuse/core'
)[
'useElementByPoint'
]
const
useElementByPoint
:
typeof
import
(
'@vueuse/core'
)[
'useElementByPoint'
]
const
useElementHover
:
typeof
import
(
'@vueuse/core'
)[
'useElementHover'
]
const
useElementHover
:
typeof
import
(
'@vueuse/core'
)[
'useElementHover'
]
...
...
src/components/base/AppList.vue
浏览文件 @
030d2095
...
@@ -135,10 +135,28 @@ defineExpose({ refetch, tableRef })
...
@@ -135,10 +135,28 @@ defineExpose({ refetch, tableRef })
</
template
>
</
template
>
<
template
v-else
>
<
template
v-else
>
<!-- input -->
<!-- input -->
<el-input
v-model=
"params[item.prop]"
v-bind=
"item"
clearable
@
change=
"search"
v-if=
"item.type === 'input'"
/>
<el-input
v-model=
"params[item.prop]"
v-bind=
"item"
clearable
@
change=
"search"
style=
"width: 200px"
v-if=
"item.type === 'input'"
/>
<!-- select -->
<!-- select -->
<el-select
v-model=
"params[item.prop]"
v-bind=
"item"
clearable
@
change=
"search"
v-if=
"item.type === 'select'"
>
<el-select
<el-option
:label=
"option[item.labelKey] || option.label"
:value=
"option[item.valueKey] || option.value"
v-for=
"(option, index) in item.options"
:key=
"index"
/>
v-model=
"params[item.prop]"
v-bind=
"item"
clearable
@
change=
"search"
v-if=
"item.type === 'select'"
>
<el-option
:label=
"option[item.labelKey] || option.label"
:value=
"option[item.valueKey] || option.value"
v-for=
"(option, index) in item.options"
:key=
"index"
/>
</el-select>
</el-select>
</
template
>
</
template
>
</el-form-item>
</el-form-item>
...
...
src/modules/admin/category/components/AddDialog.vue
浏览文件 @
030d2095
...
@@ -8,8 +8,8 @@ import TreeDialog from './TreeDialog.vue'
...
@@ -8,8 +8,8 @@ import TreeDialog from './TreeDialog.vue'
import
{
useMapStore
}
from
'@/stores/map'
import
{
useMapStore
}
from
'@/stores/map'
const
categoryName
=
ref
(
''
)
const
categoryName
=
ref
(
''
)
const
store
=
useMapStore
()
const
store
=
useMapStore
()
const
classList
=
store
.
mapList
.
filter
((
item
:
any
)
=>
item
.
key
===
'system_status'
)[
0
].
values
const
classList
=
store
.
getMapValuesByKey
(
'system_need_pass'
)
const
statusList
=
store
.
mapList
.
filter
((
item
:
any
)
=>
item
.
key
===
'system_status'
)[
0
].
values
const
statusList
=
store
.
getMapValuesByKey
(
'system_status'
)
const
isTreeVisible
=
ref
(
false
)
const
isTreeVisible
=
ref
(
false
)
const
formRef
=
ref
()
const
formRef
=
ref
()
...
@@ -110,7 +110,7 @@ onMounted(() => {
...
@@ -110,7 +110,7 @@ onMounted(() => {
})
})
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"dialogVisible"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"
6
0%"
>
<el-dialog
:model-value=
"dialogVisible"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"
3
0%"
>
<el-form
:model=
"categoryForm"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"formRef"
>
<el-form
:model=
"categoryForm"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"formRef"
>
<el-form-item
label=
"上级类别:"
prop=
"parent_id"
>
<el-form-item
label=
"上级类别:"
prop=
"parent_id"
>
<div
@
click=
"handleOpenTree"
style=
"width: 100%"
>
<div
@
click=
"handleOpenTree"
style=
"width: 100%"
>
...
...
src/modules/admin/category/components/TreeDialog.vue
浏览文件 @
030d2095
...
@@ -78,7 +78,7 @@ onMounted(() => {
...
@@ -78,7 +78,7 @@ onMounted(() => {
})
})
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"isTreeVisible"
draggable
:before-close=
"handleCancel"
title=
"类别选择"
width=
"
4
0%"
>
<el-dialog
:model-value=
"isTreeVisible"
draggable
:before-close=
"handleCancel"
title=
"类别选择"
width=
"
2
0%"
>
<el-input
v-model=
"filterText"
placeholder=
"请选择类别"
/>
<el-input
v-model=
"filterText"
placeholder=
"请选择类别"
/>
<el-tree
<el-tree
ref=
"treeRef"
ref=
"treeRef"
...
...
src/modules/admin/category/views/List.vue
浏览文件 @
030d2095
...
@@ -104,7 +104,7 @@ const listOptions = computed(() => {
...
@@ -104,7 +104,7 @@ const listOptions = computed(() => {
return
{
list
}
return
{
list
}
}
}
},
},
filters
:
[{
type
:
'input'
,
prop
:
'category_name'
,
label
:
'类别名称:'
}],
filters
:
[{
type
:
'input'
,
prop
:
'category_name'
,
label
:
'类别名称:'
,
placeholder
:
'请输入类别名称'
}],
columns
:
[
columns
:
[
{
label
:
'类别名称'
,
prop
:
'category_name'
,
align
:
'left'
},
{
label
:
'类别名称'
,
prop
:
'category_name'
,
align
:
'left'
},
{
label
:
'层级'
,
prop
:
'depth'
,
align
:
'center'
},
{
label
:
'层级'
,
prop
:
'depth'
,
align
:
'center'
},
...
@@ -172,7 +172,7 @@ function onExpandChange(row: ICategory, expanded: boolean) {
...
@@ -172,7 +172,7 @@ function onExpandChange(row: ICategory, expanded: boolean) {
}
}
}
}
// 重点代码 根据name字段模糊匹配树状结构数据,最后将处理好的数据返回出来
// 重点代码 根据name字段模糊匹配树状结构数据,最后将处理好的数据返回出来
const
rebuildData
=
(
value
:
any
,
arr
:
any
)
=>
{
const
rebuildData
=
(
value
:
any
,
arr
:
any
)
=>
{
if
(
!
arr
)
{
if
(
!
arr
)
{
return
[]
return
[]
...
...
src/modules/admin/teacher/views/Add.vue
浏览文件 @
030d2095
...
@@ -4,6 +4,10 @@ import VEditor from '@/components/tinymce/Index.vue'
...
@@ -4,6 +4,10 @@ import VEditor from '@/components/tinymce/Index.vue'
import
AppUpload
from
'@/components/base/AppUpload.vue'
import
AppUpload
from
'@/components/base/AppUpload.vue'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
{
useMapStore
}
from
'@/stores/map'
const
store
=
useMapStore
()
const
levelList
=
store
.
getMapValuesByKey
(
'teacher_level'
)
const
router
=
useRouter
()
const
router
=
useRouter
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
...
@@ -52,26 +56,28 @@ const submitForm = async (formEl: FormInstance | undefined) => {
...
@@ -52,26 +56,28 @@ const submitForm = async (formEl: FormInstance | undefined) => {
<AppCard
title=
"添加讲师"
>
<AppCard
title=
"添加讲师"
>
<el-form
ref=
"ruleFormRef"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"120px"
class=
"demo-ruleForm"
>
<el-form
ref=
"ruleFormRef"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"120px"
class=
"demo-ruleForm"
>
<el-row>
<el-row>
<el-col
:span=
"
10
"
>
<el-col
:span=
"
6
"
>
<el-form-item
label=
"讲师姓名:"
prop=
"name"
>
<el-form-item
label=
"讲师姓名:"
prop=
"name"
>
<el-input
v-model=
"ruleForm.name"
/>
<el-input
v-model=
"ruleForm.name"
style=
"width: 250px"
placeholder=
"请输入讲师姓名"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"
10
"
>
<el-col
:span=
"
6
"
>
<el-form-item
label=
"讲师职位:"
prop=
"title"
>
<el-form-item
label=
"讲师职位:"
prop=
"title"
>
<el-input
v-model=
"ruleForm.title"
/>
<el-input
v-model=
"ruleForm.title"
style=
"width: 250px"
placeholder=
"请输入讲师职位"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"
10
"
>
<el-col
:span=
"
6
"
>
<el-form-item
label=
"讲师学历:"
prop=
"education"
>
<el-form-item
label=
"讲师学历:"
prop=
"education"
>
<el-input
v-model=
"ruleForm.education"
/>
<el-select
v-model=
"ruleForm.education"
clearable
style=
"width: 250px"
placeholder=
"请选择讲师学历"
>
<el-option
v-for=
"(item, index) in levelList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"
10
"
>
<el-col
:span=
"
6
"
>
<el-form-item
label=
"讲师任职机构:"
prop=
"office"
>
<el-form-item
label=
"讲师任职机构:"
prop=
"office"
>
<el-input
v-model=
"ruleForm.office"
/>
<el-input
v-model=
"ruleForm.office"
style=
"width: 250px"
placeholder=
"请输入讲师任职机构"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
...
...
src/modules/admin/teacher/views/Detail.vue
浏览文件 @
030d2095
...
@@ -82,7 +82,8 @@ onMounted(() => {
...
@@ -82,7 +82,8 @@ onMounted(() => {
<el-row>
<el-row>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"讲师图片:"
prop=
"avatar"
>
<el-form-item
label=
"讲师图片:"
prop=
"avatar"
>
<div
v-if=
"isEdit === '1'"
class=
"avatar_box"
>
暂无照片
</div>
<img
v-if=
"isEdit === '1' && ruleForm.avatar !== ''"
:src=
"ruleForm.avatar"
class=
"avatar_box1"
/>
<div
class=
"avatar_box"
v-else-if=
"isEdit === '1' && ruleForm.avatar === ''"
>
暂无讲师图片
</div>
<AppUpload
v-model=
"ruleForm.avatar"
v-else
/>
<AppUpload
v-model=
"ruleForm.avatar"
v-else
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
...
@@ -141,4 +142,7 @@ onMounted(() => {
...
@@ -141,4 +142,7 @@ onMounted(() => {
color
:
#ccc
;
color
:
#ccc
;
border
:
1px
dashed
#ccc
;
border
:
1px
dashed
#ccc
;
}
}
.avatar_box1
{
width
:
150px
;
}
</
style
>
</
style
>
src/modules/admin/teacher/views/List.vue
浏览文件 @
030d2095
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
getTeacherList
,
deleteTeacher
}
from
'../api'
import
{
getTeacherList
,
deleteTeacher
}
from
'../api'
import
{
useMapStore
}
from
'@/stores/map'
const
store
=
useMapStore
()
const
router
=
useRouter
()
const
router
=
useRouter
()
const
appList
=
ref
()
const
appList
=
ref
()
const
listOptions
=
{
const
listOptions
=
$computed
(()
=>
{
remote
:
{
return
{
httpRequest
:
getTeacherList
,
remote
:
{
params
:
{
type
:
''
}
httpRequest
:
getTeacherList
,
},
params
:
{
type
:
''
}
filters
:
[
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'讲师姓名:'
},
filters
:
[
{
type
:
'input'
,
prop
:
'office'
,
label
:
'讲师任职机构:'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'讲师姓名:'
,
placeholder
:
'请输入讲师姓名'
},
{
type
:
'input'
,
prop
:
'title'
,
label
:
'讲师职位:'
},
{
type
:
'input'
,
prop
:
'office'
,
label
:
'讲师任职机构:'
,
placeholder
:
'请输入讲师任职机构'
},
{
type
:
'input'
,
prop
:
'education'
,
label
:
'讲师学历:'
}
{
type
:
'input'
,
prop
:
'title'
,
label
:
'讲师职位:'
,
placeholder
:
'请输入讲师职位'
},
],
{
columns
:
[
type
:
'select'
,
{
label
:
'#'
,
type
:
'index'
,
align
:
'center'
},
prop
:
'education'
,
{
label
:
'讲师头像'
,
slots
:
'table-img'
,
align
:
'center'
},
label
:
'讲师学历:'
,
{
label
:
'讲师姓名'
,
prop
:
'name'
,
align
:
'center'
},
placeholder
:
'请选择讲师学历'
,
{
label
:
'讲师任职机构'
,
prop
:
'office'
,
align
:
'center'
},
options
:
store
.
getMapValuesByKey
(
'teacher_level'
)
{
label
:
'讲师职位'
,
prop
:
'title'
,
align
:
'center'
},
}
{
label
:
'讲师学历'
,
prop
:
'education'
,
align
:
'center'
},
],
{
label
:
'创建时间'
,
prop
:
'created_time'
,
align
:
'center'
},
columns
:
[
{
label
:
'操作'
,
slots
:
'table-operate'
,
width
:
230
,
align
:
'center'
}
{
label
:
'#'
,
type
:
'index'
,
align
:
'center'
},
]
{
label
:
'讲师头像'
,
slots
:
'table-img'
,
align
:
'center'
},
}
{
label
:
'讲师姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'讲师任职机构'
,
prop
:
'office'
,
align
:
'center'
},
{
label
:
'讲师职位'
,
prop
:
'title'
,
align
:
'center'
},
{
label
:
'讲师学历'
,
prop
:
'education'
,
align
:
'center'
},
{
label
:
'创建时间'
,
prop
:
'created_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
width
:
230
,
align
:
'center'
}
]
}
})
// 删除讲师
// 删除讲师
const
handleDelete
=
(
row
:
any
)
=>
{
const
handleDelete
=
(
row
:
any
)
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
...
@@ -66,7 +76,16 @@ const handleDetail = (row: any) => {
...
@@ -66,7 +76,16 @@ const handleDetail = (row: any) => {
<el-button
type=
"primary"
round
style=
"margin-bottom: 20px"
>
添加讲师
</el-button>
<el-button
type=
"primary"
round
style=
"margin-bottom: 20px"
>
添加讲师
</el-button>
</router-link>
</router-link>
<template
#
header-aside
>
</
template
>
<template
#
header-aside
>
</
template
>
<
template
#
table-img=
"{ row }"
>
<img
:src=
"row.avatar"
alt=
""
style=
"width: 100%"
/></
template
>
<
template
#
table-img=
"{ row }"
>
<el-image
:src=
"row.avatar"
alt=
""
style=
"width: 50px"
:preview-src-list=
"[row.avatar]"
:initial-index=
"4"
fit=
"contain"
:preview-teleported=
"true"
/></
template
>
<
template
#
table-operate=
"{ row }"
>
<
template
#
table-operate=
"{ row }"
>
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
...
...
src/modules/resource/courseware/components/TopInfo.vue
浏览文件 @
030d2095
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
Files
}
from
'@element-plus/icons-vue'
import
{
Files
}
from
'@element-plus/icons-vue'
const
props
=
defineProps
({
data
:
{
type
:
Object
,
require
:
true
}
})
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -12,53 +18,53 @@ import { Files } from '@element-plus/icons-vue'
...
@@ -12,53 +18,53 @@ import { Files } from '@element-plus/icons-vue'
</div>
</div>
<div
class=
"info-items"
>
<div
class=
"info-items"
>
<div
class=
"i-items"
>
<div
class=
"i-items"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon1.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon1.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
状态
</div>
<div
class=
"name"
>
状态
</div>
<div
class=
"value active"
>
有效
</div>
<div
class=
"value active"
>
{{
props
.
data
?.
status_name
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"i-items"
>
<div
class=
"i-items"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon12.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon12.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
创建者
</div>
<div
class=
"name"
>
创建者
</div>
<div
class=
"value"
>
张三丰
</div>
<div
class=
"value"
>
{{
props
.
data
?.
created_operator_name
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"i-items"
>
<div
class=
"i-items"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon3.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon3.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
创建时间
</div>
<div
class=
"name"
>
创建时间
</div>
<div
class=
"value"
>
2021-08-09 12:32:21
</div>
<div
class=
"value"
>
{{
props
.
data
?.
created_time
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"i-items"
>
<div
class=
"i-items"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon4.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon4.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
更新时间
</div>
<div
class=
"name"
>
更新时间
</div>
<div
class=
"value"
>
2021-08-09 12:32:21
</div>
<div
class=
"value"
>
{{
props
.
data
?.
updated_time
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"i-items"
>
<div
class=
"i-items"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon5.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon5.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
课件名称
</div>
<div
class=
"name"
>
课件名称
</div>
<div
class=
"value"
>
基金产品(中)(初级)
</div>
<div
class=
"value"
>
{{
props
.
data
?.
name
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"i-items"
>
<div
class=
"i-items"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon6.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon6.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
课件分类
</div>
<div
class=
"name"
>
课件分类
</div>
<div
class=
"value"
>
金融产品数字化营销-黄老师
</div>
<div
class=
"value"
>
{{
props
.
data
?.
classification_name
||
'暂无'
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"i-items"
style=
"align-items: flex-start
;
"
>
<div
class=
"i-items"
style=
"align-items: flex-start"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon8.png"
class=
"icons"
>
<img
src=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com/center_resource/video-view-icon8.png"
class=
"icons"
/
>
<div
class=
"text-box"
>
<div
class=
"text-box"
>
<div
class=
"name"
>
知识点
</div>
<div
class=
"name"
>
知识点
</div>
<div
class=
"textarea-box"
>
<div
class=
"textarea-box"
>
某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某
{{
props
.
data
?.
knowledge_points
||
'暂无'
}}
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -66,19 +72,19 @@ import { Files } from '@element-plus/icons-vue'
...
@@ -66,19 +72,19 @@ import { Files } from '@element-plus/icons-vue'
</div>
</div>
</
template
>
</
template
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.video-info
{
.video-info
{
background
:
#
F7F7F
7
;
background
:
#
f7f7f
7
;
margin-top
:
20px
;
margin-top
:
20px
;
padding
:
20px
;
padding
:
20px
;
display
:
flex
;
display
:
flex
;
.video-img
{
.video-img
{
// width: 211px;
// width: 211px;
padding
:
0
30px
;
padding
:
0
30px
;
.item-info-icon
{
.item-info-icon
{
font-size
:
100px
;
font-size
:
100px
;
color
:
#aa1941
;
color
:
#aa1941
;
}
}
.name
{
.name
{
font-size
:
16px
;
font-size
:
16px
;
line-height
:
100%
;
line-height
:
100%
;
color
:
#666666
;
color
:
#666666
;
...
@@ -86,40 +92,40 @@ import { Files } from '@element-plus/icons-vue'
...
@@ -86,40 +92,40 @@ import { Files } from '@element-plus/icons-vue'
text-align
:
center
;
text-align
:
center
;
}
}
}
}
.info-items
{
.info-items
{
display
:
flex
;
display
:
flex
;
flex-wrap
:
wrap
;
flex-wrap
:
wrap
;
padding-left
:
12px
;
padding-left
:
12px
;
.i-items
{
.i-items
{
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
height
:
fit-content
;
height
:
fit-content
;
margin-right
:
80px
;
margin-right
:
80px
;
margin-bottom
:
30px
;
margin-bottom
:
30px
;
.textarea-box
{
.textarea-box
{
padding
:
18px
18px
51px
;
padding
:
18px
18px
51px
;
background
:
#
FFFFFF
;
background
:
#
ffffff
;
border-radius
:
4px
;
border-radius
:
4px
;
font-size
:
16px
;
font-size
:
16px
;
line-height
:
24px
;
line-height
:
24px
;
color
:
#505050
;
color
:
#505050
;
margin-top
:
14px
;
margin-top
:
14px
;
}
}
.text-box
{
.text-box
{
margin-left
:
16px
;
margin-left
:
16px
;
.name
{
.name
{
font-size
:
14px
;
font-size
:
14px
;
line-height
:
100%
;
line-height
:
100%
;
color
:
#999999
;
color
:
#999999
;
}
}
.value
{
.value
{
font-size
:
16px
;
font-size
:
16px
;
font-weight
:
bold
;
font-weight
:
bold
;
line-height
:
100%
;
line-height
:
100%
;
color
:
#333333
;
color
:
#333333
;
margin-top
:
8px
;
margin-top
:
8px
;
&
.active
{
&
.active
{
color
:
#1
AB
226
;
color
:
#1
ab
226
;
}
}
}
}
}
}
...
...
src/modules/resource/courseware/views/View.vue
浏览文件 @
030d2095
...
@@ -43,7 +43,7 @@ getCourseDetails({ id: id }).then(res => {
...
@@ -43,7 +43,7 @@ getCourseDetails({ id: id }).then(res => {
<div
class=
"btn-item"
>
更改负责人
</div>
<div
class=
"btn-item"
>
更改负责人
</div>
</div>
-->
</div>
-->
<Operation
:data=
"courseDetails"
style=
"margin-bottom: 20px"
></Operation>
<Operation
:data=
"courseDetails"
style=
"margin-bottom: 20px"
></Operation>
<TopInfo
:data=
"courseDetails"
></TopInfo>
<TopInfo
v-if=
"Object.keys(courseDetails).length"
:data=
"courseDetails"
></TopInfo>
<CenterInfo
v-if=
"Object.keys(courseDetails).length"
:data=
"courseDetails"
></CenterInfo>
<CenterInfo
v-if=
"Object.keys(courseDetails).length"
:data=
"courseDetails"
></CenterInfo>
<BottomInfo></BottomInfo>
<BottomInfo></BottomInfo>
</AppCard>
</AppCard>
...
...
src/modules/system/cover/components/AddDialog.vue
浏览文件 @
030d2095
...
@@ -7,9 +7,9 @@ const store = useMapStore()
...
@@ -7,9 +7,9 @@ const store = useMapStore()
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
// 封面类型
// 封面类型
const
typeList
=
store
.
mapList
.
filter
((
item
:
any
)
=>
item
.
key
===
'system_cover_type'
)[
0
].
values
const
typeList
=
store
.
getMapValuesByKey
(
'system_cover_type'
)
// 封面状态
// 封面状态
const
statusList
=
store
.
mapList
.
filter
((
item
:
any
)
=>
item
.
key
===
'system_status'
)[
0
].
values
const
statusList
=
store
.
getMapValuesByKey
(
'system_status'
)
const
form
=
reactive
({
const
form
=
reactive
({
title
:
''
,
title
:
''
,
status
:
'1'
,
status
:
'1'
,
...
@@ -77,10 +77,10 @@ onMounted(() => {
...
@@ -77,10 +77,10 @@ onMounted(() => {
:model-value=
"isShowDialog"
:model-value=
"isShowDialog"
draggable
draggable
:before-close=
"handleCancel"
:before-close=
"handleCancel"
width=
"
30
%"
width=
"
25
%"
:title=
"props.isEdit ? '修改预置封面信息' : ' 新增封面'"
:title=
"props.isEdit ? '修改预置封面信息' : ' 新增封面'"
>
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleFormRef"
label-width=
"120px"
>
<el-form-item
label=
"封面类型:"
prop=
"type"
>
<el-form-item
label=
"封面类型:"
prop=
"type"
>
<el-select
v-model=
"form.type"
>
<el-select
v-model=
"form.type"
>
<el-option
v-for=
"(item, id) in typeList"
:key=
"id"
:label=
"item.label"
:value=
"item.value"
></el-option>
<el-option
v-for=
"(item, id) in typeList"
:key=
"id"
:label=
"item.label"
:value=
"item.value"
></el-option>
...
@@ -97,8 +97,8 @@ onMounted(() => {
...
@@ -97,8 +97,8 @@ onMounted(() => {
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
<span>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
<el-button
@
click=
"handleCancel"
>
关闭
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
...
...
src/modules/system/cover/views/List.vue
浏览文件 @
030d2095
...
@@ -2,30 +2,48 @@
...
@@ -2,30 +2,48 @@
import
{
getCoverList
,
deleteCover
}
from
'../api'
import
{
getCoverList
,
deleteCover
}
from
'../api'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
AddDialog
from
'../components/AddDialog.vue'
import
AddDialog
from
'../components/AddDialog.vue'
import
{
useMapStore
}
from
'@/stores/map'
const
store
=
useMapStore
()
const
appList
=
ref
()
const
appList
=
ref
()
const
isShowDialog
=
ref
(
false
)
const
isShowDialog
=
ref
(
false
)
const
isEdit
=
ref
(
false
)
const
isEdit
=
ref
(
false
)
const
editData
=
ref
({})
const
editData
=
ref
({})
const
listOptions
=
{
const
listOptions
=
$computed
(()
=>
{
remote
:
{
return
{
httpRequest
:
getCoverList
,
remote
:
{
params
:
{
type
:
''
}
httpRequest
:
getCoverList
,
},
params
:
{
type
:
''
}
columns
:
[
{
label
:
'封面标题'
,
prop
:
'title'
,
align
:
'center'
},
{
label
:
'封面预览'
,
prop
:
'url'
,
slots
:
'table-cover'
,
align
:
'center'
},
{
label
:
'封面类型'
,
prop
:
'type_name'
,
align
:
'center'
},
{
label
:
'状态'
,
prop
:
'status_name'
,
align
:
'center'
},
},
{
label
:
'创建时间'
,
prop
:
'created_time'
,
align
:
'center'
},
filters
:
[
{
label
:
'操作'
,
slots
:
'table-operate'
,
width
:
230
,
align
:
'center'
}
{
]
type
:
'select'
,
}
prop
:
'type'
,
label
:
'封面类型:'
,
placeholder
:
'请选择封面类型'
,
options
:
store
.
getMapValuesByKey
(
'system_cover_type'
)
},
{
type
:
'select'
,
prop
:
'status'
,
label
:
'封面状态:'
,
placeholder
:
'请选择封面状态'
,
options
:
store
.
getMapValuesByKey
(
'system_status'
)
}
],
columns
:
[
{
label
:
'封面标题'
,
prop
:
'title'
,
align
:
'center'
},
{
label
:
'封面预览'
,
prop
:
'url'
,
slots
:
'table-cover'
,
align
:
'center'
},
{
label
:
'封面类型'
,
prop
:
'type_name'
,
align
:
'center'
},
{
label
:
'状态'
,
prop
:
'status_name'
,
align
:
'center'
},
{
label
:
'创建时间'
,
prop
:
'created_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
width
:
230
,
align
:
'center'
}
]
}
})
// 删除
// 删除
const
handleDelete
=
(
row
:
any
)
=>
{
const
handleDelete
=
(
row
:
any
)
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
...
@@ -55,11 +73,12 @@ const handleEdit = (row: any) => {
...
@@ -55,11 +73,12 @@ const handleEdit = (row: any) => {
<
template
>
<
template
>
<AppCard
title=
"封面管理"
>
<AppCard
title=
"封面管理"
>
<el-button
type=
"primary"
round
@
click=
"handleAdd"
>
新增封面
</el-button>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<template
#
header-aside
>
</
template
>
<template
#
header-aside
>
</
template
>
<el-button
type=
"primary"
round
@
click=
"handleAdd"
style=
"margin-bottom: 20px"
>
新增封面
</el-button>
<
template
#
table-cover=
"{ row }"
>
<
template
#
table-cover=
"{ row }"
>
<img
:src=
"row.url"
alt=
""
style=
"width:
10
0px"
/>
<img
:src=
"row.url"
alt=
""
style=
"width:
5
0px"
/>
</
template
>
</
template
>
<
template
#
table-operate=
"{ row }"
>
<
template
#
table-operate=
"{ row }"
>
<el-space>
<el-space>
...
...
src/modules/system/dictionary/components/AddDialog.vue
浏览文件 @
030d2095
...
@@ -81,6 +81,7 @@ onMounted(() => {
...
@@ -81,6 +81,7 @@ onMounted(() => {
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
<el-dialog
width=
"30%"
:model-value=
"isShowDialog"
:model-value=
"isShowDialog"
draggable
draggable
:before-close=
"handleCancel"
:before-close=
"handleCancel"
...
@@ -88,10 +89,10 @@ onMounted(() => {
...
@@ -88,10 +89,10 @@ onMounted(() => {
>
>
<el-form
:model=
"form"
ref=
"ruleFormRef"
:rules=
"rules"
label-width=
"120px"
>
<el-form
:model=
"form"
ref=
"ruleFormRef"
:rules=
"rules"
label-width=
"120px"
>
<el-form-item
label=
"字典名称:"
prop=
"name"
>
<el-form-item
label=
"字典名称:"
prop=
"name"
>
<el-input
v-model=
"form.name"
></el-input>
<el-input
v-model=
"form.name"
placeholder=
"请输入字典名称"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"字典类型:"
prop=
"key"
>
<el-form-item
label=
"字典类型:"
prop=
"key"
>
<el-input
v-model=
"form.key"
></el-input>
<el-input
v-model=
"form.key"
placeholder=
"请输入字典类型"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"状态:"
prop=
"status"
>
<el-form-item
label=
"状态:"
prop=
"status"
>
...
@@ -100,13 +101,13 @@ onMounted(() => {
...
@@ -100,13 +101,13 @@ onMounted(() => {
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"备注:"
prop=
"remark"
>
<el-form-item
label=
"备注:"
prop=
"remark"
>
<el-input
v-model=
"form.remark"
autosize
type=
"textarea"
/>
<el-input
v-model=
"form.remark"
autosize
type=
"textarea"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
<span>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm(ruleFormRef)"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm(ruleFormRef)"
>
确定
</el-button>
<el-button
@
click=
"handleCancel"
>
关闭
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
...
...
src/modules/system/dictionary/components/ListAddDialog.vue
浏览文件 @
030d2095
...
@@ -102,16 +102,16 @@ onMounted(() => {
...
@@ -102,16 +102,16 @@ onMounted(() => {
})
})
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"isListAddDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
>
<el-dialog
width=
"30%"
:model-value=
"isListAddDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
>
<el-form
:model=
"form"
ref=
"ruleFormRef"
:rules=
"rules"
label-width=
"120px"
>
<el-form
:model=
"form"
ref=
"ruleFormRef"
:rules=
"rules"
label-width=
"120px"
>
<el-form-item
label=
"字典标签:"
prop=
"label"
>
<el-form-item
label=
"字典标签:"
prop=
"label"
>
<el-input
v-model=
"form.label"
></el-input>
<el-input
v-model=
"form.label"
placeholder=
"请输入字典标签"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"字典键值:"
prop=
"value"
>
<el-form-item
label=
"字典键值:"
prop=
"value"
>
<el-input
v-model=
"form.value"
:disabled=
"form.can_edit === '0'"
></el-input>
<el-input
v-model=
"form.value"
:disabled=
"form.can_edit === '0'"
placeholder=
"请输入字典键值"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"字典排序:"
prop=
"sort"
>
<el-form-item
label=
"字典排序:"
prop=
"sort"
>
<el-input
v-model=
"form.sort"
></el-input>
<el-input
v-model=
"form.sort"
placeholder=
"请输入字典排序"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"字典类型:"
>
<el-form-item
label=
"字典类型:"
>
<el-input
disabled
:placeholder=
"props.type"
></el-input>
<el-input
disabled
:placeholder=
"props.type"
></el-input>
...
@@ -122,7 +122,7 @@ onMounted(() => {
...
@@ -122,7 +122,7 @@ onMounted(() => {
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"备注:"
prop=
"remark"
>
<el-form-item
label=
"备注:"
prop=
"remark"
>
<el-input
v-model=
"form.remark"
autosize
type=
"textarea"
/>
<el-input
v-model=
"form.remark"
autosize
type=
"textarea"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"能否编辑:"
prop=
"can_edit"
>
<el-form-item
label=
"能否编辑:"
prop=
"can_edit"
>
<el-radio-group
v-model=
"form.can_edit"
>
<el-radio-group
v-model=
"form.can_edit"
>
...
@@ -132,8 +132,8 @@ onMounted(() => {
...
@@ -132,8 +132,8 @@ onMounted(() => {
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
<span>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm(ruleFormRef)"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm(ruleFormRef)"
>
确定
</el-button>
<el-button
@
click=
"handleCancel"
>
关闭
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
...
...
src/modules/system/dictionary/views/List.vue
浏览文件 @
030d2095
...
@@ -25,8 +25,8 @@ const listOptions = $computed(() => {
...
@@ -25,8 +25,8 @@ const listOptions = $computed(() => {
}
}
},
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'字典名称:'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'字典名称:'
,
placeholder
:
'请输入字典名称'
},
{
type
:
'input'
,
prop
:
'key'
,
label
:
'字典类型:'
},
{
type
:
'input'
,
prop
:
'key'
,
label
:
'字典类型:'
,
placeholder
:
'请输入字典类型'
},
{
{
type
:
'select'
,
type
:
'select'
,
prop
:
'status'
,
prop
:
'status'
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论