Skip to content

Commit

Permalink
perf: 表格组件预览字段拆分
Browse files Browse the repository at this point in the history
  • Loading branch information
kailong321200875 committed Jan 6, 2024
1 parent c2dde25 commit 8c5858e
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 31 deletions.
17 changes: 12 additions & 5 deletions mock/table/index.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ for (let i = 0; i < count; i++) {
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)'),
children: [
{
id: toAnyString(),
Expand All @@ -76,6 +77,7 @@ for (let i = 0; i < count; i++) {
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)'),
children: [
{
id: toAnyString(),
Expand All @@ -85,7 +87,8 @@ for (let i = 0; i < count; i++) {
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
},
{
id: toAnyString(),
Expand All @@ -95,7 +98,8 @@ for (let i = 0; i < count; i++) {
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
}
]
},
Expand All @@ -107,7 +111,8 @@ for (let i = 0; i < count; i++) {
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
},
{
id: toAnyString(),
Expand All @@ -117,7 +122,8 @@ for (let i = 0; i < count; i++) {
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
},
{
id: toAnyString(),
Expand All @@ -127,7 +133,8 @@ for (let i = 0; i < count; i++) {
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
pageviews: '@integer(300, 5000)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
}
]
// image_uri
Expand Down
49 changes: 28 additions & 21 deletions src/components/Table/src/Table.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ 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 { createVideoViewer } from '@/components/VideoPlayer'
import { Icon } from '@/components/Icon'
import { BaseButton } from '@/components/Button'
Expand Down Expand Up @@ -59,8 +58,13 @@ export default defineComponent({
type: Array as PropType<Recordable[]>,
default: () => []
},
// 是否自动预览
preview: {
// 图片自动预览字段数组
imagePreview: {
type: Array as PropType<string[]>,
default: () => []
},
// 视频自动预览字段数组
videoPreview: {
type: Array as PropType<string[]>,
default: () => []
},
Expand Down Expand Up @@ -339,7 +343,8 @@ export default defineComponent({
})
const renderTreeTableColumn = (columnsChildren: TableColumn[]) => {
const { align, headerAlign, showOverflowTooltip, preview } = unref(getProps)
const { align, headerAlign, showOverflowTooltip, imagePreview, videoPreview } =
unref(getProps)
return columnsChildren.map((v) => {
if (v.hidden) return null
const props = { ...v } as any
Expand All @@ -350,19 +355,19 @@ export default defineComponent({
const slots = {
default: (...args: any[]) => {
const data = args[0]
let isImageUrl = false
if (preview.length) {
isImageUrl = preview.some((item) => (item as string) === v.field)
}
let isPreview = false
isPreview =
imagePreview.some((item) => (item as string) === v.field) ||
videoPreview.some((item) => (item as string) === v.field)
return children && children.length
? renderTreeTableColumn(children)
: props?.slots?.default
? props.slots.default(...args)
: v?.formatter
? v?.formatter?.(data.row, data.column, get(data.row, v.field), data.$index)
: isImageUrl
? renderPreview(get(data.row, v.field))
: isPreview
? renderPreview(get(data.row, v.field), v.field)
: get(data.row, v.field)
}
}
Expand All @@ -384,10 +389,11 @@ export default defineComponent({
})
}
const renderPreview = (url: string) => {
const renderPreview = (url: string, field: string) => {
const { imagePreview, videoPreview } = unref(getProps)
return (
<div class="flex items-center">
{isImgPath(url) ? (
{imagePreview.includes(field) ? (
<ElImage
src={url}
fit="cover"
Expand All @@ -396,7 +402,7 @@ export default defineComponent({
preview-src-list={[url]}
preview-teleported
/>
) : (
) : videoPreview.includes(field) ? (
<BaseButton
type="primary"
icon={<Icon icon="ep:video-play" />}
Expand All @@ -408,7 +414,7 @@ export default defineComponent({
>
预览
</BaseButton>
)}
) : null}
</div>
)
}
Expand All @@ -423,7 +429,8 @@ export default defineComponent({
headerAlign,
showOverflowTooltip,
reserveSelection,
preview
imagePreview,
videoPreview
} = unref(getProps)
return (columnsChildren || columns).map((v) => {
Expand Down Expand Up @@ -463,19 +470,19 @@ export default defineComponent({
default: (...args: any[]) => {
const data = args[0]
let isImageUrl = false
if (preview.length) {
isImageUrl = preview.some((item) => (item as string) === v.field)
}
let isPreview = false
isPreview =
imagePreview.some((item) => (item as string) === v.field) ||
videoPreview.some((item) => (item as string) === v.field)
return children && children.length
? renderTreeTableColumn(children)
: props?.slots?.default
? props.slots.default(...args)
: v?.formatter
? v?.formatter?.(data.row, data.column, get(data.row, v.field), data.$index)
: isImageUrl
? renderPreview(get(data.row, v.field))
: isPreview
? renderPreview(get(data.row, v.field), v.field)
: get(data.row, v.field)
}
}
Expand Down
3 changes: 0 additions & 3 deletions src/utils/is.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,6 @@ export const isDark = (): boolean => {

// 是否是图片链接
export const isImgPath = (path: string): boolean => {
if (path.includes('picsum.photos') || path.includes('loremflickr.com')) {
return true
}
return /(https?:\/\/|data:image\/).*?\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path)
}

Expand Down
7 changes: 6 additions & 1 deletion src/views/Components/Table/TableImagePreview.vue
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ getTableList()

<template>
<ContentWrap :title="t('router.PicturePreview')">
<Table :columns="columns" :data="tableDataList" :loading="loading" :preview="['image_uri']" />
<Table
:columns="columns"
:data="tableDataList"
:loading="loading"
:image-preview="['image_uri']"
/>
</ContentWrap>
</template>
2 changes: 1 addition & 1 deletion src/views/Components/Table/TableVideoPreview.vue
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ getTableList()
:columns="columns"
:data="tableDataList"
:loading="loading"
:preview="['image_uri', 'video_uri']"
:video-preview="['image_uri', 'video_uri']"
/>
</ContentWrap>
</template>

0 comments on commit 8c5858e

Please sign in to comment.