spring
2025-03-11 4c3fd93d87daace1de00b129e642193fe863f4a2
src/views/CNAS/resourceDemand/device/component/management.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1012 @@
<!-- è®¾å¤‡å·¥å…·æ˜Žç»† -->
<template>
   <div class="role_manage">
      <div class="search" v-show="!showData">
         <div class="search_thing">
            <div class="search_label">状态:</div>
            <el-select v-model="queryParams.deviceStatus" placeholder="全部" size="small">
               <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value">
               </el-option>
            </el-select>
         </div>
         <div class="search_thing">
            <div class="search_label">设备名称:</div>
            <div class="search_input">
               <el-input size="small" placeholder="请输入" clearable v-model="queryParams.deviceName"
                  @keyup.enter.native="refreshTable()">
               </el-input>
            </div>
         </div>
         <div class="search_thing">
            <div class="search_label">规格型号:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="queryParams.specificationModel" @keyup.enter.native="refreshTable()"></el-input>
            </div>
         </div>
         <div style="padding-left: 30px;">
            <el-button size="small" @click="refresh()">重 ç½®</el-button>
            <el-button size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
            <el-button size="small" type="primary" @click="dialogVisible2 = true">新 å¢ž</el-button>
            <el-button size="small" type="primary" @click="handleDownOne">导 å‡º</el-button>
         </div>
      </div>
      <div class="table" v-show="!showData">
         <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 320px)'"
            :page="page" @pagination="pagination"></lims-table>
      </div>
    <el-dialog :title="isUp ? '设备详情' : '档案修订'" :visible.sync="dialogVisible" width="70%"
               top="5vh"
               :before-close="handleClose">
      <el-row style="display:flex;justify-content: space-around;">
        <!-- å·¦è¾¹å¸ƒå±€ -->
        <el-col :span="7">
          <el-col>
            <!-- å›¾ç‰‡ -->
            <el-image class="img" style="width:100%;height: 320px;marginBottom:16px"
                      :src="javaApi + '/img/' + formData.imageUpload">
              <div slot="error" class="image-error" style="width: calc(100% -2px);
            height: 318px;
            border-radius: 16px;
            display: flex;
            align-items: center;
            justify-content: center;
            border: 1px solid #EEEEEE;">
                <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i>
              </div>
            </el-image>
            <!-- è¡¨å• -->
            <el-form :label-position="labelPosition" :model="formData" label-width="120px">
              <el-form-item label="仪器名称:" required>
                <el-input :disabled="isUp" v-model="formData.deviceName" size="small"></el-input>
              </el-form-item>
              <el-form-item label="仪器名称EN:" required>
                <el-input :disabled="isUp" v-model="formData.enDeviceName" size="small"></el-input>
              </el-form-item>
              <el-form-item label="规格型号:" required>
                <el-input :disabled="isUp" v-model="formData.specificationModel"
                          size="small"></el-input>
              </el-form-item>
              <el-form-item label="生产厂家:">
                <el-input :disabled="isUp" v-model="formData.manufacturer" size="small"></el-input>
              </el-form-item>
            </el-form>
          </el-col>
        </el-col>
        <!-- ä¸­é—´å¸ƒå±€ -->
        <el-col :span="7">
          <el-form :label-position="labelPosition" :model="formData" label-width="116px">
            <el-form-item label="校准服务机构:">
              <el-input disabled v-model="formData.calibrationServices" size="small"></el-input>
            </el-form-item>
            <el-form-item label="出厂编号:">
              <el-input :disabled="isUp" v-model="formData.factoryNo" size="small"></el-input>
            </el-form-item>
            <el-form-item label="管理编号:" required>
              <el-input :disabled="isUp" v-model="formData.managementNumber" size="small"></el-input>
            </el-form-item>
            <el-form-item label="购置日期:">
              <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.acquisitionDate"
                              type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small"
                              placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="启用日期:" required>
              <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.activationDate"
                              type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small"
                              placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="管理人:">
              <el-select v-model="formData.equipmentManager" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option :disabled="isUp" v-for="item in responsiblePersonList" :key="item.value"
                           :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="存放点:">
              <el-input :disabled="isUp" v-model="formData.storagePoint" size="small"></el-input>
            </el-form-item>
            <el-form-item label="技术指标:">
              <el-input :disabled="isUp" v-model="formData.technicalIndicators" :rows="7" type="textarea"
                        size="small"></el-input>
            </el-form-item>
          </el-form>
        </el-col>
        <!-- å³è¾¹å¸ƒå±€ -->
        <el-col :span="7">
          <el-form :label-position="labelPosition" :model="formData" label-width="140px" ref="ruleForm">
            <!-- å®žéªŒå®¤åˆ—表 -->
            <el-form-item label="所属部门:">
              <el-select :disabled="isUp" v-model="formData.subordinateDepartmentsId" placeholder="请选择"
                         size="small" style="width:100%">
                <el-option v-for="item in subordinateDepartmentsList" :key="item.value"
                           :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="检测项目:">
              <el-cascader :disabled="isUp" v-model="formData.insProductIds" :options="options"
                           :show-all-levels="false" :props="props" placeholder="请选择" size="small"
                           style="width:100%;" :collapse-tags="!isUp" separator="," filterable
                           clearable></el-cascader>
            </el-form-item>
            <el-form-item label="最近校准日期:" v-if="isUp">
              <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.latestTraceability"
                              format="yyyy-MM-dd" value-format="yyyy-MM-dd" type="date" size="small"
                              placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="下次校准日期:" v-if="isUp">
              <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.latestTraceability"
                              format="yyyy-MM-dd" value-format="yyyy-MM-dd" type="date" size="small"
                              placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="设备类型:">
              <el-select :disabled="isUp" v-model="formData.largeCategory" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option v-for="item in equipmentList" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="单价(万元):">
              <el-input :disabled="isUp" v-model="formData.unitPrice" size="small"></el-input>
            </el-form-item>
            <el-form-item label="当前状态:" required>
              <el-select :disabled="isUp" v-model="formData.deviceStatus" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="校准周期(月):" required>
              <el-input :disabled="isUp" v-model="formData.calibrationDate" size="small"></el-input>
            </el-form-item>
            <el-form-item label="图片:">
              <div
                style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;">
                <div v-show="formData.imageName" class="picName">{{ formData.imageName }}</div>
                <el-upload :disabled="isUp" :action="action" :on-success="handleSuccessUpImg2"
                           :show-file-list="false" accept='image/jpg,image/jpeg,image/png' :headers="uploadHeader"
                           :on-change="beforeUpload" :on-error="onError" ref='upload'>
                  <el-button type="text" style="height:30px;padding-top:8px">上传</el-button>
                </el-upload>
              </div>
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
            <el-row v-if="!isUp">
               <el-button @click="handleClose">取 æ¶ˆ</el-button>
               <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®š</el-button>
            </el-row>
         </span>
    </el-dialog>
    <!-- æ–°å¢ž-->
    <el-dialog title="新增设备" top="5vh" :visible.sync="dialogVisible2" width="70%" :before-close="handleClose2">
      <el-row style="display:flex;justify-content: space-around;">
        <!-- å·¦è¾¹å¸ƒå±€ -->
        <el-col :span="7">
          <el-col>
            <!-- å›¾ç‰‡ -->
            <el-image class="img" style="width:100%;height: 320px;margin-bottom:16px"
                      :src="javaApi + '/img/' + formData2.imageUpload">
              <div slot="error" class="image-error" style="width: calc(100% -2px);
          height: 318px;
          border-radius: 16px;
          display: flex;
          align-items: center;
          justify-content: center;
          border: 1px solid #EEEEEE;">
                <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i>
              </div>
            </el-image>
            <!-- è¡¨å• -->
            <el-form :label-position="labelPosition" :model="formData2" label-width="120px">
              <el-form-item label="仪器名称:" required>
                <el-input v-model="formData2.deviceName" size="small"></el-input>
              </el-form-item>
              <el-form-item label="仪器名称EN:" required>
                <el-input v-model="formData2.enDeviceName" size="small"></el-input>
              </el-form-item>
              <el-form-item label="规格型号:" required>
                <el-input v-model="formData2.specificationModel" size="small"></el-input>
              </el-form-item>
              <el-form-item label="生产厂家:">
                <el-input v-model="formData2.manufacturer" size="small"></el-input>
              </el-form-item>
            </el-form>
          </el-col>
        </el-col>
        <!-- ä¸­é—´å¸ƒå±€ -->
        <el-col :span="7">
          <el-form :label-position="labelPosition" :model="formData2" label-width="110px">
            <!-- <el-form-item label="生产厂家EN:">
              <el-input v-model="formData2.factoryNo" size="small"></el-input>
            </el-form-item> -->
            <el-form-item label="校准服务机构:">
              <el-input v-model="formData2.calibrationServices" size="small"></el-input>
            </el-form-item>
            <el-form-item label="出厂编号:">
              <el-input v-model="formData2.factoryNo" size="small"></el-input>
            </el-form-item>
            <el-form-item label="管理编号:" required>
              <el-input v-model="formData2.managementNumber" size="small"></el-input>
            </el-form-item>
            <el-form-item label="购置日期:">
              <el-date-picker style="width:100%" v-model="formData2.acquisitionDate" type="date"
                              format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="启用日期:" required>
              <el-date-picker style="width:100%" v-model="formData2.activationDate" type="date"
                              format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="管理人:">
              <el-select v-model="formData2.equipmentManager" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="存放点:">
              <el-input v-model="formData2.storagePoint" size="small"></el-input>
            </el-form-item>
            <el-form-item label="技术指标:">
              <el-input v-model="formData2.technicalIndicators" :rows="7" type="textarea"
                        size="small"></el-input>
            </el-form-item>
          </el-form>
        </el-col>
        <!-- å³è¾¹å¸ƒå±€ -->
        <el-col :span="7">
          <el-form :label-position="labelPosition" :model="formData2" label-width="120px" ref="ruleForm">
            <!-- å®žéªŒå®¤åˆ—表 -->
            <el-form-item label="所属部门:">
              <el-select v-model="formData2.subordinateDepartmentsId" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option v-for="item in subordinateDepartmentsList" :key="item.value"
                           :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="检测项目:">
              <el-cascader v-model="formData2.insProductIds" :options="options" :show-all-levels="false"
                           :props="props" placeholder="请选择" size="small" style="width:100%" collapse-tags
                           separator="," filterable clearable></el-cascader>
            </el-form-item>
            <el-form-item label="设备类型:">
              <el-select v-model="formData2.largeCategory" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option v-for="item in equipmentList" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="单价(万元):">
              <el-input v-model="formData2.unitPrice" size="small"></el-input>
            </el-form-item>
            <el-form-item label="当前状态:" required>
              <el-select v-model="formData2.deviceStatus" placeholder="请选择" size="small"
                         style="width:100%">
                <el-option v-for="item in deviceStatusList" :key="item.id" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="校准周期(月):" required>
              <el-input v-model="formData2.calibrationDate" size="small"></el-input>
            </el-form-item>
            <el-form-item label="图片:">
              <div
                style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;line-height:32px;display:flex;justify-content: space-around;font-size: 13px;">
                <div v-show="formData2.imageName" class="picName">{{ formData2.imageName }}</div>
                <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
                           accept='image/jpg,image/jpeg,image/png' :headers="uploadHeader" :on-change="beforeUpload"
                           :on-error="onError" ref='upload'>
                  <el-button type="text" style="height:30px;padding-top:8px">上传</el-button>
                </el-upload>
              </div>
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
            <el-row>
               <el-button @click="handleClose2">取 æ¶ˆ</el-button>
               <el-button type="primary" @click="submitForm2" :loading="upLoad2">ç¡® å®š</el-button>
            </el-row>
         </span>
    </el-dialog>
    <el-dialog title="数采配置" :visible.sync="dialogVisible3" width="400px">
      <div class="search_thing" style="margin-bottom: 14px;">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>IP:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.ip"></el-input>
      </div>
      <div class="search_thing" style="margin-bottom: 14px;">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>采集地址:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.collectUrl"></el-input>
      </div>
      <div class="search_thing" style="margin-bottom: 14px;">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>储存地址:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.storageUrl"></el-input>
      </div>
      <div class="search_thing" style="margin-bottom: 14px;">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>参照:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.refer"></el-input>
      </div>
      <div class="search_thing" style="margin-bottom: 14px;">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>X:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.x"></el-input>
      </div>
      <div class="search_thing" style="margin-bottom: 14px;">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>Y:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.y"></el-input>
      </div>
      <div class="search_thing">
        <div class="search_label">公式:</div>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.formula"></el-input>
      </div>
      <span slot="footer" class="dialog-footer">
            <el-row>
               <el-button @click="dialogVisible3 = false">取 æ¶ˆ</el-button>
               <el-button type="primary" @click="submitForm3" :loading="upLoad3">ç¡® å®š</el-button>
            </el-row>
         </span>
    </el-dialog>
      <dataAcquisitionConfig v-if="showData" :deviceId="deviceId" />
   </div>
