ly před 2 roky
rodič
revize
27c99b8640

+ 8 - 0
master/src/main/java/com/ruoyi/common/sendEmail/IMailService.java

@@ -19,6 +19,14 @@ public interface IMailService {
      */
     public void sendHtmlMail(String to, String subject, String content);
 
+    /**
+     * 发送HTML邮件
+     *
+     * @param to      收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    public void sendHtmlMail(String to, String subject, String content, String cc);
 
     /**
      * 发送带附件的邮件

+ 34 - 2
master/src/main/java/com/ruoyi/common/sendEmail/IMailServiceImpl.java

@@ -97,6 +97,40 @@ public class IMailServiceImpl implements IMailService {
         }
     }
 
+    /**
+     * html邮件
+     *
+     * @param to      收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    @Override
+    public void sendHtmlMail(String to, String subject, String content, String cc) {
+        //获取MimeMessage对象
+        MimeMessage message = mailSender.createMimeMessage();
+        MimeMessageHelper messageHelper;
+        try {
+            messageHelper = new MimeMessageHelper(message, true);
+            //邮件发送人
+            messageHelper.setFrom(from);
+            //邮件接收人
+            messageHelper.setTo(to);
+            //邮件发送人
+            messageHelper.setCc(cc);
+            //邮件主题
+            message.setSubject(subject);
+            //邮件内容,html格式
+            messageHelper.setText(content, true);
+            //发送
+            mailSender.send(message);
+            //日志信息
+            logger.info("邮件已经发送。");
+        } catch (Exception e) {
+            logger.error("发送邮件时发生异常!", e);
+        }
+    }
+
+
     /**
      * 带附件的邮件
      *
@@ -124,7 +158,5 @@ public class IMailServiceImpl implements IMailService {
         } catch (MessagingException e) {
             logger.error("发送邮件时发生异常!", e);
         }
-
-
     }
 }

+ 144 - 4
master/src/main/java/com/ruoyi/project/apply/controller/TApplyOfflinevalveController.java

@@ -1,10 +1,19 @@
 package com.ruoyi.project.apply.controller;
 
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.data.Pictures;
+import com.deepoove.poi.data.TextRenderData;
+import com.deepoove.poi.data.Texts;
+import com.deepoove.poi.data.style.Style;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SpringContextUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
@@ -14,6 +23,8 @@ import com.ruoyi.project.approve.damain.DevTask;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.project.plant.service.ITStaffmgrService;
+import io.jsonwebtoken.lang.Assert;
 import org.activiti.engine.ProcessEngine;
 import org.activiti.engine.ProcessEngines;
 import org.activiti.engine.RuntimeService;
@@ -25,10 +36,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 /**
  * 安全阀离线切出申请Controller
@@ -268,4 +281,131 @@ public class TApplyOfflinevalveController extends BaseController {
     public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(tApplyOfflinevalveService.deleteTApplyOfflinevalveByIds(ids));
     }
+
+    /**
+     * @param id
+     * @return
+     * @throws IOException
+     */
+    @GetMapping("/wordView/{id}")
+    public AjaxResult wordView(@PathVariable Long id) throws IOException {
+        //根据ID查询并生成
+        String url = PreView(id);
+        return AjaxResult.success(url);
+    }
+
+    /**
+     * @param id 生成文件名
+     * @return
+     * @throws IOException
+     */
+    public String PreView(Long id) throws IOException {
+        //根据ID查询并生成
+        TApplyOfflinevalve tApplyOfflinevalve = tApplyOfflinevalveService.selectTApplyOfflinevalveById(id);
+        String url = this.createApplyOfflinevalveWord(tApplyOfflinevalve);
+        return url;
+    }
+
+
+
+    /**
+     * 生成word
+     */
+    public String createApplyOfflinevalveWord(TApplyOfflinevalve tApplyOfflinevalve) throws IOException {
+        //生成word
+        //渲染文本
+        Map<String, Object> params = getWordData(tApplyOfflinevalve);
+        // 模板路径
+        String templatePath = "static/word/apply/applyOfflinevalve.docx";
+        // 生成word的路径
+        String fileDir = RuoYiConfig.getProfile() + "/" + "apply/applyOfflinevalve";
+        // 生成word的文件名称
+        String fileName = tApplyOfflinevalve.getId() + ".docx";
+        String wordPath = this.createWord(templatePath, fileDir, fileName, params);
+        return wordPath;
+    }
+
+    /**
+     * 获取word数据
+     */
+    public Map<String, Object> getWordData(TApplyOfflinevalve tApplyOfflinevalve) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("devNo", Texts.of(tApplyOfflinevalve.getDevNo()).fontSize(10).bold().create());
+        params.put("unit", Texts.of(tApplyOfflinevalve.getUnit()).fontSize(10).bold().create());
+        params.put("offlineReason", Texts.of(tApplyOfflinevalve.getOfflineReason()).fontSize(10).bold().create());
+        params.put("safa", Texts.of(tApplyOfflinevalve.getSafa()).fontSize(10).bold().create());
+        params.put("executor", Texts.of(tApplyOfflinevalve.getExecutor()).fontSize(10).bold().create());
+        params.put("confirmer", Texts.of(tApplyOfflinevalve.getConfirmer()).fontSize(10).bold().create());
+        params.put("applicant", Texts.of(tApplyOfflinevalve.getApplicant()).fontSize(10).bold().create());
+        params.put("approver", Texts.of(tApplyOfflinevalve.getApprover()).fontSize(10).bold().create());
+        params.put("lockConfirmer1", Texts.of(tApplyOfflinevalve.getLockConfirmer1()).fontSize(10).bold().create());
+        params.put("lockConfirmer2", Texts.of(tApplyOfflinevalve.getLockConfirmer2()).fontSize(10).bold().create());
+        params.put("infoConfirmer", Texts.of(tApplyOfflinevalve.getInfoConfirmer()).fontSize(10).bold().create());
+        params.put("remarks", Texts.of(tApplyOfflinevalve.getRemarks()).fontSize(10).bold().create());
+        getCheck(params,tApplyOfflinevalve.getDisassembly(),"d1" ,"d2");
+        getCheck(params,tApplyOfflinevalve.getDisassembly(),"d3");
+        getCheck(params,tApplyOfflinevalve.getResetConfirm(),"reset1" ,"reset2");
+        getCheck(params,tApplyOfflinevalve.getLeakConfirm(),"leak1" ,"leak2");
+        getCheck(params,tApplyOfflinevalve.getRevokeConfirm(),"revoke1" ,"revoke2");
+        getCheck(params,tApplyOfflinevalve.getLockConfirm(),"lock1" ,"lock2");
+        getCheck(params,tApplyOfflinevalve.getLockConfirm(),"lock3");
+        // 渲染文本
+        return params;
+    }
+
+    /**
+     * @param templatePath word模板文件路径
+     * @param fileDir      生成的文件存放地址
+     * @param fileName     生成的文件名
+     * @param paramMap     参数集合
+     * @return 返回word生成的路径
+     */
+    public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) throws IOException {
+        Assert.notNull(templatePath, "word模板文件路径不能为空");
+        Assert.notNull(fileDir, "生成的文件存放地址不能为空");
+        Assert.notNull(fileName, "生成的文件名不能为空");
+        File dir = new File(fileDir);
+        if (!dir.exists()) {
+            logger.info("目录不存在,创建文件夹{}!", fileDir);
+            dir.mkdirs();
+        }
+        fileName = fileName.replaceAll("/" , "_"); //替换文件中敏感字段
+        logger.info("目录文件{}!", fileName);
+        String filePath = fileDir + "/" + fileName;
+        logger.info("目录{}!", filePath);
+        // 读取模板渲染参数
+        InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
+        XWPFTemplate template = XWPFTemplate.compile(is).render(paramMap);
+        try {
+            // 将模板参数写入路径
+            template.writeToFile(filePath);
+            template.close();
+        } catch (Exception e) {
+            logger.error("生成word异常{}", e.getMessage());
+            e.printStackTrace();
+        }
+        String pathFileName = FileUploadUtils.getPathFileName(RuoYiConfig.getFilePath("/" + "apply/applyOfflinevalve"), fileName);
+        return pathFileName;
+    }
+    // 勾选框判断渲染
+    public void getCheck (Map<String, Object> params, String value , String check1 , String check2){
+        if ("是".equals(value)) {
+            params.put(check1,new TextRenderData("\u00FE",new Style("Wingdings",9)));
+            params.put(check2,new TextRenderData("\u006F",new Style("Wingdings",9)));
+        }else if ("否".equals(value)) {
+            params.put(check1,new TextRenderData("\u006F",new Style("Wingdings",9)));
+            params.put(check2,new TextRenderData("\u00FE",new Style("Wingdings",9)));
+        }else {
+            params.put(check1,new TextRenderData("\u006F",new Style("Wingdings",9)));
+            params.put(check2,new TextRenderData("\u006F",new Style("Wingdings",9)));
+        }
+    }
+    // 勾选框判断渲染
+    public void getCheck (Map<String, Object> params, String value , String check1){
+        if ("NA".equals(value)) {
+            params.put(check1,new TextRenderData("\u00FE",new Style("Wingdings",9)));
+        } {
+            params.put(check1,new TextRenderData("\u00FE",new Style("Wingdings",9)));
+        }
+    }
 }

