提交 2e3c599e authored 作者: matian's avatar matian

课件资源部分开发

上级 35190c86
import httpRequest from '@/utils/axios' import httpRequest from '@/utils/axios'
// 获取视频列表 // 获取课件列表
export function getVideoList(params?: { type?: string; page?: number; page_size?: number }) { export function getCourseList(params: {
return httpRequest.get('/api/psp/backend/video/index', { params }) tab: string
status?: string
authorized?: string
classification?: string
page?: number
['per-page']?: number
}) {
return httpRequest.get('/api/resource/v1/resource/courseware/list', { params })
} }
// 创建视频 // 创建
export function createVideo(data: { course_name: string; cover_page: string; type: string; weight?: string }) { export function createCourse(data: {
return httpRequest.post('/api/psp/backend/video/create', data) url: string
name: string
source: string
classification: string
knowledge_points: string
}) {
return httpRequest.post('/api/resource/v1/resource/courseware/create', data)
} }
// 更新视频 // 获取分类列表
export function updateVideo(data: { id: string; course_name: string; cover_page: string; type: string; weight?: string }) { export function getCategoryList(params: { type: string; category_name?: string }) {
return httpRequest.post('/api/psp/backend/video/update', data) return httpRequest.get('/api/resource/v1/backend/category/list', { params })
} }
// 获取视频详情 // 更新课件
export function getVideo(params: { id: string }) { export function updateCourse(data: {
return httpRequest.get('/api/psp/backend/video/view', { params }) id: string
url: string
name: string
source: string
classification: string
knowledge_points: string
}) {
return httpRequest.post('/v1/resource/courseware/update', data)
}
// 获取课件详情
export function getCourseDetails(params: { id: string }) {
return httpRequest.get('/api/resource/v1/resource/courseware/view', { params })
} }
...@@ -7,8 +7,8 @@ export const routes: Array<RouteRecordRaw> = [ ...@@ -7,8 +7,8 @@ export const routes: Array<RouteRecordRaw> = [
component: AppLayout, component: AppLayout,
children: [ children: [
{ path: '', component: () => import('./views/List.vue') }, { path: '', component: () => import('./views/List.vue') },
{ path: 'update', component: () => import('./views/Update.vue') }, { path: '/resource/courseware/update', component: () => import('./views/Update.vue') },
{ path: 'view', component: () => import('./views/View.vue') } { path: '/resource/courseware/view', component: () => import('./views/View.vue') }
// { path: 'update/:id', component: () => import('./views/Update.vue'), props: true } // { path: 'update/:id', component: () => import('./views/Update.vue'), props: true }
] ]
} }
......
<script setup lang="ts"> <script setup lang="ts">
// import { getVideoList } from '../api' import { getCourseList } from '../api'
import CardListItem from '@/components/base/CardListItem.vue' import CardListItem from '@/components/base/CardListItem.vue'
import { Expand, Search } from '@element-plus/icons-vue' import { Expand, Search } from '@element-plus/icons-vue'
import { useMapStore } from '@/stores/map'
const store = useMapStore()
const appList = ref() const appList = ref()
// 列表切换
const isCard = ref(true) const isCard = ref(true)
const listOptions = { // 资源出处 tab触发
const tabValue = ref('1')
const tabChange = () => {
appList.value.refetch()
}
const listOptions = $computed(() => {
return {
remote: { remote: {
// httpRequest: getVideoList, httpRequest: getCourseList,
params: { type: '' }, params: { tab: tabValue, title: '', status: '', authorized: '', classification: '' },
beforeRequest(params: any) { beforeRequest(params: any) {
// params.type = 选项卡类型 // params.type = 选项卡类型
return params return params
} }
}, },
filters: [ filters: [
{ type: 'select', prop: 'type', label: '状态' }, {
type: 'select',
prop: 'type',
label: '状态',
options: store.mapList?.filter((item: any) => item.key === 'system_status')[0]?.values
},
{ type: 'select', prop: 'project_id', label: '项目' }, { type: 'select', prop: 'project_id', label: '项目' },
{ type: 'select', prop: 'category_id', label: '类别' }, { type: 'select', prop: 'category_id', label: '类别' },
{ prop: 'search', slots: 'filter-search' } { prop: 'search', slots: 'filter-search' }
// { type: 'input', prop: 'category_id', prefixIcon: 'Search' } // { type: 'input', prop: 'category_id', prefixIcon: 'Search' }
], ],
columns: [ columns: [
{ label: '视频标题', prop: 'title' }, { label: '课件标题', prop: 'name' },
{ label: '视频分类', prop: 'type' }, { label: '课件分类', prop: 'classification_name' },
{ label: '知识点', prop: 'zsd' }, { label: '知识点', prop: 'knowledge_points' },
{ label: '封面', slots: 'table-cover', width: 100 }, { label: '资源状态', prop: 'status_name' },
{ label: '资源状态', prop: 'state' }, { label: '审核状态', prop: 'audit_status_name' },
{ label: '审核状态', prop: 'state2' }, { label: '更新人', prop: 'updated_operator_name' },
{ label: '更新人', prop: 'update' }, { label: '更新人部门', prop: 'organ_id_name' },
{ label: '更新人部门', prop: 'updatebm' }, { label: '更新日期', prop: 'updated_time' },
{ label: '更新日期', prop: 'update_time' },
{ label: '操作', slots: 'table-operate', align: 'right' } { label: '操作', slots: 'table-operate', align: 'right' }
],
data: [
{ id: 1, title: '视频标题', type: '视频分类' },
{ id: 2, title: '视频标题', type: '视频分类' }
] ]
} }
})
</script> </script>
<template> <template>
<AppCard> <AppCard>
<!-- <el-switch v-model="isCard"></el-switch> -->
<div class="video-head"> <div class="video-head">
<el-tabs> <el-tabs @tab-change="tabChange" v-model="tabValue">
<el-tab-pane label="我的资源"></el-tab-pane> <el-tab-pane label="我的资源"></el-tab-pane>
<el-tab-pane label="部门资源"></el-tab-pane> <el-tab-pane label="部门资源"></el-tab-pane>
<el-tab-pane label="公开资源"></el-tab-pane> <el-tab-pane label="公开资源"></el-tab-pane>
...@@ -65,10 +73,10 @@ const listOptions = { ...@@ -65,10 +73,10 @@ const listOptions = {
</template> </template>
<template #table-operate="{ row }"> <template #table-operate="{ row }">
<el-space> <el-space>
<router-link :to="`/video/update/${row.id}`"> <router-link :to="`/resource/courseware/update/?id=${row.id}`">
<el-button plain>编辑</el-button> <el-button plain>编辑</el-button>
</router-link> </router-link>
<router-link :to="`/video/view/${row.id}`"> <router-link :to="`/resource/courseware/view/?id=${row.id}`">
<el-button type="primary" plain>查看</el-button> <el-button type="primary" plain>查看</el-button>
</router-link> </router-link>
</el-space> </el-space>
...@@ -76,17 +84,17 @@ const listOptions = { ...@@ -76,17 +84,17 @@ const listOptions = {
<!-- 卡片 --> <!-- 卡片 -->
<template #body="{ data }" v-if="isCard"> <template #body="{ data }" v-if="isCard">
<div class="card-list"> <div class="card-list" v-if="data.length">
<CardListItem v-for="(item, index) in data" :data="item" :key="index"></CardListItem> <CardListItem v-for="(item, index) in data" :data="item" :key="index"></CardListItem>
</div> </div>
<!-- <div class="resource-video-item" v-for="item in data" :key="item.id">{{ item.title }}</div> --> <el-empty v-else description="description" />
</template> </template>
</AppList> </AppList>
</AppCard> </AppCard>
</template> </template>
<style lang="scss"> <style lang="scss">
.card-list{ .card-list {
background: #FAFAFA; background: #fafafa;
padding: 20px; padding: 20px;
display: flex; display: flex;
} }
......
...@@ -7,8 +7,8 @@ export function getVideoList(params?: { type?: string; page?: number; page_size? ...@@ -7,8 +7,8 @@ export function getVideoList(params?: { type?: string; page?: number; page_size?
// 获取字典列表 // 获取字典列表
export function getDictionaryList(params?: { export function getDictionaryList(params?: {
name?: string name?: string
key?: number key?: string
status?: boolean status?: string
created_time_start?: string created_time_start?: string
created_time_end?: string created_time_end?: string
page?: number page?: number
......
...@@ -18,6 +18,7 @@ const listOptions = $computed(() => { ...@@ -18,6 +18,7 @@ const listOptions = $computed(() => {
remote: { remote: {
httpRequest: getDictionaryList, httpRequest: getDictionaryList,
params: { params: {
status: '',
type: '', type: '',
created_time_start: '', created_time_start: '',
created_time_end: '' created_time_end: ''
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论