实验室运维前端-web
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1179 lines
59 KiB

<template>
<div>
<!-- 需求提报页面 -->
<div v-for="(item, index) in addForm" :key="item">
<div style="
width: 98%;
height: 30px;
line-height: 30px;
padding-left: 5px;
border-left: 5px solid #000;
font-size: 18px;
font-weight: 550;
color: #000;
margin: 0px 0 20px;
" v-show="addForm.length > 1">
填报{{ index + 1 }}
</div>
<avue-form :option="item.formOption" :model="item.form" :ref="`form${index}`"
:upload-after="(res, done, loading, column) => { uploadAfter(res, done, loading, column, index) }"
:upload-before="(res, done, loading, column) => uploadBefore(res, done, loading, column, index)">
<template slot-scope="{disabled,size}" slot="deviceName">
<!-- <el-select v-model="item.form.deviceName" placeholder="请选择设备"
@change="(value) => { changeDevice(value, item) }">
<el-option v-for="item in deviceList" :key="item.id" :value="item.id"
:label="item.name"></el-option>
</el-select> -->
<el-input placeholder="请输入设备名称" v-model="item.form.deviceName"></el-input>
</template>
<template slot-scope="{disabled,size}" slot="faultPosition">
<!-- <SelectTree disabled v-model="item.form.faultPosition" :tree-options="treeOptions"
:default-value="item.form.faultPosition.node"
@onNodeSelectEvent="handleNodeSelectEvent($event)"></SelectTree> -->
<el-input placeholder="请输入故障位置" v-model="item.form.faultPosition"></el-input>
</template>
<template slot-scope="{disabled,size}" slot="faultType">
<!-- <el-select v-model="item.form.faultType" placeholder="请选择专业类型" disabled>
<el-option v-for="item in typeList" :key="item.id" :value="item.id"
:label="item.name"></el-option>
</el-select> -->
<el-input placeholder="请输入专业类型" v-model="item.form.faultType"></el-input>
</template>
<template slot-scope="{disabled,size}" slot="faultDescribe">
<el-input type="textarea" :rows="2" placeholder="请输入故障现象描述" v-model="item.form.faultDescribe"
@blur="(event) => { changeDescribe(event, index) }">
</el-input>
</template>
<template slot-scope="{disabled,type}" slot="informant">
<el-select v-model="item.form.informant" placeholder="请选择关联实验室" @change="(val) => changeLab(val,index)">
11 months ago
<el-option v-for="item in labData" :key="item.id" :label="item.title" :value="item.id"></el-option>
</el-select>
</template>
<template slot-scope="{disabled,size}" slot="imgUrl">
<el-upload action="/api/blade-resource/oss/endpoint/put-file" list-type="picture-card" :headers="headers"
:on-success="handleSuccess(index)" :on-remove="handleRemove(index)" multiple :before-upload="beforeAvatarUpload(index)"
accept=".jpeg,.jpg,.png,.pdf" :file-list="item.form.imgList">
<i class="el-icon-plus"></i>
</el-upload>
</template>
<template slot-scope="{size}" slot="menuForm" v-if="index == addForm.length - 1">
<el-button @click="handleAdd" v-show="title == '需求填报'"> </el-button>
<el-button @click="handleCancel"> </el-button>
<el-button @click="handleSave" v-show="title == '需求填报'" v-if="userInfo.role_id != '1839536982874193922'"> </el-button>
<el-button type="primary" @click="handleConfirm(index)"> </el-button>
</template>
</avue-form>
</div>
</div>
</template>
<script>
import website from '@/config/website';
import {getToken, removeToken, removeRefreshToken} from '@/util/auth';
import SelectTree from '../../components/selectTree/tree.vue'
import { getDeviceList } from '@/api/device/device'
import { getChildList } from '@/api/system/dictbiz'
11 months ago
import { saveData, editData, saveDraft,serviceSave,serviceDraft,getAllUser,getAllLab } from '@/api/operation/hand'
import { nextTick } from 'vue';
import Compressor from 'compressorjs';
import { mapGetters } from "vuex";
export default {
name: 'requestSub',
props: {
title: String,
form: Object,
},
components: {
SelectTree
},
data() {
return {
typeList: [],
imgList: [],
treeOptions: [],
deviceList: [],
uploadUrl: '/api/blade-resource/oss/endpoint/put-file',
isShow: false,
addForm: [],
editId: '',
headers:{
},
labData:[],
}
},
mounted() {
this.getLabData()
this.headers = {
"Authorization":`Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`,
'Blade-Auth':'bearer ' + getToken(),
'Blade-Requested-With':'BladeHttpRequest'
}
console.log('this.userInfo.role_id',this.userInfo.role_id)
if ((this.title == '编辑' && JSON.stringify(this.form) != '{}') || JSON.stringify(this.form) != '{}') {
this.editId = this.form.id
for (let key in this.form) {
this.addForm = [
{
form: {
imgList: this.form.picAttaches && this.form.picAttaches.length != 0 ? this.form.picAttaches.map(item => { return { name: item.originalName, url: item.link } }) : [],
// faultPosition: { node: this.deviceList.find(item => item.id == this.form.deviceName).position, data: {} },
faultPosition: this.form.faultLocation,
deviceName: this.form.deviceName,
faultType: this.form.faultType,
faultDescribe: this.form.faultDescribe,
videoAttaches: this.form.videoAttaches,
picAttaches: this.form.picAttaches,
},
formOption: {
emptyBtn: false,
submitBtn: false,
menuPosition: 'right',
column: [
{
label: "关联实验室",
labelWidth: 120,
span: 24,
prop: "informant",
type: "select",
formslot: true,
display:this.userInfo.role_id == '1839536982874193922' ? true : false
},
{
label: "故障现象描述",
labelWidth: 120,
span: 24,
prop: "faultDescribe",
type: "textarea",
minRows: 3,
maxRows: 5,
formslot: true,
rules: [{
required: true,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "设备名称",
labelWidth: 120,
span: 24,
prop: "deviceName",
// type: "select",
formslot: true
},
{
label: "故障位置",
labelWidth: 120,
prop: "faultPosition",
type: "tree",
span: 24,
formslot: true,
},
{
label: "故障专业类型",
labelWidth: 120,
span: 24,
prop: "faultType",
type: "select",
formslot: true,
},
{
label: "故障视频",
labelWidth: 120,
prop: "errorVideo",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
value: this.form.videoAttaches && this.form.videoAttaches.length != 0 ? this.form.videoAttaches[0].link : '',
fileType: "video", //img/video/audio
listType: "picture-card",
accept: '.mp4',
span: 24,
// formslot:true,
action: '/api/blade-resource/oss/endpoint/put-file',
rules: [{
required: false,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "故障图片",
labelWidth: 120,
span: 24,
prop: "imgUrl",
listType: "picture-card",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
// value:this.form.picAttaches,
formslot: true,
accept: '.jpg,.jpeg,.png',
fileType: "img", //img/video/audio
action: '/api/blade-resource/oss/endpoint/put-file',
},
],
},
},
]
}
} else {
this.addForm = [
{
form: {
imgList: [],
// faultPosition: { node: undefined, data: {} },
faultPosition: '',
deviceName: '',
faultType: '',
faultDescribe: '',
videoAttaches: [],
picAttaches: [],
},
formOption: {
emptyBtn: false,
submitBtn: false,
menuPosition: 'right',
column: [
{
label: "关联实验室",
labelWidth: 120,
span: 24,
prop: "informant",
type: "select",
formslot: true,
display:this.userInfo.role_id == '1839536982874193922' ? true : false
},
{
label: "故障现象描述",
labelWidth: 120,
span: 24,
prop: "faultDescribe",
type: "textarea",
minRows: 3,
maxRows: 5,
formslot: true,
rules: [{
required: true,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "设备名称",
labelWidth: 120,
span: 24,
prop: "deviceName",
type: "select",
formslot: true
},
{
label: "故障位置",
labelWidth: 120,
prop: "faultPosition",
type: "tree",
span: 24,
formslot: true,
},
{
label: "故障专业类型",
labelWidth: 120,
span: 24,
prop: "faultType",
type: "select",
formslot: true,
},
{
label: "故障视频",
labelWidth: 120,
prop: "errorVideo",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
fileType: "video", //img/video/audio
listType: "picture-card",
accept: '.mp4',
span: 24,
// formslot:true,
action: '/api/blade-resource/oss/endpoint/put-file',
},
{
label: "故障图片",
labelWidth: 120,
span: 24,
prop: "imgUrl",
listType: "picture-card",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
// value:this.form.picAttaches,
formslot: true,
accept: '.jpg,.jpeg,.png',
fileType: "img", //img/video/audio
action: '/api/blade-resource/oss/endpoint/put-file',
},
],
},
},
]
}
console.log('addForm------------->',this.addForm)
this.$forceUpdate()
},
computed: {
...mapGetters(["userInfo", "permission", "systemTime"]),
},
watch: {
form(newVal, oldVal) {
let arr = JSON.parse(JSON.stringify(this.addForm))
if ((this.title == '编辑' && JSON.stringify(this.form) != '{}') || JSON.stringify(this.form) != '{}') {
this.editId = this.form.id
for (let key in this.form) {
this.addForm = [
{
form: {
imgList: this.form.picAttaches && this.form.picAttaches.length != 0 ? this.form.picAttaches.map(item => { return { name: item.originalName, url: item.link } }) : [],
// faultPosition: { node: this.deviceList.find(item => item.id == this.form.deviceName).position, data: {} },
faultPosition: this.form.faultLocation,
deviceName: this.form.deviceName,
// faultType: this.deviceList.find(item => item.id == this.form.deviceName).type,
faultType: this.form.faultType,
faultDescribe: this.form.faultDescribe,
videoAttaches: this.form.videoAttaches,
picAttaches: this.form.picAttaches,
},
formOption: {
emptyBtn: false,
submitBtn: false,
menuPosition: 'right',
column: [
{
label: "关联实验室",
labelWidth: 120,
span: 24,
prop: "informant",
type: "select",
formslot: true,
display:this.userInfo.role_id == '1839536982874193922' ? true : false
},
{
label: "故障现象描述",
labelWidth: 120,
span: 24,
prop: "faultDescribe",
type: "textarea",
minRows: 3,
maxRows: 5,
formslot: true,
rules: [{
required: true,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "设备名称",
labelWidth: 120,
span: 24,
prop: "deviceName",
type: "select",
formslot: true
},
{
label: "故障位置",
labelWidth: 120,
prop: "faultPosition",
type: "tree",
span: 24,
formslot: true,
},
{
label: "故障专业类型",
labelWidth: 120,
span: 24,
prop: "faultType",
type: "select",
formslot: true,
},
{
label: "故障视频",
labelWidth: 120,
prop: "errorVideo",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
value: this.form.videoAttaches && this.form.videoAttaches.length != 0 ? this.form.videoAttaches[0].link : '',
fileType: "video", //img/video/audio
listType: "picture-card",
accept: '.mp4',
span: 24,
// formslot:true,
action: '/api/blade-resource/oss/endpoint/put-file',
},
{
label: "故障图片",
labelWidth: 120,
span: 24,
prop: "imgUrl",
listType: "picture-card",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
// value:this.form.picAttaches,
formslot: true,
accept: '.jpg,.jpeg,.png',
fileType: "img", //img/video/audio
action: '/api/blade-resource/oss/endpoint/put-file',
},
],
},
},
]
}
} else {
this.addForm = [
{
form: {
imgList: [],
faultPosition: '',
deviceName: '',
faultType: '',
faultDescribe: '',
videoAttaches: [],
picAttaches: [],
},
formOption: {
emptyBtn: false,
submitBtn: false,
menuPosition: 'right',
column: [
{
label: "关联实验室",
labelWidth: 120,
span: 24,
prop: "informant",
type: "select",
formslot: true,
display:this.userInfo.role_id == '1839536982874193922' ? true : false
},
{
label: "故障现象描述",
labelWidth: 120,
span: 24,
prop: "faultDescribe",
type: "textarea",
minRows: 3,
maxRows: 5,
formslot: true,
rules: [{
required: true,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "设备名称",
labelWidth: 120,
span: 24,
prop: "deviceName",
type: "select",
formslot: true
},
{
label: "故障位置",
labelWidth: 120,
prop: "faultPosition",
type: "tree",
span: 24,
formslot: true,
},
{
label: "故障专业类型",
labelWidth: 120,
span: 24,
prop: "faultType",
type: "select",
formslot: true,
},
{
label: "故障视频",
labelWidth: 120,
prop: "errorVideo",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
fileType: "video", //img/video/audio
listType: "picture-card",
accept: '.mp4',
span: 24,
// formslot:true,
action: '/api/blade-resource/oss/endpoint/put-file',
},
{
label: "故障图片",
labelWidth: 120,
span: 24,
prop: "imgUrl",
listType: "picture-card",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
// value:this.form.picAttaches,
formslot: true,
accept: '.jpg,.jpeg,.png',
fileType: "img", //img/video/audio
action: '/api/blade-resource/oss/endpoint/put-file',
},
],
},
},
]
}
}
},
methods: {
getLabData(){
11 months ago
getAllLab().then(res =>{
this.labData = res.data.data
})
},
// 切换实验室
changeLab(val,index){
console.log('val----------->',val)
console.log('index----------->',index)
this.addForm[index].form = {
...this.addForm[index].form,
informant:val,
informantPhone:this.labData.find(item => item.id == val).phone,
reportUnit:this.labData.find(item => item.id == val).deptId,
createDept:this.labData.find(item => item.id == val).createDept,
}
},
// 选择设备
changeDevice(value, row) {
console.log('value---------->', value)
console.log('row---------->', row)
row.form.faultPosition.node = this.deviceList.find(item => item.id == value).position
row.form.faultType = this.deviceList.find(item => item.id == value).type
row.formOption.column.find(item => item.prop == 'faultPosition').value = row.form.faultPosition
console.log('val------------>', row.formOption.column.find(item => item.prop == "faultPosition"))
},
uploadAfter(res, done, loading, column, flag) {
console.log('res =============>', res)
console.log('flag =============>', flag)
if (column.label == '故障图片') {
this.addForm[flag].form.picAttaches.push(
{
link: res.link, //--文件url
name: res.originalName //--文件名称
}
)
done()
} else if (column.label == '故障视频') {
this.addForm[flag].form.errorVideo = res.link
this.addForm[flag].form.videoAttaches.push({
link: res.link, //--文件url
name: res.originalName //--文件名称
})
done()
}
},
async uploadBefore(file, done, loading, column, flag){
console.log('file =============>', file)
console.log('flag =============>', flag)
console.log('addForm----------------->',this.addForm[flag].form)
console.log('this.addForm[flag].videoAttaches.length + this.addForm[flag].picAttaches.length <= 3',this.addForm[flag].form.videoAttaches.length + this.addForm[flag].form.picAttaches.length)
if(this.addForm[flag].form.videoAttaches && this.addForm[flag].form.picAttaches && this.addForm[flag].form.videoAttaches.length + this.addForm[flag].form.picAttaches.length < 3){
if(file.size > 1024 * 1024 * 50){
this.$message.error('故障视频最大上传50M,请压缩后再上传')
loading()
}else{
done(file)
}
}else{
this.$message.error('故障视频与故障图片最多可上传3个')
loading()
}
},
// 附件上传成功
handleSuccess(index) {
return (response, file, fileList) => {
console.log('inex---------------->', index)
console.log('response------------------>', response)
console.log('file------------------>', file)
console.log('fileList------------------>', fileList)
this.addForm[index].form.picAttaches.push(
{
link: response.data.link, //--文件url
name: response.data.originalName //--文件名称
}
)
}
},
beforeAvatarUpload(index){
return (file) =>{
console.log('file------>',file)
if(this.addForm[index].form.videoAttaches && this.addForm[index].form.picAttaches && this.addForm[index].form.videoAttaches.length + this.addForm[index].form.picAttaches.length < 3){
const isLt3M = file.size
if(isLt3M > 1024 * 1024 * 5){
// const r = confirm(
// // `您上传的图片大小超过5Mb,是否进行压缩上传?(此操作会降低图片质量)`
// `您上传的图片大小超过5Mb,请压缩后再次上传`
// )
// console.log('r=========>',r)
// if(r){
// // const _this = this
// // return new Promise((resolve, reject) => {
// // const image = new Image()
// // let resultBlob = ''
// // image.src = URL.createObjectURL(file)
// // image.onload = () => {
// // // 调用方法获取blob格式,方法写在下边
// // resultBlob = _this.compressUpload(image, file)
// // const fs = new File([resultBlob], file.name, {
// // type: file.type,
// // width:200,
// // height:200
// // })
// // console.log('fs============>',fs)
// // if (fs.size > 1024 * 1024 * 3) {
// // // this.commonZipPic(fs)
// // this.$message.warning('压缩后图片仍大于3Mb,请您手动压缩')
// // reject()
// // }
// // resolve(fs)
// // }
// // image.onerror = () => {
// // reject()
// // }
// // })
// }else{
this.$message.warning('您上传的图片大小超过5Mb,请手动压缩后在上传')
return false
// }
}else{
return true
}
}else{
this.$message.error('故障视频与故障图片最多可上传3个')
return false
}
}
},
/* 图片压缩方法-canvas压缩 */
compressUpload(image, file) {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
// const initSize = image.src.length
const { width } = image
const { height } = image
canvas.width = width
canvas.height = height
ctx.fillRect(0, 0, canvas.width, canvas.height)
ctx.drawImage(image, 0, 0, width / 10, height / 10)
// 进行最小压缩0.1
const compressData = canvas.toDataURL(file.type || 'image/jpeg', 0.1)
// 压缩后调用方法进行base64转Blob,方法写在下边
const blobImg = this.dataURItoBlob(compressData)
return blobImg
},
/* base64转Blob对象 */
dataURItoBlob(data) {
let byteString
if (data.split(',')[0].indexOf('base64') >= 0) {
byteString = atob(data.split(',')[1])
} else {
byteString = unescape(data.split(',')[1])
}
const mimeString = data.split(',')[0].split(':')[1].split(';')[0]
const ia = new Uint8Array(byteString.length)
for (let i = 0; i < byteString.length; i += 1) {
ia[i] = byteString.charCodeAt(i)
}
return new Blob([ia], { type: mimeString })
},
// 上传视频文件压缩后再上传
uploadCompressVideo(file) {
console.log('file===================>',file)
if (file) {
let filename = file.name;
let filetype = file.type;
const videoUrl = ffmpeg.getObjectURL(file);
// const video = document.getElementById('video');
// video.src = videoUrl;
// return ffmpeg.squeezVideo().then((videoObj) => {
// const {width, height} = videoObj;
return ffmpeg.squeezVideo(file, filename, 'mp4', '200', '200', this.msg);
// })
}
},
// 附件删除
handleRemove(index) {
return (file, fileList) =>{
this.imgList = []
this.fileList = []
fileList.map(item => {
this.fileList.push({ name: item.name, link: item.response ? item.response.data.link : item.url })
this.imgList.push({ name: item.name, url: item.response ? item.response.data.link : item.url })
})
this.addForm[index].form.picAttaches = fileList
}
},
changeDescribe(event, index) {
console.log('event.target.value------------>', event.target.value)
if (event.target.value != '') {
console.log('index----------->', index)
console.log(this.addForm[index])
if (this.addForm[index].form.faultDescribe != '') {
nextTick(() => {
this.$refs[`form${index}`][0].clearValidate()
})
}
}
},
// 点击新增按钮
handleAdd() {
let count = 0
this.addForm.forEach((formItem, index) => {
this.$refs[`form${index}`][0].validate((valid) => {
if (valid) {
console.log(`表单项${index}验证通过`);
// 执行提交操作
} else {
console.log(`表单项${index}验证失败`);
if (this.addForm[index].form.faultDescribe != '') {
count++
this.$refs[`form${index}`][0].clearValidate()
if(count == this.addForm.length){
this.addForm.push({
form: {
faultPosition: '',
deviceName: "",
faultType: "",
faultDescribe: "",
errorVideo: "",
picAttaches: [],
},
formOption: {
emptyBtn: false,
submitBtn: false,
menuPosition: 'right',
column: [
{
label: "关联实验室",
labelWidth: 120,
span: 24,
prop: "informant",
type: "select",
formslot: true,
display:this.userInfo.role_id == '1839536982874193922' ? true : false
},
{
label: "故障现象描述",
labelWidth: 120,
span: 24,
prop: "faultDescribe",
type: "textarea",
minRows: 3,
maxRows: 5,
formslot: true,
rules: [{
required: true,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "设备名称",
labelWidth: 120,
span: 24,
prop: "deviceName",
type: "select",
formslot: true
},
{
label: "故障位置",
labelWidth: 120,
prop: "faultPosition",
type: "tree",
span: 24,
formslot: true,
},
{
label: "故障专业类型",
labelWidth: 120,
span: 24,
prop: "faultType",
type: "select",
formslot: true,
},
{
label: "故障视频",
labelWidth: 120,
prop: "errorVideo",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
fileType: "video", //img/video/audio
listType: "picture-card",
accept: '.mp4',
span: 24,
// formslot:true,
action: '/api/blade-resource/oss/endpoint/put-file',
},
{
label: "故障图片",
labelWidth: 120,
span: 24,
prop: "imgUrl",
listType: "picture-card",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
// value:this.form.picAttaches,
accept: '.jpg,.jpeg,.png',
fileType: "img", //img/video/audio
action: '/api/blade-resource/oss/endpoint/put-file',
},
],
},
});
}
}
}
});
});
},
// 点击取消按钮
handleCancel() {
this.dialogVisible = false;
this.addForm = [
{
form: {
imgList: [],
faultPosition: { node: undefined, data: {} },
deviceName: '',
faultType: '',
faultDescribe: '',
videoAttaches: [],
picAttaches: [],
},
formOption: {
emptyBtn: false,
submitBtn: false,
menuPosition: 'right',
column: [
{
label: "故障现象描述",
labelWidth: 120,
span: 24,
prop: "faultDescribe",
type: "textarea",
minRows: 3,
maxRows: 5,
formslot: true,
rules: [{
required: true,
message: "请输入故障现象描述",
trigger: "blur"
}]
},
{
label: "设备名称",
labelWidth: 120,
span: 24,
prop: "deviceName",
type: "select",
formslot: true
},
{
label: "故障位置",
labelWidth: 120,
prop: "faultPosition",
type: "tree",
span: 24,
formslot: true,
},
{
label: "故障专业类型",
labelWidth: 120,
span: 24,
prop: "faultType",
type: "select",
formslot: true,
},
{
label: "故障视频",
labelWidth: 120,
prop: "errorVideo",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
fileType: "video", //img/video/audio
listType: "picture-card",
accept: '.mp4',
span: 24,
// formslot:true,
action: '/api/blade-resource/oss/endpoint/put-file',
},
{
label: "故障图片",
labelWidth: 120,
span: 24,
prop: "imgUrl",
listType: "picture-card",
type: "upload",
propsHttp: {
res: "data",
url: "link",
name: "name",
// home: "https://www.w3school.com.cn",
},
// value:this.form.picAttaches,
formslot: true,
accept: '.jpg,.jpeg,.png',
fileType: "img", //img/video/audio
action: '/api/blade-resource/oss/endpoint/put-file',
},
],
},
},
]
this.$emit('close')
},
// 点击保存按钮
handleSave() {
console.log('addFrom----------->', this.addForm)
let count = 0
this.addForm.forEach((formItem, index) => {
console.log('form------------>', this.$refs[`form${index}`])
this.$refs[`form${index}`][0].validate((valid) => {
if (valid) {
console.log(`表单项${index}验证通过`);
// 执行提交操作
} else {
console.log(`表单项${index}验证失败`);
if(this.userInfo.role_id == '1839536982874193922'){
//客服角色
if (this.addForm[index].form.faultDescribe != '' && this.addForm[index].form.informant != ''){
count++
this.$refs[`form${index}`][0].clearValidate()
if(count == this.addForm.length){
let data = []
this.addForm.map(item => {
data.push({
faultLocation: item.form.faultPosition.node,
deviceName: item.form.deviceName,
faultType: item.form.faultType,
videoAttaches: item.form.videoAttaches,
picAttaches: item.form.picAttaches,
faultDescribe: item.form.faultDescribe,
createDept:item.form.createDept,
informant:item.form.informant,
informantPhone:item.form.informantPhone,
reportUnit:item.form.reportUnit,
})
})
console.log('data============>', data)
serviceDraft(data).then(res => {
if (res.data.code == 200) {
this.$message.success('保存成功')
this.$emit('close')
}
})
this.$emit('close')
}
}
}else{
if (this.addForm[index].form.faultDescribe != '') {
count++
this.$refs[`form${index}`][0].clearValidate()
if(count == this.addForm.length){
let data = []
this.addForm.map(item => {
data.push({
faultLocation: item.form.faultPosition.node,
deviceName: item.form.deviceName,
faultType: item.form.faultType,
videoAttaches: item.form.videoAttaches,
picAttaches: item.form.picAttaches,
faultDescribe: item.form.faultDescribe,
})
})
console.log('data============>', data)
saveDraft(data).then(res => {
if (res.data.code == 200) {
this.$message.success('保存成功')
this.$emit('close')
}
})
this.$emit('close')
}
}
}
}
});
});
},
// 点击确定按钮
handleConfirm(index) {
let count = 0
this.addForm.forEach((formItem, index) => {
this.$refs[`form${index}`][0].validate((valid) => {
if (valid) {
console.log(`表单项${index}验证通过`);
// 执行提交操作
} else {
console.log(`表单项${index}验证失败`);
if(this.userInfo.role_id == '1839536982874193922'){
//客服角色
if (this.addForm[index].form.faultDescribe != '' && this.addForm[index].form.informant != '') {
count++
this.$refs[`form${index}`][0].clearValidate()
if(count == this.addForm.length){
let data = []
this.addForm.map(item => {
data.push({
id: this.editId ? this.editId : null,
faultLocation: item.form.faultPosition,
deviceName: item.form.deviceName,
faultType: item.form.faultType,
videoAttaches: item.form.videoAttaches,
picAttaches: item.form.picAttaches,
faultDescribe: item.form.faultDescribe,
submitType: 1,
createDept:item.form.createDept,
informant:item.form.informant,
informantPhone:item.form.informantPhone,
reportUnit:item.form.reportUnit,
})
})
if(data.videoAttaches && data.picAttaches && data.videoAttaches.length + data.picAttaches.length > 3){
this.$message.error('故障视频与故障图片最多可上传3个')
}else if (data.videoAttaches && !data.picAttaches && data.videoAttaches.length > 3){
this.$message.error('故障视频与故障图片最多可上传3个')
}else if (!data.videoAttaches && data.picAttaches && data.picAttaches.length > 3){
this.$message.error('故障视频与故障图片最多可上传3个')
}else{
console.log('data===========>',data)
serviceSave(data).then(res =>{
console.log('res------------------->', res)
if (res.data.code == 200) {
this.$message.success('新增成功')
this.$emit('close')
}
})
}
}
}
}else{
if (this.addForm[index].form.faultDescribe != '') {
count++
this.$refs[`form${index}`][0].clearValidate()
if(count == this.addForm.length){
let data = []
this.addForm.map(item => {
data.push({
id: this.editId ? this.editId : null,
faultLocation: item.form.faultPosition,
deviceName: item.form.deviceName,
faultType: item.form.faultType,
videoAttaches: item.form.videoAttaches,
picAttaches: item.form.picAttaches,
faultDescribe: item.form.faultDescribe,
submitType: 1
})
})
console.log('data---------->',data)
if(data.videoAttaches && data.picAttaches && data.videoAttaches.length + data.picAttaches.length > 3){
this.$message.error('故障视频与故障图片最多可上传3个')
}else if (data.videoAttaches && !data.picAttaches && data.videoAttaches.length > 3){
this.$message.error('故障视频与故障图片最多可上传3个')
}else if (!data.videoAttaches && data.picAttaches && data.picAttaches.length > 3){
this.$message.error('故障视频与故障图片最多可上传3个')
}else{
saveData(data).then(res => {
console.log('res------------------->', res)
if (res.data.code == 200) {
this.$message.success('新增成功')
this.$emit('close')
}
})
}
}
}
}
}
});
});
},
}
}
</script>
<style></style>