feat: 订单资料图片完整展示与打手快捷复制
- 修复资料截图 URL 过期问题:读取工单时统一重签截图访问链接(后台/打手端/收集页) - 修复后台手动补资料截图从未保存的问题(提交真实上传列表) - 收集页提交后回显已上传截图,补资料弹窗重开回显已有截图 - 打手端我的订单新增快捷复制:复制信息(多行标签:值)+ 一键复制图片(JPEG 自动转 PNG) - 快捷复制列与后台资料列同款展示:全字段逐行 + 截图缩略图 - 后台接单工单资料列优化:显示全部字段与截图缩略图 - 详情抽屉移除冗余的资料要求卡片
This commit is contained in:
@@ -102,7 +102,6 @@ import {
|
||||
getRequirementFields,
|
||||
renderDetailFieldValues,
|
||||
renderMaterialSummary,
|
||||
renderRequirementFieldValues,
|
||||
asRecord,
|
||||
formatMoney,
|
||||
formatSharingShareStatus,
|
||||
@@ -332,17 +331,14 @@ export default function WorkOrdersPanel() {
|
||||
resolutionForm.resetFields()
|
||||
}
|
||||
|
||||
async function submitMaterial(values: {
|
||||
fields?: Record<string, string>
|
||||
screenshots?: UploadedFile[]
|
||||
}) {
|
||||
async function submitMaterial(values: { fields?: Record<string, string> }) {
|
||||
if (!materialOrder) return
|
||||
const succeeded = await runAction(
|
||||
() =>
|
||||
submitAdminWorkOrderMaterial(
|
||||
materialOrder.workOrderId,
|
||||
values.fields || {},
|
||||
values.screenshots || [],
|
||||
materialScreenshots,
|
||||
),
|
||||
'订单资料已保存',
|
||||
)
|
||||
@@ -367,7 +363,7 @@ export default function WorkOrdersPanel() {
|
||||
function openMaterialModal(row: WorkOrder) {
|
||||
setMaterialOrder(row)
|
||||
materialForm.setFieldsValue({ fields: getMaterialFields(row) })
|
||||
setMaterialScreenshots([])
|
||||
setMaterialScreenshots(getMaterialScreenshots(row))
|
||||
}
|
||||
|
||||
function openDetailDrawer(row: WorkOrder) {
|
||||
@@ -590,7 +586,7 @@ export default function WorkOrdersPanel() {
|
||||
},
|
||||
{
|
||||
title: '资料',
|
||||
width: 160,
|
||||
width: 240,
|
||||
render: (_, row) => renderMaterialSummary(row),
|
||||
},
|
||||
{
|
||||
@@ -929,10 +925,6 @@ export default function WorkOrdersPanel() {
|
||||
</div>
|
||||
</Card>
|
||||
|
||||
<Card title="资料要求" size="small">
|
||||
{renderRequirementFieldValues(detailOrder)}
|
||||
</Card>
|
||||
|
||||
<Card title="验收信息" size="small">
|
||||
<div className="worker-order-detail-stack">
|
||||
<Descriptions column={{ xs: 1, md: 2 }} bordered size="small">
|
||||
@@ -1190,6 +1182,7 @@ export default function WorkOrdersPanel() {
|
||||
setMaterialOrder(null)
|
||||
setMaterialPasteText('')
|
||||
materialForm.resetFields()
|
||||
setMaterialScreenshots([])
|
||||
}}
|
||||
onOk={() => materialForm.submit()}
|
||||
destroyOnHidden
|
||||
|
||||
@@ -142,21 +142,20 @@ export function renderMaterialSummary(order: WorkOrder) {
|
||||
const entries = Object.entries(fields).filter(([, value]) =>
|
||||
String(value || '').trim(),
|
||||
)
|
||||
if (entries.length === 0) {
|
||||
const screenshots = getMaterialScreenshots(order)
|
||||
if (entries.length === 0 && screenshots.length === 0) {
|
||||
return <Typography.Text type="secondary">-</Typography.Text>
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="cell-stack">
|
||||
{entries.slice(0, 2).map(([key, value]) => (
|
||||
<Typography.Text key={key} ellipsis>
|
||||
{entries.map(([key, value]) => (
|
||||
<Typography.Text key={key} style={{ fontSize: 12 }} ellipsis>
|
||||
{fieldLabelMap.get(key) || key}: {value}
|
||||
</Typography.Text>
|
||||
))}
|
||||
{entries.length > 2 ? (
|
||||
<Typography.Text type="secondary">
|
||||
还有 {entries.length - 2} 项
|
||||
</Typography.Text>
|
||||
{screenshots.length > 0 ? (
|
||||
<ImagePreviewList files={screenshots} size={36} />
|
||||
) : null}
|
||||
</div>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user