ソースを参照

feat(inspectionReport): 新增来料/半成品和自制品检验报告模板

- 新增 inspection_report5.vue 模板,用于来料/半成品检验报告
- 新增 inspection_report6.vue 模板,用于自制品检验报告
- 在 reportTemplateWrapper 中注册新模板组件
yusheng 1 日 前
コミット
b6e724acd5

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

@@ -129,6 +129,8 @@
   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 inspection_report5 from '../template/inspection_report5.vue';
+  import inspection_report6 from '../template/inspection_report6.vue';
   import processSubmitDialog from '@/components/processSubmitDialog/processSubmitDialog.vue';
   import { getCategoryByCode, parameterGetByCode } from '@/api/main/index';
 
@@ -170,6 +172,8 @@
       inspection_report1,
       inspection_report2,
       inspection_report4,
+      inspection_report5,
+      inspection_report6,
       unqualifiedProduct,
       bpmDetail,
       processSubmitDialog
@@ -453,7 +457,7 @@
             'source',
             this.currentRow.workOrderCode
           );
-          console.log( this.currentRow)
+          console.log(this.currentRow);
 
           this.$set(
             this.basicInfoData,

+ 397 - 0
src/views/inspectionReport/template/inspection_report5.vue

@@ -0,0 +1,397 @@
+<template>
+  <div id="printSection" style="padding: 20px; background-color: white">
+    <h2 style="text-align: center; font-size: 24px; margin-bottom: 10px">{{
+      basicInfoData.groupName || '湖南特瑞精密医疗器器械有限公司'
+    }}</h2>
+    <h1
+      style="
+        text-align: center;
+        font-size: 24px;
+        margin-bottom: 20px;
+        font-weight: bold;
+      "
+      >来料/半成品检验报告单</h1
+    >
+
+    <!-- 编号和报告单号 -->
+    <div style="margin-bottom: 5px">
+      <el-row style="display: flex">
+        <el-col :span="12" style="width: 50%">
+          <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" style="width: 50%">
+          <div
+            style="
+              display: flex;
+              align-items: center;
+              justify-content: flex-end;
+            "
+          >
+            <span style="font-weight: bold; margin-right: 10px">表单编号:</span>
+
+            <span v-if="isView">
+              {{ basicInfoData.reportNumber }}
+            </span>
+            <span v-else>
+              <el-input
+                v-model="basicInfoData.reportNumber"
+                placeholder="请输入报告编号"
+              ></el-input>
+            </span>
+            <span style="font-weight: bold; margin-left: 3px">
+              <span> 版本:</span>
+
+              <span v-if="isView">
+                {{ basicInfoData.version }}
+              </span>
+              <span v-else>
+                <el-input
+                  style="width: 120px"
+                  v-model="basicInfoData.version"
+                  placeholder="请输入版本"
+                ></el-input>
+              </span>
+            </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: 90px; border: 1px solid #ccc; padding: 8px"
+            >品 名</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.productName
+          }}</td>
+          <td style="width: 90px; border: 1px solid #ccc; padding: 8px"
+            >规格型号</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.specification }}/{{ basicInfoData.modelType }}</td
+          >
+        </tr>
+        <tr>
+          <td style="border: 1px solid #ccc; padding: 8px">来料/半成品批号</td>
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.batchNo
+          }}</td>
+
+          <td style="border: 1px solid #ccc; padding: 8px">数量</td>
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.total }}{{ basicInfoData.sampleMeasureUnit }}</td
+          >
+        </tr>
+        <tr>
+          <td style="border: 1px solid #ccc; padding: 8px">供应商名称</td>
+          <td style="border: 1px solid #ccc; padding: 8px">{{}}</td>
+          <td style="border: 1px solid #ccc; padding: 8px">抽检数量</td>
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.sampleQuantity
+            }}{{ basicInfoData.sampleMeasureUnit }}</td
+          >
+        </tr>
+        <tr>
+          <td style="border: 1px solid #ccc; padding: 8px">检验日期</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-date-picker
+                v-model="basicInfoData.pleaseVerifyDate"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              />
+            </div>
+            <div v-else>{{ basicInfoData.manufactureTime }}</div></td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">报告日期</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <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="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: 100px; border: 1px solid #ccc; padding: 8px"
+            >检验项目</th
+          >
+          <th style="border: 1px solid #ccc; padding: 8px">标准规定</th>
+          <th style="border: 1px solid #ccc; padding: 8px">检验工具及编号</th>
+          <th style="width: 80px; border: 1px solid #ccc; padding: 8px"
+            >检验结果</th
+          >
+          <th style="width: 100px; border: 1px solid #ccc; padding: 8px"
+            >备注</th
+          >
+        </tr>
+      </thead>
+      <tbody>
+        <tr v-for="(item, index) in inspectionItems" :key="index">
+          <td style="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">{{ item.uns }}</td>
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            item.results
+          }}</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-input v-model="item.remark" placeholder="请输入"></el-input>
+            </div>
+            <div v-else>{{ item.remark }}</div>
+          </td>
+        </tr>
+        <tr>
+          <td style="width: 120px; border: 1px solid #ccc; padding: 8px"
+            >结论</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" :colspan="4">
+            <div style="display: flex; align-items: center">
+              <div v-if="!isView">
+                <el-checkbox
+                  label="符合规定"
+                  :true-label="'符合'"
+                  v-model="basicInfoData.qualityResultsStr"
+                  :false-label="'不符合'"
+                ></el-checkbox>
+                <el-checkbox
+                  label="不符合规定:"
+                  :true-label="'不符合'"
+                  v-model="basicInfoData.qualityResultsStr"
+                  :false-label="'符合'"
+                ></el-checkbox>
+              </div>
+              <div v-else style="display: flex; align-items: center">
+                <span
+                  style="
+                    position: relative;
+                    display: inline-block;
+                    width: 14px;
+                    height: 14px;
+                    box-sizing: border-box;
+                    border: 1px solid #000;
+                    margin-right: 4px;
+                  "
+                >
+                  <span
+                    v-if="basicInfoData.qualityResultsStr === '符合'"
+                    style="
+                      position: absolute;
+                      left: 3px;
+                      top: 1px;
+                      width: 4px;
+                      height: 8px;
+                      border: solid #000;
+                      border-width: 0 2px 2px 0;
+                      transform: rotate(45deg);
+                    "
+                  ></span>
+                </span>
+                <span style="margin-right: 12px">符合规定</span>
+                <span
+                  style="
+                    position: relative;
+                    display: inline-block;
+                    width: 14px;
+                    height: 14px;
+                    box-sizing: border-box;
+                    border: 1px solid #000;
+                    margin-right: 4px;
+                  "
+                >
+                  <span
+                    v-if="basicInfoData.qualityResultsStr === '不符合'"
+                    style="
+                      position: absolute;
+                      left: 3px;
+                      top: 1px;
+                      width: 4px;
+                      height: 8px;
+                      border: solid #000;
+                      border-width: 0 2px 2px 0;
+                      transform: rotate(45deg);
+                    "
+                  ></span>
+                </span>
+                <span>不符合规定:</span>
+              </div>
+              <el-input
+                style="flex: 1"
+                v-if="!isView"
+                v-model="basicInfoData.qualityResultsStrRemark"
+                placeholder="请输入"
+              ></el-input>
+              <div v-else>{{ basicInfoData.qualityResultsStrRemark }}</div></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
+      }
+    },
+
+    data() {
+      return {
+        // 基本信息数据
+        basicInfoData: {},
+
+        // 检验项目
+        inspectionItems: []
+      };
+    },
+
+    methods: {
+      /* 打开质检报告 */
+      async init(basicInfoData, inspectionItems) {
+        this.$set(this, 'basicInfoData', basicInfoData);
+        this.$set(this, 'inspectionItems', inspectionItems);
+      },
+
+      /* 保存编辑 */
+      getValue() {
+        return this.basicInfoData;
+      }
+    }
+  };
+</script>

