From efad6058c9c9ee6ba754dc9cc61c8d744cd199b8 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期一, 06 一月 2025 10:30:31 +0800
Subject: [PATCH] 完成设备模块搬迁

---
 src/components/do/a6-device/calibration.vue |  771 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 768 insertions(+), 3 deletions(-)

diff --git a/src/components/do/a6-device/calibration.vue b/src/components/do/a6-device/calibration.vue
index 8e0ff62..b1aa45b 100644
--- a/src/components/do/a6-device/calibration.vue
+++ b/src/components/do/a6-device/calibration.vue
@@ -1,13 +1,778 @@
+<!-- 璁惧鏍″噯 -->
 <template>
-  <div>璁惧鏍″噯</div>
+  <div>
+    <div class="btnS">
+      <el-button size="small" type="primary" @click="calibrationMaintenance()">鏍″噯椤圭洰缁存姢</el-button>
+      <el-button size="small" type="primary" @click="add('add')">娣诲姞鏍″噯璁板綍</el-button>
+      <el-button size="small" type="primary" @click="handleDown">瀵煎嚭Excel</el-button>
+    </div>
+    <div class="tables" style="margin-top: 10px;">
+      <el-table :data="tableData" height="calc(100vh - 20em)">
+        <el-table-column label="搴忓彿" type="index" width="120">
+          <template v-slot="scope">
+            <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="璁板綍缂栧彿" min-width="150" prop="processNumber"></el-table-column>
+        <el-table-column label="鏍″噯鏈烘瀯" min-width="150" prop="unitOfMeasure"
+                         show-overflow-tooltip></el-table-column>
+        <el-table-column label="鏍″噯缁撹" min-width="150" prop="status">
+          <template v-slot="scope">
+            {{ scope.row.status === '0yes' ? '鍚堟牸' : scope.row.status === '1no' ? '涓嶅悎鏍�' : '鍏朵粬' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="鏍″噯璇佷功缂栧彿" min-width="150" prop="certificateSerialNumber"></el-table-column>
+        <el-table-column label="璇存槑" min-width="150" prop="remark" show-overflow-tooltip></el-table-column>
+        <el-table-column label="鏍″噯鏃ユ湡" min-width="150" prop="calibrationDate"></el-table-column>
+        <el-table-column label="涓嬫鏍″噯鏃ユ湡" min-width="150" prop="nextCalibrationDate"></el-table-column>
+        <el-table-column label="纭鏃ユ湡" min-width="150" prop="confirmDate"></el-table-column>
+        <el-table-column label="鐧昏浜�" min-width="150" prop="createUser"></el-table-column>
+        <el-table-column label="鐧昏鏃ユ湡" min-width="150" prop="createTime"></el-table-column>
+        <el-table-column fixed="right" label="鎿嶄綔" min-width="180" align="center">
+          <template #default="{ row }">
+            <el-button size="small" type="text" @click="handleAttachmentClick(row)">涓嬭浇闄勪欢</el-button>
+            <el-button size="small" type="text" @click="handleViewClick('view', row)">鏌ョ湅</el-button>
+            <el-button size="small" type="text" @click="handleDeleteClick(row)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+                     :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" style="margin-right: 5%;"
+                     @size-change="handleSizeChange" @current-change="handleCurrentChange">
+      </el-pagination>
+    </div>
+    <!-- 鏍″噯椤圭洰缁存姢 -->
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible0" title="鏍″噯椤圭洰缁存姢"
+               top="5vh" width="70%">
+      <h4>
+        <span style="display: flex;align-items: center;"><span class="line"></span><span>璁惧鏍″噯鍙傛暟缁存姢</span></span>
+        <el-button :loading="addCalibrateLoading" size="small" type="primary" @click="addCalibrate">娣� 鍔�</el-button>
+      </h4>
+      <div>
+        <el-form ref="form0" :model="form0" :rules="form0Rules"
+                 label-position="right" label-width="120px">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="璁¢噺鍙傛暟:" prop="measurementParameter">
+                <el-input v-model="form0.measurementParameter" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="閲忕▼鑼冨洿:" prop="rangeOfMeasurement">
+                <el-input v-model="form0.rangeOfMeasurement" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鏈�澶у厑璁歌宸�:" prop="maxPermissibleError">
+                <el-input v-model="form0.maxPermissibleError" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鍒ゅ畾鏍囧噯:" prop="judgmentCriteria">
+                <el-input v-model="form0.judgmentCriteria" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+      <h4>
+        <span style="display: flex;align-items: center;"><span class="line"></span><span>璁惧鏍″噯鍙傛暟</span></span>
+      </h4>
+      <!-- 璁惧鏍″噯鍙傛暟琛ㄦ牸 -->
+      <el-table ref="calibrateTable" v-loading="calibrateParamsLoading" :data="calibrateParams"
+                max-height="450"
+                stripe style="width: 100%">
+        <el-table-column label="缂栧彿" type="index" width="80"></el-table-column>
+        <el-table-column label="璁¢噺鍙傛暟" prop="measurementParameter"></el-table-column>
+        <el-table-column label="閲忕▼鑼冨洿" prop="rangeOfMeasurement"></el-table-column>
+        <el-table-column label="鏈�澶у厑璁歌宸�" prop="maxPermissibleError"></el-table-column>
+        <el-table-column label="鍒ゅ畾鏍囧噯" prop="judgmentCriteria"></el-table-column>
+        <el-table-column label="鍒涘缓浜�" prop="createdBy"></el-table-column>
+        <el-table-column label="鍒涘缓鏃堕棿" prop="creationTime"></el-table-column>
+        <el-table-column fixed="right" label="鎿嶄綔">
+          <template slot-scope="scope">
+            <el-button size="small" type="text" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+
+    <!-- 娣诲姞鏍″噯璁板綍 -->
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible1" title="娣诲姞鏍″噯璁板綍"
+               top="5vh"
+               width="80%" @close="resetCalibrationRecord">
+      <div style="height: 70vh;overflow-y: auto;overflow-x: hidden;">
+        <h4>
+          <div style="display: flex;align-items: center;">
+            <span class="line"></span>
+            <span>娣诲姞璁惧鏍″噯璁板綍</span>
+          </div>
+        </h4>
+        <el-form ref="calibrationRecord" :model="calibrationRecord"
+                 :rules="formRules" label-position="right" label-width="120px">
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:" prop="unitOfMeasure">
+                <el-input v-model="calibrationRecord.unitOfMeasure" :disabled="operationType === 'view'"
+                          size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鏍″噯鏃ユ湡:" prop="calibrationDate">
+                <el-date-picker v-model="calibrationRecord.calibrationDate" :disabled="operationType === 'view'"
+                                format="yyyy-MM-dd"
+                                placeholder="閫夋嫨鏃ユ湡"
+                                size="small"
+                                style="width: 90%" type="date"
+                                value-format="yyyy-MM-dd" @change="getNextCalibrationDate">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="涓嬫鏍″噯鏃ユ湡:" label-width="140px">
+                <el-date-picker v-model="calibrationRecord.nextCalibrationDate" disabled
+                                format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 90%"
+                                type="date" value-format="yyyy-MM-dd">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="璁$畻鍣ㄥ叿:" prop="calculatingApparatus">
+                <el-input v-model="calibrationRecord.calculatingApparatus" :disabled="operationType === 'view'"
+                          size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="璁$畻鏍囧噯閲忕▼:" prop="standardRange">
+                <el-input v-model="calibrationRecord.standardRange" :disabled="operationType === 'view'" size="small"
+                          style="width: 90%"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="璁¢噺鏍囧噯涓嶇‘瀹氬害:" label-width="140px" prop="calibrationStandardUncertainty">
+                <el-input v-model="calibrationRecord.calibrationStandardUncertainty" :disabled="operationType === 'view'" size="small"
+                          style="width: 90%"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鎵�渚濇嵁鏂囦欢:" prop="byDocument">
+                <el-input v-model="calibrationRecord.byDocument" :disabled="operationType === 'view'"
+                          size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="璇佷功缂栧彿:" prop="certificateSerialNumber">
+                <el-input v-model="calibrationRecord.certificateSerialNumber" :disabled="operationType === 'view'" size="small"
+                          style="width: 90%"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="鐘舵��:" label-width="140px" prop="status" required>
+                <el-radio-group v-model="calibrationRecord.status" :disabled="operationType === 'view'">
+                  <el-radio label="0yes">鍚堟牸</el-radio>
+                  <el-radio label="1no">涓嶅悎鏍�</el-radio>
+                  <el-radio label="2other">鍏朵粬</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="纭鏃ユ湡:">
+                <el-date-picker v-model="calibrationRecord.confirmDate" :disabled="operationType === 'view'"
+                                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%"
+                                type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="17">
+              <el-form-item label="闄勪欢锛�" prop="fileName">
+                <el-input v-model="calibrationRecord.fileName" :style="`width: ${operationType === 'add' ? '85%' : '100%'};}`" disabled
+                          size="small">
+                  <el-button v-if="operationType === 'add'" slot="append" icon="el-icon-delete-solid"
+                             @click="deleteFile"></el-button>
+                </el-input>
+                <el-upload v-if="operationType === 'add'" ref="upload" :action="action"
+                           :before-upload="beforeUpload"
+                           :headers="headers"
+                           :limit="1" :on-error="onError" :on-success="handleSuccessUp"
+                           :show-file-list="false"
+                           style="float: right;">
+                  <el-button :loading="upLoading" size="small" style="position: relative; top: -4px;"
+                             type="primary">闄勪欢涓婁紶
+                  </el-button>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="澶囨敞:">
+                <el-input v-model="calibrationRecord.remark" :disabled="operationType === 'view'" :rows="3" size="small" style="width: 96%"
+                          type="textarea"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <h4>
+          <span style="display: flex;align-items: center;">
+            <span class="line"></span><span>鏍″噯鏉$洰纭缁撴灉</span>
+          </span>
+        </h4>
+        <el-table ref="calibrateTable" :data="calibrateParams" border>
+          <el-table-column label="缂栧彿" type="index" width="60"></el-table-column>
+          <el-table-column label="璁¢噺鍙傛暟" prop="measurementParameter"></el-table-column>
+          <el-table-column label="閲忕▼鑼冨洿" prop="rangeOfMeasurement"></el-table-column>
+          <el-table-column label="鏈�澶у厑璁歌宸�" prop="maxPermissibleError"></el-table-column>
+          <el-table-column label="鍒ゅ畾鏍囧噯" prop="judgmentCriteria"></el-table-column>
+          <el-table-column label="鏄惁鏍″噯" prop="isCalibration">
+            <template slot="header" slot-scope="scope">
+              <span class="required-span">* </span>鏄惁鏍″噯
+            </template>
+            <template slot-scope="scope">
+              <el-radio-group v-model="scope.row.isCalibration" :disabled="operationType === 'view'">
+                <el-radio label="0yes">鏄�</el-radio>
+                <el-radio label="1no">鍚�</el-radio>
+              </el-radio-group>
+            </template>
+          </el-table-column>
+          <el-table-column label="鍒ゅ畾缁撴灉" min-width="140" prop="result">
+            <template slot="header" slot-scope="scope">
+              <span class="required-span">* </span>鍒ゅ畾缁撴灉
+            </template>
+            <template slot-scope="scope">
+              <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'" @input="checkRadio()">
+                <el-radio label="0yes">鍚堟牸</el-radio>
+                <el-radio label="1no">涓嶅悎鏍�</el-radio>
+                <el-radio label="2other">鍏朵粬</el-radio>
+              </el-radio-group>
+            </template>
+          </el-table-column>
+          <el-table-column label="鍗曢」缁撴灉璇存槑" prop="singleResultStatement">
+            <template slot-scope="scope">
+              <el-input v-model="scope.row.singleResultStatement" :disabled="operationType === 'view'"
+                        size="small"></el-input>
+            </template>
+          </el-table-column>
+        </el-table>
+        <!-- 鎿嶄綔鏃ュ織 -->
+        <!--        <h4>-->
+        <!--          <div style="display: flex;-->
+        <!--      align-items: center;">-->
+        <!--            <span class="line"></span><span>鏈褰曠姸鎬佸拰鎿嶄綔鏃ュ織</span>-->
+        <!--          </div>-->
+        <!--        </h4>-->
+        <!--        <el-table :data="tableDataOperate" style="width: 100%">-->
+        <!--          <el-table-column type="index" label="搴忓彿" width="100"></el-table-column>-->
+        <!--          <el-table-column prop="operator" label="鎿嶄綔浜�" width="120"></el-table-column>-->
+        <!--          <el-table-column prop="operationTime" label="鎿嶄綔鏃堕棿" width="180"></el-table-column>-->
+        <!--          <el-table-column prop="operationType" label="鎿嶄綔绫诲瀷" width="120"></el-table-column>-->
+        <!--          <el-table-column prop="operationContent" label="鎿嶄綔鍐呭"></el-table-column>-->
+        <!--        </el-table>-->
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="operationType === 'add'" @click="dialogVisible1 = false">鍙� 娑�</el-button>
+        <el-button v-if="operationType === 'add'" :loading="addRecordLoading" type="primary"
+                   @click="addRecord">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
 </template>
 
 <script>
+import file from '../../../util/file';
+import fileDownload from "../../../util/file";
+
 export default {
-
+  props: {
+    clickNodeVal: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      value: "",
+      calibrateParams: [],
+      calibrateParamsLoading: false,
+      addCalibrateLoading: false,
+      calibrationRecord: {
+        unitOfMeasure: '', // 璁¢噺鍗曚綅
+        calibrationDate: null, // 鏍″噯鏃ユ湡
+        nextCalibrationDate: null, // 涓嬫鏍″噯鏃ユ湡
+        calculatingApparatus: '', // 璁$畻鍣ㄥ叿
+        confirmDate: null, // 纭鏃ユ湡
+        standardRange: '', // 璁$畻鏍囧噯閲忕▼
+        calibrationStandardUncertainty: '', // 璁¢噺鏍囧噯涓嶇‘瀹氬害
+        byDocument: '', // 渚濇嵁鏂囦欢
+        certificateSerialNumber: '', // 璇佷功缂栧彿
+        status: '', // 鐘舵��
+        remark: '', // 澶囨敞
+        systemFileName: '', //
+        fileName: '', //
+      },
+      formRules: {
+        unitOfMeasure: [{required: true, message: '璇疯緭鍏ユ牎鍑嗘湇鍔℃満鏋�', trigger: 'blur'}],
+        calibrationDate: [{required: true, message: '璇烽�夋嫨鏍″噯鏃ユ湡', trigger: 'change'}],
+        calculatingApparatus: [{required: true, message: '璇疯緭鍏ヨ绠楀櫒鍏�', trigger: 'blur'}],
+        standardRange: [{required: true, message: '璇疯緭鍏ヨ绠楁爣鍑嗛噺绋�', trigger: 'blur'}],
+        calibrationStandardUncertainty: [{required: true, message: '璇疯緭鍏ヨ閲忔爣鍑嗕笉纭畾搴�', trigger: 'blur'}],
+        byDocument: [{required: true, message: '璇疯緭鍏ユ墍渚濇嵁鏂囦欢', trigger: 'blur'}],
+        status: [{required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'change'}],
+      },
+      tableData: [],
+      dialogVisible0: false,
+      dialogVisible1: false,
+      form0: {
+        measurementParameter: '', // 璁¢噺鍙傛暟
+        rangeOfMeasurement: '',
+        maxPermissibleError: '',
+        judgmentCriteria: '',
+        createdBy: '',
+        action: '',
+        deviceId: null
+      },
+      form0Rules: {
+        measurementParameter: [
+          {required: true, message: '璇疯緭鍏ヨ閲忓弬鏁�', trigger: 'blur'}
+        ],
+        rangeOfMeasurement: [
+          {required: true, message: '璇疯緭鍏ラ噺绋嬭寖鍥�', trigger: 'blur'}
+        ],
+        maxPermissibleError: [
+          {required: true, message: '璇疯緭鍏ユ渶澶у厑璁歌宸�', trigger: 'blur'}
+        ],
+        judgmentCriteria: [
+          {required: true, message: '璇疯緭鍏ュ垽瀹氭爣鍑�', trigger: 'blur'}
+        ],
+      },
+      addRecordLoading: false,
+      tableDataOperate: [], // 鏈褰曠姸鎬佸拰鎿嶄綔鏃ュ織
+      upLoading: false,
+      operationType: '',
+      search: {
+        size: 20,
+        current: 1,
+        total: 0
+      },
+    }
+  },
+  // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+  computed: {
+    headers() {
+      return {
+        'token': sessionStorage.getItem('token')
+      }
+    },
+    action() {
+      return this.javaApi + this.$api.personnel.saveCNASFile
+    }
+  },
+  mounted() {
+    //鑾峰彇鎿嶄綔璁板綍淇℃伅
+    this.getOperateMsg();
+    this.getTableList(this.clickNodeVal.value) // 鑾峰彇璁惧鏍″噯鍒楄〃鏁版嵁
+  },
+  methods: {
+    //鐘舵�佸垽瀹�
+    checkRadio(){
+      let resultList = this.calibrateParams.map(ele=>ele.result)
+      if(resultList && resultList.filter(ele=>ele=='1no').length>0){
+        this.calibrationRecord.status = '1no'
+      }else if(resultList && resultList.filter(ele=>ele=='2other').length==resultList.length){
+        this.calibrationRecord.status = '2other'
+      }else if(resultList && resultList.filter(ele=>ele=='0yes').length==resultList.length){
+        this.calibrationRecord.status = '0yes'
+      }
+    },
+    getNextCalibrationDate(val) {
+      let oneYearLaterDate = new Date(val)
+      oneYearLaterDate.setFullYear(oneYearLaterDate.getFullYear() + 1);
+      oneYearLaterDate.setDate(oneYearLaterDate.getDate() - 1);
+      // let obj = oneYearLaterDate.toISOString().split('T')[0];
+      this.calibrationRecord.nextCalibrationDate = oneYearLaterDate
+    },
+    handleSizeChange(val) {
+      this.search.size = val
+      this.getTableList(this.clickNodeVal.value);
+    },
+    handleCurrentChange(val) {
+      this.search.current = val
+      this.getTableList(this.clickNodeVal.value);
+    },
+    getTableList(deviceId) {
+      this.$axios.get(this.$api.deviceCheck.deviceMetricRecordPage + '?deviceId=' + deviceId + "&size=" + this.search.size + "&current=" + this.search.current + "&type=calibrate").then(res => {
+        this.tableData = res.data.records
+        this.search.total = res.data.total
+      })
+    },
+    getOperateMsg() {
+      this.$axios.get(this.$api.deviceOperate.list + "/" + this.clickNodeVal.value).then(res => {
+        this.tableDataOperate = res.data
+      })
+    },
+    // 娣诲姞鏍告煡璁板綍
+    add(type) {
+      this.operationType = type
+      this.dialogVisible1 = true
+      this.getXmsg()
+    },
+    // 鏌ョ湅璇︽儏
+    handleViewClick(type, row) {
+      this.$axios.get(this.$api.deviceCheck.showDeviceMetricsCopy + "?id=" + row.id + "&type=calibrate").then(res => {
+        this.calibrateParams = res.data
+      })
+      this.calibrationRecord = {...row}
+      this.operationType = type
+      this.dialogVisible1 = true
+    },
+    // 琛ㄦ牸鍒犻櫎鎿嶄綔
+    handleDeleteClick(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetricRecord + "?id=" + row.id).then(res => {
+          this.getTableList(this.clickNodeVal.value) // 鑾峰彇璁惧鏍″噯鍒楄〃鏁版嵁
+          this.$message.success('鍒犻櫎鎴愬姛锛�')
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      })
+    },
+    handleAttachmentClick(row) {
+      let state = /\.(jpg|jpeg|png|gif)$/i.test(row.systemFileName)
+      if (state) {
+        let url = this.javaApi + '/img/' + row.systemFileName;
+        fileDownload.downloadIamge(url, row.systemFileName)
+      } else {
+        const url = this.javaApi+'/word/'+ row.systemFileName
+        const link = document.createElement('a');
+        link.href = url;
+        link.download = row.systemFileName;
+        link.click();
+        this.$message.success('涓嬭浇鎴愬姛')
+      }
+    },
+    //瀵煎嚭
+    handleDown() {
+      this.outLoading = true
+      this.$axios.get(this.$api.deviceCheck.deviceMetricRecordExport + '?deviceId=' + this.clickNodeVal.value + "&type=calibrate", {
+        responseType: "blob"
+      }).then(res => {
+        this.outLoading = false
+        const blob = new Blob([res], {type: 'application/octet-stream'});
+        //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+        let reader = new FileReader();
+        reader.readAsText(blob, 'utf-8');
+        reader.onload = () => {
+          try {
+            let result = JSON.parse(reader.result);
+            if (result.message) {
+              this.$message.error(result.message);
+            } else {
+              const url = URL.createObjectURL(blob);
+              const link = document.createElement('a');
+              link.href = url;
+              link.download = '璁惧鏍″噯.xlsx';
+              link.click();
+              this.$message.success('瀵煎嚭鎴愬姛')
+            }
+          } catch (err) {
+            console.log(err);
+            const url = URL.createObjectURL(blob);
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = '璁惧鏍″噯.xlsx';
+            link.click();
+            this.$message.success('瀵煎嚭鎴愬姛')
+          }
+        }
+      })
+    },
+    deleteFile() {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎鏂囦欢, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.calibrationRecord.systemFileName).then(res => {
+          this.calibrationRecord.fileName = ''
+          this.$refs.upload.clearFiles()
+          if (res.code == 200) {
+            this.$message.success('鍒犻櫎鎴愬姛锛�')
+          }
+        })
+      }).catch((err) => {
+        console.log('err----', err)
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鏍″噯椤圭洰缁存姢
+    calibrationMaintenance() {
+      this.dialogVisible0 = true
+      this.getXmsg();
+    },
+    // 鑾峰彇璁惧鏍″噯鍙傛暟table淇℃伅
+    async getXmsg() {
+      this.calibrateParamsLoading = true
+      try {
+        await this.$axios.get(this.$api.deviceCheck.selectDeviceMetric + "?deviceId=" + this.clickNodeVal.value + "&type=calibrate").then(res => {
+          if (res.code == 200) {
+            this.calibrateParams = res.data
+          }
+          this.calibrateParamsLoading = false
+        })
+      } catch (e) {
+        console.log('getXmsg---', e)
+        this.calibrateParamsLoading = false
+      }
+    },
+    // 鏍″噯椤圭洰缁存姢-鍒犻櫎璁惧鏍″噯鍙傛暟
+    handleDelete(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetrics + '?id=' + row.id).then(res => {
+          if (res.code === 200) {
+            this.$message.success('鍒犻櫎鎴愬姛!');
+            this.getXmsg();
+          }
+        })
+      }).catch(() => {
+        this.$message.info('宸插彇娑堝垹闄�');
+      })
+    },
+    addCalibrate() {
+      this.$refs['form0'].validate((valid) => {
+        if (valid) {
+          // 淇濆瓨
+          this.calibrateParamsLoading = true
+          this.addCalibrateLoading = true
+          this.form0.deviceId = this.clickNodeVal.value;
+          const user = JSON.parse(localStorage.getItem('user'))
+          this.form0.createdBy = user.name;
+          this.form0.type = 'calibrate'
+          this.$axios.post(this.$api.deviceCheck.saveOrUpdateDeviceMetric, this.form0, {
+            headers: {
+              'Content-Type': 'application/json'
+            }
+          }).then(res => {
+            if (res.code == 200) {
+              this.$message.success('淇濆瓨鎴愬姛')
+              this.$refs['form0'].resetFields()
+              this.getXmsg() // 鍒锋柊璁惧鏍″噯鍙傛暟琛ㄦ牸
+            }
+            this.calibrateParamsLoading = false
+            this.addCalibrateLoading = false
+          })
+        } else {
+          this.addCalibrateLoading = false
+          this.$message.warning('鏈夊繀濉」鏈~');
+        }
+      })
+    },
+    addRecord() {
+      this.$refs['calibrationRecord'].validate((valid) => {
+        if (valid) {
+          try {
+            if (this.calibrateParams.some(m => m.isCalibration === undefined)) {
+              this.$message.error('璇烽�夋嫨鏄惁鏍″噯')
+              return
+            }
+            if (!this.calibrateParams.every(m => m.result !== undefined)) {
+              this.$message.error('璇烽�夋嫨鍒ゅ畾缁撴灉')
+              return
+            }
+            this.addRecordLoading = true
+            this.calibrationRecord.deviceId = this.clickNodeVal.value;
+            let user = JSON.parse(localStorage.getItem('user'))
+            this.calibrationRecord.createUser = user.name
+            this.calibrationRecord.type = 'calibrate'
+            this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams
+            this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceMetricRecord, this.calibrationRecord, {
+              headers: {
+                'Content-Type': 'application/json'
+              }
+            }).then(res => {
+              if (res.code == 200) {
+                this.$message.success('娣诲姞鎴愬姛')
+                this.dialogVisible1 = false
+                this.getTableList(this.clickNodeVal.value)
+              }
+              this.addRecordLoading = false
+            })
+          } catch (e) {
+            console.log('addRecord---', e)
+            this.addRecordLoading = false
+          }
+        } else {
+          this.$message.warning('鏈夊繀濉」鏈~');
+        }
+      })
+    },
+    resetCalibrationRecord() {
+      this.$refs.calibrationRecord.resetFields()
+    },
+    // 涓婁紶闄勪欢
+    handleSuccessUp(response, file) {
+      if (response.code == 200) {
+        // 鍦ㄤ繚瀛樿祴鍊兼柊鏂囦欢
+        this.calibrationRecord.fileName = file.name
+        this.calibrationRecord.systemFileName = response.data
+        this.upLoading = false;
+      } else {
+        this.upLoading = false;
+        this.$message.error(response.message)
+      }
+    },
+    beforeUpload(file) {
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        return false;
+      } else {
+        this.upLoading = true;
+        return true;
+      }
+    },
+    onError(err, file, fileList) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    // end
+  },
+  watch: {
+    // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+    clickNodeVal(newVal) {
+      if (newVal.value) {
+        this.getTableList(newVal.value);
+      }
+    },
+    dialogVisible1(newVal) {
+      if (newVal === false) {
+        this.calibrateParams = []
+        this.calibrationRecord = {
+          unitOfMeasure: '', // 璁¢噺鍗曚綅
+          calibrationDate: null, // 鏍″噯鏃ユ湡
+          nextCalibrationDate: null, // 涓嬫鏍″噯鏃ユ湡
+          calculatingApparatus: '', // 璁$畻鍣ㄥ叿
+          standardRange: '', // 璁$畻鏍囧噯閲忕▼
+          calibrationStandardUncertainty: '', // 璁¢噺鏍囧噯涓嶇‘瀹氬害
+          byDocument: '', // 渚濇嵁鏂囦欢
+          certificateSerialNumber: '', // 璇佷功缂栧彿
+          status: '', // 鐘舵��
+          remark: '', // 澶囨敞
+        }
+      }
+    }
+  }
 }