</template>
<script>
import limsTable from "@/components/Table/lims-table.vue";
import dataAcquisitionConfig from './acquisitionConfig.vue'
import {
   obtainItemParameterList,
   exportEquipmentDetails,
   getInsProduction,
   upDeviceParameter,
   addDeviceParameter,
   numberCollect,
   getDeviceParameter,
   delDeviceParameter,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/system/user";
export default {
   props: {
      clickNodeVal: {
         type: Object,
         default: () => {
            return {};
         }
      }
   },
   components: {
      limsTable,
      dataAcquisitionConfig,
   },
   data() {
      return {
         dateFormat: 'yyyy-MM-dd',
         deviceId: '',
         fileTypeOptions: [
            { label: 'csv', value: '.csv' },
            { label: 'db', value: '.db' },
            { label: 'mdb', value: '.mdb' },
            { label: 'word', value: '.docx' },
            { label: 'excel', value: '.xlsx' },
            { label: 'txt', value: '.txt' },
            { label: 'png', value: '.png' },
         ],
         //是否是档案修订  true不是 false是
         isUp: true,
         formData: {
            authorizedPerson: []
         },
         formData2: {
            imageUpload: '',
            imageName: '',
            deviceStatus: '',
            authorizedPerson: []
         },
         value: '',
         props: { multiple: true, emitPath: false, value: 'id', label: 'name' },
         options: [],
         labelPosition: 'right',
         dialogVisible: false,
         dialogVisible2: false,
         addPower: false,
         showData: false, // æ•°é‡‡é…ç½®é¡µé¢
         tableList: [],
         addDia: true,
         addPower: true,
         //设备类型列表
         equipmentList: [],
         // è´Ÿè´£äººåˆ—表
         responsiblePersonList: [],
         // æŽˆæƒäººåˆ—表
         authorizerList: [],
         // å½“前状态列表
         deviceStatusList: [],
         // æ‰€å±žéƒ¨é—¨
         subordinateDepartmentsList: [],
         upLoad: false,
         upLoad2: false,
         dialogVisible3: false,
         upLoad3: false,
         configForm: {},
         laboratoryNameIsNull: false,
         queryParams: {},
         tableData: [],
         column: [
            { label: "设备名称", prop: "deviceName", dataType: 'link', linkMethod: 'selectAllByOne' },
            { label: "设备名称EN", prop: "enDeviceName" },
            {
               label: "规格型号",
               prop: "specificationModel",
            },
            { label: "生产厂家", prop: "manufacturer" },
            { label: "出厂编号", prop: "factoryNo" },
            { label: "管理编号", prop: "managementNumber" },
            { label: "技术指标", prop: "technicalIndicators" },
            { label: "购置日期", prop: "acquisitionDate" },
            { label: "启用日期", prop: "activationDate" },
            { label: "管理人", prop: "equipmentManagerUser" },
            { label: "存放点", prop: "storagePoint" },
            { label: "所属部门", prop: "laboratoryName" },
            { label: "检验项目", prop: "insProductItem" },
            { label: "校准服务机构", prop: "calibrationServices" },
            { label: "最近校准日期", prop: "lastCalibrationDateTwo" },
            { label: "最近核查日期", prop: "lastCalibrationDate" },
            { label: "下次校准日期", prop: "nextCalibrationDateTwo" },
            { label: "下次核查日期", prop: "nextCalibrationDate" },
            {
               label: "设备分类", prop: "largeCategory", dataType: "tag",
               formatData: (params) => {
                  return this.equipmentList.find(m => m.value == params).label
               },
               formatType: (params) => {
                  return this.equipmentList.find(m => m.value == params).type
               }
            },
            { label: "单价", prop: "unitPrice" },
            {
               label: "设备状态", prop: "deviceStatus", dataType: "tag",
               formatData: (params) => {
                  return this.deviceStatusList.find(m => m.value == params).label
               },
               formatType: (params) => {
                  return this.deviceStatusList.find(m => m.value == params).type
               }
            },
            { label: "校准周期(月)", prop: "calibrationDate" },
            {
               dataType: "action",
               fixed: "right",
               label: "操作",
               operation: [
                  {
                     name: "档案修订",
                     type: "text",
                     clickFun: (row) => {
                        this.isUpdate(row);
                     },
                  },
                  {
                     name: "数采配置",
                     type: "text",
                     clickFun: (row) => {
                        this.handleConfig(row);
                     },
                     disabled: (row) => {
                        return row.insProductItem == null || row.insProductItem === ''
                     }
                  },
                  {
                     name: "删除",
                     type: "text",
                     clickFun: (row) => {
                        this.handleDelete(row);
                     },
                  },
               ],
            },
         ],
         page: {
            total: 0,
            size: 10,
            current: 0,
         },
         tableLoading: false,
      }
   },
   computed: {
      action() {
         return this.javaApi + '/deviceScope/uploadFile'
      }
   },
   mounted() {
      this.selectEnumByCategory()
      this.selectDevicePrincipal()
      this.obtainItemParameterList()
      this.getInsProductIds()
      // åˆå§‹åŒ–
      this.clickSidebar(this.clickNodeVal)
   },
   methods: {
      //分类
      handleNotification(cate) {
         this.queryParams.largeCategory = cate
      },
      obtainItemParameterList() {
         obtainItemParameterList().then(res => {
            let data = []
            res.data.forEach(a => {
               data.push({
                  label: a.laboratoryName,
                  value: a.id
               })
            })
            this.subordinateDepartmentsList = data
         })
      },
      getList() {
         this.tableLoading = true;
         let param = { laboratoryNameIsNull: this.laboratoryNameIsNull, ...this.queryParams, ...this.page };
         delete param.total;
         getDeviceParameter({ ...param })
            .then((res) => {
               this.tableLoading = false;
               if (res.code === 200) {
                  this.tableData = res.data.records;
                  this.page.total = res.data.total;
               }
            })
            .catch((err) => {
               this.tableLoading = false;
            });
      },
      pagination({ page, limit }) {
         this.page.current = page;
         this.page.size = limit;
         this.getList();
      },
      refresh() {
         this.queryParams = {};
         this.page.current = 1;
         this.getList();
      },
      refreshTable() {
         this.page.current = 1;
         this.getList();
      },
      // å¯¼å‡º
      handleDownOne() {
         this.outLoading = true
         exportEquipmentDetails().then(res => {
            this.outLoading = false
            const blob = new Blob([res], { type: 'application/octet-stream' });
            this.$download.saveAs(blob, '设备仪器一览表.doc')
         })
      },
      // èŽ·å–å­—å…¸
      selectEnumByCategory() {
         // è®¾å¤‡çŠ¶æ€
         this.getDicts("device_status").then((response) => {
            this.deviceStatusList = this.dictToValue(response.data);
         });
         // è®¾å¤‡åˆ†ç±»
         this.getDicts("device_type").then((response) => {
            this.equipmentList = this.dictToValue(response.data);
         });
      },
      // èŽ·å–è´Ÿè´£äººåˆ—è¡¨
      selectDevicePrincipal() {
         selectUserCondition().then(res => {
            let data = [];
            res.data.forEach((a) => {
               data.push({
                  label: a.name,
                  value: a.id,
               });
            });
            this.responsiblePersonList = data
            this.authorizerList = data
         })
      },
      getInsProductIds() {
         getInsProduction().then(res => {
            this.options = res.data.map((m, i) => {
               m.id = m.name;
               let children = m.children.map(n => {
                  n.label = n.name;
                  n.value = n.id;
                  return n
               })
               return m
            })
            this.options.forEach(item => {
               if (item.children.length == 0) {
                  item.children = null;
               } else {
                  item.children.forEach(m => {
                     if (m.children.length == 0) {
                        m.children = null;
                     } else {
                        m.children.forEach(n => {
                           if (n.children && n.children.length == 0) {
                              n.children = null;
                           }
                        })
                     }
                  })
               }
            })
         })
      },
      handleClose() {
         this.formData = {
            authorizedPerson: []
         }
         this.formData2 = {
            imageUpload: '',
            imageName: '',
            authorizedPerson: []
         }
         this.dialogVisible = false;
         this.upLoad = false;
      },
      handleClose2() {
         this.formData = {
            authorizedPerson: []
         }
         this.formData2 = {
            imageUpload: '',
            imageName: '',
            authorizedPerson: []
         }
         this.dialogVisible2 = false;
         this.upLoad = false;
      },
      selectAllByOne(row) {
         this.isUp = true
         //打开弹框
         this.dialogVisible = true;
         //row = ç‚¹å‡»å¯¹åº”行值
         //复制给formData
         this.formData = this.HaveJson(row);
         console.log(row.insProductIds + 'valll');
         this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
      },
      isUpdate(row) {
         //修改  isUp ä¸ºæ¡£æ¡ˆä¿®æ”¹
         this.isUp = false
         //打开弹框
         this.dialogVisible = true;
         //row = ç‚¹å‡»å¯¹åº”行值一行值
         //复制给formData
         this.formData = this.HaveJson(row);
         if (typeof (row.insProductIds) === 'number') {
            row.insProductIds = row.insProductIds + ''
         }
         this.formData.deviceStatus = this.formData.deviceStatus + ''
         this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
         // å°†æ—¶é—´æ ¼å¼ä¸ºyyyy-MM-dd è¿›è¡Œè½¬æ¢
         const dateRegex = /^\d{4}-\d{2}-\d{2}$/
         Object.keys(this.formData).forEach(key => {
            if (dateRegex.test(this.formData[key])) {
               this.formData[key] = `${this.formData[key]} 00:00:00`
            }
         })
      },
      beforeUpload(file) {
         if (file.size > 1024 * 1024 * 10) {
            this.$message.error('上传文件不超过10M');
            this.$refs.upload.clearFiles()
            return false;
         } else {
            return true;
         }
      },
      onError(err, file, fileList) {
         this.$message.error('上传失败')
         this.$refs.upload.clearFiles()
      },
      // ä¸Šä¼ å›¾ç‰‡æˆåŠŸ
      handleSuccessUpImg(response,) {
         if (response.code == 200) {
            this.formData.imageUpload = response.data.url;
            this.formData.imageName = response.data.name;
         }
      },
      handleSuccessUpImg2(response) {
         if (response.code == 200) {
            this.$nextTick(() => {
               this.formData.imageUpload = response.data.url;
               this.formData.imageName = response.data.name;
               this.formData2.imageUpload = response.data.url;
               this.formData2.imageName = response.data.name;
            })
         }
      },
      submitForm() {
         if (!this.formData.deviceName) {
            this.$message.error('未输入仪器名称')
            return
         }
         if (!this.formData.enDeviceName) {
            this.$message.error('未输入仪器名称EN')
            return
         }
         if (!this.formData.specificationModel) {
            this.$message.error('未输入规格型号')
            return
         }
         if (!this.formData.managementNumber) {
            this.$message.error('未输入管理编号')
            return
         }
         if (!this.formData.activationDate) {
            this.$message.error('未输入校准有效期')
            return
         }
         if (!this.formData.subordinateDepartmentsId) {
            this.$message.error('未选择所属部门')
            return
         }
         if (this.formData.deviceStatus === '' || this.formData.deviceStatus === null) {
            this.$message.error('未选择当前状态')
            return
         }
         if (!this.formData.calibrationDate) {
            this.$message.error('未输入校准周期(月)')
            return
         }
         delete this.formData.createTime
         delete this.formData.updateTime
         delete this.formData.createUser
         delete this.formData.updateUser
         const formData = this.HaveJson(this.formData)
         formData.insProductIds = formData.insProductIds ? formData.insProductIds.join() : ''
         if (formData.authorizedPerson.length === 0) {
            formData.authorizedPerson = ''
         } else {
            formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
         }
         this.upLoad = true;
         upDeviceParameter(formData).then(res => {
            this.$message.success('修改成功')
            this.upLoad = false
            this.refreshTable('page')
            this.dialogVisible = false
         }).catch(e => {
            this.$message.error('修改失败')
            this.dialogVisible = false
            this.upLoad = false
         })
      },
      // æäº¤æ¡£æ¡ˆä¿®è®¢--新增
      submitForm2() {
         if (!this.formData2.deviceName) {
            this.$message.error('未输入仪器名称')
            return
         }
         if (!this.formData2.enDeviceName) {
            this.$message.error('未输入仪器名称EN')
            return
         }
         if (!this.formData2.specificationModel) {
            this.$message.error('未输入规格型号')
            return
         }
         if (!this.formData2.managementNumber) {
            this.$message.error('未输入管理编号')
            return
         }
         if (!this.formData2.activationDate) {
            this.$message.error('未输入校准有效期')
            return
         }
         if (!this.formData2.deviceStatus) {
            this.$message.error('未选择当前状态')
            return
         }
         if (!this.formData2.calibrationDate) {
            this.$message.error('输入校准周期(月)')
            return
         }
         const formData = this.HaveJson(this.formData2)
         formData.insProductIds = formData.insProductIds ? formData.insProductIds.join() : ''
         if (formData.authorizedPerson.length === 0) {
            formData.authorizedPerson = ''
         } else {
            formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
         }
         this.upLoad2 = true;
         addDeviceParameter(formData).then(res => {
            this.$message.success('提交成功')
            this.upLoad2 = false
            this.refreshTable('page')
            this.dialogVisible2 = false
            this.formData2 = {
               imageUpload: '',
               imageName: '',
               authorizedPerson: []
            }
         }).catch(e => {
            this.$message.error('提交失败')
            this.dialogVisible2 = false
            this.upLoad2 = false
         })
      },
      handleConfig(row) {
         let list = []
         if (row.insProductItem) {
            list = row.insProductItem.split(';')
         }
         let list2 = []
         list.map((item) => {
            const obj = Object.assign({
               deviceId: row.id,
               insProductItem: item,
            })
            list2.push(obj)
         })
         this.tableList = list2
         this.deviceId = row.id
         this.$nextTick(() => {
            this.showData = true
         })
      },
      closeDataVue() {
         this.clickSidebar(this.clickNodeVal)
         this.showData = false
      },
      submitForm3() {
         if (!this.configForm.ip) {
            this.$message.error('请填写IP');
            return
         }
         if (!this.configForm.collectUrl) {
            this.$message.error('请填写采集地址');
            return
         }
         if (!this.configForm.storageUrl) {
            this.$message.error('请填写储存地址');
            return
         }
         if (!this.configForm.refer) {
            this.$message.error('请填写参照');
            return
         }
         if (!this.configForm.x) {
            this.$message.error('请填写X');
            return
         }
         if (!this.configForm.y) {
            this.$message.error('请填写Y');
            return
         }
         this.upLoad3 = true
         numberCollect(this.configForm).then(res => {
            this.upLoad3 = false
            this.$message.success('操作成功')
            this.refreshTable('page')
            this.dialogVisible3 = false
         }).catch(e => {
            this.$message.error('操作失败')
            this.dialogVisible3 = false
            this.upLoad3 = false
         })
      },
      // ç‚¹å‡»ä¾§è¾¹æ åˆ·æ–°
      clickSidebar(clickNodeVal) {
         this.laboratoryNameIsNull = false
         // æ˜¯å¦å­˜åœ¨value,存在value代表为三级
         if (!clickNodeVal.value) {
            this.list = [];
            this.queryParams.laboratoryName = null
            this.queryParams.storagePoint = null
            // ç­‰äºŽ1代表为树的一级,label为部门
            if (clickNodeVal.label == '其他') {
               this.laboratoryNameIsNull = true
               this.refreshTable('page')
               return
            }
            if (clickNodeVal.level == 1) {
               this.queryParams.laboratoryName = clickNodeVal.label
               // ç­‰äºŽäºŒçº§ã€‚label为存储地点
            } else if (clickNodeVal.level == 2) {
               // å…¶ä»–表示没有配置实验室,只配置了地点
               if (clickNodeVal.parent.label == '其他') {
                  this.laboratoryNameIsNull = true
               } else {
                  this.queryParams.laboratoryName = clickNodeVal.parent.label
               }
               this.queryParams.storagePoint = clickNodeVal.label
            }
            this.refreshTable('page')
         }
      },
      handleDelete(row) {
         this.$confirm("是否删除该条数据?", "提示", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
         })
            .then(() => {
               delDeviceParameter({ id: row.id }).then((res) => {
                  this.$message.success("删除成功");
                  this.refresh();
               });
            })
            .catch(() => { });
      },
   },
   watch: {
      // ç›‘听点击el-tree的数据,进行数据刷新
      clickNodeVal(newVal) {
         this.clickSidebar(newVal)
      }
   }
}
</script>
<style scoped>
.role_manage {
   width: 100%;
   height: 100%;
}
.title {
   line-height: 15px;
}
.search {
   display: flex;
   align-items: center;
   justify-content: space-between;
   margin-top: 10px;
}
.search_thing {
   width: 14em;
   display: flex;
   align-items: center;
}
.search_label {
   width: 80px;
   font-size: 14px;
   text-align: right;
}
.search_input {
   width: calc(100% - 80px);
}
.table {
   margin-top: 12px;
   background-color: #fff;
   height: calc(100vh - 17em);
}
.el-form-item {
   margin-bottom: 16px;
}
.picName {
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
   word-break: break-all;
   width: 120px;
}
</style>