Files
admin-sjzx/src/views/pqs/supervise/technology/feedbackPopup.vue
2024-06-04 17:24:45 +08:00

229 lines
6.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title" width="450px" top="30vh">
<el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="问题详情:">
<el-input
v-model="form.issueDetail"
autocomplete="off"
type="textarea"
:autosize="{ minRows: 2, maxRows: 6 }"
readonly
/>
</el-form-item>
<el-form-item label="问题附件:" v-if="showFile">
<el-icon>
<Link />
</el-icon>
<a :href="problemDetail.problemPath" target="_blank">{{ problemDetail.problemName }}</a>
</el-form-item>
<el-form-item label="采取的措施:" prop="takeStep">
<el-input
v-model="form.takeStep"
autocomplete="off"
placeholder="请输入采取的措施"
type="textarea"
/>
</el-form-item>
<el-form-item label="反馈报告:" class="uploadFile" prop="reportPath">
<el-upload
v-model:file-list="form.reportPath"
ref="uploadRef"
action=""
:accept="acceptType"
:limit="1"
:on-exceed="handleExceed"
:on-change="choose"
:auto-upload="false"
:on-progress="uploadFileName('reportPath')"
:on-remove="removeFile"
>
<template #trigger>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
</el-form>
</el-scrollbar>
<template #footer>
<span class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, inject, reactive, nextTick } from 'vue'
import { ElMessage, genFileId, UploadProps, UploadRawFile } from 'element-plus'
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
import { getFileNameAndFilePath, uploadFile } from '@/api/system-boot/file'
import { addFeedback, updateFeedback } from '@/api/supervision-boot/leaflet'
import { Link } from '@element-plus/icons-vue'
//.doc,.docx,.xlsx,.xls,.pdf
const acceptType = ref('')
//下拉数据源
const title = ref('')
const tableStore = inject('tableStore') as TableStore
const formRef = ref()
// 上传报告
const uploadRef = ref()
const dialogVisible = ref(false)
// 注意不要和表单ref的命名冲突
const form = ref({
id: '',
status: '',
issueDetail: '',
takeStep: '',
reportPath: []
})
//附件是否显示
const showFile = ref(false)
const problemDetail = reactive({
problemPath: '',
problemName: ''
})
//处理成效报告
const reportFilePath: any = ref('')
//form表单校验规则
const rules = {
takeStep: [{ required: true, message: '请输入采取的措施', trigger: 'blur' }],
reportPath: [{ required: true, message: '请上传处理成效报告', trigger: 'blur' }]
}
const resetForm = () => {
if (formRef.value) {
formRef.value.resetFields()
}
}
const open = async (
text: string,
id: string,
status: any,
issueDetail: string,
problemPath?: string,
takeStep?: string,
reportPath?: string
) => {
title.value = text
resetForm()
console.log(66666,reportPath);
if (takeStep) {
form.value.takeStep = takeStep
}
// uploadRef.value?.clearFiles()
if (reportPath) {
form.value.reportPath = JSON.parse(
JSON.stringify([
{
name: reportPath?.split('/')[2]
}
])
)
}
form.value.id = id
form.value.status = status
form.value.issueDetail = issueDetail
reportFilePath.value = reportPath
//判断附件是否存在,如果存在则回显出让用户可以点击下载
if (problemPath) {
let arrPath = problemPath.split(',')
await getFileNameAndFilePath({ filePath: arrPath[0] }).then(res => {
problemDetail.problemPath = res.data.url
problemDetail.problemName = res.data.fileName
})
showFile.value = true
} else {
showFile.value = false
}
dialogVisible.value = true
}
//移除文件上传
const removeFile = (file: any, uploadFiles: any) => {
console.log(file, uploadFiles)
}
const close = () => {
dialogVisible.value = false
form.value = {
id: '',
status: '',
issueDetail: '',
takeStep: '',
reportPath: []
}
resetForm()
}
/**
* 提交用户表单数据
*/
const submit = () => {
formRef.value.validate(async (valid: any) => {
if (valid) {
let subForm = JSON.parse(JSON.stringify(form.value))
subForm = {
...subForm,
reportPath: reportFilePath.value
}
if (!reportFilePath.value) {
return ElMessage({
message: '请上传处理成效报告',
type: 'warning'
})
}
if (form.value.status == '3') {
await updateFeedback(subForm)
ElMessage.success('重新发起成功')
tableStore.index()
dialogVisible.value = false
} else {
//此时该告警单处于待反馈状态
await addFeedback(subForm)
//查询进线数据避免一直处于loading状态
ElMessage.success('申请成功')
tableStore.index()
dialogVisible.value = false
}
}
})
}
defineExpose({ open })
let uploadName = ref('')
const choose = (e: any) => {
uploadFile(e.raw, '/supervision/').then(res => {
reportFilePath.value = res.data.name
// form.value.reportPath = res.data.name
})
}
const handleExceed: UploadProps['onExceed'] = files => {
uploadRef.value!.clearFiles()
const file = files[0] as UploadRawFile
file.uid = genFileId()
uploadRef.value!.handleStart(file)
}
//上传报告改变
const uploadFileName = val => {
uploadName.value = val
}
</script>
<style scoped lang="scss">
.el-upload-list__item {
transition: none !important;
}
.el-select {
min-width: 180px;
}
</style>