限制验收图片列表展示

This commit is contained in:
yml2213
2026-08-15 15:10:39 +08:00
parent 4eb9aa2cd8
commit 3a29226077
4 changed files with 24 additions and 3 deletions
@@ -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 ? (
+5
View File
@@ -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%;
} }