From 44d7a737dc0d63ad1dd7c52d45fc2233d1950173 Mon Sep 17 00:00:00 2001
From: lyfO_o <764716047@qq.com>
Date: 星期四, 09 六月 2022 09:56:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'remotes/origin/shf' into master

---
 src/views/troubleshooting/index.vue |  655 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 655 insertions(+), 0 deletions(-)

diff --git a/src/views/troubleshooting/index.vue b/src/views/troubleshooting/index.vue
new file mode 100644
index 0000000..e2ca9bc
--- /dev/null
+++ b/src/views/troubleshooting/index.vue
@@ -0,0 +1,655 @@
+<template>
+  <div class="app-container">
+    <el-form
+      ref="form"
+      :inline="true"
+      class="inquire"
+      :model="listQuery.form"
+      label-width="100px"
+    >
+      <el-form-item label="地点">
+        <el-input v-model="listQuery.form.ADDRESS" style="width: 202px" placeholder="请输入内容"></el-input>
+      </el-form-item>
+      <el-form-item label="主持人">
+        <el-input v-model="listQuery.form.HOST" style="width: 202px" placeholder="请输入内容"></el-input>
+      </el-form-item>
+      <el-form-item label="召开时间">
+        <el-col :span="11">
+          <el-date-picker type="date" placeholder="选择日期" v-model="listQuery.form.Conference_TimeStart" 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="11">
+          <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>
+      </el-form-item>
+      <el-form-item style="text-align: center; padding: 0 50px">
+        <el-button type="primary" class="btns" size="small" icon="el-icon-search" @click="getPageList()">查询</el-button>
+        <el-button type="primary" class="btns" size="small" icon="el-icon-refresh-right" @click="reset()">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row class="title-center">
+        <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="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="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>
+            <div v-if="upType == 2">
+                <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="1">
+                    <span style="line-height: 36px; font-size: 14px; color: #606266;font-weight: bold;">至</span>
+                </el-col>
+                <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" @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="18" style="text-align: right">
+          <el-button class="btns" type="primary" size="small" @click="revokeBatch">撤销</el-button>
+        </el-col>
+      </div>
+    </el-row>
+    <el-row class="title-center">
+      <el-col :span="10">
+        <el-radio-group v-model="listQuery.form.CONFERENCE_PROFESSIONAL" @change="changeType2">
+          <el-radio-button label="0">全部</el-radio-button>
+          <el-radio-button label="综合">综合</el-radio-button>
+          <el-radio-button label="生产">生产</el-radio-button>
+          <el-radio-button label="设备">设备</el-radio-button>
+          <el-radio-button label="电器">电器</el-radio-button>
+          <el-radio-button label="仪表">仪表</el-radio-button>
+          <el-radio-button label="消防">消防</el-radio-button>
+          <el-radio-button label="安全管理">安全管理</el-radio-button>
+          <el-radio-button label="其他">其他</el-radio-button>
+        </el-radio-group>
+      </el-col>
+    </el-row>
+    <el-table :data="tableData" style="width: 100%" @selection-change="handleSelectionChange" v-loading="listLoading">
+        <el-table-column type="selection" width="55" align="center"></el-table-column>
+        <el-table-column v-if="listQuery.type==2" prop="communityname" label="会议单位" align="center" width="120"></el-table-column>
+        <el-table-column prop="CONFERENCE_TIME" label="召开时间" :formatter="formatColumnDate" align="center" width="120"></el-table-column>
+        <el-table-column prop="ADDRESS" label="地点" align="center" width="120"></el-table-column>
+        <el-table-column prop="HOST" label="主持人" align="center" width="120"></el-table-column>
+        <el-table-column prop="CONFERENCE_PROFESSIONAL" label="会议专业" align="center" width="120"></el-table-column>
+        <el-table-column prop="meeting_content" label="会议摘要" align="center">
+            <template slot-scope="scope">
+                <el-popover trigger="hover" placement="top">
+                    <p>{{ scope.row.meeting_content }}</p>
+                    <div slot="reference" class="name-wrapper">{{
+                            scope.row.meeting_content != null && scope.row.meeting_content.length > 20 ? scope.row.meeting_content.substring(0, 18) + "...." : scope.row.meeting_content
+                        }}
+                    </div>
+                </el-popover>
+            </template>
+        </el-table-column>
+        <el-table-column prop="realFileName" label="会议纪要" align="center">
+            <template slot-scope="scope" >
+
+                <div v-for="item in scope.row.realFileName">
+                    <el-link  type="primary" @click="downloadFile(subFile(item))">
+                        {{subFile(item)}}
+                    </el-link>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column prop="date" v-if="listQuery.type==0" label="基本操作" align="center">
+            <template slot-scope="scope">
+                <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>
+    <div style="text-align: right">
+      <el-pagination
+        v-show="recordTotal > 0"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-sizes="[10, 20, 30, 50]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="recordTotal"
+      >
+      </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"
+                              action="https://jsonplaceholder.typicode.com/posts/"
+                              :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,addOrEdit, del, revoke, upload_do} from "@/api/sgyhpczl/troubleshooting";
+import {uploadFile} from "@/api/sgyhpczl/hiddenDangerRectification";
+import {deepClone} from '@/utils'
+import {downloadFile} from "@/api/sgyhpczl/fileUtils";
+
+import {
+  initYHLX,
+} from "@/api/sgyhpczl/initSelect";
+
+export default {
+    data() {
+        return {
+            listQuery: {
+            page: 1,
+            limit: 10,
+            type: 0,//type=0 待上报 type=1 已上报 type=2 上级公司会议
+            form: {
+                CONFERENCE_PROFESSIONAL: '0'
+            },
+            },
+            form: {},
+            currentPage: 1,
+            pageSize: 10,
+            recordTotal: 0,
+            YHLXList:[],
+            tableData: [],
+            selectedList: [],
+            listLoading: false,
+            // fileList:[{name:'aa.doc',url:'sssss.doc'}],
+            fileList:[],
+            upTypeList:[{label:"按勾选上报",value:0},{label:"按时间上报",value:2}],
+            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() {
+        this.getPageList();
+        this.initYHLX();
+    },
+  methods: {
+      initYHLX(){
+          initYHLX().then(res=>{
+              if (res.data.ok==1){
+                  this.YHLXList=res.data.data
+              } else{
+                  this.$message({type:'error', message:res.data.msg, duration:3000})
+              }
+          })
+      },
+      changeUpType(val){
+        this.upType = val;
+          if (val == 2){
+              this.offset = 2;
+          }else {
+              this.offset = 14;
+          }
+      },
+      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;
+      this.checkTime();
+      this.listLoading = true
+      getPageList(this.listQuery).then((res) => {
+          this.listLoading = false
+          if (res.data.ok == 1) {
+          this.tableData = res.data.data.items;
+          this.recordTotal = res.data.data.total;
+        } else {
+          this.$message({
+            type: "error",
+            message: res.data.msg,
+            duration: 3000,
+          });
+        }
+      });
+    },
+    //重置
+    reset() {
+      this.listQuery.form = {
+          CONFERENCE_PROFESSIONAL: '0'
+      };
+      this.getPageList();
+    },
+    handleSizeChange(val) {
+      this.listQuery.limit = val;
+      this.getPageListForPagination();
+    },
+    handleCurrentChange(val) {
+      this.listQuery.page = val;
+      this.getPageListForPagination();
+    },
+    getPageListForPagination() {
+      this.checkTime();
+      getPageList(this.listQuery).then((res) => {
+        if (res.data.ok == 1) {
+          this.tableData = res.data.data.items;
+          this.recordTotal = res.data.data.total;
+        } else {
+          this.$message({
+            type: "error",
+            message: res.data.msg,
+            duration: 3000,
+          });
+        }
+      });
+    },
+    typeChange(val) {
+      this.listQuery.type = val;
+      this.getPageList();
+    },
+      changeType2(val){
+          this.listQuery.form.CONFERENCE_PROFESSIONAL = val;
+          this.getPageList();
+      },
+    handleSelectionChange(val) {
+      this.selectedList = [];
+      val.forEach((item) => {
+        this.selectedList.push(item);
+      });
+    },
+      uploadSectionFile(param) {
+          let form = new FormData();
+          form.append('file', param.file);
+          form.append('type', "1");
+          uploadFile(form).then(res => {
+              var data = res.data;
+              if (data.ok) {
+                  var fileName = data.data.fileName[0];
+                  if (!fileName.endsWith("a62b")) {
+                      fileName = fileName + "a62b";
+                  }
+                  this.fileList.push({name:fileName,url:fileName})
+              }
+          }).error(res => {
+              this.$message({
+                  type: 'error',
+                  message: '附件上传失败,请重试!'
+              });
+          })
+      },
+      downloadFile(path){
+          let params = {
+              type: 1,
+              fileName: path,
+          };
+          downloadFile(params).then((res) => {
+              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 {
+                  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) {
+          this.fileList = fileList;
+      },
+      //点击上传组件-文件列表
+      handlePreview(file) {
+          this.downloadFile(file.url)
+      },
+      beforeUpload(file) {
+          var FileExt = file.name.replace(/.+\./, "");
+          if (['doc', 'docx', 'pdf', 'ppt', 'pptx','xls','xlsx','rar','zip'].indexOf(FileExt.toLowerCase()) === -1) {
+              this.$message({
+                  type: 'warning',
+                  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(() => {
+              let data = {
+                  id:ids
+              }
+              revoke(data).then(() => {
+                  this.getPageList()
+                  this.$notify({
+                      title: "成功",
+                      message: "撤销成功",
+                      type: "success",
+                      duration: 2000,
+                  });
+              });
+          }).catch(error => {
+          });
+      },
+      //上报
+      putBatch() {
+          let data = {}
+          if (this.upType == 0){
+              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(",")
+              data = {
+                  type: this.upType,
+                  id: ids,
+              }
+          }else {
+              data = {
+                  type: this.upType,
+                  time: this.upTimeStart+'至'+this.upTimeEnd,
+              }
+          }
+          this.$confirm('确认上报吗', '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          }).then(() => {
+              upload_do(data).then(() => {
+                  this.getPageList()
+                  this.$notify({
+                      title: "成功",
+                      message: "上报成功",
+                      type: "success",
+                      duration: 2000,
+                  });
+              });
+          }).catch(error => {
+          });
+      },
+
+
+    //日期格式转换
+    formatColumnDate(row, column) {
+      // 获取单元格数据
+      let data = row[column.property];
+      if (data == null) {
+        return null;
+      }
+      let dt = new Date(data);
+      return (
+        dt.getFullYear() + "-" + (dt.getMonth() + 1) + "-" + dt.getDate() + " "
+      );
+    },
+  },
+};
+</script>
+<style scoped>
+.inquire {
+  display: flex;
+  justify-content: left;
+  flex-wrap: wrap;
+}
+.inquire .el-form-item {
+  padding: 0 20px;
+}
+.title-center {
+  padding: 20px 0;
+}
+
+.btns {
+  background-color: #034ea2;
+  border: 1px solid #034ea2;
+}
+
+.title-center /deep/ .el-radio-button:first-child .el-radio-button__inner {
+  border: none;
+}
+
+.title-center /deep/ .el-radio-button__inner {
+  border: none;
+  border-radius: 0px;
+}
+
+.title-center
+  /deep/
+  .el-radio-button__orig-radio:checked
+  + .el-radio-button__inner {
+  background-color: #034ea2;
+  background-color: #034ea2;
+}
+</style>

--
Gitblit v1.9.2