<template>
|
<u-popup
|
v-model="dialogVisitable"
|
mode="center"
|
:round="10"
|
:closeable="true"
|
@close="cancel"
|
>
|
<view class="popup-content">
|
<view class="popup-header">
|
<text class="popup-title">上传</text>
|
</view>
|
|
<view class="upload-container">
|
<view class="form-container">
|
<view class="title">生产前</view>
|
<u-upload
|
:fileList="beforeModelValue"
|
@afterRead="afterRead"
|
@delete="deleteFile"
|
name="before"
|
multiple
|
:maxCount="10"
|
:maxSize="1024 * 1024"
|
accept="video/*"
|
:previewFullImage="true"
|
></u-upload>
|
</view>
|
|
<view class="form-container">
|
<view class="title">生产后</view>
|
<u-upload
|
:fileList="afterModelValue"
|
@afterRead="afterRead"
|
@delete="deleteFile"
|
name="after"
|
multiple
|
:maxCount="10"
|
:maxSize="1024 * 1024"
|
accept="video/*"
|
:previewFullImage="true"
|
></u-upload>
|
</view>
|
|
<view class="form-container">
|
<view class="title">生产问题</view>
|
<u-upload
|
:fileList="issueModelValue"
|
@afterRead="afterRead"
|
@delete="deleteFile"
|
name="issue"
|
multiple
|
:maxCount="10"
|
:maxSize="1024 * 1024"
|
accept="video/*"
|
:previewFullImage="true"
|
></u-upload>
|
</view>
|
</view>
|
|
<view class="popup-footer">
|
<u-button @click="cancel" :customStyle="{ marginRight: '10px' }">取消</u-button>
|
<u-button type="primary" @click="submitForm">保存</u-button>
|
</view>
|
</view>
|
</u-popup>
|
</template>
|
|
<script setup>
|
import { ref } from 'vue'
|
import { submitInspectionRecord } from '@/api/equipmentManagement/inspection.js'
|
|
const emit = defineEmits(['closeDia'])
|
|
const dialogVisitable = ref(false)
|
const beforeModelValue = ref([])
|
const afterModelValue = ref([])
|
const issueModelValue = ref([])
|
const infoData = ref(null)
|
|
// 文件上传处理
|
const afterRead = (event) => {
|
const { name, file } = event
|
|
// 上传文件到服务器
|
uni.uploadFile({
|
url: '/api/upload', // 替换为实际的上传接口
|
filePath: file.url,
|
name: 'file',
|
success: (res) => {
|
const data = JSON.parse(res.data)
|
if (data.code === 200) {
|
const fileItem = {
|
url: data.data.url,
|
name: file.name,
|
status: 'success'
|
}
|
|
// 根据name添加到对应的数组
|
if (name === 'before') {
|
beforeModelValue.value.push(fileItem)
|
} else if (name === 'after') {
|
afterModelValue.value.push(fileItem)
|
} else if (name === 'issue') {
|
issueModelValue.value.push(fileItem)
|
}
|
|
uni.showToast({
|
title: '上传成功',
|
icon: 'success'
|
})
|
} else {
|
uni.showToast({
|
title: '上传失败',
|
icon: 'error'
|
})
|
}
|
},
|
fail: () => {
|
uni.showToast({
|
title: '上传失败',
|
icon: 'error'
|
})
|
}
|
})
|
}
|
|
// 删除文件
|
const deleteFile = (event) => {
|
const { name, index } = event
|
|
if (name === 'before') {
|
beforeModelValue.value.splice(index, 1)
|
} else if (name === 'after') {
|
afterModelValue.value.splice(index, 1)
|
} else if (name === 'issue') {
|
issueModelValue.value.splice(index, 1)
|
}
|
}
|
|
// 提交表单
|
const submitForm = async () => {
|
try {
|
let arr = []
|
if (beforeModelValue.value.length > 0) {
|
arr.push(...beforeModelValue.value.map(item => ({ ...item, statusType: 0 })))
|
}
|
if (afterModelValue.value.length > 0) {
|
arr.push(...afterModelValue.value.map(item => ({ ...item, statusType: 1 })))
|
}
|
if (issueModelValue.value.length > 0) {
|
arr.push(...issueModelValue.value.map(item => ({ ...item, statusType: 2 })))
|
}
|
|
// 提交数据
|
infoData.value.storageBlobDTO = arr
|
await submitInspectionRecord({ ...infoData.value })
|
|
uni.showToast({
|
title: '提交成功',
|
icon: 'success'
|
})
|
|
cancel()
|
} catch (error) {
|
console.error('提交失败:', error)
|
uni.showToast({
|
title: '提交失败',
|
icon: 'error'
|
})
|
}
|
}
|
|
// 打开弹框
|
const openDialog = async (row) => {
|
infoData.value = row
|
dialogVisitable.value = true
|
|
// 清空之前的数据
|
beforeModelValue.value = []
|
afterModelValue.value = []
|
issueModelValue.value = []
|
}
|
|
// 关闭弹框
|
const cancel = () => {
|
dialogVisitable.value = false
|
emit('closeDia')
|
}
|
|
defineExpose({ openDialog })
|
</script>
|
|
<style scoped lang="scss">
|
.popup-content {
|
width: 90vw;
|
max-width: 400px;
|
background-color: #fff;
|
border-radius: 10px;
|
overflow: hidden;
|
}
|
|
.popup-header {
|
padding: 20px 20px 10px;
|
text-align: center;
|
border-bottom: 1px solid #f0f0f0;
|
}
|
|
.popup-title {
|
font-size: 18px;
|
font-weight: 600;
|
color: #333;
|
}
|
|
.upload-container {
|
padding: 20px;
|
max-height: 60vh;
|
overflow-y: auto;
|
}
|
|
.form-container {
|
margin-bottom: 20px;
|
|
&:last-child {
|
margin-bottom: 0;
|
}
|
}
|
|
.title {
|
font-size: 14px;
|
color: #1890ff;
|
line-height: 20px;
|
font-weight: 600;
|
padding-left: 10px;
|
position: relative;
|
margin: 6px 0 10px;
|
|
&::before {
|
content: "";
|
position: absolute;
|
left: 0;
|
top: 3px;
|
width: 4px;
|
height: 14px;
|
background-color: #1890ff;
|
}
|
}
|
|
.popup-footer {
|
display: flex;
|
justify-content: center;
|
padding: 15px 20px;
|
border-top: 1px solid #f0f0f0;
|
background-color: #fafafa;
|
}
|
</style>
|