维修履历样式改成和其他履历一样,适配图片

main
ck-chenkang 1 month ago
parent bd2e645ab3
commit c01cbad539

@ -317,34 +317,54 @@
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }} <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button> </el-button>
</div> </div>
<el-empty v-if="!repairGroups.length" /> <el-empty v-if="!repairStepRows.length" />
<el-collapse v-else v-model="repairActiveNames" class="device-ledger-repair-collapse"> <el-steps
<el-collapse-item v-for="group in repairGroups" :key="group.key" :name="group.key"> v-else
direction="vertical"
class="device-ledger-history-steps"
:active="repairStepRows.length"
>
<el-step v-for="row in repairStepRows" :key="row.key" style="margin-top:8px">
<template #title> <template #title>
<div class="device-ledger-repair-title"> <div class="device-ledger-history-title">
<span class="device-ledger-repair-name">{{ group.name }}</span> <span class="device-ledger-history-time">[{{ row.time }}]</span>
<span class="device-ledger-repair-meta">{{ group.items.length }}</span> <span class="device-ledger-history-operator">
{{ t('EquipmentManagement.DvRepair.acceptedBy') }}: {{ row.operator }}
</span>
</div> </div>
</template> </template>
<template #description>
<div class="device-ledger-history-items"> <div class="device-ledger-history-items">
<div <div class="device-ledger-history-item">
v-for="row in group.items"
:key="String(row.id ?? row.subjectId ?? row.subjectCode)"
class="device-ledger-history-item"
>
<div class="device-ledger-history-item-head"> <div class="device-ledger-history-item-head">
<el-tag type="info" effect="light">{{ row.subjectCode ?? '-' }}</el-tag> <el-tag type="info" effect="light">{{ row.repairCode ?? '-' }}</el-tag>
<span class="device-ledger-history-item-text">{{ row.subjectName ?? '-' }}</span> <span class="device-ledger-history-item-text">{{ row.repairName ?? '-' }}</span>
</div> </div>
<div class="device-ledger-history-item-body"> <div class="device-ledger-history-item-body">
<div class="device-ledger-history-item-row"> <div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.EquipmentLedger.projectName') }}</span> <span class="device-ledger-history-item-label">{{ t('EquipmentManagement.DvRepair.faultPhenomenon') }}</span>
<span class="device-ledger-history-item-value">{{ row.subjectContent ?? '-' }}</span> <span class="device-ledger-history-item-value">{{ row.faultPhenomenon || '-' }}</span>
</div>
<div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.DvRepair.faultDescription') }}</span>
<span class="device-ledger-history-item-value">{{ row.faultDescription || '-' }}</span>
</div>
<div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.DvRepair.handlingMeasures') }}</span>
<span class="device-ledger-history-item-value">{{ row.handlingMeasures || '-' }}</span>
</div>
<div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.DvRepair.replacementParts') }}</span>
<span class="device-ledger-history-item-value">{{ row.replacementParts || '-' }}</span>
</div>
<div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.DvRepair.repairContent') }}</span>
<span class="device-ledger-history-item-value">{{ row.repairContent || '-' }}</span>
</div> </div>
<div class="device-ledger-history-item-row"> <div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.EquipmentLedger.repairResult') }}</span> <span class="device-ledger-history-item-label">{{ t('EquipmentManagement.EquipmentLedger.repairResult') }}</span>
<span class="device-ledger-history-item-value"> <span class="device-ledger-history-item-value">
<el-tag :type="getResultTagType(row.result ?? row.repairResult)"> <el-tag :type="getResultTagType(row.repairResult ?? row.result)">
{{ getResultLabel(row.repairResult ?? row.result) }} {{ getResultLabel(row.repairResult ?? row.result) }}
</el-tag> </el-tag>
</span> </span>
@ -355,28 +375,50 @@
</div> </div>
<div class="device-ledger-history-item-row"> <div class="device-ledger-history-item-row">
<span class="device-ledger-history-item-label">{{ t('EquipmentManagement.EquipmentLedger.finishDate') }}</span> <span class="device-ledger-history-item-label">{{ t('EquipmentManagement.EquipmentLedger.finishDate') }}</span>
<span class="device-ledger-history-item-value">{{ String(formatHistoryTime(row.finishDate)).split(' ')[0] }}</span> <span class="device-ledger-history-item-value">{{ row.time }}</span>
</div> </div>
<div v-if="row.malfunctionImages?.length" class="device-ledger-history-item-images"> <div v-if="row.faultImageList.length" class="device-ledger-history-image-group">
<el-image <div class="device-ledger-history-image-title">{{ t('EquipmentManagement.DvRepair.faultImages') }}</div>
v-for="img in row.malfunctionImages" <div class="device-ledger-history-item-images">
:key="img" <el-image
:src="img" v-for="img in row.faultImageList"
:preview-src-list="row.malfunctionImages" :key="img"
preview-teleported :src="img"
fit="cover" :preview-src-list="row.faultImageList"
class="device-ledger-history-item-image" preview-teleported
> fit="cover"
<template #error> class="device-ledger-history-item-image"
<div class="device-ledger-history-image-error">图片加载失败</div> >
</template> <template #error>
</el-image> <div class="device-ledger-history-image-error">图片加载失败</div>
</template>
</el-image>
</div>
</div>
<div v-if="row.repairedImageList.length" class="device-ledger-history-image-group">
<div class="device-ledger-history-image-title">{{ t('EquipmentManagement.DvRepair.repairedImages') }}</div>
<div class="device-ledger-history-item-images">
<el-image
v-for="img in row.repairedImageList"
:key="img"
:src="img"
:preview-src-list="row.repairedImageList"
preview-teleported
fit="cover"
class="device-ledger-history-item-image"
>
<template #error>
<div class="device-ledger-history-image-error">图片加载失败</div>
</template>
</el-image>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</el-collapse-item> </template>
</el-collapse> </el-step>
</el-steps>
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="t('EquipmentManagement.EquipmentLedger.criticalComponent')" name="criticalComponent"> <el-tab-pane :label="t('EquipmentManagement.EquipmentLedger.criticalComponent')" name="criticalComponent">
@ -731,6 +773,10 @@ type RepairHistoryRow = {
repairId?: any repairId?: any
repairCode?: any repairCode?: any
repairName?: any repairName?: any
acceptedBy?: any
confirmBy?: any
creator?: any
creatorName?: any
subjectId?: any subjectId?: any
subjectCode?: any subjectCode?: any
subjectName?: any subjectName?: any
@ -739,41 +785,43 @@ type RepairHistoryRow = {
malfunction?: any malfunction?: any
malfunctionUrl?: any malfunctionUrl?: any
repairDes?: any repairDes?: any
faultPhenomenon?: any
faultDescription?: any
faultImages?: any
handlingMeasures?: any
replacementParts?: any
repairContent?: any
repairedImages?: any
remark?: any remark?: any
createTime?: any createTime?: any
finishDate?: any finishDate?: any
result?: any result?: any
repairResult?: any repairResult?: any
malfunctionImages?: string[]
} }
type RepairHistoryGroup = { key: string; name: string; items: RepairHistoryRow[] } type RepairHistoryStepRow = RepairHistoryRow & {
key: string
time: string
operator: string
faultImageList: string[]
repairedImageList: string[]
}
const repairActiveNames = ref<string[]>([])
const repairList = ref<RepairHistoryRow[]>([]) const repairList = ref<RepairHistoryRow[]>([])
const repairGroups = computed<RepairHistoryGroup[]>(() => { const repairStepRows = computed<RepairHistoryStepRow[]>(() => {
const groupsMap = new Map<string, RepairHistoryGroup>() return (repairList.value ?? [])
for (const row of repairList.value ?? []) { .map((row) => {
const key = String(row.repairCode ?? row.repairId ?? row.subjectName ?? '-') const time = formatHistoryTime(row.finishDate ?? row.createTime)
if (!groupsMap.has(key)) { return {
groupsMap.set(key, { ...row,
key, key: String(row.id ?? row.repairId ?? row.repairCode ?? `${row.repairName ?? '-'}__${time}`),
name: String(row.repairName ?? row.repairCode ?? key), time,
items: [] operator: String(row.acceptedBy ?? row.confirmBy ?? row.creatorName ?? row.creator ?? '-'),
}) faultImageList: parseImages(row.faultImages),
} repairedImageList: parseImages(row.repairedImages)
const group = groupsMap.get(key)! }
group.items.push({
...row,
malfunctionImages: parseImages(row?.malfunctionUrl)
}) })
} .sort((a, b) => String(b.time).localeCompare(String(a.time)))
const groups = Array.from(groupsMap.values()).filter((g) => g.items.length)
return groups.sort((a, b) => {
const at = formatHistoryTime(a.items?.[0]?.finishDate ?? a.items?.[0]?.createTime)
const bt = formatHistoryTime(b.items?.[0]?.finishDate ?? b.items?.[0]?.createTime)
return String(bt).localeCompare(String(at))
})
}) })
const inspectionExportLoading = ref(false) const inspectionExportLoading = ref(false)
@ -943,8 +991,6 @@ const getDetail = async () => {
await fetchInspectionHistory() await fetchInspectionHistory()
await fetchMaintainHistory() await fetchMaintainHistory()
await fetchRepairHistory() await fetchRepairHistory()
const keys = repairGroups.value.map((g) => g.key)
repairActiveNames.value = keys.length ? [keys[0]] : []
} finally { } finally {
detailLoading.value = false detailLoading.value = false
} }
@ -1217,6 +1263,16 @@ onMounted(async () => {
margin-top: 4px; margin-top: 4px;
} }
.device-ledger-history-image-group {
margin-top: 4px;
}
.device-ledger-history-image-title {
margin-bottom: 6px;
color: var(--el-text-color-secondary);
font-size: 13px;
}
.device-ledger-history-item-image { .device-ledger-history-item-image {
width: 76px; width: 76px;
height: 76px; height: 76px;
@ -1235,27 +1291,6 @@ onMounted(async () => {
justify-content: center; justify-content: center;
} }
.device-ledger-repair-collapse {
padding: 8px 8px 0;
}
.device-ledger-repair-title {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.device-ledger-repair-name {
font-weight: 600;
color: var(--el-text-color-primary);
}
.device-ledger-repair-meta {
font-size: 12px;
color: var(--el-text-color-secondary);
}
.device-ledger-history-item-text { .device-ledger-history-item-text {
color: var(--el-text-color-regular); color: var(--el-text-color-regular);
} }

Loading…
Cancel
Save