限制验收图片列表展示
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import { Image, Typography } from 'antd'
|
import { Image, Typography } from 'antd'
|
||||||
|
import { useState } from 'react'
|
||||||
|
|
||||||
import type { UploadedFile } from '@/types/worker-platform'
|
import type { UploadedFile } from '@/types/worker-platform'
|
||||||
import { getImageIdentityFromUrl } from '@/utils/image-identity'
|
import { getImageIdentityFromUrl } from '@/utils/image-identity'
|
||||||
@@ -7,22 +8,28 @@ type ImagePreviewListProps = {
|
|||||||
files?: UploadedFile[]
|
files?: UploadedFile[]
|
||||||
imageUrls?: string[]
|
imageUrls?: string[]
|
||||||
size?: number
|
size?: number
|
||||||
|
maxVisible?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ImagePreviewList({
|
export default function ImagePreviewList({
|
||||||
files = [],
|
files = [],
|
||||||
imageUrls = [],
|
imageUrls = [],
|
||||||
size = 56,
|
size = 56,
|
||||||
|
maxVisible,
|
||||||
}: ImagePreviewListProps) {
|
}: ImagePreviewListProps) {
|
||||||
|
const [expanded, setExpanded] = useState(false)
|
||||||
const items = normalizePreviewItems(files, imageUrls)
|
const items = normalizePreviewItems(files, imageUrls)
|
||||||
if (items.length === 0) {
|
if (items.length === 0) {
|
||||||
return <Typography.Text type="secondary">-</Typography.Text>
|
return <Typography.Text type="secondary">-</Typography.Text>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const hasHiddenItems = Boolean(maxVisible && items.length > maxVisible)
|
||||||
|
const visibleItems = hasHiddenItems && !expanded ? items.slice(0, maxVisible) : items
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Image.PreviewGroup>
|
<Image.PreviewGroup>
|
||||||
<div className="image-preview-list">
|
<div className="image-preview-list">
|
||||||
{items.map((item) => (
|
{visibleItems.map((item) => (
|
||||||
<Image
|
<Image
|
||||||
key={item.url}
|
key={item.url}
|
||||||
src={item.thumbnailUrl || item.url}
|
src={item.thumbnailUrl || item.url}
|
||||||
@@ -32,6 +39,14 @@ export default function ImagePreviewList({
|
|||||||
className="image-preview-item"
|
className="image-preview-item"
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
{hasHiddenItems ? (
|
||||||
|
<Typography.Link
|
||||||
|
className="image-preview-more"
|
||||||
|
onClick={() => setExpanded((value) => !value)}
|
||||||
|
>
|
||||||
|
{expanded ? '收起' : `查看全部(${items.length})`}
|
||||||
|
</Typography.Link>
|
||||||
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
</Image.PreviewGroup>
|
</Image.PreviewGroup>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -644,6 +644,7 @@ export default function WorkOrdersPanel() {
|
|||||||
files={getAcceptanceFiles(row)}
|
files={getAcceptanceFiles(row)}
|
||||||
imageUrls={getAcceptanceImageUrls(row)}
|
imageUrls={getAcceptanceImageUrls(row)}
|
||||||
size={44}
|
size={44}
|
||||||
|
maxVisible={2}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -342,7 +342,7 @@ export default function WorkerOrdersPage() {
|
|||||||
return (
|
return (
|
||||||
<div className="cell-stack">
|
<div className="cell-stack">
|
||||||
{hasAcceptance ? (
|
{hasAcceptance ? (
|
||||||
<ImagePreviewList files={acceptanceFiles} size={38} />
|
<ImagePreviewList files={acceptanceFiles} size={38} maxVisible={2} />
|
||||||
) : null}
|
) : null}
|
||||||
{submittedAt ? (
|
{submittedAt ? (
|
||||||
<Typography.Text type="secondary" style={{ fontSize: 12 }}>
|
<Typography.Text type="secondary" style={{ fontSize: 12 }}>
|
||||||
@@ -354,7 +354,7 @@ export default function WorkerOrdersPage() {
|
|||||||
<Tag color="processing" icon={<PictureOutlined />}>
|
<Tag color="processing" icon={<PictureOutlined />}>
|
||||||
已暂存 {draftCount} 张图片
|
已暂存 {draftCount} 张图片
|
||||||
</Tag>
|
</Tag>
|
||||||
<ImagePreviewList files={draftFiles} size={38} />
|
<ImagePreviewList files={draftFiles} size={38} maxVisible={2} />
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
{getWorkerAcceptance(row)?.note ? (
|
{getWorkerAcceptance(row)?.note ? (
|
||||||
|
|||||||
@@ -2487,6 +2487,11 @@ select {
|
|||||||
background: #f8fafc;
|
background: #f8fafc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.image-preview-more {
|
||||||
|
font-size: 12px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
.worker-rule-form {
|
.worker-rule-form {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user