feat: 新增表格视频预览
This commit is contained in:
parent
7b5bbedbcc
commit
cfc2d54586
|
@ -151,6 +151,14 @@ const adminList = [
|
|||
meta: {
|
||||
title: 'router.PicturePreview'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'table-video-preview',
|
||||
component: 'views/Components/Table/TableVideoPreview',
|
||||
name: 'TableVideoPreview',
|
||||
meta: {
|
||||
title: 'router.tableVideoPreview'
|
||||
}
|
||||
}
|
||||
// {
|
||||
// path: 'ref-table',
|
||||
|
@ -650,6 +658,7 @@ const testList: string[] = [
|
|||
'/components/table/use-table',
|
||||
'/components/table/tree-table',
|
||||
'/components/table/table-image-preview',
|
||||
'/components/table/table-video-preview',
|
||||
'/components/table/ref-table',
|
||||
'/components/editor-demo',
|
||||
'/components/editor-demo/editor',
|
||||
|
|
|
@ -47,7 +47,9 @@ for (let i = 0; i < count; i++) {
|
|||
importance: '@integer(1, 3)',
|
||||
display_time: '@datetime',
|
||||
pageviews: '@integer(100, 500)',
|
||||
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
|
||||
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)'),
|
||||
video_uri:
|
||||
'//sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-720p.mp4'
|
||||
})
|
||||
)
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ import { set, get } from 'lodash-es'
|
|||
import { CSSProperties } from 'vue'
|
||||
import { getSlot } from '@/utils/tsxHelper'
|
||||
import TableActions from './components/TableActions.vue'
|
||||
import { isImgPath } from '@/utils/is'
|
||||
import { VideoPlayer } from '@/components/VideoPlayer'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Table',
|
||||
|
@ -359,14 +361,18 @@ export default defineComponent({
|
|||
const renderPreview = (url: string) => {
|
||||
return (
|
||||
<div class="flex items-center">
|
||||
<ElImage
|
||||
src={url}
|
||||
fit="cover"
|
||||
class="w-[100%] h-100px"
|
||||
lazy
|
||||
preview-src-list={[url]}
|
||||
preview-teleported
|
||||
/>
|
||||
{isImgPath(url) ? (
|
||||
<ElImage
|
||||
src={url}
|
||||
fit="cover"
|
||||
class="w-[100%]"
|
||||
lazy
|
||||
preview-src-list={[url]}
|
||||
preview-teleported
|
||||
/>
|
||||
) : (
|
||||
<VideoPlayer url={url} class="w-full h-full" />
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -179,7 +179,9 @@ export default {
|
|||
request: 'Request',
|
||||
waterfall: 'Waterfall',
|
||||
imageCropping: 'Image cropping',
|
||||
videoPlayer: 'Video player'
|
||||
videoPlayer: 'Video player',
|
||||
// 表格视频预览
|
||||
tableVideoPreview: 'Table video preview'
|
||||
},
|
||||
permission: {
|
||||
hasPermission: 'Please set the operation permission value'
|
||||
|
@ -454,7 +456,8 @@ export default {
|
|||
fixedHeaderOrAuto: 'Fixed header or auto',
|
||||
getSelections: 'Get selections',
|
||||
preview: 'Preview',
|
||||
showOrHiddenSortable: 'Show or hidden sortable'
|
||||
showOrHiddenSortable: 'Show or hidden sortable',
|
||||
videoPreview: 'Video preview'
|
||||
},
|
||||
richText: {
|
||||
richText: 'Rich text',
|
||||
|
|
|
@ -177,7 +177,8 @@ export default {
|
|||
request: '请求',
|
||||
waterfall: '瀑布流',
|
||||
imageCropping: '图片裁剪',
|
||||
videoPlayer: '视频播放器'
|
||||
videoPlayer: '视频播放器',
|
||||
tableVideoPreview: '表格视频预览'
|
||||
},
|
||||
permission: {
|
||||
hasPermission: '请设置操作权限值'
|
||||
|
@ -447,7 +448,8 @@ export default {
|
|||
fixedHeaderOrAuto: '固定头部/自动',
|
||||
getSelections: '获取多选数据',
|
||||
preview: '封面',
|
||||
showOrHiddenSortable: '显示/隐藏排序'
|
||||
showOrHiddenSortable: '显示/隐藏排序',
|
||||
videoPreview: '视频预览'
|
||||
},
|
||||
richText: {
|
||||
richText: '富文本',
|
||||
|
|
|
@ -200,6 +200,14 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [
|
|||
meta: {
|
||||
title: t('router.PicturePreview')
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'table-video-preview',
|
||||
component: () => import('@/views/Components/Table/TableVideoPreview.vue'),
|
||||
name: 'TableVideoPreview',
|
||||
meta: {
|
||||
title: t('router.tableVideoPreview')
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
<script setup lang="tsx">
|
||||
import { ContentWrap } from '@/components/ContentWrap'
|
||||
import { useI18n } from '@/hooks/web/useI18n'
|
||||
import { Table, TableColumn } from '@/components/Table'
|
||||
import { getTableListApi } from '@/api/table'
|
||||
import { TableData } from '@/api/table/types'
|
||||
import { ref } from 'vue'
|
||||
|
||||
interface Params {
|
||||
pageIndex?: number
|
||||
pageSize?: number
|
||||
}
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
const columns: TableColumn[] = [
|
||||
{
|
||||
field: 'title',
|
||||
label: t('tableDemo.title')
|
||||
},
|
||||
{
|
||||
field: 'video_uri',
|
||||
label: t('tableDemo.videoPreview'),
|
||||
width: 400
|
||||
},
|
||||
{
|
||||
field: 'author',
|
||||
label: t('tableDemo.author')
|
||||
},
|
||||
{
|
||||
field: 'display_time',
|
||||
label: t('tableDemo.displayTime')
|
||||
},
|
||||
{
|
||||
field: 'pageviews',
|
||||
label: t('tableDemo.pageviews')
|
||||
}
|
||||
]
|
||||
|
||||
const loading = ref(true)
|
||||
|
||||
let tableDataList = ref<TableData[]>([])
|
||||
|
||||
const getTableList = async (params?: Params) => {
|
||||
const res = await getTableListApi(
|
||||
params || {
|
||||
pageIndex: 1,
|
||||
pageSize: 10
|
||||
}
|
||||
)
|
||||
.catch(() => {})
|
||||
.finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
if (res) {
|
||||
tableDataList.value = res.data.list
|
||||
}
|
||||
}
|
||||
|
||||
getTableList()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ContentWrap :title="t('router.PicturePreview')">
|
||||
<Table
|
||||
:columns="columns"
|
||||
:data="tableDataList"
|
||||
:loading="loading"
|
||||
:preview="['image_uri', 'video_uri']"
|
||||
/>
|
||||
</ContentWrap>
|
||||
</template>
|
Loading…
Reference in New Issue