工单归档

This commit is contained in:
menxipeng
2025-11-03 22:45:22 +08:00
parent fe99a6f15e
commit bdc61b6285

View File

@@ -35,8 +35,14 @@ interface ArchivedWorkOrder {
otherImg: string; otherImg: string;
repairImg: string; repairImg: string;
repairVideo: string; repairVideo: string;
sVideo: string;
needRepair: boolean; needRepair: boolean;
equNormal: boolean; equNormal: boolean;
equId: string;
equipmentModel: string;
brand: string;
reformType: string;
remark: string;
} }
export default function WorkOrderArchivePage() { export default function WorkOrderArchivePage() {
@@ -298,7 +304,7 @@ export default function WorkOrderArchivePage() {
<Eye className="h-4 w-4 mr-1" /> <Eye className="h-4 w-4 mr-1" />
</Button> </Button>
{(order.workOrderType === "厨房自动灭火设备" || order.workOrderType === "设备安装" || order.workOrderType === "设备检测") && ( {((order.equipmentName?.includes("厨房自动灭火") || order.equipmentName === "厨房自动灭火设备") && (order.workOrderType === "设备安装" || order.workOrderType === "设备检测" || order.workOrderType === "设备改造" || order.workOrderType === "设备维修" || order.workOrderType === "故障维修" || order.workOrderType === "设备拆除" || order.workOrderType === "更换药剂")) && (
<Button variant="outline" size="sm" onClick={() => handleDownloadReport(order.workOrderNumber)}> <Button variant="outline" size="sm" onClick={() => handleDownloadReport(order.workOrderNumber)}>
<FileDown className="h-4 w-4 mr-1" /> <FileDown className="h-4 w-4 mr-1" />
@@ -394,106 +400,457 @@ export default function WorkOrderArchivePage() {
<p className="text-sm text-gray-600"></p> <p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.merchantAddress}</p> <p className="font-medium">{selectedOrder.merchantAddress}</p>
</div> </div>
{/* 厨房自动灭火设备特有字段 - 在原有字段基础上增加 */}
{(selectedOrder.equipmentName?.includes("厨房自动灭火") || selectedOrder.equipmentName === "厨房自动灭火设备") &&
(selectedOrder.workOrderType === "设备安装" || selectedOrder.workOrderType === "设备检测" || selectedOrder.workOrderType === "设备改造" || selectedOrder.workOrderType === "设备维修" || selectedOrder.workOrderType === "故障维修" || selectedOrder.workOrderType === "设备拆除" || selectedOrder.workOrderType === "更换药剂") && (
<>
{selectedOrder.equId && (
<div>
<p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.equId}</p>
</div>
)}
{selectedOrder.equipmentModel && (
<div>
<p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.equipmentModel}</p>
</div>
)}
{selectedOrder.brand && (
<div>
<p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.brand}</p>
</div>
)}
{selectedOrder.reformType && (
<div>
<p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.reformType}</p>
</div>
)}
{selectedOrder.remark && (
<div className="col-span-2">
<p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.remark}</p>
</div>
)}
</>
)}
{/* 动火离人设备特有字段 */}
{(selectedOrder.equipmentName?.includes("动火离人") || selectedOrder.equipmentType === "fire_extinguisher") && selectedOrder.remark && (
<div className="col-span-2">
<p className="text-sm text-gray-600"></p>
<p className="font-medium">{selectedOrder.remark}</p>
</div>
)}
</div> </div>
</CardContent> </CardContent>
</Card> </Card>
{/* Photos */} {/* Photos and Videos */}
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle className="text-lg"></CardTitle> <CardTitle className="text-lg"></CardTitle>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<div className="space-y-4"> <div className="space-y-4">
{selectedOrder.frontImg && ( {/* 厨房自动灭火设备 + 设备维修/设备改造/故障维修/设备拆除 的特殊显示 */}
<div> {(selectedOrder.equipmentName?.includes("厨房自动灭火") || selectedOrder.equipmentName === "厨房自动灭火设备") &&
<p className="text-sm text-gray-600 mb-2"></p> (selectedOrder.workOrderType === "设备维修" || selectedOrder.workOrderType === "设备改造" || selectedOrder.workOrderType === "故障维修" || selectedOrder.workOrderType === "设备拆除") ? (
<div className="grid grid-cols-4 gap-2"> <>
{selectedOrder.frontImg.split(',').filter(url => url.trim()).map((photo, index) => ( {/* 显示模式提示 */}
<img <div className="bg-blue-50 border border-blue-200 rounded p-3 mb-2">
key={index} <p className="text-sm text-blue-700">
src={photo || "/placeholder.svg"} 📌 ///
alt={`正面照 ${index + 1}`} </p>
className="w-full h-32 object-cover rounded border"
/>
))}
</div> </div>
</div>
)} {/* 视频 */}
{selectedOrder.openImg && ( <div>
<div> <p className="text-sm text-gray-600 mb-2"></p>
<p className="text-sm text-gray-600 mb-2"></p> {(selectedOrder.sVideo || selectedOrder.repairVideo) ? (
<div className="grid grid-cols-4 gap-2"> <div className="grid grid-cols-3 gap-2">
{selectedOrder.openImg.split(',').filter(url => url.trim()).map((photo, index) => ( {selectedOrder.sVideo && selectedOrder.sVideo.split(',').filter(url => url.trim()).map((video, index) => (
<img <video
key={index} key={`s-${index}`}
src={photo || "/placeholder.svg"} src={`${API_BASE_URL}${video}`}
alt={`开箱照 ${index + 1}`} controls
className="w-full h-32 object-cover rounded border" className="w-full h-48 rounded border"
/> >
))}
</video>
))}
{selectedOrder.repairVideo && selectedOrder.repairVideo.split(',').filter(url => url.trim()).map((video, index) => (
<video
key={`r-${index}`}
src={`${API_BASE_URL}${video}`}
controls
className="w-full h-48 rounded border"
>
</video>
))}
</div>
) : (
<p className="text-sm text-gray-500"></p>
)}
</div> </div>
</div>
)} {/* 其他照片 */}
{selectedOrder.ropeReImg && ( <div>
<div> <p className="text-sm text-gray-600 mb-2"></p>
<p className="text-sm text-gray-600 mb-2"></p> {selectedOrder.otherImg ? (
<div className="grid grid-cols-4 gap-2"> <div className="grid grid-cols-4 gap-2">
{selectedOrder.ropeReImg.split(',').filter(url => url.trim()).map((photo, index) => ( {selectedOrder.otherImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img <img
key={index} key={index}
src={photo || "/placeholder.svg"} src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`绳索恢复 ${index + 1}`} alt={`其他照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border" className="w-full h-32 object-cover rounded border"
/> />
))} ))}
</div>
) : (
<p className="text-sm text-gray-500"></p>
)}
</div> </div>
</div> </>
)} ) : (selectedOrder.equipmentName?.includes("厨房自动灭火") || selectedOrder.equipmentName === "厨房自动灭火设备") &&
{selectedOrder.hostReImg && ( selectedOrder.workOrderType === "更换药剂" ? (
<div> <>
<p className="text-sm text-gray-600 mb-2"></p> {/* 显示模式提示 */}
<div className="grid grid-cols-4 gap-2"> <div className="bg-green-50 border border-green-200 rounded p-3 mb-2">
{selectedOrder.hostReImg.split(',').filter(url => url.trim()).map((photo, index) => ( <p className="text-sm text-green-700">
<img 📌
key={index} </p>
src={photo || "/placeholder.svg"}
alt={`主机恢复 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div> </div>
</div>
)} {/* 正面照 */}
{selectedOrder.otherImg && ( {selectedOrder.frontImg && (
<div> <div>
<p className="text-sm text-gray-600 mb-2"></p> <p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2"> <div className="grid grid-cols-4 gap-2">
{selectedOrder.otherImg.split(',').filter(url => url.trim()).map((photo, index) => ( {selectedOrder.frontImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img <img
key={index} key={index}
src={photo || "/placeholder.svg"} src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`其他照片 ${index + 1}`} alt={`正面照 ${index + 1}`}
className="w-full h-32 object-cover rounded border" className="w-full h-32 object-cover rounded border"
/> />
))} ))}
</div>
</div>
)}
{/* 开箱照 */}
{selectedOrder.openImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.openImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`开箱照 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 灌药剂照片 */}
{selectedOrder.ropeReImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.ropeReImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`灌药剂照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 主机恢复照 */}
{selectedOrder.hostReImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.hostReImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`主机恢复照 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 其他照片 */}
{selectedOrder.otherImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.otherImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`其他照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
</>
) : (selectedOrder.equipmentName?.includes("动火离人") || selectedOrder.equipmentType === "fire_extinguisher") ? (
<>
{/* 显示模式提示 */}
<div className="bg-purple-50 border border-purple-200 rounded p-3 mb-2">
<p className="text-sm text-purple-700">
📌
</p>
</div> </div>
</div>
)} {/* 主机照片 */}
{selectedOrder.repairImg && ( {selectedOrder.frontImg && (
<div> <div>
<p className="text-sm text-gray-600 mb-2"></p> <p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2"> <div className="grid grid-cols-4 gap-2">
{selectedOrder.repairImg.split(',').filter(url => url.trim()).map((photo, index) => ( {selectedOrder.frontImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img <img
key={index} key={index}
src={photo || "/placeholder.svg"} src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`维修照片 ${index + 1}`} alt={`主机照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border" className="w-full h-32 object-cover rounded border"
/> />
))} ))}
</div> </div>
</div> </div>
)}
{/* 配电箱照片 */}
{selectedOrder.openImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.openImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`配电箱照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 测试视频 */}
{selectedOrder.sVideo && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-3 gap-2">
{selectedOrder.sVideo.split(',').filter(url => url.trim()).map((video, index) => (
<video
key={index}
src={`${API_BASE_URL}${video}`}
controls
className="w-full h-48 rounded border"
>
</video>
))}
</div>
</div>
)}
{/* 探头安装位置照片 */}
{selectedOrder.ropeReImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.ropeReImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`探头安装位置照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 其他照片 */}
{selectedOrder.otherImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.otherImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`其他照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
</>
) : (
<>
{/* 常规显示 */}
{selectedOrder.frontImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.frontImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`正面照 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{selectedOrder.openImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.openImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`开箱照 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 厨房自动灭火设备特有的剪断视频 */}
{selectedOrder.equipmentName === "厨房自动灭火设备" &&
(selectedOrder.workOrderType === "设备安装" || selectedOrder.workOrderType === "设备检测") && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
{selectedOrder.sVideo ? (
<div className="grid grid-cols-3 gap-2">
{selectedOrder.sVideo.split(',').filter(url => url.trim()).map((video, index) => (
<video
key={index}
src={`${API_BASE_URL}${video}`}
controls
className="w-full h-48 rounded border"
>
</video>
))}
</div>
) : (
<p className="text-sm text-gray-500"></p>
)}
</div>
)}
{selectedOrder.ropeReImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.ropeReImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`绳索恢复 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{selectedOrder.hostReImg && (
<div>
<p className="text-sm text-gray-600 mb-2">/</p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.hostReImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`主机恢复 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{selectedOrder.otherImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.otherImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`其他照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{selectedOrder.repairImg && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
<div className="grid grid-cols-4 gap-2">
{selectedOrder.repairImg.split(',').filter(url => url.trim()).map((photo, index) => (
<img
key={index}
src={`${API_BASE_URL}${photo}` || "/placeholder.svg"}
alt={`维修照片 ${index + 1}`}
className="w-full h-32 object-cover rounded border"
/>
))}
</div>
</div>
)}
{/* 厨房自动灭火设备特有的维修视频 */}
{selectedOrder.equipmentName === "厨房自动灭火设备" &&
(selectedOrder.workOrderType === "设备安装" || selectedOrder.workOrderType === "设备检测") && (
<div>
<p className="text-sm text-gray-600 mb-2"></p>
{selectedOrder.repairVideo ? (
<div className="grid grid-cols-3 gap-2">
{selectedOrder.repairVideo.split(',').filter(url => url.trim()).map((video, index) => (
<video
key={index}
src={`${API_BASE_URL}${video}`}
controls
className="w-full h-48 rounded border"
>
</video>
))}
</div>
) : (
<p className="text-sm text-gray-500"></p>
)}
</div>
)}
</>
)} )}
</div> </div>
</CardContent> </CardContent>