spring
2025-03-19 07a41ade45c962e93a9d449ce1be0eec52e66a6a
src/components/view/a6-device-management.vue
@@ -51,15 +51,15 @@
<template>
   <div class="role_manage">
      <div>
      <div v-if="!showData">
         <el-row class="title">
            <el-col :span="12" style="padding-left: 20px;">设备工具明细</el-col>
            <el-col :span="12" style="padding-left: 20px;text-align: left;">设备工具明细</el-col>
            <el-col :span="12" style="text-align: right;">
               <el-button size="medium" type="primary" @click="dialogVisible2 = true">新增</el-button>
            </el-col>
         </el-row>
      </div>
      <div class="search">
      <div class="search" v-if="!showData">
         <div class="search_thing">
            <div class="search_label">状态:</div>
            <el-select v-model="componentData.entity.deviceStatus" placeholder="全部" size="small">
@@ -82,7 +82,7 @@
            <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
         </div>
      </div>
      <div class="table">
      <div class="table" v-if="!showData">
         <!-- 语法 子组件通过 this.$emit +传入方法名 调用父组件方法 例如  this.$emit(selectAllByOne) 就需在父组件声明并传入  @selectAllByOne="selectAllByOne"-->
         <ValueTable @selectAllByOne="selectAllByOne" @isUpdate="isUpdate" ref="ValueTable"
            :url="$api.deviceScope.selectDeviceParameter" :upUrl="$api.deviceScope.upDeviceParameter"
@@ -107,14 +107,14 @@
                     </div>
                  </el-image>
                  <!-- 表单 -->
                  <el-form :label-position="labelPosition" :model="formData" label-width="100px">
                     <el-form-item label="仪器名称:">
                  <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:">
                     <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="规格型号:">
                     <el-form-item label="规格型号:" required>
                        <el-input :disabled="isUp" v-model="formData.specificationModel" size="small"></el-input>
                                 </el-form-item>
                     <el-form-item label="生产厂家:">
@@ -132,7 +132,7 @@
                     <el-form-item label="出厂编号:">
                     <el-input :disabled="isUp" v-model="formData.factoryNo" size="small"></el-input>
                     </el-form-item>
                     <el-form-item label="管理编号:">
                     <el-form-item label="管理编号:" required>
                     <el-input :disabled="isUp" v-model="formData.managementNumber" size="small"></el-input>
                     </el-form-item>
                     <el-form-item label="购置日期:">
@@ -140,7 +140,7 @@
                                    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-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>
@@ -162,7 +162,7 @@
            </el-col>
            <!-- 右边布局 -->
            <el-col :span="7">
               <el-form :label-position="labelPosition" :model="formData" label-width="120px" ref="ruleForm">
               <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%">
@@ -185,12 +185,12 @@
           filterable
              clearable></el-cascader>
            </el-form-item>
            <el-form-item label="最近校准日期:">
            <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-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>
@@ -205,13 +205,13 @@
            <el-form-item label="单价(万元):">
              <el-input :disabled="isUp" v-model="formData.unitPrice" size="small"></el-input>
            </el-form-item>
            <el-form-item label="当前状态:">
            <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="校准周期(月):">
            <el-form-item label="校准周期(月):" required>
              <el-input :disabled="isUp" v-model="formData.calibrationDate" size="small"></el-input>
            </el-form-item>
                  <el-form-item label="图片:">
@@ -258,14 +258,14 @@
                     </div>
                  </el-image>
                  <!-- 表单 -->
                  <el-form :label-position="labelPosition" :model="formData2" label-width="100px">
                     <el-form-item label="仪器名称:">
                  <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:">
              <el-form-item label="仪器名称EN:" required>
                <el-input v-model="formData2.enDeviceName" size="small"></el-input>
                     </el-form-item>
              <el-form-item label="规格型号:">
              <el-form-item label="规格型号:" required>
                <el-input v-model="formData2.specificationModel" size="small"></el-input>
                     </el-form-item>
              <el-form-item label="生产厂家:">
@@ -286,7 +286,7 @@
            <el-form-item label="出厂编号:">
              <el-input v-model="formData2.factoryNo" size="small"></el-input>
            </el-form-item>
            <el-form-item label="管理编号:">
            <el-form-item label="管理编号:" required>
              <el-input v-model="formData2.managementNumber" size="small"></el-input>
            </el-form-item>
            <el-form-item label="购置日期:">
@@ -294,7 +294,7 @@
                        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-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>
@@ -327,7 +327,7 @@
            </el-form-item>
            <el-form-item label="检测项目:">
              <el-cascader
              v-model="formData.insProductIds"
              v-model="formData2.insProductIds"
              :options="options"
              :show-all-levels="false"
              :props="props"