+ 4 - 9
master/src/main/java/com/ruoyi/project/invoice/controller/TInvoiceBookingworkticketController.java

@@ -656,9 +656,9 @@ public class TInvoiceBookingworkticketController extends BaseController {
                 //电话
                 row.createCell(7).setCellValue(t.getBookingworkticket().getPhonenumber());
                 //用户  承包商和用户单位一致时,用户显示为空;用户单位为CBP/C 时,用户显示为空;
-                if (t.getBookingworkticket().getWorkUnit().equals(t.getBookingworkticket().getUserMgDeptName()) || t.getBookingworkticket().getUserMgDeptName().equals("CBP/C")){
+                if (t.getBookingworkticket().getWorkUnit().equals(t.getBookingworkticket().getUserMgDeptName()) || t.getBookingworkticket().getUserMgDeptName().equals("CBP/C")) {
                     row.createCell(8).setCellValue("");
-                }else {
+                } else {
                     row.createCell(8).setCellValue(t.getBookingworkticket().getUserMgDeptName() + " " + t.getBookingworkticket().getUserMgName() + " " + t.getBookingworkticket().getUserMgPhone());
                 }
                 //票号
@@ -837,9 +837,6 @@ public class TInvoiceBookingworkticketController extends BaseController {
         return wordPath;
     }
 
-    ;
-
-
     /**
      * 获取word数据
      */
@@ -889,7 +886,7 @@ public class TInvoiceBookingworkticketController extends BaseController {
             if (ticket.getUserMg() != null) {
                 SysUser sysUser = sysUserService.selectUserById(ticket.getUserMg());
                 if (!params.containsKey("userMg")) {
-                    if (sysUser.getSignUrl() != null && new File(sysUser.getSignUrl()).exists()  ) {
+                    if (sysUser.getSignUrl() != null && new File(sysUser.getSignUrl()).exists()) {
                         params.put("userMg", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(100, 40).create());
                     }
                 }
@@ -1036,8 +1033,6 @@ public class TInvoiceBookingworkticketController extends BaseController {
         return params;
     }
 
-    ;
-
     /**
      * @param templatePath word模板文件路径
      * @param fileDir      生成的文件存放地址
@@ -1054,7 +1049,7 @@ public class TInvoiceBookingworkticketController extends BaseController {
             logger.info("目录不存在,创建文件夹{}!", fileDir);
             dir.mkdirs();
         }
-        fileName = fileName.replaceAll("/" , "_"); //替换文件中敏感字段
+        fileName = fileName.replaceAll("/", "_"); //替换文件中敏感字段
         logger.info("目录文件{}!", fileName);
         String filePath = fileDir + "/" + fileName;
         logger.info("目录{}!", filePath);

binární
master/src/main/resources/static/word/apply/applyOfflinevalve.docx


+ 8 - 0
ui/src/api/apply/offlinevalve.js

@@ -61,3 +61,11 @@ export function exportOfflinevalve(query) {
     params: query
   })
 }
+
+//获取word url
+export function wordView(id) {
+  return request({
+    url: '/apply/offlinevalve/wordView/' + id,
+    method: 'get',
+  })
+}

+ 25 - 39
ui/src/utils/officeConvert.js

@@ -1,41 +1,27 @@
-import {officeConvert,pptConvert,bookConvert} from "@/api/system/dept";
-export default {
- 
-       //通用的文件预览查看全局方法
-       officeConvertCommon: function (data) {
-
-    return    officeConvert (data).then(response => {
-
-   //     console.log(response) 接口返回的数据
-            return response
-
-
-          })
+import {officeConvert, pptConvert, bookConvert} from "@/api/system/dept";
 
-   },
-    
-   //预约作业票的转换
-     bookConvertCommon : function (data) {
-
-      return    bookConvert (data).then(response => {
-  
-     //     console.log(response) 接口返回的数据
-              return response
-  
-  
-            })
-  
-     },
-
-     pptConvertCommon: function (data) {
-
-      return    pptConvert (data).then(response => {
-  
-     //     console.log(response) 接口返回的数据
-              return response
-  
-  
-            })
-  
-     }
+export default {
+  //通用的文件预览查看全局方法
+  officeConvertCommon: function (data) {
+    return officeConvert(data).then(response => {
+      //     console.log(response) 接口返回的数据
+      return response
+    })
+  },
+
+  //预约作业票的转换
+  bookConvertCommon: function (data) {
+    return bookConvert(data).then(response => {
+      //     console.log(response) 接口返回的数据
+      return response
+    })
+  },
+
+  pptConvertCommon: function (data) {
+    return pptConvert(data).then(response => {
+      //     console.log(response) 接口返回的数据
+      return response
+    })
+
+  }
 }

+ 110 - 3
ui/src/views/apply/offlinevalve/index.vue

@@ -155,6 +155,13 @@
             @click="openApproveDetail(scope.row)"
           >流转详情
           </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-document"
+            @click="wordView(scope.row)"
+          >预览
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -331,7 +338,24 @@
         </el-descriptions-item>
       </el-descriptions>
     </el-dialog>
-
+    <el-dialog v-loading="loadingFlash" element-loading-background="rgba(0,0,0,0.2)" v-dialogDrag :title="pdf.title"
+               :visible.sync="pdf.open" width="1300px" :center="true" append-to-body>
+      <div style="margin-top: -60px;float: right;margin-right: 40px;">
+        <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
+      </div>
+      <div style="margin-top: -30px">
+        <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"
+                v-if="ppt"></iframe>
+      </div>
+      <div style="padding: 30px; width: 100%; height: 100%;">
+        <el-carousel class="" ref="carousel" arrow="always" v-if="pptView"
+                     height="700px" trigger="click" :autoplay="false" indicator-position="outside">
+          <el-carousel-item class="lun_img" v-for="item in imgs" v-bind:key="item">
+            <img :src="item" width="100%" height="100%" object-fit="cover"/>
+          </el-carousel-item>
+        </el-carousel>
+      </div>
+    </el-dialog>
 
     <offlinevalve-detail v-if="offlinevalveDetailVisible" ref="offlinevalveDetail"></offlinevalve-detail>
   </div>
@@ -345,7 +369,8 @@ import {
   addOfflinevalve,
   updateOfflinevalve,
   exportOfflinevalve,
-  importTemplate
+  importTemplate,
+  wordView
 } from "@/api/apply/offlinevalve";
 import {treeselect} from "@/api/system/dept";
 import {getToken} from "@/utils/auth";
@@ -371,6 +396,9 @@ export default {
       labelStyle: {'width': '200px'},
       // 遮罩层
       loading: true,
+      loadingFlash: false,
+      pptView: false,
+      ppt: false,
       // 选中数组
       ids: [],
       // 非单个禁用
@@ -457,6 +485,15 @@ export default {
         approverName: null,
         applicantName: null
       },
+      pdf: {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+      },
       // 表单参数
       form: {},
       // 表单校验
@@ -750,7 +787,77 @@ export default {
     // 提交上传文件
     submitFileForm() {
       this.$refs.upload.submit();
-    }
+    },
+    wordView(row){
+      wordView(row.id).then(response => {
+        console.log(response.msg)
+        this.handleSee("申请单",response.msg )
+      });
+    },
+    handleSee (fileName , url){
+      //office预览
+      this.loadingFlash=true
+      this.pdf.open =true
+      this.pdf.title = fileName
+      this.pdf.pdfUrl =""
+      this.pptView=false
+      this.ppt=true
+      //如果是PDF等直接可以打开的就不调接口,否则调用接口
+      if(fileName.endsWith('pdf')){
+        this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + url
+        this.loadingFlash=false
+      }
+      else{
+        const formatDate =new FormData();
+        formatDate.append("filepath",url)
+        //调用文件预览api
+        let res= this.officeConvert.bookConvertCommon(formatDate)
+        //查看接受全局方法的返回结果 console.log(res)
+        //利用.then方法接受Promise对象
+        res.then((result)=>{
+          //关闭加载中
+          this.loadingFlash=false
+          if(result.msg.includes("csv")){
+            this.pdf.pdfUrl =process.env.VUE_APP_BASE_API+ result.data
+            this.$alert(result.msg, this.$t('检查乱码'), { dangerouslyUseHTMLString: true });
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+          }else if(result.msg.includes("不存在")){
+            //文件不存在时提示
+            this.pdf.pdfUrl =""
+            this.$alert(result.msg, this.$t('预览失败'), { dangerouslyUseHTMLString: true });
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+            this.pdf.open =false
+          }else if(result.msg.includes("不支持此格式")){
+            this.pdf.pdfUrl =""
+            this.$alert(result.msg, this.$t('预览失败'), { dangerouslyUseHTMLString: true });
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+            this.pdf.open =false
+          } else{
+            //成功时直接给地址
+            this.pdf.pdfUrl =process.env.VUE_APP_BASE_API+ result.data
+          }
+        }).catch(result => {
+          //请求失败,关闭loading,pdf地址直接为为空,不显示
+          this.pdf.pdfUrl =""
+          this.loadingFlash = false;
+        })
+      }
+    },
+    //文件预览
+    openPdf() {
+      //ppt就跳路由预览,office就直接打开文件新页面
+      const didi = {imgs: this.imgs}
+      if (this.pptView == true && this.ppt == false) {
+        let routeUrl = this.$router.resolve({
+          path: "/cpms/index.html#/pptyulan",
+          query: didi
+        });
+        window.open("/cpms/index.html#/pptyulan?id=" + this.pdf.pdfUrl, '_blank')
+        console.log(this.imgs)
+      } else {
+        window.open(this.pdf.pdfUrl)
+      }
+    },
   }
 };
 </script>

+ 246 - 224
ui/src/views/components/PlantProgList/index.vue

@@ -24,7 +24,8 @@
           size="mini"
           @click="handleAdd"
           v-hasPermi="['document:plantproglist:add']"
-        >{{ $t('新增') }}</el-button>
+        >{{ $t('新增') }}
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -34,7 +35,8 @@
           :disabled="single"
           @click="handleUpdate"
           v-hasPermi="['document:plantproglist:edit']"
-        >{{ $t('修改') }}</el-button>
+        >{{ $t('修改') }}
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -44,7 +46,8 @@
           :disabled="multiple"
           @click="handleDelete"
           v-hasPermi="['document:plantproglist:remove']"
-        >{{ $t('删除') }}</el-button>
+        >{{ $t('删除') }}
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -53,7 +56,8 @@
           size="mini"
           @click="handleImport"
           v-hasPermi="['document:plantproglist:edit']"
-        >{{ $t('导入') }}</el-button>
+        >{{ $t('导入') }}
+        </el-button>
       </el-col>
       <!--      <el-col :span="1.5">-->
       <!--        <el-button-->
@@ -71,7 +75,8 @@
           size="mini"
           @click="handleExport"
           v-hasPermi="['document:plantproglist:export']"
-        >{{ $t('导出') }}</el-button>
+        >{{ $t('导出') }}
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -79,14 +84,16 @@
           icon="el-icon-s-data"
           size="mini"
           @click="handleData"
-        >{{ $t('数据分析') }}</el-button>
+        >{{ $t('数据分析') }}
+        </el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <form ref="downloadExportForm" :action="downloadExportAction" target="FORMSUBMIT">
     </form>
-    <el-table v-loading="loading" class="table" :data="plantproglistList" @selection-change="handleSelectionChange" :cell-class-name="tableCellClassName" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
+    <el-table v-loading="loading" class="table" :data="plantproglistList" @selection-change="handleSelectionChange"
+              :cell-class-name="tableCellClassName" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center"/>
       <el-table-column :label="$t('文件编号')" align="center" prop="fileno" width="150" :show-overflow-tooltip="true"/>
       <el-table-column :label="$t('文件名称')" align="center" width="220" prop="filename" :show-overflow-tooltip="true"/>
       <el-table-column :label="$t('版次')" align="center" prop="revision" :show-overflow-tooltip="true"/>
@@ -100,45 +107,55 @@
       <el-table-column :label="$t('下次修订日期')" align="center" prop="nexteditdate" width="100">
         <template slot-scope="scope">
           <span style="vertical-align:middle">{{ parseTime(scope.row.nexteditdate, '{y}-{m}-{d}') }}</span>
-          <svg-icon v-if="scope.row.item !== 5" :icon-class="changeColorPiont(scope.row.nexteditdate)" style="font-size: 8px"></svg-icon>
+          <svg-icon v-if="scope.row.item !== 5" :icon-class="changeColorPiont(scope.row.nexteditdate)"
+                    style="font-size: 8px"></svg-icon>
         </template>
       </el-table-column>
-      <el-table-column :label="$t('回顾频率')" align="center" prop="reviewFrequency" :show-overflow-tooltip="true" v-if="this.itemNum !== '5'"/>
+      <el-table-column :label="$t('回顾频率')" align="center" prop="reviewFrequency" :show-overflow-tooltip="true"
+                       v-if="this.itemNum !== '5'"/>
       <el-table-column :label="$t('回顾日期')" align="center" prop="reviewdate" width="100" v-if="this.itemNum !== '5'">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.reviewdate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column :label="$t('回顾结果')" align="center" prop="reviewResult" width="150" :show-overflow-tooltip="true" v-if="this.itemNum !== '5'"/>
-      <el-table-column :label="$t('下次回顾日期')" align="center" prop="nextreviewdate" width="100" v-if="this.itemNum !== '5'">
+      <el-table-column :label="$t('回顾结果')" align="center" prop="reviewResult" width="150" :show-overflow-tooltip="true"
+                       v-if="this.itemNum !== '5'"/>
+      <el-table-column :label="$t('下次回顾日期')" align="center" prop="nextreviewdate" width="100"
+                       v-if="this.itemNum !== '5'">
         <template slot-scope="scope">
           <span style="vertical-align:middle">{{ parseTime(scope.row.nextreviewdate, '{y}-{m}-{d}') }}</span>
-          <svg-icon v-if="scope.row.item !== 5" :icon-class="changeColorPiont(scope.row.nextreviewdate)" style="font-size: 8px"></svg-icon>
+          <svg-icon v-if="scope.row.item !== 5" :icon-class="changeColorPiont(scope.row.nextreviewdate)"
+                    style="font-size: 8px"></svg-icon>
         </template>
       </el-table-column>
-      <el-table-column :label="$t('密级分类')" align="center" prop="classify" width="100" v-if="this.itemNum !== '5'" :formatter="classifyFormat" />
+      <el-table-column :label="$t('密级分类')" align="center" prop="classify" width="100" v-if="this.itemNum !== '5'"
+                       :formatter="classifyFormat"/>
       <el-table-column :label="$t('文件更新状态(控制室)')" align="center" v-if="[5,6].includes(this.itemNum)">
         <template slot-scope="scope">
           <span v-if="scope.row.revision == scope.row.versionKzs"></span>
-          <span v-else style="color: #ff6d6d">{{$t('未更新')}}</span>
+          <span v-else style="color: #ff6d6d">{{ $t('未更新') }}</span>
         </template>
       </el-table-column>
       <el-table-column :label="$t('文件更新状态(公共盘)')" align="center" v-if="this.itemNum !== '5'">
         <template slot-scope="scope">
-          <span v-if="scope.row.revision == scope.row.versionPan">{{$t('已更新')}}</span>
-          <span v-else style="color: #ff6d6d">{{$t('未更新')}}</span>
+          <span v-if="scope.row.revision == scope.row.versionPan">{{ $t('已更新') }}</span>
+          <span v-else style="color: #ff6d6d">{{ $t('未更新') }}</span>
         </template>
       </el-table-column>
-      <el-table-column :label="$t('附件编号')" align="center" prop="attachmentNo" v-if="this.itemNum === '5'" :show-overflow-tooltip="true" />
-      <el-table-column :label="$t('附件名称')" align="center" prop="attachmentName" v-if="this.itemNum === '5'" :show-overflow-tooltip="true"/>
-      <el-table-column :label="$t('附件版次')" align="center" prop="attachmentRevision" v-if="this.itemNum === '5'" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('附件编号')" align="center" prop="attachmentNo" v-if="this.itemNum === '5'"
+                       :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('附件名称')" align="center" prop="attachmentName" v-if="this.itemNum === '5'"
+                       :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('附件版次')" align="center" prop="attachmentRevision" v-if="this.itemNum === '5'"
+                       :show-overflow-tooltip="true"/>
       <el-table-column :label="$t('附件修改日期')" align="center" prop="revisionDate" v-if="this.itemNum === '5'" width="100">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.revisionDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
       <el-table-column :label="$t('备注')" align="center" prop="remarks" :show-overflow-tooltip="true"/>
-      <el-table-column :label="$t('操作')" align="center" fixed="right" width="190" class-name="small-padding fixed-width">
+      <el-table-column :label="$t('操作')" align="center" fixed="right" width="190"
+                       class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -146,21 +163,24 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['document:plantproglist:edit']"
-          >{{ $t('修改') }}</el-button>
+          >{{ $t('修改') }}
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['document:plantproglist:remove']"
-          >{{ $t('删除') }}</el-button>
+          >{{ $t('删除') }}
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-document"
             @click="handleDoc(scope.row)"
             v-hasPermi="['document:plantproglist:edit']"
-          >{{ $t('报告附件') }}</el-button>
+          >{{ $t('报告附件') }}
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -177,7 +197,7 @@
     <el-dialog v-dialogDrag :title="title" :visible.sync="open" width="1200px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="150px">
         <el-form-item :label="$t('文件编号')" prop="fileno">
-          <el-input v-model="form.fileno" :placeholder="$t('请输入') + $t('文件编号')" />
+          <el-input v-model="form.fileno" :placeholder="$t('请输入') + $t('文件编号')"/>
         </el-form-item>
         <el-form-item :label="$t('文件名称')" prop="filename">
           <el-input v-model="form.filename" :placeholder="$t('请输入') + $t('文件名称')" @change="changeRevisionDate"/>
@@ -185,19 +205,19 @@
         <el-row>
           <el-col :span="12">
             <el-form-item :label="$t('版次')" prop="revision">
-              <el-input v-model="form.revision" :placeholder="$t('请输入') + $t('版次')" />
+              <el-input v-model="form.revision" :placeholder="$t('请输入') + $t('版次')"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item :label="$t('RC代码')" prop="rccode">
-              <el-input v-model="form.rccode" :placeholder="$t('请输入') + $t('RC代码')" />
+              <el-input v-model="form.rccode" :placeholder="$t('请输入') + $t('RC代码')"/>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item :label="$t('更新负责人')" prop="responsibility">
-              <el-input v-model="form.responsibility" :placeholder="$t('请输入') + $t('更新负责人')" />
+              <el-input v-model="form.responsibility" :placeholder="$t('请输入') + $t('更新负责人')"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -245,7 +265,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item :label="$t('回顾结果')" prop="reviewResult" v-if="this.itemNum !== '5'">
-              <el-input v-model="form.reviewResult" :placeholder="$t('请输入') + $t('回顾结果')" />
+              <el-input v-model="form.reviewResult" :placeholder="$t('请输入') + $t('回顾结果')"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -274,26 +294,26 @@
           </el-col>
           <el-col :span="12">
             <el-form-item :label="$t('公共盘文件版本')" prop="versionPan" v-if="this.itemNum !== '5'">
-              <el-input v-model="form.versionPan" :placeholder="$t('请输入') + $t('公共盘文件版本')" />
+              <el-input v-model="form.versionPan" :placeholder="$t('请输入') + $t('公共盘文件版本')"/>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item :label="$t('附件编号')" prop="attachmentNo" v-if="this.itemNum === '5'">
-              <el-input v-model="form.attachmentNo" :placeholder="$t('请输入') + $t('附件编号')" />
+              <el-input v-model="form.attachmentNo" :placeholder="$t('请输入') + $t('附件编号')"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item :label="$t('附件名称')" prop="attachmentName" v-if="this.itemNum === '5'">
-              <el-input v-model="form.attachmentName" :placeholder="$t('请输入') + $t('附件名称')" />
+              <el-input v-model="form.attachmentName" :placeholder="$t('请输入') + $t('附件名称')"/>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item :label="$t('附件版次')" prop="attachmentRevision" v-if="this.itemNum === '5'">
-              <el-input v-model="form.attachmentRevision" :placeholder="$t('请输入') + $t('附件版次')" />
+              <el-input v-model="form.attachmentRevision" :placeholder="$t('请输入') + $t('附件版次')"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -310,12 +330,13 @@
         <el-row>
           <el-col :span="12">
             <el-form-item :label="$t('备注')" prop="remarks">
-              <el-input v-model="form.remarks" :placeholder="$t('请输入') + $t('备注')" />
+              <el-input v-model="form.remarks" :placeholder="$t('请输入') + $t('备注')"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item :label="$t('归属部门')" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" :placeholder="$t('请选择') + $t('归属部门')" />
+              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true"
+                          :placeholder="$t('请选择') + $t('归属部门')"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -349,7 +370,7 @@
           <el-link type="info" style="font-size:12px" @click="importTemplate">{{ $t('下载模板') }}</el-link>
         </div>
         <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
-          <input name="type" :value="upload.type" hidden />
+          <input name="type" :value="upload.type" hidden/>
         </form>
         <div class="el-upload__tip" style="color:#ff0000" slot="tip">{{ $t('提示:仅允许导入“xls”或“xlsx”格式文件!') }}</div>
       </el-upload>
@@ -380,12 +401,12 @@
       <el-table :data="doc.commonfileList" border>
         <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
           <template slot-scope="scope">
-            <a  class="link-type"  @click="handleDownload(scope.row)">
+            <a class="link-type" @click="handleDownload(scope.row)">
               <span>{{ scope.row.fileName }}</span>
             </a>
           </template>
         </el-table-column>
-        <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80" />
+        <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80"/>
         <el-table-column :label="$t('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
         <el-table-column :label="$t('操作')" align="center" width="150" class-name="small-padding fixed-width">
           <template slot-scope="scope">
@@ -400,26 +421,30 @@
               type="text"
               icon="el-icon-view"
               @click="handleSee(scope.row)"
-            > {{ $t('预览') }}</el-button>
+            > {{ $t('预览') }}
+            </el-button>
             <el-button
               v-if="scope.row.fileName.endsWith('ppt')||scope.row.fileName.endsWith('pptx') "
               size="mini"
               type="text"
               icon="el-icon-view"
               @click="handleSeePPT(scope.row)"
-            > {{ $t('ppt预览') }}</el-button>
+            > {{ $t('ppt预览') }}
+            </el-button>
             <el-button
               size="mini"
               type="text"
               icon="el-icon-download"
               @click="handleDownload(scope.row)"
-            >{{ $t('下载') }}</el-button>
+            >{{ $t('下载') }}
+            </el-button>
             <el-button
               size="mini"
               type="text"
               icon="el-icon-delete"
               @click="handleDeleteDoc(scope.row)"
-            >{{ $t('删除') }}</el-button>
+            >{{ $t('删除') }}
+            </el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -428,20 +453,22 @@
         <el-button @click="doc.open = false">{{ $t('返 回') }}</el-button>
       </div>
     </el-dialog>
-    <el-dialog  v-loading="loadingFlash"     element-loading-background="rgba(0,0,0,0.2)"                 v-dialogDrag :title="pdf.title" :visible.sync="pdf.open"  width="1300px" :center="true" append-to-body>
+    <el-dialog v-loading="loadingFlash" element-loading-background="rgba(0,0,0,0.2)" v-dialogDrag :title="pdf.title"
+               :visible.sync="pdf.open" width="1300px" :center="true" append-to-body>
       <div style="margin-top: -60px;float: right;margin-right: 40px;">
-        <el-button size="mini" type="text" @click="openPdf">{{$t('新页面打开PDF')}}</el-button></div>
-      <div style="margin-top: -30px" >
-        <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px" v-if="ppt"></iframe>
+        <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
       </div>
-      <div style="padding: 30px; width: 100%; height: 100%;" >
-        <el-carousel class="" ref="carousel"  arrow="always"  v-if="pptView"
-                   height="700px"  trigger="click" :autoplay="false" indicator-position="outside">
-          <el-carousel-item class="lun_img" v-for="item in imgs" v-bind:key="item" >
-            <img :src="item" width="100%" height="100%" object-fit="cover" />
+      <div style="margin-top: -30px">
+        <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"
+                v-if="ppt"></iframe>
+      </div>
+      <div style="padding: 30px; width: 100%; height: 100%;">
+        <el-carousel class="" ref="carousel" arrow="always" v-if="pptView"
+                     height="700px" trigger="click" :autoplay="false" indicator-position="outside">
+          <el-carousel-item class="lun_img" v-for="item in imgs" v-bind:key="item">
+            <img :src="item" width="100%" height="100%" object-fit="cover"/>
           </el-carousel-item>
         </el-carousel>
-
       </div>
     </el-dialog>
     <el-drawer
@@ -456,7 +483,7 @@
               <span>{{ $t('RC代码统计') }}</span>
             </div>
             <div class="text item">
-              <rc-data :item = this.item v-if="sonRefresh"></rc-data>
+              <rc-data :item=this.item v-if="sonRefresh"></rc-data>
             </div>
           </el-card>
         </el-col>
@@ -468,7 +495,7 @@
               <span>{{ $t('分级统计') }}</span>
             </div>
             <div class="text item">
-              <classify-data :item = this.item v-if="sonRefresh"></classify-data>
+              <classify-data :item=this.item v-if="sonRefresh"></classify-data>
             </div>
           </el-card>
         </el-col>
@@ -503,10 +530,10 @@ export default {
   components: {ClassifyData, RcData, Treeselect},
   data() {
     return {
-      imgs:[],
-      jpgList:[],
-      ppt:false,
-      pptView:false,
+      imgs: [],
+      jpgList: [],
+      ppt: false,
+      pptView: false,
       drawer: false,
       direction: 'rtl',
       sonRefresh: true,
@@ -529,7 +556,7 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
       // 分级字典
@@ -551,7 +578,7 @@ export default {
         // 是否更新已经存在的用户数据
         updateSupport: 0,
         // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
+        headers: {Authorization: "Bearer " + getToken()},
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/document/plantproglist/importData"
       },
@@ -570,7 +597,7 @@ export default {
         // 报告附件上传位置编号
         ids: 0,
         // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
+        headers: {Authorization: "Bearer " + getToken()},
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
         commonfileList: null,
@@ -581,7 +608,7 @@ export default {
         pType: 'plantproglist',
         pId: null
       },
-      pdf : {
+      pdf: {
         title: '',
         pdfUrl: '',
         numPages: null,
@@ -624,43 +651,43 @@ export default {
       // 表单校验
       rules: {
         fileno: [
-          { required: true, message: this.$t('文件编号') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('文件编号') + this.$t('不能为空'), trigger: "blur"}
         ],
         filename: [
-          { required: true, message: this.$t('文件名称') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('文件名称') + this.$t('不能为空'), trigger: "blur"}
         ],
         revision: [
-          { required: true, message: this.$t('版次') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('版次') + this.$t('不能为空'), trigger: "blur"}
         ],
         rccode: [
-          { required: true, message: this.$t('RC代码') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('RC代码') + this.$t('不能为空'), trigger: "blur"}
         ],
         carrier: [
-          { required: true, message: this.$t('载体') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('载体') + this.$t('不能为空'), trigger: "blur"}
         ],
         responsibility: [
-          { required: true, message: this.$t('更新负责人') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('更新负责人') + this.$t('不能为空'), trigger: "blur"}
         ],
         filedate: [
-          { required: true, message: this.$t('修订日期') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('修订日期') + this.$t('不能为空'), trigger: "blur"}
         ],
         reviewdate: [
-          { required: true, message: this.$t('回顾日期') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('回顾日期') + this.$t('不能为空'), trigger: "blur"}
         ],
         nextreviewdate: [
-          { required: true, message: this.$t('下次回顾日期') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('下次回顾日期') + this.$t('不能为空'), trigger: "blur"}
         ],
         classify: [
-          { required: true, message: this.$t('密级分类') + this.$t('不能为空'), trigger: "change" }
+          {required: true, message: this.$t('密级分类') + this.$t('不能为空'), trigger: "change"}
         ],
         reviewFrequency: [
-          { required: true, message: this.$t('回顾频率') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('回顾频率') + this.$t('不能为空'), trigger: "blur"}
         ],
         reviewResult: [
-          { required: true, message: this.$t('回顾结果') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('回顾结果') + this.$t('不能为空'), trigger: "blur"}
         ],
         deptId: [
-          { required: true, message: this.$t('归属部门') + this.$t('不能为空'), trigger: "blur" }
+          {required: true, message: this.$t('归属部门') + this.$t('不能为空'), trigger: "blur"}
         ],
       }
     };
@@ -685,14 +712,14 @@ export default {
 
   },
   methods: {
-    getNextDate(){
-      var reviewFrequency=this.form.reviewFrequency;
-      if (this.form.reviewdate!= null&&reviewFrequency!= null){
+    getNextDate() {
+      var reviewFrequency = this.form.reviewFrequency;
+      if (this.form.reviewdate != null && reviewFrequency != null) {
         var s = reviewFrequency.substring(0, reviewFrequency.indexOf("/"));
-        if(this.form.reviewdate.endsWith("02-29")){
-          this.form.nextreviewdate=dayjs(new Date(this.form.reviewdate)).add(1,'year').format("YYYY-MM-DD");
-        }else{
-          this.form.nextreviewdate=dayjs(new Date(this.form.reviewdate)).add(1,'year').subtract(1,'day').format("YYYY-MM-DD");
+        if (this.form.reviewdate.endsWith("02-29")) {
+          this.form.nextreviewdate = dayjs(new Date(this.form.reviewdate)).add(1, 'year').format("YYYY-MM-DD");
+        } else {
+          this.form.nextreviewdate = dayjs(new Date(this.form.reviewdate)).add(1, 'year').subtract(1, 'day').format("YYYY-MM-DD");
         }
       }
     },
@@ -706,26 +733,26 @@ export default {
       });
     },
     //根据分数显示颜色提示
-    tableCellClassName({ row, column, rowIndex, columnIndex }) {
+    tableCellClassName({row, column, rowIndex, columnIndex}) {
       // if (columnIndex == 7 && row.item !== 5) {
       //   return this.changeColor(row.nexteditdate)
       // }else if (columnIndex == 11 && row.item !== 5) {
       //   return this.changeColor(row.nextreviewdate)
       // }
     },
-    changeColor (value) {
+    changeColor(value) {
       var timeInterval = Date.parse(value) - Date.parse(new Date());
-      if (timeInterval <= 15 * 24 * 3600 * 1000){
+      if (timeInterval <= 15 * 24 * 3600 * 1000) {
         return 'cellUrgent'
-      }else if (timeInterval <= 30 * 24 * 3600 * 1000) {
+      } else if (timeInterval <= 30 * 24 * 3600 * 1000) {
         return 'cellCare'
       }
     },
-    changeColorPiont (value) {
+    changeColorPiont(value) {
       var timeInterval = Date.parse(value) - Date.parse(new Date());
-      if (timeInterval <= 15 * 24 * 3600 * 1000){
+      if (timeInterval <= 15 * 24 * 3600 * 1000) {
         return 'roundRed'
-      }else if (timeInterval <= 30 * 24 * 3600 * 1000) {
+      } else if (timeInterval <= 30 * 24 * 3600 * 1000) {
         return 'roundYellow'
       }
     },
@@ -742,22 +769,22 @@ export default {
     //根据修订日期生成其他日期
     changeRevisionDate() {
       const filename = this.form.filename;
-      var nexteditdate="";
-      if (filename&&filename.indexOf("应急响应")!==-1) {
-        if(this.form.filedate.endsWith("02-29")){
-          nexteditdate=dayjs(new Date(this.form.filedate)).add(1,'year').format("YYYY-MM-DD");
-        }else{
-          nexteditdate=dayjs(new Date(this.form.filedate)).add(1,'year').subtract(1,'day').format("YYYY-MM-DD");
+      var nexteditdate = "";
+      if (filename && filename.indexOf("应急响应") !== -1) {
+        if (this.form.filedate.endsWith("02-29")) {
+          nexteditdate = dayjs(new Date(this.form.filedate)).add(1, 'year').format("YYYY-MM-DD");
+        } else {
+          nexteditdate = dayjs(new Date(this.form.filedate)).add(1, 'year').subtract(1, 'day').format("YYYY-MM-DD");
         }
-      }else {
-        if(this.form.filedate.endsWith("02-29")){
-          nexteditdate=dayjs(new Date(this.form.filedate)).add(3,'year').format("YYYY-MM-DD");
-        }else{
-          nexteditdate=dayjs(new Date(this.form.filedate)).add(3,'year').subtract(1,'day').format("YYYY-MM-DD");
+      } else {
+        if (this.form.filedate.endsWith("02-29")) {
+          nexteditdate = dayjs(new Date(this.form.filedate)).add(3, 'year').format("YYYY-MM-DD");
+        } else {
+          nexteditdate = dayjs(new Date(this.form.filedate)).add(3, 'year').subtract(1, 'day').format("YYYY-MM-DD");
         }
       }
       var nextedit = new Date(nexteditdate);
-      this.form.nexteditdate = formatDate(nextedit,'yyyy-MM-dd')
+      this.form.nexteditdate = formatDate(nextedit, 'yyyy-MM-dd')
       // var reviewdate = Date.parse(this.form.filedate) + (1 * 365 * 24 * 3600 * 1000)
       // var review = new Date(reviewdate);
       // this.form.reviewdate = formatDate(review,'yyyy-MM-dd')
@@ -816,7 +843,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -833,7 +860,7 @@ export default {
         console.log(response)
         this.form = response.data;
         this.open = true;
-        this.title = this.$t('修改')  + this.$t('装置程序清单');
+        this.title = this.$t('修改') + this.$t('装置程序清单');
       });
     },
     /** 提交按钮 */
@@ -859,11 +886,11 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;
-      this.$confirm(this.$t('是否确认删除装置程序清单编号为"')+  + ids + this.$t('"的数据项?'), this.$t('警告'), {
+      this.$confirm(this.$t('是否确认删除装置程序清单编号为"') + +ids + this.$t('"的数据项?'), this.$t('警告'), {
         confirmButtonText: this.$t('确定'),
         cancelButtonText: this.$t('取消'),
         type: "warning"
-      }).then(function() {
+      }).then(function () {
         return delPlantproglist(ids);
       }).then(() => {
         this.getList();
@@ -877,7 +904,7 @@ export default {
         confirmButtonText: this.$t('确定'),
         cancelButtonText: this.$t('取消'),
         type: "warning"
-      }).then(function() {
+      }).then(function () {
         return exportPlantproglist(queryParams);
       }).then(response => {
         this.download(response.msg);
@@ -909,9 +936,9 @@ export default {
       this.upload.isUploading = false;
       this.$refs.upload.clearFiles();
       if (response.data[0] != null) {
-        this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据') + "," + this.$t('第') + response.data + this.$t('行数据出现错误导入失败')+"。", this.$t('导入结果'), { dangerouslyUseHTMLString: true });
-      }else {
-        this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据'), this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+        this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据') + "," + this.$t('第') + response.data + this.$t('行数据出现错误导入失败') + "。", this.$t('导入结果'), {dangerouslyUseHTMLString: true});
+      } else {
+        this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据'), this.$t('导入结果'), {dangerouslyUseHTMLString: true});
       }
       this.getList();
     },
@@ -927,7 +954,7 @@ export default {
         this.$refs.doc.clearFiles()
       })
     },
-    getFileList (){
+    getFileList() {
       allFileList(this.doc.queryParams).then(response => {
         this.doc.commonfileList = response;
       });
@@ -940,7 +967,7 @@ export default {
     //附件上传成功处理
     handleFileDocSuccess(response, file, fileList) {
       this.doc.isUploading = false;
-      this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+      this.$alert(response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
       this.getFileList()
     },
     /** 删除按钮操作 */
@@ -950,7 +977,7 @@ export default {
         confirmButtonText: this.$t('确定'),
         cancelButtonText: this.$t('取消'),
         type: "warning"
-      }).then(function() {
+      }).then(function () {
         return delCommonfile(ids);
       }).then(() => {
         this.getFileList()
@@ -974,176 +1001,171 @@ export default {
       this.$refs.upload.submit();
     },
     //数据分析
-    handleData(){
-      this.sonRefresh= false;
+    handleData() {
+      this.sonRefresh = false;
       this.$nextTick(() => {
-        this.sonRefresh= true;
+        this.sonRefresh = true;
       });
       this.drawer = true
     },
     //文件预览
-    openPdf(){
+    openPdf() {
       //ppt就跳路由预览,office就直接打开文件新页面
-      const didi={ imgs:this.imgs}
-      if( this.pptView==true&&this.ppt==false){
+      const didi = {imgs: this.imgs}
+      if (this.pptView == true && this.ppt == false) {
         let routeUrl = this.$router.resolve({
           path: "/cpms/index.html#/pptyulan",
-          query:didi
+          query: didi
         });
         window.open("/cpms/index.html#/pptyulan?id=" + this.pdf.pdfUrl, '_blank')
         console.log(this.imgs)
-      }else {
+      } else {
         window.open(this.pdf.pdfUrl)
       }
     },
-    handleSeePPT (row){
+    handleSeePPT(row) {
       //ppt预览
-      this.loadingFlash=true
-      this.pdf.open =true
+      this.loadingFlash = true
+      this.pdf.open = true
       this.pdf.title = row.fileName
       this.pdf.pdfUrl = row.fileUrl
-      this.pptView=true
-      this.ppt=false
-      const formatDate =new FormData();
-      formatDate.append("filepath",row.fileUrl)
+      this.pptView = true
+      this.ppt = false
+      const formatDate = new FormData();
+      formatDate.append("filepath", row.fileUrl)
       //调用文件预览api
-      let res= this.officeConvert.pptConvertCommon(formatDate)
+      let res = this.officeConvert.pptConvertCommon(formatDate)
 
       //查看接受的全局方法的返回结果 console.log(res)
       //利用.then方法接受Promise对象
 
-      res.then((result)=>{
+      res.then((result) => {
         //关闭加载中
-        this.loadingFlash=false
+        this.loadingFlash = false
 
         //成功时直接给地址
         this.videoList = result.data.imagePathList
         //将返回的地址集合遍历添加到绑定的数组中
-        this.imgs=[]
-        for (var key=0;key<this.videoList.length;key++) {
-          this.imgs.push( process.env.VUE_APP_BASE_API+  this.videoList[key]  );
+        this.imgs = []
+        for (var key = 0; key < this.videoList.length; key++) {
+          this.imgs.push(process.env.VUE_APP_BASE_API + this.videoList[key]);
         }
       }).catch(result => {
 
         //请求失败,关闭loading,pdf地址直接为为空,不显示
-        this.pdf.pdfUrl =""
+        this.pdf.pdfUrl = ""
         this.loadingFlash = false;
       })
     },
-    handleSee (row){
+    handleSee(row) {
       //office预览
-      this.loadingFlash=true
-      this.pdf.open =true
+      this.loadingFlash = true
+      this.pdf.open = true
       this.pdf.title = row.fileName
-      this.pdf.pdfUrl =""
+      this.pdf.pdfUrl = ""
 
-      this.pptView=false
-      this.ppt=true
+      this.pptView = false
+      this.ppt = true
       //如果是PDF等直接可以打开的就不调接口,否则调用接口
-      if(row.fileName.endsWith('pdf')){
-             this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
-              this.loadingFlash=false
-      }
-      else{
-         const formatDate =new FormData();
-      formatDate.append("filepath",row.fileUrl)
-
-      //调用文件预览api
-      let res= this.officeConvert.officeConvertCommon(formatDate)
-
+      if (row.fileName.endsWith('pdf')) {
+        this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
+        this.loadingFlash = false
+      } else {
+        const formatDate = new FormData();
+        formatDate.append("filepath", row.fileUrl)
 
-      //查看接受的全局方法的返回结果 console.log(res)
-      //利用.then方法接受Promise对象
-      res.then((result)=>{
-        //关闭加载中
-        this.loadingFlash=false
+        //调用文件预览api
+        let res = this.officeConvert.officeConvertCommon(formatDate)
 
-        if(result.msg.includes("csv")){
-          this.pdf.pdfUrl =process.env.VUE_APP_BASE_API+ result.data
-          this.$alert(result.msg, this.$t('检查乱码'), { dangerouslyUseHTMLString: true });
-          //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
 
-        }else if(result.msg.includes("不存在")){
-          //文件不存在时提示
-          this.pdf.pdfUrl =""
-          this.$alert(result.msg, this.$t('预览失败'), { dangerouslyUseHTMLString: true });
-          //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
-          this.pdf.open =false
-        }else if(result.msg.includes("不支持此格式")){
+        //查看接受的全局方法的返回结果 console.log(res)
+        //利用.then方法接受Promise对象
+        res.then((result) => {
+          //关闭加载中
+          this.loadingFlash = false
 
-          this.pdf.pdfUrl =""
-          this.$alert(result.msg, this.$t('预览失败'), { dangerouslyUseHTMLString: true });
-          //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
-          this.pdf.open =false
-        } else{
-          //成功时直接给地址
-          this.pdf.pdfUrl =process.env.VUE_APP_BASE_API+ result.data
-        }
-        // this.$nextTick(() => {
-        //   const iframe = window.frames['iFrame']
-        //   const handleLoad = () => {
-        //     setTimeout(() => {
-        //       const Do = (iframe.contentWindow || iframe.contentDocument)
-        //       console.log(Do.document.getElementsByTagName('table')[0])
-        //       Do.document.getElementsByTagName('table')[0].style.width = "100%"
-        //       Do.document.getElementsByTagName('table')[0].setAttribute("class","table")
-        //     }, 500)
-        //   }
-        //   iframe.addEventListener('load', handleLoad, true)
-        // })
-      }).catch(result => {
+          if (result.msg.includes("csv")) {
+            this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
+            this.$alert(result.msg, this.$t('检查乱码'), {dangerouslyUseHTMLString: true});
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
 
-        //请求失败,关闭loading,pdf地址直接为为空,不显示
-        this.pdf.pdfUrl =""
-        this.loadingFlash = false;
+          } else if (result.msg.includes("不存在")) {
+            //文件不存在时提示
+            this.pdf.pdfUrl = ""
+            this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+            this.pdf.open = false
+          } else if (result.msg.includes("不支持此格式")) {
 
-      })
+            this.pdf.pdfUrl = ""
+            this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+            this.pdf.open = false
+          } else {
+            //成功时直接给地址
+            this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
+          }
+          // this.$nextTick(() => {
+          //   const iframe = window.frames['iFrame']
+          //   const handleLoad = () => {
+          //     setTimeout(() => {
+          //       const Do = (iframe.contentWindow || iframe.contentDocument)
+          //       console.log(Do.document.getElementsByTagName('table')[0])
+          //       Do.document.getElementsByTagName('table')[0].style.width = "100%"
+          //       Do.document.getElementsByTagName('table')[0].setAttribute("class","table")
+          //     }, 500)
+          //   }
+          //   iframe.addEventListener('load', handleLoad, true)
+          // })
+        }).catch(result => {
+          //请求失败,关闭loading,pdf地址直接为为空,不显示
+          this.pdf.pdfUrl = ""
+          this.loadingFlash = false;
+        })
       }
-
-
-
-
-
     },
 
   }
 }
-</script >
+</script>
 
 <style lang="scss">
 .table {
-    width: 100%;
-    max-width: 100%;
-    > thead,
-    > tbody,
-    > tfoot {
-      > tr {
-        > th,
-        > td {
-          vertical-align: top;
-          border-top: 1px solid;
-        }
+  width: 100%;
+  max-width: 100%;
+
+  > thead,
+  > tbody,
+  > tfoot {
+    > tr {
+      > th,
+      > td {
+        vertical-align: top;
+        border-top: 1px solid;
       }
     }
-    > thead > tr > th {
-      vertical-align: bottom;
-      border-bottom: 2px solid;
-    }
-    > caption + thead,
-    > colgroup + thead,
-    > thead:first-child {
-      > tr:first-child {
-        > th,
-        > td {
-          border-top: 0;
-        }
+  }
+
+  > thead > tr > th {
+    vertical-align: bottom;
+    border-bottom: 2px solid;
+  }
+
+  > caption + thead,
+  > colgroup + thead,
+  > thead:first-child {
+    > tr:first-child {
+      > th,
+      > td {
+        border-top: 0;
       }
     }
-    > tbody + tbody {
-      border-top: 2px solid;
-    }
   }
 
+  > tbody + tbody {
+    border-top: 2px solid;
+  }
+}
 
 
 </style>