+
+function downloadImage(url) {
+  const link = document.createElement('a');
+  link.href = url;
+  link.target="_blank"
+  link.download = 'attachment.jpg'; // 鏂囦欢鍚�
+  document.body.appendChild(link);
+  link.click();
+  document.body.removeChild(link);
+}
+
 </script>
-
 <style scoped>
+.tables {
+  width: 100%;
+  height: calc(100vh - 230px);
+}
 
+.search {
+  background-color: #fff;
+  height: 40px;
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+
+.search_thing {
+  display: flex;
+  align-items: center;
+  height: 40px;
+}
+
+.search_label {
+  width: 70px;
+  font-size: 14px;
+  text-align: right;
+  margin-right: 10px;
+}
+
+.search_input {
+  width: calc(100% - 110px);
+}
+
+.btnS {
+  text-align: right;
+  margin-top: 10px;
+}
+
+h4 {
+  font-weight: 400;
+  font-size: 16px;
+  display: flex;
+  justify-content: space-between;
+  margin: 10px 0;
+}
+
+h4 .line {
+  display: inline-block;
+  width: 3px;
+  height: 16px;
+  background: #3A7BFA;
+  margin-right: 4px;
+}
+
+.check {
+  background-color: #fff;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+
+.check_thing {
+  flex: 0 0 calc(20% - 10px);
+  margin-bottom: 20px;
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+}
+
+.check_label {
+  font-size: 14px;
+  margin-bottom: 5px;
+}
+
+.check_data .check_input {
+  width: 100%;
+}
+
+.el-table {
+  font-size: 14px;
+  color: #333;
+}
+
+.el-table thead {
+  background-color: #f5f5f5;
+}
 </style>
+
+
+
+

--
Gitblit v1.9.3