@@ -335,18 +335,9 @@
              style="width:100%"
              collapse-tags
              separator=","
           filterable
              clearable></el-cascader>
            </el-form-item>
            <!-- <el-form-item label="最近校准日期:">
                     <el-date-picker style="width:100%" v-model="formData2.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-date-picker style="width:100%" v-model="formData2.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 v-model="formData2.largeCategory" placeholder="请选择" size="small" style="width:100%">
                <el-option v-for="item in equipmentList" :key="item.value" :label="item.label"
@@ -357,13 +348,13 @@
            <el-form-item label="单价(万元):">
              <el-input v-model="formData2.unitPrice" size="small"></el-input>
            </el-form-item>
            <el-form-item label="当前状态:">
            <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.value" :label="item.label" :value="item.value">
                        <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="校准周期(月):">
            <el-form-item label="校准周期(月):" required>
              <el-input v-model="formData2.calibrationDate" size="small"></el-input>
            </el-form-item>
                  <el-form-item label="图片:">
@@ -387,31 +378,90 @@
            </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 ValueTable from '../tool/value-table.vue'
  import dataAcquisitionConfig from '../do/b6-device-management/b6-data-acquisition-config.vue'
   export default {
      components: {
         ValueTable
         ValueTable,
      dataAcquisitionConfig
      },
      data() {
         return {
            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: {},
            formData: {
            },
            formData2: {
               imageUpload: '',
               imageName: ''
            },
            value: '',
        props: { multiple: true,emitPath:false,value:'id',label:'name' },
              props: { multiple: true,emitPath:false,value:'id',label:'name' },
            options: [],
            labelPosition: 'right',
            dialogVisible: false,
            dialogVisible2: false,
            addPower: false,
        showData: false, // 数采配置页面
        tableList: [],
            componentData: {
               entity: {
                  deviceStatus: null,
@@ -420,7 +470,7 @@
                  largeCategory: null,
                  orderBy: {
                     field: 'id',
                     order: 'desc'
                     order: 'asc'
                  }
               },
               isIndex: true,
@@ -436,26 +486,21 @@
                  font: '档案修订',
                  type: 'text',
                  method: 'isUpdate'
               }],
               }
          // , {
               //    id: 'handleConfig',
               //    font: '数采配置',
               //    type: 'text',
               //    method: 'handleConfig',
          //   disabFun: (row, index) => {
          //     return row.insProductItem === ''
          //   }
               // }
        ],
          headNoShow:['enDeviceName'],
               tagField: {
                  deviceStatus: {
                     select: [{
                        value: 0,
                        type: 'success',
                        label: '良好'
                     }, {
                        value: 1,
                        type: 'info',
                        label: '报废'
                     }, {
                        value: 2,
                        type: 'danger',
                        label: '停用'
                     }, {
                        value: 3,
                        type: 'danger',
                        label: '存疑'
                     }]
                     select: []
                  },
                  equipmentManager: {
                     select: []
@@ -486,7 +531,8 @@
            }
               },
               requiredAdd: [],
               requiredUp: []
               requiredUp: [],
          needSort: ['deviceName', 'acquisitionDate', 'activationDate', 'lastCalibrationDate', 'nextCalibrationDate', 'deviceStatus'],
            },
            entityCopy: {},
            upIndex: 0,
