From a7301af282fd45501b73431747e52c96999816de Mon Sep 17 00:00:00 2001 From: cqf Date: 星期六, 21 五月 2022 16:23:36 +0800 Subject: [PATCH] 隐患排查会议-上传下载增删改 --- src/views/troubleshooting/index.vue | 458 ++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 326 insertions(+), 132 deletions(-) diff --git a/src/views/troubleshooting/index.vue b/src/views/troubleshooting/index.vue index 7117eef..88d9cb1 100644 --- a/src/views/troubleshooting/index.vue +++ b/src/views/troubleshooting/index.vue @@ -28,50 +28,47 @@ </el-form-item> </el-form> <el-row class="title-center"> - <el-col :span="10"> - <el-radio-group v-model="listQuery.type" @change="typeChange"> - <el-radio-button label="0">未上报</el-radio-button> - <el-radio-button label="1">已上报</el-radio-button> - <el-radio-button label="2">上级公司会议</el-radio-button> - </el-radio-group> + <el-col :span="5"> + <el-radio-group v-model="listQuery.type" @change="typeChange"> + <el-radio-button label="0">未上报</el-radio-button> + <el-radio-button label="1">已上报</el-radio-button> + <el-radio-button label="2">上级公司会议</el-radio-button> + </el-radio-group> </el-col> <div v-if="listQuery.type==0"> - <el-col :span="10"> - <el-row> - <el-col :span="7" :offset="7" style="text-align: right;"> + <el-col :span="15"> + <el-col :span="4" :offset="offset" style="text-align: right;"> <span style="line-height: 36px; font-size: 14px; color: #606266;margin-right:10px;font-weight: bold;">请选择上报方式</span> </el-col> - <el-col :span="10"> - <el-select v-model="listQuery.form.check_main_branch" placeholder="请选择" @change="changeUpType"> + <el-col :span="4"> + <el-select v-model="upType" placeholder="请选择" @change="changeUpType"> <el-option v-for="item in upTypeList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-col> - <el-col :span="6"> - <el-date-picker type="date" placeholder="选择日期" v-model="listQuery.form.Conference_TimeStart" style="width: 100%" value-format="yyyy-MM-dd"></el-date-picker> + <div v-if="upType == 1"> + <el-col :span="5" :offset="1"> + <el-date-picker type="date" placeholder="选择日期" v-model="upTimeStart" style="width: 100%" value-format="yyyy-MM-dd"></el-date-picker> </el-col> - <el-col style="text-align: center" :span="2">至</el-col> - <el-col :span="6"> - <el-date-picker type="date" placeholder="选择日期" v-model="listQuery.form.Conference_TimeEnd" style="width: 100%" value-format="yyyy-MM-dd"></el-date-picker> + <el-col style="text-align: center" :span="1"> + <span style="line-height: 36px; font-size: 14px; color: #606266;font-weight: bold;">至</span> </el-col> - <el-col :span="10"> - <el-button type="primary" class="btns" size="small">上报</el-button> - </el-col> - </el-row> + <el-col :span="5"> + <el-date-picker type="date" placeholder="选择日期" v-model="upTimeEnd" style="width: 100%" value-format="yyyy-MM-dd"></el-date-picker> + </el-col> + </div> + <el-col :span="2" style="text-align: right"> + <el-button type="primary" class="btns" size="small" @click="putBatch">上报</el-button> + </el-col> </el-col> <el-col :span="4" style="text-align: right"> - <el-button class="btns" type="primary" size="small" icon="el-icon-plus">添加</el-button> - <el-button class="btns" type="primary" size="small" icon="el-icon-close" @click="sendBath()">批量删除</el-button> + <el-button class="btns" type="primary" size="small" icon="el-icon-plus" @click="addMeeting">添加</el-button> + <el-button class="btns" type="primary" size="small" icon="el-icon-close" @click="deleteBatch()">批量删除</el-button> </el-col> </div> <div v-if="listQuery.type==1"> - <el-col :span="14" style="text-align: right"> - <el-button - class="btns" - type="primary" - size="small" - >撤销</el-button - > + <el-col :span="18" style="text-align: right"> + <el-button class="btns" type="primary" size="small" @click="revokeBatch">撤销</el-button> </el-col> </div> </el-row> @@ -100,20 +97,8 @@ <el-table-column prop="meeting_content" label="会议摘要" align="center"></el-table-column> <el-table-column prop="realFileName" label="会议纪要" align="center"> <template slot-scope="scope" > - <el-upload - class="upload-demo" - ref="upload" - v-if="listQuery.type==0" - :http-request="uploadSectionFile" - :on-preview="handlePreview" - :on-remove="handleRemove" - :file-list="fileList" - :before-upload="beforeUpload" - :auto-upload="true"> - <el-button slot="trigger" size="small" type="primary" class="btns">上传附件</el-button> - </el-upload> - <div v-else - v-for="item in scope.row.realFileName"> + + <div v-for="item in scope.row.realFileName"> <el-link type="primary" @click="downloadFile(subFile(item))"> {{subFile(item)}} </el-link> @@ -122,9 +107,9 @@ </el-table-column> <el-table-column prop="date" v-if="listQuery.type==0" label="基本操作" align="center"> <template slot-scope="scope"> - <el-button @click="updateClick(scope.row)" type="text" size="small">编辑</el-button> - <el-button @click="updateClick(scope.row)" type="text" size="small">保存</el-button> - <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button> + <el-button @click="editMeeting(scope.row)" type="text" size="small">编辑</el-button> +<!-- <el-button @click="updateClick(scope.row)" type="text" size="small">保存</el-button>--> + <el-button @click="deleteMeeting(scope.row)" type="text" size="small">删除</el-button> </template> </el-table-column> </el-table> @@ -141,11 +126,93 @@ > </el-pagination> </div> + + <el-dialog + :title="title" + :visible.sync="dialogVisible" + :close-on-click-modal="false" + width="40%"> + <el-form ref="form" :rules="meetingRules" :model="meetingForm" label-width="100px"> + <el-row> + <el-col :span="9"> + <el-form-item label="召开时间" prop="CONFERENCE_TIME"> + <el-date-picker type="date" placeholder="选择日期" + v-model="meetingForm.CONFERENCE_TIME" + style="width: 100%" value-format="yyyy-MM-dd" + ></el-date-picker> + </el-form-item> + </el-col> + <el-col :span="9" :offset="4"> + <el-form-item label="会议专业" prop="CONFERENCE_PROFESSIONAL"> + <el-select v-model="meetingForm.CONFERENCE_PROFESSIONAL" placeholder="请选择"> + <el-option + v-for="item in YHLXList" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="9"> + <el-form-item label="地点" prop="ADDRESS"> + <el-input v-model="meetingForm.ADDRESS" rows="3" type="textarea" class="multiline"></el-input> + </el-form-item> + </el-col> + <el-col :span="9" :offset="4"> + <el-form-item label="主持人" prop="HOST"> + <el-input v-model="meetingForm.HOST" rows="3" type="textarea" class="multiline"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="22"> + <el-form-item label="会议摘要" prop="meeting_content"> + <el-input v-model="meetingForm.meeting_content" rows="3" type="textarea" class="multiline"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="22" > + <el-form-item label="会议纪要" prop="realFileName"> + <el-upload + class="upload-demo" + ref="upload" + :http-request="uploadSectionFile" + :on-preview="handlePreview" + :on-remove="handleRemove" + :file-list="fileList" + :before-upload="beforeUpload" + :auto-upload="true"> + <el-button slot="trigger" size="small" type="primary" class="btns">上传附件</el-button> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="22"> + <el-form-item style="text-align: center"> + <el-button type="primary" class="btns" @click="submitFrom('form')"> + 保存 + </el-button> + <el-button @click="dialogVisible=false">关闭</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + </el-dialog> + + </div> </template> <script> -import {getPageList, dowloand_do} from "@/api/sgyhpczl/troubleshooting"; +import {getPageList, dowloand_do, addOrEdit, del, revoke, put} from "@/api/sgyhpczl/troubleshooting"; import {uploadFile} from "@/api/sgyhpczl/hiddenDangerRectification"; +import {deepClone} from '@/utils' import { initYHLX, @@ -162,9 +229,7 @@ CONFERENCE_PROFESSIONAL: '0' }, }, - table1: true, - table2: false, - + form: {}, currentPage: 1, pageSize: 10, recordTotal: 0, @@ -172,9 +237,24 @@ tableData: [], selectedList: [], listLoading: false, + // fileList:[{name:'aa.doc',url:'sssss.doc'}], fileList:[], upTypeList:[{label:"按勾选上报",value:0},{label:"按时间上报",value:1}], - upTimeShow: false, + upType:0, + upTimeStart:'', + upTimeEnd:'', + offset: 14, + + title:'', + dialogVisible:false, + meetingForm:{}, + meetingRules:{ + CONFERENCE_TIME: [{ required: true, message: '不能为空', trigger: 'blur' },], + ADDRESS: [{ required: true, message: '不能为空', trigger: 'blur' },], + HOST: [{ required: true, message: '不能为空', trigger: 'blur' },], + meeting_content: [{ required: true, message: '不能为空', trigger: 'blur' },], + CONFERENCE_PROFESSIONAL: [{ required: true, message: '不能为空', trigger: 'blur' },], + }, }; }, mounted() { @@ -182,30 +262,6 @@ this.initYHLX(); }, methods: { - sendBath() { - this.$router.push({ - path: "/existN", - }); - }, - handleClick(data, val) { - if (val == "存在") { - this.$router.push({ - path: "/exist", - }); - } - }, - handoff(index) { - if (index == 1) { - this.table1 = false; - this.table2 = true; - this.listQuery.type = 2; - console.log(this.listQuery.type); - this.getPageList(); - } else { - this.table1 = true; - this.table2 = false; - } - }, initYHLX(){ initYHLX().then(res=>{ if (res.data.ok==1){ @@ -216,46 +272,22 @@ }) }, changeUpType(val){ + this.upType = val; if (val == 1){ - this.upTimeShow = true + this.offset = 2; + }else { + this.offset = 14; } }, - checkTime() { - if ( - this.listQuery.form.check_dateStart != null && - this.listQuery.form.check_dateStart != "" - ) { - if ( - this.listQuery.form.check_dateEnd != null && - this.listQuery.form.check_dateEnd != "" - ) { - } else { - this.$message({ - type: "error", - message: "请选择检查结束时间", - duration: 3000, - }); - return; - } - } - if ( - this.listQuery.form.check_dateEnd != null && - this.listQuery.form.check_dateEnd != "" - ) { - if ( - this.listQuery.form.check_dateStart != null && - this.listQuery.form.check_dateStart != "" - ) { - } else { - this.$message({ - type: "error", - message: "请选择检查开始时间", - duration: 3000, - }); - return; - } - } - }, + checkTime(){ + if(this.listQuery.form.Conference_TimeStart!=null && this.listQuery.form.Conference_TimeStart!=''){ + if(this.listQuery.form.Conference_TimeEnd!=null && this.listQuery.form.Conference_TimeEnd!=''){ + }else { + this.$message({type:'error', message:"请选择检查结束时间", duration:3000}) + return + } + } + }, //搜索 getPageList() { this.listQuery.page = 1; @@ -319,10 +351,8 @@ }, uploadSectionFile(param) { let form = new FormData(); - var that = this; form.append('file', param.file); - //隐患延期申请附件 - form.append('type', "0"); + form.append('type', "1"); uploadFile(form).then(res => { var data = res.data; if (data.ok) { @@ -330,7 +360,7 @@ if (!fileName.endsWith("a62b")) { fileName = fileName + param.file.realFileName; } - that.ruleForm.realFileName = that.ruleForm.realFileName + "," + fileName; + this.fileList.push({name:fileName,url:fileName}) } }).error(res => { this.$message({ @@ -345,41 +375,205 @@ fileName: path, }; dowloand_do(params).then((res) => { - if (res.data.ok == 1) { - this.$notify({ - title: "成功", - message: res.data, - type: "success", - duration: 2000, - }); + if(res.data.type=='text/json'){ + const reader = new FileReader(); //创建一个FileReader实例 + reader.readAsText(res.data, 'utf-8'); //读取文件,结果用字符串形式表示 + //读取完成后,**获取reader.result** + reader.onload = e => { + this.$message({ + type: "error", + message: JSON.parse(reader.result).msg, + duration: 3000, + }); + } } else { - this.$message({ - type: "error", - message: res.data.msg, - duration: 3000, - }); + let blob = new Blob([res.data], {type: 'application/octet-stream'}) + console.log(blob) + // 创建下载的链接 + let blobUrl = window.URL.createObjectURL(blob) + let downloadElement = document.createElement('a') + downloadElement.href = blobUrl + //下载后文件名 + downloadElement.download = path + document.body.appendChild(downloadElement) + //点击下载 + downloadElement.click() + //下载完成移除元素 + document.body.removeChild(downloadElement) + // 释放掉blob对象 + window.URL.revokeObjectURL(blobUrl) } }); }, subFile(fileName){ return fileName.substring(fileName.indexOf("fileName=")+9) }, + //删除上传组件文件 handleRemove(file, fileList) { - console.log(file, fileList) + this.fileList = fileList; }, + //点击上传组件-文件列表 handlePreview(file) { - console.log(file) + this.downloadFile(file.url) }, beforeUpload(file) { var FileExt = file.name.replace(/.+\./, ""); - if (['jpg', 'png', 'bmp', 'gif', 'jpeg'].indexOf(FileExt.toLowerCase()) === -1) { + if (['doc', 'docx', 'pdf', 'ppt', 'pptx','xls','xlsx','rar','zip'].indexOf(FileExt.toLowerCase()) === -1) { this.$message({ type: 'warning', - message: '请上传后缀名为jpg、png、bmp、gif、jpeg的图片!' + message: '请上传正确格式的文件!(.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx,.rar,.zip)' }); return false; } }, + editMeeting(row, index) { + this.meetingForm = deepClone(row); + this.rowIndex = index; + this.dialogVisible = true; + this.title = '编辑'; + this.fileList = []; + const arr = this.meetingForm.realFileName; + for (let i = 0; i < arr.length; i++) { + this.fileList.push({name:this.subFile(arr[i]),url:this.subFile(arr[i])}) + } + }, + addMeeting(){ + this.fileList = []; + this.meetingForm={} + this.title="新增" + this.dialogVisible=true + }, + //提交表单 + submitFrom(formName){ + let fileStr = ''; + if (this.fileList.length != 0){ + this.fileList.forEach((item,index,arr)=>{ + if (item.url.endsWith("a62b")) { + fileStr = fileStr + item.url; + }else { + fileStr = fileStr + item.url + "a62b"; + } + }) + } + this.meetingForm.realFileName = fileStr; + console.log(this.meetingForm) + this.$refs[formName].validate((valid) => { + if (valid) { + + addOrEdit(this.meetingForm).then(res=>{ + if (res.data.ok==1) { + this.dialogVisible=false + this.$message({type:'success', message:res.data.msg, duration:3000}) + this.getPageList() + }else{ + this.$message({type:'error', message:res.data.msg, duration:3000}) + } + }) + } else { + console.log("error submit!!"); + return false; + } + }); + }, + deleteBatch() { + if (this.selectedList == null || this.selectedList.length == 0) { + this.$message({type: 'warning', message: '至少选中一条数据', duration: 3000}) + return + } + var ids = this.selectedList.map((obj) => { + return obj.id + }).join(",") + this.$confirm('确认删除吗', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + del(ids).then(() => { + this.getPageList() + this.$notify({ + title: "成功", + message: "删除成功", + type: "success", + duration: 2000, + }); + }); + }) + .catch(error => { + }); + }, + deleteMeeting(row) { + this.$confirm('确认删除吗', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + console.log(row.id) + del(row.id).then(() => { + this.getPageList() + this.$notify({ + title: "成功", + message: "删除成功", + type: "success", + duration: 2000, + }); + }); + }).catch(error => { + }); + }, + //撤销 + revokeBatch() { + if (this.selectedList == null || this.selectedList.length == 0) { + this.$message({type: 'warning', message: '至少选中一条数据', duration: 3000}) + return + } + var ids = this.selectedList.map((obj) => { + return obj.id + }).join(",") + this.$confirm('确认撤销吗', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + // revoke(ids).then(() => { + // this.getPageList() + // this.$notify({ + // title: "成功", + // message: "撤销成功", + // type: "success", + // duration: 2000, + // }); + // }); + }).catch(error => { + }); + }, + //上报 + putBatch() { + if (this.selectedList == null || this.selectedList.length == 0) { + this.$message({type: 'warning', message: '至少选中一条数据', duration: 3000}) + return + } + var ids = this.selectedList.map((obj) => { + return obj.id + }).join(",") + this.$confirm('确认上报吗', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + // put(ids).then(() => { + // this.getPageList() + // this.$notify({ + // title: "成功", + // message: "上报成功", + // type: "success", + // duration: 2000, + // }); + // }); + }).catch(error => { + }); + }, + + //日期格式转换 formatColumnDate(row, column) { // 获取单元格数据 -- Gitblit v1.9.2