|
|
|
|
@ -129,18 +129,25 @@
|
|
|
|
|
<span v-else>-</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column :label="t('MoldManagement.MoldBrandPage.image')" align="center" prop="images" width="110">
|
|
|
|
|
<el-table-column :label="t('MoldManagement.MoldBrandPage.image')" align="center" prop="images" min-width="260">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<UploadImg
|
|
|
|
|
<div
|
|
|
|
|
v-if="ticketResultEditable"
|
|
|
|
|
v-model="scope.row.images"
|
|
|
|
|
:drag="false"
|
|
|
|
|
:show-btn-text="false"
|
|
|
|
|
width="56px"
|
|
|
|
|
height="56px"
|
|
|
|
|
/>
|
|
|
|
|
v-loading="isTicketResultImageUploading(scope.row)"
|
|
|
|
|
element-loading-text="上传中"
|
|
|
|
|
class="ticket-result-images"
|
|
|
|
|
:class="{ 'is-full': getTicketResultImages(scope.row).length >= 3 }"
|
|
|
|
|
>
|
|
|
|
|
<UploadImgs
|
|
|
|
|
v-model="scope.row.images"
|
|
|
|
|
:limit="3"
|
|
|
|
|
width="56px"
|
|
|
|
|
height="56px"
|
|
|
|
|
@uploading-change="setTicketResultImageUploading(scope.row, $event)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<el-image
|
|
|
|
|
v-else-if="scope.row.images"
|
|
|
|
|
v-else-if="parseImages(scope.row.images).length"
|
|
|
|
|
:src="parseFirstImage(scope.row.images)"
|
|
|
|
|
:preview-src-list="parseImages(scope.row.images)"
|
|
|
|
|
preview-teleported
|
|
|
|
|
@ -382,7 +389,7 @@
|
|
|
|
|
|
|
|
|
|
<div class="mold-maintain-page__form-actions">
|
|
|
|
|
<el-button @click="emit('back')">{{ t('MoldManagement.MoldBrandPage.cancel') }}</el-button>
|
|
|
|
|
<el-button type="primary" @click="submitForm" :loading="submitLoading">{{ t('MoldManagement.MoldBrandPage.submit') }}</el-button>
|
|
|
|
|
<el-button type="primary" @click="submitForm" :loading="submitLoading" :disabled="isInspectOrMaintain && hasTicketResultImageUploading">{{ t('MoldManagement.MoldBrandPage.submit') }}</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
@ -573,6 +580,12 @@ const replaceNetFormData = reactive({
|
|
|
|
|
remark: undefined as string | undefined
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const getCurrentDateTime = () => {
|
|
|
|
|
const date = new Date()
|
|
|
|
|
const pad = (value: number) => String(value).padStart(2, '0')
|
|
|
|
|
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 子模具下拉选项
|
|
|
|
|
const subMoldList = ref<any[]>([])
|
|
|
|
|
const subMoldLoading = ref(false)
|
|
|
|
|
@ -652,6 +665,32 @@ const subjectLoadingMap = ref<Record<string, boolean>>({})
|
|
|
|
|
const ticketResultList = ref<any[]>([])
|
|
|
|
|
const ticketResultEditable = ref(false)
|
|
|
|
|
const ticketResultBackup = ref<any[] | null>(null)
|
|
|
|
|
const ticketResultImageUploadingMap = reactive<Record<string, boolean>>({})
|
|
|
|
|
const hasTicketResultImageUploading = computed(() => Object.values(ticketResultImageUploadingMap).some(Boolean))
|
|
|
|
|
|
|
|
|
|
const getTicketResultImageKey = (row: any) => String(row?.id ?? row?.subjectId ?? row?.sort ?? '')
|
|
|
|
|
|
|
|
|
|
const setTicketResultImageUploading = (row: any, value: boolean) => {
|
|
|
|
|
const key = getTicketResultImageKey(row)
|
|
|
|
|
if (!key) return
|
|
|
|
|
if (value) {
|
|
|
|
|
ticketResultImageUploadingMap[key] = true
|
|
|
|
|
} else {
|
|
|
|
|
delete ticketResultImageUploadingMap[key]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const isTicketResultImageUploading = (row: any) => {
|
|
|
|
|
const key = getTicketResultImageKey(row)
|
|
|
|
|
return !!ticketResultImageUploadingMap[key]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const clearTicketResultImageUploading = () => {
|
|
|
|
|
for (const key of Object.keys(ticketResultImageUploadingMap)) {
|
|
|
|
|
delete ticketResultImageUploadingMap[key]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleTicketResultEditToggle = () => {
|
|
|
|
|
if (ticketResultEditable.value) {
|
|
|
|
|
// 取消编辑,恢复备份
|
|
|
|
|
@ -741,6 +780,7 @@ const ensureSubjectListLoaded = async (planId: number | string) => {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const setTicketResultList = (subjectList: any[]) => {
|
|
|
|
|
clearTicketResultImageUploading()
|
|
|
|
|
ticketResultList.value = (subjectList ?? []).map((item: any, index: number) => ({
|
|
|
|
|
id: item.id,
|
|
|
|
|
subjectId: item.id,
|
|
|
|
|
@ -750,7 +790,7 @@ const setTicketResultList = (subjectList: any[]) => {
|
|
|
|
|
valueType: item.valueType ?? '',
|
|
|
|
|
textInput: item.textInput ?? '',
|
|
|
|
|
inspectionResult: item.inspectionResult ?? '0',
|
|
|
|
|
images: item.images ?? '',
|
|
|
|
|
images: parseImages(item.images).slice(0, 3),
|
|
|
|
|
remark: item.remark ?? '',
|
|
|
|
|
sort: index + 1
|
|
|
|
|
}))
|
|
|
|
|
@ -770,6 +810,10 @@ const parseFirstImage = (value: any): string => {
|
|
|
|
|
return parseImages(value)[0] || ''
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const getTicketResultImages = (row: any): string[] => {
|
|
|
|
|
return parseImages(row?.images)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleProjectFormExpandChange = async (row: any, expandedRows: any[]) => {
|
|
|
|
|
const isExpanded = expandedRows.some((r) => String(r.id) === String(row.id))
|
|
|
|
|
if (!isExpanded) return
|
|
|
|
|
@ -840,6 +884,9 @@ const selectMaintainType = async (type: number) => {
|
|
|
|
|
await initOptions()
|
|
|
|
|
// 切换到压网时加载子模具列表
|
|
|
|
|
if (type === 4) {
|
|
|
|
|
if (!replaceNetFormData.pressureNetTime) {
|
|
|
|
|
replaceNetFormData.pressureNetTime = getCurrentDateTime()
|
|
|
|
|
}
|
|
|
|
|
await loadSubMoldList()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -860,7 +907,10 @@ const submitForm = async () => {
|
|
|
|
|
taskType: String(taskFormData.taskType),
|
|
|
|
|
moldList: props.mold?.id ? String(props.mold.id) : undefined,
|
|
|
|
|
projectForm: taskFormData.projectForm,
|
|
|
|
|
ticketResultsList: ticketResultList.value.map((item: any) => ({ ...item }))
|
|
|
|
|
ticketResultsList: ticketResultList.value.map((item: any) => ({
|
|
|
|
|
...item,
|
|
|
|
|
images: normalizeImageString(item.images)
|
|
|
|
|
}))
|
|
|
|
|
})
|
|
|
|
|
message.success(t('common.createSuccess'))
|
|
|
|
|
// 清空已提交的表单数据
|
|
|
|
|
@ -870,6 +920,7 @@ const submitForm = async () => {
|
|
|
|
|
selectedProjectFormName.value = ''
|
|
|
|
|
ticketResultList.value = []
|
|
|
|
|
ticketResultEditable.value = false
|
|
|
|
|
clearTicketResultImageUploading()
|
|
|
|
|
} else if (isRepair.value) {
|
|
|
|
|
// 提交维修单
|
|
|
|
|
const payload: any = {
|
|
|
|
|
@ -926,7 +977,7 @@ const submitForm = async () => {
|
|
|
|
|
message.success(t('common.createSuccess'))
|
|
|
|
|
// 清空已提交的表单数据
|
|
|
|
|
replaceNetFormData.moldIds = []
|
|
|
|
|
replaceNetFormData.pressureNetTime = undefined
|
|
|
|
|
replaceNetFormData.pressureNetTime = getCurrentDateTime()
|
|
|
|
|
replaceNetFormData.remark = undefined
|
|
|
|
|
await nextTick()
|
|
|
|
|
maintainFormRef.value?.clearValidate()
|
|
|
|
|
@ -942,6 +993,7 @@ const submitForm = async () => {
|
|
|
|
|
const open = async () => {
|
|
|
|
|
maintainFormData.maintainType = 1
|
|
|
|
|
repairFormData.requireDate = Date.now()
|
|
|
|
|
replaceNetFormData.pressureNetTime = getCurrentDateTime()
|
|
|
|
|
await initOptions()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1101,6 +1153,23 @@ defineExpose({ open })
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ticket-result-images {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
min-height: 56px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ticket-result-images :deep(.el-upload-list--picture-card) {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
gap: 8px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ticket-result-images.is-full :deep(.el-upload--picture-card) {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@media (max-width: 1400px) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|