@@ -504,6 +550,9 @@
            subordinateDepartmentsList: [],
            upLoad: false,
            upLoad2: false,
        dialogVisible3:false,
        upLoad3:false,
        configForm:{}
         }
      },
      computed: {
@@ -523,7 +572,7 @@
         this.selectEnumByCategory()
         this.selectDevicePrincipal()
         this.obtainItemParameterList()
      this.getInsProductIds()
            this.getInsProductIds()
      },
      methods: {
         obtainItemParameterList() {
@@ -538,8 +587,8 @@
               this.subordinateDepartmentsList = data
            })
         },
         refreshTable() {
            this.$refs['ValueTable'].selectList()
         refreshTable(e) {
            this.$refs['ValueTable'].selectList(e)
         },
         refresh() {
            this.componentData.entity = this.HaveJson(this.entityCopy)
@@ -551,6 +600,7 @@
            let up = false
            let del = false
            let add = false
        let config = false
            for (var i = 0; i < power.length; i++) {
               if (power[i].menuMethod == 'upDeviceParameter') {
                  up = true
@@ -561,21 +611,33 @@
               if (power[i].menuMethod == 'addDeviceParameter') {
                  add = true
               }
                   if (power[i].menuMethod == 'saveDataAcquisitionConfiguration') {
                  config = true
               }
            }
            if (!up) {
               this.componentData.do.splice(1, 1)
            }
            if (!del) {
               this.componentData.do.splice(0, 1)
            }
            this.addPower = add
         },
            // if (!config) {
        //   this.componentData.do.splice(2, 1)
        // }
        if (!up) {
          this.componentData.do.splice(1, 1)
        }
        if (!del) {
          this.componentData.do.splice(0, 1)
        }
        this.addPower = add
      },
         // 获取字典
         selectEnumByCategory() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "设备状态"
            }).then(res => {
               this.deviceStatusList = res.data
          this.deviceStatusList.forEach(a=>{
            if(!isNaN(a.value)){
              a.value = parseInt(a.value)
            }
          })
               this.componentData.tagField.deviceStatus.select = res.data
            })
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "设备分类"
@@ -604,7 +666,7 @@
          this.componentData.tagField.insProductIds.select = []
          this.componentData.selectField.insProductIds.select = []
          this.options = res.data.map((m,i)=>{
            m.id = i;
            m.id = m.name;
            let children = m.children.map(n=>{
              n.label = n.name;
              n.value = n.id;
@@ -614,13 +676,40 @@
            this.componentData.selectField.insProductIds.select = [...this.componentData.selectField.insProductIds.select,...children]
            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 = {}
            this.formData2 = {
               imageUpload: '',
               imageName: ''
            }
            this.dialogVisible = false;
            this.upLoad = false;
         },
         handleClose2() {
            this.formData = {}
            this.formData2 = {
               imageUpload: '',
               imageName: ''
            }
            this.dialogVisible2 = false;
            this.upLoad = false;
         },
@@ -641,6 +730,9 @@
            //row = 点击对应行值一行值
            //复制给formData
            this.formData = this.HaveJson(row);
        if(typeof(row.insProductIds)==='number'){
          row.insProductIds = row.insProductIds+''
        }
            this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
         },
         beforeUpload(file) {
@@ -663,23 +755,51 @@
               this.formData.imageName = response.data.name;
            }
         },
         handleSuccessUpImg2(response, ) {
         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() {
            this.upLoad = true;
            // let authorizedPerson = this.formData.authorizedPerson.length > 0 ? this.formData.authorizedPerson.join(',') : ''
            // delete this.formData.createTime
            // delete this.formData.updateTime
            // delete this.formData.createUser
            // delete this.formData.updateUser
            // this.formData.authorizedPerson = authorizedPerson
        this.formData.insProductIds = this.formData.insProductIds.join()
        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.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
        this.formData.insProductIds = this.formData.insProductIds?this.formData.insProductIds.join():''
        this.upLoad = true;
            this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.formData, {
               headers: {
                  'Content-Type': 'application/json'
@@ -691,7 +811,7 @@
               }
               this.$message.success('修改成功')
               this.upLoad = false
               this.refreshTable()
               this.refreshTable('page')
               this.dialogVisible = false
            }).catch(e => {
               this.$message.error('修改失败')
@@ -700,11 +820,36 @@
            })
         },
         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.formData2.deviceStatus===null){
          this.$message.error('未选择当前状态')
          return
        }
        if(!this.formData2.calibrationDate){
          this.$message.error('输入校准周期(月)')
          return
        }
            this.upLoad2 = true;
      //       let authorizedPerson = this.formData2.authorizedPerson.length > 0 ? this.formData2.authorizedPerson.join(',') :
      //          ''
      //       this.formData2.authorizedPerson = authorizedPerson
        this.formData.insProductIds = this.formData.insProductIds.join()
        this.formData2.insProductIds = this.formData2.insProductIds?this.formData2.insProductIds.join():''
            this.$axios.post(this.$api.deviceScope.addDeviceParameter, this.formData2, {
               headers: {
                  'Content-Type': 'application/json'
@@ -716,7 +861,7 @@
               }
               this.$message.success('提交成功')
               this.upLoad2 = false
               this.refreshTable()
               this.refreshTable('page')
               this.dialogVisible2 = false
               this.formData2 = {
                  imageUpload: '',
@@ -727,7 +872,74 @@
               this.dialogVisible2 = false
               this.upLoad2 = false
            })
         }
         },
      handleConfig(row){
        // this.configForm = {}
        // this.dialogVisible3 = true
        // this.$axios.post(this.$api.deviceScope.getNumberCollect+'?id='+row.id).then(res => {
        //   this.configForm = res.data
        // })
        this.showData = true
        const 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
      },
      closeDataVue () {
        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
        this.$axios.post(this.$api.deviceScope.numberCollect, this.configForm, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
          this.upLoad3 = false
               if (res.code === 201) {
                  return
               }
               this.$message.success('操作成功')
               this.refreshTable('page')
               this.dialogVisible3 = false
            }).catch(e => {
               this.$message.error('操作失败')
               this.dialogVisible3 = false
               this.upLoad3 = false
            })
      }
      }
   }
</script>