浏览代码

动火开票生成word、pdf

jiangbiao 2 年之前
父节点
当前提交
15373494f9

+ 139 - 16
master/src/main/java/com/ruoyi/project/ticket/controller/TFireWorkPermitController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.project.ticket.controller;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -45,8 +46,7 @@ import javax.annotation.Resource;
  */
 @RestController
 @RequestMapping("/ticket/firework")
-public class TFireWorkPermitController extends BaseController
-{
+public class TFireWorkPermitController extends BaseController {
     @Autowired
     private ITFireWorkPermitService tFireWorkPermitService;
     @Autowired
@@ -57,13 +57,13 @@ public class TFireWorkPermitController extends BaseController
     private TTicketIdController tTicketIdController;
     @Resource
     private TMatterMapper tMatterMapper;
+
     /**
      * 查询【动火作业票】列表
      */
     @PreAuthorize("@ss.hasPermi('ticket:permit:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TFireWorkPermit tFireWorkPermit)
-    {
+    public TableDataInfo list(TFireWorkPermit tFireWorkPermit) {
         startPage();
         List<TFireWorkPermit> list = tFireWorkPermitService.selectTFireWorkPermitList(tFireWorkPermit);
         return getDataTable(list);
@@ -75,8 +75,7 @@ public class TFireWorkPermitController extends BaseController
     @PreAuthorize("@ss.hasPermi('ticket:permit:export')")
     @Log(title = "【动火作业票】", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(TFireWorkPermit tFireWorkPermit)
-    {
+    public AjaxResult export(TFireWorkPermit tFireWorkPermit) {
         List<TFireWorkPermit> list = tFireWorkPermitService.selectTFireWorkPermitList(tFireWorkPermit);
         ExcelUtil<TFireWorkPermit> util = new ExcelUtil<TFireWorkPermit>(TFireWorkPermit.class);
         return util.exportExcel(list, "permit");
@@ -87,8 +86,7 @@ public class TFireWorkPermitController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('ticket:permit:query')")
     @GetMapping(value = "/{hId}")
-    public AjaxResult getInfo(@PathVariable("hId") Long hId)
-    {
+    public AjaxResult getInfo(@PathVariable("hId") Long hId) {
         return AjaxResult.success(tFireWorkPermitService.selectTFireWorkPermitById(hId));
     }
 
@@ -98,13 +96,31 @@ public class TFireWorkPermitController extends BaseController
     @PreAuthorize("@ss.hasPermi('ticket:permit:add')")
     @Log(title = "【动火作业票】", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TFireWorkPermit tFireWorkPermit)
-    {
+    public AjaxResult add(@RequestBody TFireWorkPermit tFireWorkPermit) {
         TTicketId tTicketId = new TTicketId();
         tTicketId.setId(1l);
-        Long ticketId =  tTicketIdController.createId(tTicketId);
+        Long ticketId = tTicketIdController.createId(tTicketId);
         logger.info("ticketId:" + ticketId);
         tFireWorkPermit.sethId(ticketId);
+        try {
+            //生成word
+            //渲染文本
+            Map<String, Object> params = getWordData(tFireWorkPermit);
+            // 模板路径
+            String templatePath = "static/word/fireTicket.docx";
+            // 生成word的路径
+            String fileDir = RuoYiConfig.getProfile() + "/" + "ticketWord";
+            // 生成word的文件
+            String fileName = "H" + ticketId + ".docx";
+            String wordPath = this.wordController.createWord(templatePath, fileDir, fileName, params);
+            tFireWorkPermit.setWordUrl(wordPath);
+            //使用流的方式转换PDF
+            String fileName2 = "H" + ticketId + ".pdf";
+            String pdfPath = this.wordController.createPDF(fileDir, fileName, fileName2, params);
+            tFireWorkPermit.setPdfUrl(pdfPath);
+        } catch (IOException e) {
+            logger.error("生成文件失败");
+        }
         tFireWorkPermitService.insertTFireWorkPermit(tFireWorkPermit);
         //保存危害工作许可证关联数据
         PermitRelation permitRelation = new PermitRelation();
@@ -121,8 +137,26 @@ public class TFireWorkPermitController extends BaseController
     @PreAuthorize("@ss.hasPermi('ticket:permit:edit')")
     @Log(title = "【动火作业票】", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody TFireWorkPermit tFireWorkPermit)
-    {
+    public AjaxResult edit(@RequestBody TFireWorkPermit tFireWorkPermit) {
+        try {
+            //生成word
+            //渲染文本
+            Map<String, Object> params = getWordData(tFireWorkPermit);
+            // 模板路径
+            String templatePath = "static/word/fireTicket.docx";
+            // 生成word的路径
+            String fileDir = RuoYiConfig.getProfile() + "/" + "ticketWord";
+            // 生成word的文件
+            String fileName = "H" + tFireWorkPermit.gethId() + ".docx";
+            String wordPath = this.wordController.createWord(templatePath, fileDir, fileName, params);
+            tFireWorkPermit.setWordUrl(wordPath);
+            //使用流的方式转换PDF
+            String fileName2 = "H" + tFireWorkPermit.gethId() + ".pdf";
+            String pdfPath = this.wordController.createPDF(fileDir, fileName, fileName2, params);
+            tFireWorkPermit.setPdfUrl(pdfPath);
+        } catch (IOException e) {
+            logger.error("生成文件失败");
+        }
         return toAjax(tFireWorkPermitService.updateTFireWorkPermit(tFireWorkPermit));
     }
 
@@ -131,10 +165,99 @@ public class TFireWorkPermitController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('ticket:permit:remove')")
     @Log(title = "【动火作业票】", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{hIds}")
-    public AjaxResult remove(@PathVariable Long[] hIds)
-    {
+    @DeleteMapping("/{hIds}")
+    public AjaxResult remove(@PathVariable Long[] hIds) {
         return toAjax(tFireWorkPermitService.deleteTFireWorkPermitByIds(hIds));
     }
 
+
+    public Map<String, Object> getWordData(TFireWorkPermit tFireWorkPermit) {
+        Map<String, Object> params = new HashMap<>();
+        // 渲染文本
+        params.put("aId", Texts.of(tFireWorkPermit.gethId().toString()).fontSize(7).bold().create());
+        params.put("aEquipmentName", Texts.of(tFireWorkPermit.getaEquipmentName()).fontSize(7).bold().create());
+        params.put("aEquipmentLeader", Texts.of(tFireWorkPermit.getaEquipmentLeader()).fontSize(7).bold().create());
+        params.put("aEquipmentTel", Texts.of(tFireWorkPermit.getaEquipmentTel()).fontSize(7).bold().create());
+        params.put("aEquipmentOffice", Texts.of(tFireWorkPermit.getaEquipmentOffice()).fontSize(7).bold().create());
+        params.put("aConstructionName", Texts.of(tFireWorkPermit.getaConstructionName()).fontSize(7).bold().create());
+        params.put("aConstructionLeader", Texts.of(tFireWorkPermit.getaConstructionLeader()).fontSize(7).bold().create());
+        params.put("aConstructionTel", Texts.of(tFireWorkPermit.getaConstructionTel()).fontSize(7).bold().create());
+        params.put("aConstructionOffice", Texts.of(tFireWorkPermit.getaConstructionOffice()).fontSize(7).bold().create());
+        params.put("aContractorName", Texts.of(tFireWorkPermit.getaContractorName()).fontSize(7).bold().create());
+        params.put("aContractorLeader", Texts.of(tFireWorkPermit.getaContractorLeader()).fontSize(7).bold().create());
+        params.put("aContractorTel", Texts.of(tFireWorkPermit.getaContractorTel()).fontSize(7).bold().create());
+        params.put("aContractorOffice", Texts.of(tFireWorkPermit.getaContractorOffice()).fontSize(7).bold().create());
+
+        getCheck(params, tFireWorkPermit.getaIsNeedSafeLiaison().toString(), "aIsNSL1", "aIsNSL2");
+        params.put("aSafeLiaisonName", Texts.of(tFireWorkPermit.getaSafeLiaisonName()).fontSize(7).bold().create());
+        params.put("aSafeLiaisonSign", Texts.of(tFireWorkPermit.getaSafeLiaisonSign()).fontSize(7).bold().create());
+        params.put("aSafeLiaisonTel", Texts.of(tFireWorkPermit.getaSafeLiaisonTel()).fontSize(7).bold().create());
+        params.put("aSafeLiaisonOffice", Texts.of(tFireWorkPermit.getaSafeLiaisonOffice()).fontSize(7).bold().create());
+        // B 栏
+        params.put("bDeviceName", Texts.of(tFireWorkPermit.getbDeviceName()).fontSize(7).bold().create());
+        params.put("bAreaNo", Texts.of(tFireWorkPermit.getbAreaNo()).fontSize(7).bold().create());
+        params.put("bWorkContent", Texts.of(tFireWorkPermit.getbWorkContent()).fontSize(7).bold().create());
+        getCheck(params, tFireWorkPermit.getbFireWorkGrade() == null ? null : tFireWorkPermit.getbFireWorkGrade().toString(), "bfwg1", "bfwg2", "bfwg3");
+        if (tFireWorkPermit.getbValidityStartTime() != null) {
+            params.put("bValidityStartTime", Texts.of(DateUtils.parseDateToStr("yyyy年MM月dd日hh时mm分", tFireWorkPermit.getbValidityStartTime())).fontSize(7).bold().create());
+        }
+        if (tFireWorkPermit.getbValidityEndTime() != null) {
+            params.put("bValidityEndTime", Texts.of(DateUtils.parseDateToStr("yyyy年MM月dd日hh时mm分", tFireWorkPermit.getbValidityEndTime())).fontSize(7).bold().create());
+        }
+        getCheck(params, tFireWorkPermit.getcIsWorkToFire() == null ? null : tFireWorkPermit.getcIsWorkToFire().toString(), "cIsWTF");
+        getCheck(params, tFireWorkPermit.getcIsWorkToBlast() == null ? null : tFireWorkPermit.getcIsWorkToBlast().toString(), "cIsWTB");
+        getCheck(params, tFireWorkPermit.getcIsWorkToEnvir() == null ? null : tFireWorkPermit.getcIsWorkToEnvir().toString(), "cIsWTE");
+        getCheck(params, tFireWorkPermit.getcIsDeviceToBlast() == null ? null : tFireWorkPermit.getcIsDeviceToBlast().toString(), "cIsDTB");
+        getCheck(params, tFireWorkPermit.getcIsOtherA() == null ? null : tFireWorkPermit.getcIsOtherA().toString(), "cIsOA");
+        getCheck(params, tFireWorkPermit.getcIsOtherFire() == null ? null : tFireWorkPermit.getcIsOtherFire().toString(), "cIsOF");
+        params.put("aId", Texts.of(tFireWorkPermit.getaId() == null ? "" : tFireWorkPermit.getaId().toString()).fontSize(7).bold().create());
+        params.put("cOtherFireContent", Texts.of(tFireWorkPermit.getcOtherFireContent() == null ? "" : tFireWorkPermit.getcOtherFireContent()).fontSize(7).bold().create());
+        return params;
+    }
+
+    // 勾选框判断渲染
+    public void getCheck(Map<String, Object> params, String ticketWord, String check1) {
+        if ("1".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 7)));
+        } else if ("2".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        } else {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        }
+    }
+
+    // 勾选框判断渲染
+    public void getCheck(Map<String, Object> params, String ticketWord, String check1, String check2) {
+        if ("1".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        } else if ("2".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u00FE", new Style("Wingdings", 7)));
+        } else {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        }
+    }
+
+    public void getCheck(Map<String, Object> params, String ticketWord, String check1, String check2, String check3) {
+        if ("1".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check3, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        } else if ("2".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u00FE", new Style("Wingdings", 7)));
+            params.put(check3, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        } else if ("3".equals(ticketWord)) {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check3, new TextRenderData("\u00FE", new Style("Wingdings", 7)));
+        } else {
+            params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+            params.put(check3, new TextRenderData("\u006F", new Style("Wingdings", 7)));
+        }
+    }
+
 }

+ 1 - 1
master/src/main/java/com/ruoyi/project/ticket/controller/THazardWorkPermitController.java

@@ -140,7 +140,7 @@ public class THazardWorkPermitController extends BaseController {
         // 模板路径
         String templatePath = "static/word/ticket.docx";
         // 生成word的路径
-        String fileDir = RuoYiConfig.getProfile();
+        String fileDir = RuoYiConfig.getProfile() + "/" + "ticketWord";;
         // 生成word的文件
         String fileName = "A" + ticketId + ".docx";
         String wordPath = this.wordController.createWord(templatePath, fileDir, fileName, params);

二进制
master/src/main/resources/static/word/fireTicket.docx


+ 164 - 110
ui/src/views/invoicing/firework/index.vue

@@ -54,130 +54,135 @@
 
               <el-collapse v-model="activeNames">
                 <el-collapse-item title="A 基本信息" name="1">
-                  <div>
+                  <el-form-item prop="ruleA1">
+                    <div>
+                      <table>
+                        <tr>
+                          <td>1.</td>
+                          <td>生产装置:
+                            <el-input style="width: 300px;" v-model="form.aEquipmentName"></el-input>
+                          </td>
+                          <td>生产装置主管:
+                            <el-input style="width: 100px;" v-model="form.aEquipmentLeader"/>
+                          </td>
+                          <td>
+                            <i class="el-icon-phone">:</i>
+                            <el-input style="width: 70px;" v-model="form.aEquipmentTel"/>
+                          </td>
+                          <td>
+                            办公室:
+                            <el-input style="width: 70px;" v-model="form.aEquipmentOffice"/>
+                          </td>
+                        </tr>
+                        <tr>
+                          <td>2.</td>
+                          <!--                    <td>施工单位:<el-input style="width: 300px;" v-model="aConstructionName"/>-->
+                          <!--                    </td>-->
+                          <td>施工单位:
+                            <el-select v-model="form.aConstructionName" filterable placeholder="请选择施工单位"
+                                       @change="aConstructionChange(form.aConstructionName)">
+                              <el-option v-for="item in aConstructions" :key="item.deptId" :label="item.deptName"
+                                         :value="item.deptId">
+                              </el-option>
+                            </el-select>
+                          </td>
+                          <td>施工单位主管:
+                            <el-input style="width: 100px;" v-model="form.aConstructionLeader"/>
+                          </td>
+                          <td>
+                            <i class="el-icon-phone">:</i>
+                            <el-input style="width: 70px;" v-model="form.aConstructionTel"/>
+                          </td>
+                          <td>
+                            办公室:
+                            <el-input style="width: 70px;" v-model="form.aConstructionOffice"/>
+                          </td>
+                        </tr>
+                        <tr>
+                          <td>3.</td>
+                          <td>用户(涉及外部承包商时):
+                            <el-input style="width: 300px;" v-model="form.aContractorName"/>
+                          </td>
+                          <td align="right">用户主管:
+                            <el-input style="width: 100px;" v-model="form.aContractorLeader"/>
+                          </td>
+                          <td>
+                            <i class="el-icon-phone">:</i>
+                            <el-input style="width: 70px;" v-model="form.aContractorTel"/>
+                          </td>
+                          <td>
+                            办公室:
+                            <el-input style="width: 70px;" v-model="form.aContractorOffice"/>
+                          </td>
+                        <tr>
+                          <td>4.</td>
+                          <td>需要安全联络员?
+                            <el-radio v-model="form.aIsNeedSafeLiaison" label="1">是</el-radio>
+                            <el-radio v-model="form.aIsNeedSafeLiaison" label="2">否</el-radio>
+                            姓名:
+                            <el-input style="width: 100px;" v-model="form.aSafeLiaisonName"
+                                      :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
+                          </td>
+                          <td align="right">
+                            签名:
+                            <el-input style="width: 100px;" v-model="form.aSafeLiaisonSign"
+                                      :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
+                          </td>
+                          <td>
+                            <i class="el-icon-phone">:</i>
+                            <el-input style="width: 70px;" v-model="form.aSafeLiaisonTel"
+                                      :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
+                          </td>
+                          <td>
+                            办公室:
+                            <el-input style="width: 70px;" v-model="form.aSafeLiaisonOffice"
+                                      :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
+                          </td>
+                        </tr>
+                      </table>
+                    </div>
+                  </el-form-item>
+                </el-collapse-item>
+                <el-collapse-item title="B 工作内容" name="2">
+                  <el-form-item prop="ruleB">
                     <table>
                       <tr>
                         <td>1.</td>
-                        <td>生产装置:
-                          <el-input style="width: 300px;" v-model="form.aEquipmentName"></el-input>
-                        </td>
-                        <td>生产装置主管:
-                          <el-input style="width: 100px;" v-model="form.aEquipmentLeader"/>
-                        </td>
-                        <td>
-                          <i class="el-icon-phone">:</i>
-                          <el-input style="width: 70px;" v-model="form.aEquipmentTel"/>
+                        <td>装置设备:
+                          <el-input style="width: 500px;" v-model="form.bDeviceName"/>
                         </td>
-                        <td>
-                          办公室:
-                          <el-input style="width: 70px;" v-model="form.aEquipmentOffice"/>
+                        <td>位置/区域号:
+                          <el-input style="width: 200px;" v-model="form.bAreaNo"/>
                         </td>
                       </tr>
                       <tr>
-                        <td>2.</td>
-                        <!--                    <td>施工单位:<el-input style="width: 300px;" v-model="aConstructionName"/>-->
-                        <!--                    </td>-->
-                        <td>施工单位:
-                          <el-select v-model="form.aConstructionName" filterable placeholder="请选择施工单位"
-                                     @change="aConstructionChange(form.aConstructionName)">
-                            <el-option v-for="item in aConstructions" :key="item.deptId" :label="item.deptName"
-                                       :value="item.deptId">
-                            </el-option>
-                          </el-select>
-                        </td>
-                        <td>施工单位主管:
-                          <el-input style="width: 100px;" v-model="form.aConstructionLeader"/>
-                        </td>
-                        <td>
-                          <i class="el-icon-phone">:</i>
-                          <el-input style="width: 70px;" v-model="form.aConstructionTel"/>
-                        </td>
-                        <td>
-                          办公室:
-                          <el-input style="width: 70px;" v-model="form.aConstructionOffice"/>
+                        <td style="vertical-align: top">2.</td>
+                        <td colspan="2" style="vertical-align: top"><span
+                          style="vertical-align: top">工作内容描述:</span>
+                          <el-input type="textarea" style="width: 600px;" v-model="form.bWorkContent"/>
                         </td>
                       </tr>
                       <tr>
                         <td>3.</td>
-                        <td>用户(涉及外部承包商时):
-                          <el-input style="width: 300px;" v-model="form.aContractorName"/>
-                        </td>
-                        <td align="right">用户主管:
-                          <el-input style="width: 100px;" v-model="form.aContractorLeader"/>
-                        </td>
-                        <td>
-                          <i class="el-icon-phone">:</i>
-                          <el-input style="width: 70px;" v-model="form.aContractorTel"/>
-                        </td>
-                        <td>
-                          办公室:
-                          <el-input style="width: 70px;" v-model="form.aContractorOffice"/>
+                        <td colspan="2" class="short-checkbox">动火作业分级:
+                          <el-checkbox v-model="form.bFireWorkGrade" :true-label="0"/>
+                          特级
+                          <el-checkbox v-model="form.bFireWorkGrade" :true-label="1"/>
+                          一级
+                          <el-checkbox v-model="form.bFireWorkGrade" :true-label="2"/>
+                          二级
                         </td>
+                      </tr>
                       <tr>
                         <td>4.</td>
-                        <td>需要安全联络员?
-                          <el-radio v-model="form.aIsNeedSafeLiaison" label="1">是</el-radio>
-                          <el-radio v-model="form.aIsNeedSafeLiaison" label="2">否</el-radio>
-                          姓名:
-                          <el-input style="width: 100px;" v-model="form.aSafeLiaisonName"
-                                    :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
-                        </td>
-                        <td align="right">
-                          签名:
-                          <el-input style="width: 100px;" v-model="form.aSafeLiaisonSign"
-                                    :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
-                        </td>
-                        <td>
-                          <i class="el-icon-phone">:</i>
-                          <el-input style="width: 70px;" v-model="form.aSafeLiaisonTel"
-                                    :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
-                        </td>
-                        <td>
-                          办公室:
-                          <el-input style="width: 70px;" v-model="form.aSafeLiaisonOffice"
-                                    :disabled="this.form.aIsNeedSafeLiaison==1?false:true"/>
+                        <td>有效期:由
+                          <el-date-picker v-model="value1" type="datetimerange" range-separator="至"
+                                          start-placeholder="开始日期" end-placeholder="结束日期">
+                          </el-date-picker>
                         </td>
                       </tr>
                     </table>
-                  </div>
-                </el-collapse-item>
-                <el-collapse-item title="B 工作内容" name="2">
-                  <table>
-                    <tr>
-                      <td>1.</td>
-                      <td>装置设备:
-                        <el-input style="width: 500px;" v-model="form.bDeviceName"/>
-                      </td>
-                      <td>位置/区域号:
-                        <el-input style="width: 200px;" v-model="form.bAreaNo"/>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td style="vertical-align: top">2.</td>
-                      <td colspan="2" style="vertical-align: top"><span style="vertical-align: top">工作内容描述:</span>
-                        <el-input type="textarea" style="width: 600px;" v-model="form.bWorkContent"/>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td>3.</td>
-                      <td colspan="2" class="short-checkbox">动火作业分级:
-                        <el-checkbox v-model="form.bFireWorkGrade" :true-label="0"/>
-                        特级
-                        <el-checkbox v-model="form.bFireWorkGrade" :true-label="1"/>
-                        一级
-                        <el-checkbox v-model="form.bFireWorkGrade" :true-label="2"/>
-                        二级
-                      </td>
-                    </tr>
-                    <tr>
-                      <td>4.</td>
-                      <td>有效期:由
-                        <el-date-picker v-model="value1" type="datetimerange" range-separator="至"
-                                        start-placeholder="开始日期" end-placeholder="结束日期">
-                        </el-date-picker>
-                      </td>
-                    </tr>
-                  </table>
+                  </el-form-item>
                 </el-collapse-item>
                 <el-collapse-item title="C 危害识别" name="3">
                   <table>
@@ -1538,6 +1543,48 @@ import {batchAddJobticket} from "@/api/ehs/jobticket";
 
 export default {
   data() {
+    var validateruleA1 = (rule, value, callback) => {
+      if (!this.form.aEquipmentName) {
+        callback(this.$message.error('生产装置名称不能为空'))
+      } else if (!this.form.aEquipmentLeader) {
+        callback(this.$message.error('生产装置主管不能为空'))
+      } else if (!this.form.aEquipmentTel) {
+        callback(this.$message.error('生产装置电话不能为空'))
+      } else if (!this.form.aEquipmentOffice) {
+        callback(this.$message.error('生产装置办公室不能为空'))
+      } else if (!this.form.aConstructionName) {
+        callback(this.$message.error('施工单位名称不能为空'))
+      } else if (!this.form.aConstructionLeader) {
+        callback(new Error('施工单位主管不能为空'))
+      } else if (!this.form.aConstructionTel) {
+        callback(new Error('施工单位电话不能为空'))
+      } else if (!this.form.aConstructionOffice) {
+        callback(new Error('施工单位办公室不能为空'))
+      } else if (!this.form.aContractorName) {
+        callback(new Error('用户不能为空'))
+      } else if (!this.form.aContractorLeader) {
+        callback(new Error('用户主管不能为空'))
+      } else if (!this.form.aContractorTel) {
+        callback(new Error('用户电话不能为空'))
+      } else if (!this.form.aContractorOffice) {
+        callback(new Error('用户办公室不能为空'))
+      } else {
+        callback();
+      }
+    };
+    var validateruleB = (rule, value, callback) => {
+      if (!this.form.bDeviceName) {
+        callback(this.$message.error('装置设备名称不能为空'))
+      } else if (!this.form.bWorkContent) {
+        callback(this.$message.error('工作内容描述不能为空'))
+      } else if (!this.form.bAreaNo) {
+        callback(this.$message.error('位置/区域号不能为空'))
+      } /*else if (this.value1 == null || this.value1.length < 2) {
+        callback(this.$message.error('有效期不能为空'))
+      }*/ else {
+        callback();
+      }
+    };
     return {
       aConstructions: [],
       aConstructionsQuery: {
@@ -1568,7 +1615,7 @@ export default {
         aContractorLeader: null,
         aContractorTel: null,
         aContractorOffice: null,
-        aIsNeedSafeLiaison: null,
+        aIsNeedSafeLiaison: '2',
         aSafeLiaisonName: null,
         aSafeLiaisonSign: null,
         aSafeLiaisonTel: null,
@@ -1763,7 +1810,14 @@ export default {
         wordUrl: null,
         pdfUrl: null
       },
-      rules: {},
+      rules: {
+        ruleA1: [
+          {validator: validateruleA1, trigger: 'blur'}
+        ],
+        ruleB: [
+          {validator: validateruleB, trigger: 'blur'}
+        ],
+      },
       /* 日期格式模板,目前年月日均默认当日 */
       /* value1: [
                 new Date(2000, 10, 10, 10, 10),
@@ -1788,6 +1842,7 @@ export default {
         // this.form = response.data
         this.form = response.data;
         this.form.hId = id
+        this.form.aIsNeedSafeLiaison = response.data.aIsNeedSafeLiaison.toString()
         if (response.data.bValidityStartTime) {
           this.$set(this.value1, 0, response.data.bValidityStartTime);
         }
@@ -1846,7 +1901,6 @@ export default {
       window.open(process.env.VUE_APP_BASE_API + this.form.wordUrl)
     },
     hIdClick() {
-      this.rules.ruleA1 = null
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.hId == null) {