+ 392 - 0
src/views/inspectionReport/template/inspection_report6.vue

@@ -0,0 +1,392 @@
+<template>
+  <div id="printSection" style="padding: 20px; background-color: white">
+    <h2 style="text-align: center; font-size: 24px; margin-bottom: 10px">{{
+      basicInfoData.groupName || '湖南特瑞精密医疗器器械有限公司'
+    }}</h2>
+    <h1
+      style="
+        text-align: center;
+        font-size: 24px;
+        margin-bottom: 20px;
+        font-weight: bold;
+      "
+      >自制品检验报告单</h1
+    >
+
+    <!-- 编号和报告单号 -->
+    <div style="margin-bottom: 5px">
+      <el-row style="display: flex">
+        <el-col :span="12" style="width: 50%">
+          <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" style="width: 50%">
+          <div
+            style="
+              display: flex;
+              align-items: center;
+              justify-content: flex-end;
+            "
+          >
+            <span style="font-weight: bold; margin-right: 10px">表单编号:</span>
+
+            <span v-if="isView">
+              {{ basicInfoData.reportNumber }}
+            </span>
+            <span v-else>
+              <el-input
+                v-model="basicInfoData.reportNumber"
+                placeholder="请输入报告编号"
+              ></el-input>
+            </span>
+            <span style="font-weight: bold; margin-left: 3px">
+              <span> 版本:</span>
+
+              <span v-if="isView">
+                {{ basicInfoData.version }}
+              </span>
+              <span v-else>
+                <el-input
+                  style="width: 120px"
+                  v-model="basicInfoData.version"
+                  placeholder="请输入版本"
+                ></el-input>
+              </span>
+            </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: 90px; border: 1px solid #ccc; padding: 8px"
+            >品 名</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.productName
+          }}</td>
+          <td style="width: 90px; border: 1px solid #ccc; padding: 8px"
+            >规格型号</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.specification }}/{{ basicInfoData.modelType }}</td
+          >
+        </tr>
+        <tr>
+          <td style="border: 1px solid #ccc; padding: 8px">自制品批号</td>
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            basicInfoData.batchNo
+          }}</td>
+
+          <td style="border: 1px solid #ccc; padding: 8px">数量</td>
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.total }}{{ basicInfoData.sampleMeasureUnit }}</td
+          >
+        </tr>
+        <tr>
+          <td style="border: 1px solid #ccc; padding: 8px">检验日期</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-date-picker
+                v-model="basicInfoData.pleaseVerifyDate"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              />
+            </div>
+            <div v-else>{{ basicInfoData.manufactureTime }}</div></td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px">报告日期</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <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="border: 1px solid #ccc; padding: 8px">检验依据</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-input
+                v-model="basicInfoData.inspectionBasis"
+                placeholder="请输入检验依据"
+              ></el-input>
+            </div>
+            <div v-else>{{ basicInfoData.inspectionBasis }}</div>
+          </td>
+          <td style="border: 1px solid #ccc; padding: 8px">抽检数量</td>
+          <td style="border: 1px solid #ccc; padding: 8px"
+            >{{ basicInfoData.sampleQuantity
+            }}{{ basicInfoData.sampleMeasureUnit }}</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: 120px; border: 1px solid #ccc; padding: 8px"
+            >检验项目</th
+          >
+          <th style="border: 1px solid #ccc; padding: 8px">标准规定</th>
+          <th style="border: 1px solid #ccc; padding: 8px">检验工具及编号</th>
+          <th style="width: 80px; border: 1px solid #ccc; padding: 8px"
+            >检验结果</th
+          >
+          <th style="width: 100px; border: 1px solid #ccc; padding: 8px"
+            >备注</th
+          >
+        </tr>
+      </thead>
+      <tbody>
+        <tr v-for="(item, index) in inspectionItems" :key="index">
+          <td style="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">{{ item.uns }}</td>
+          <td style="border: 1px solid #ccc; padding: 8px">{{
+            item.results
+          }}</td>
+          <td style="border: 1px solid #ccc; padding: 8px">
+            <div v-if="!isView">
+              <el-input v-model="item.remark" placeholder="请输入"></el-input>
+            </div>
+            <div v-else>{{ item.remark }}</div>
+          </td>
+        </tr>
+        <tr>
+          <td style="width: 120px; border: 1px solid #ccc; padding: 8px"
+            >结论</td
+          >
+          <td style="border: 1px solid #ccc; padding: 8px" :colspan="4">
+            <div style="display: flex; align-items: center">
+              <div v-if="!isView">
+                <el-checkbox
+                  label="符合规定"
+                  :true-label="'符合'"
+                  v-model="basicInfoData.qualityResultsStr"
+                  :false-label="'不符合'"
+                ></el-checkbox>
+                <el-checkbox
+                  label="不符合规定:"
+                  :true-label="'不符合'"
+                  v-model="basicInfoData.qualityResultsStr"
+                  :false-label="'符合'"
+                ></el-checkbox>
+              </div>
+              <div v-else style="display: flex; align-items: center">
+                <span
+                  style="
+                    position: relative;
+                    display: inline-block;
+                    width: 14px;
+                    height: 14px;
+                    box-sizing: border-box;
+                    border: 1px solid #000;
+                    margin-right: 4px;
+                  "
+                >
+                  <span
+                    v-if="basicInfoData.qualityResultsStr === '符合'"
+                    style="
+                      position: absolute;
+                      left: 3px;
+                      top: 1px;
+                      width: 4px;
+                      height: 8px;
+                      border: solid #000;
+                      border-width: 0 2px 2px 0;
+                      transform: rotate(45deg);
+                    "
+                  ></span>
+                </span>
+                <span style="margin-right: 12px">符合规定</span>
+                <span
+                  style="
+                    position: relative;
+                    display: inline-block;
+                    width: 14px;
+                    height: 14px;
+                    box-sizing: border-box;
+                    border: 1px solid #000;
+                    margin-right: 4px;
+                  "
+                >
+                  <span
+                    v-if="basicInfoData.qualityResultsStr === '不符合'"
+                    style="
+                      position: absolute;
+                      left: 3px;
+                      top: 1px;
+                      width: 4px;
+                      height: 8px;
+                      border: solid #000;
+                      border-width: 0 2px 2px 0;
+                      transform: rotate(45deg);
+                    "
+                  ></span>
+                </span>
+                <span>不符合规定:</span>
+              </div>
+              <el-input
+                style="flex: 1"
+                v-if="!isView"
+                v-model="basicInfoData.qualityResultsStrRemark"
+                placeholder="请输入"
+              ></el-input>
+              <div v-else>{{ basicInfoData.qualityResultsStrRemark }}</div></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
+      }
+    },
+
+    data() {
+      return {
+        // 基本信息数据
+        basicInfoData: {},
+
+        // 检验项目
+        inspectionItems: []
+      };
+    },
+
+    methods: {
+      /* 打开质检报告 */
+      async init(basicInfoData, inspectionItems) {
+        this.$set(this, 'basicInfoData', basicInfoData);
+        this.$set(this, 'inspectionItems', inspectionItems);
+      },
+
+      /* 保存编辑 */
+      getValue() {
+        return this.basicInfoData;
+      }
+    }
+  };
+</script>