Просмотр исходного кода

feat(inspectionReport): 新增质检报告模板4并优化报告模板查询条件

- 新增inspection_report4模板组件,支持质检报告的查看与编辑
- 在报告模板包装组件中注册新模板
- 为报告模板查询接口添加type=0参数,过滤模板类型
- 格式化inspectionReport模块的import语句
yusheng 1 день назад
Родитель
Сommit
9c4b7b7194

+ 3 - 1
src/views/inspectionProjectRequest/components/inspectionProjectRequestList.vue

@@ -684,7 +684,9 @@
         getQmsReportTemplatePageList({
           pageNum: 1,
           pageSize: 999,
-          isEnabled: 1
+          isEnabled: 1,
+          type: 0
+
         })
           .then((res) => {
             this.reportTemplateList = res.list;

+ 2 - 1
src/views/inspectionProjectTask/components/inspectionProjectTaskList.vue

@@ -468,7 +468,8 @@
         getQmsReportTemplatePageList({
           pageNum: 1,
           pageSize: 999,
-          isEnabled: 1
+          isEnabled: 1,
+          type: 0
         })
           .then((res) => {
             this.reportTemplateList = res.list;

+ 4 - 1
src/views/inspectionReport/components/reportTemplateWrapper.vue

@@ -128,13 +128,15 @@
 <script>
   import inspection_report1 from '../template/inspection_report1.vue';
   import inspection_report2 from '../template/inspection_report2.vue';
+  import inspection_report4 from '../template/inspection_report4.vue';
   import processSubmitDialog from '@/components/processSubmitDialog/processSubmitDialog.vue';
   import { getCategoryByCode, parameterGetByCode } from '@/api/main/index';
 
   import {
     queryInspectionReportData,
     queryInspectionReportList,
-    generateReport,enterprisePage
+    generateReport,
+    enterprisePage
   } from '@/api/inspectionReport';
   import bpmDetail from '@/views/bpm/processInstance/detail.vue';
   import unqualifiedProduct from '@/views/inspectionReport/components/unqualifiedProduct.vue';
@@ -167,6 +169,7 @@
     components: {
       inspection_report1,
       inspection_report2,
+      inspection_report4,
       unqualifiedProduct,
       bpmDetail,
       processSubmitDialog

+ 355 - 0
src/views/inspectionReport/template/inspection_report4.vue

@@ -0,0 +1,355 @@
+<template>
+  <div id="printSection" style="padding: 20px; background-color: white">
+    <h1
+      style="
+        text-align: center;
+        font-size: 24px;
+        margin-bottom: 20px;
+        font-weight: bold;
+      "
+      >检测报告</h1
+    >
+
+    <!-- 编号和报告单号 -->
+    <div style="margin-bottom: 20px">
+      <el-row>
+        <el-col :span="12">
+          <div style="display: flex; align-items: center">
+            <span style="font-weight: bold; margin-right: 10px">编号:</span>
+            <span style="flex: 1">{{ basicInfoData.code }}</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div style="display: flex; align-items: center">
+            <span style="font-weight: bold; margin-right: 10px">报告单号:</span>
+            <span style="flex: 1">
+              <div v-if="isView">
+                {{ basicInfoData.reportNumber }}
+              </div>
+              <div v-else>
+                <el-input
+                  v-model="basicInfoData.reportNumber"
+                  placeholder="请输入报告编号"
+                ></el-input>
+              </div>
+            </span>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+
+    <!-- 基本信息表格 -->
+    <table
+      class="basic-info-table"
+      style="width: 100%; border-collapse: collapse; border: 1px solid #ccc"
+    >
+      <tbody>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >检品名称</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.productName
+          }}</td>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >批号/序列号</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.batchNo
+          }}</td>
+        </tr>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >规格型号</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" colspan="3"
+            >{{ basicInfoData.specification }}/{{ basicInfoData.modelType }}</td
+          >
+        </tr>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >数量</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.total }}{{ basicInfoData.sampleMeasureUnit }}</td
+          >
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >检品数量</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.sampleQuantity
+            }}{{ basicInfoData.sampleMeasureUnit }}</td
+          >
+        </tr>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >请验日期</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.pleaseVerifyDate
+          }}</td>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >请验部门</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.pleaseVerifyDepartment
+          }}</td>
+        </tr>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >报告日期</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" colspan="3">
+            <div v-if="!isView">
+              <el-date-picker
+                v-model="basicInfoData.reportDate"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              />
+            </div>
+            <div v-else>{{ basicInfoData.reportDate }}</div>
+          </td>
+        </tr>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >来源</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-input
+                v-model="basicInfoData.source"
+                placeholder="请输入来源"
+              ></el-input>
+            </div>
+            <div v-else>{{ basicInfoData.source }}</div>
+          </td>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >储存条件</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-input
+                v-model="basicInfoData.storageCondition"
+                placeholder="请输入储存条件"
+              ></el-input>
+            </div>
+            <div v-else>{{ basicInfoData.storageCondition }}</div>
+          </td>
+        </tr>
+        <tr>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >检验依据</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" colspan="3">
+            <div v-if="!isView">
+              <el-input
+                v-model="basicInfoData.inspectionBasis"
+                placeholder="请输入检验依据"
+              ></el-input>
+            </div>
+            <div v-else>{{ basicInfoData.inspectionBasis }}</div>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <!-- 检验项目表格 -->
+    <table
+      class="inspection-items-table"
+      style="
+        width: 100%;
+        border-collapse: collapse;
+        border: 1px solid #ccc;
+        margin-bottom: 20px;
+      "
+    >
+      <thead>
+        <tr>
+          <th style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >检验项目</th
+          >
+          <th style="border: 1px solid #ccc; padding: 8px">标准规定</th>
+          <th style="border: 1px solid #ccc; padding: 8px; width: 150px"
+            >检测内容</th
+          >
+          <th style="width: 150px; border: 1px solid #ccc; padding: 8px"
+            >检验结果</th
+          >
+        </tr>
+      </thead>
+      <tbody>
+        <tr v-for="(item, index) in inspectionItems" :key="index">
+          <td
+            style="
+              width: 150px;
+              border: 1px solid #ccc;
+              padding: 8px;
+              min-height: 37px;
+            "
+            >{{ item.item }}</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            item.standardRegulations
+          }}</td>
+          <td style="border: 1px solid #ccc; padding: 8px; width: 150px">{{
+            item.qualityResultContent
+          }}</td>
+          <td style="width: 150px; border: 1px solid #ccc; padding: 8px">{{
+            item.results
+          }}</td>
+        </tr>
+        <tr>
+          <td style="width: 120px; border: 1px solid #ccc; padding: 8px"
+            >结论</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" :colspan="2">
+            <div v-if="!isView">
+              <el-input
+                v-model="basicInfoData.conclusion"
+                placeholder="请输入结论"
+              ></el-input>
+            </div>
+            <div v-else>{{ basicInfoData.conclusion || '' }}</div>
+          </td>
+        </tr>
+        <tr>
+          <td style="width: 120px; border: 1px solid #ccc; padding: 8px"
+            >备注</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" :colspan="2">
+            <div v-if="!isView">
+              <el-input
+                v-model="basicInfoData.remarks"
+                placeholder="请输入备注"
+              ></el-input>
+            </div>
+            <div v-else>{{ basicInfoData.remarks || '' }}</div>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <!-- 签名区域 -->
+    <div style="margin-top: 20px">
+      <el-row :gutter="20" style="display: flex; align-items: center">
+        <el-col :span="8">
+          <div style="display: flex; align-items: center; margin-bottom: 10px">
+            <span style="font-weight: bold; min-width: 100px"
+              >检验员/日期:</span
+            >
+            <span style="flex: 1">
+              <div v-if="!isView" style="display: flex; align-items: center">
+                <el-input
+                  v-model="basicInfoData.inspector"
+                  placeholder="请输入检验员"
+                  style="width: 140px"
+                ></el-input>
+                <el-date-picker
+                  v-model="basicInfoData.inspectionTime"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择日期"
+                  style="width: 160px"
+                />
+              </div>
+              <div v-else
+                >{{ basicInfoData.inspector || '' }} /
+                {{ basicInfoData.inspectionTime || '' }}</div
+              >
+            </span>
+          </div>
+        </el-col>
+        <el-col :span="8">
+          <div style="display: flex; align-items: center; margin-bottom: 10px">
+            <span style="font-weight: bold; min-width: 100px"
+              >复核人/日期:</span
+            >
+            <span style="flex: 1">
+              <div v-if="!isView" style="display: flex; align-items: center">
+                <el-input
+                  v-model="basicInfoData.reviewer"
+                  placeholder="请输入复核人"
+                  style="width: 140px"
+                ></el-input>
+                <el-date-picker
+                  v-model="basicInfoData.reviewTime"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择日期"
+                  style="width: 160px"
+                />
+              </div>
+              <div v-else
+                >{{ basicInfoData.reviewer || '' }} /
+                {{ basicInfoData.reviewTime || '' }}</div
+              >
+            </span>
+          </div>
+        </el-col>
+        <el-col :span="8">
+          <div style="display: flex; align-items: center; margin-bottom: 10px">
+            <span style="font-weight: bold; min-width: 100px"
+              >审核人/日期:</span
+            >
+            <span style="flex: 1">
+              <div v-if="!isView" style="display: flex; align-items: center">
+                <el-input
+                  v-model="basicInfoData.checker"
+                  placeholder="请输入审核人"
+                  style="width: 140px"
+                ></el-input>
+                <el-date-picker
+                  v-model="basicInfoData.approvedDate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择日期"
+                  style="width: 160px"
+                />
+              </div>
+              <div v-else
+                >{{ basicInfoData.checker || '' }} /
+                {{ basicInfoData.approvedDate || '' }}</div
+              >
+            </span>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'QualityReport',
+    props: {
+      isView: {
+        type: Boolean,
+        default: false
+      }
+    },
+
+    components: {},
+    data() {
+      return {
+        // 基本信息数据
+        basicInfoData: {},
+
+        // 检验项目
+        inspectionItems: []
+      };
+    },
+    created() {},
+    methods: {
+      /* 打开质检报告 */
+      async init(basicInfoData, inspectionItems) {
+        this.$set(this, 'basicInfoData', basicInfoData);
+        this.$set(this, 'inspectionItems', inspectionItems);
+      },
+
+      /* 保存编辑 */
+      getValue() {
+        return this.basicInfoData;
+      }
+    }
+  };
+</script>