spring
2025-04-18 0885aa811a94cae8d7473c9b2957a447110c9b1d
网分仪数采20%
已修改3个文件
已添加1个文件
448 ■■■■ 文件已修改
src/api/cnas/resourceDemand/device.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/components/NetworkAnalyzerDataAcquisition.vue 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/device.js
@@ -1243,3 +1243,12 @@
    params: query,
  });
}
//通过设备名称,设备编号查询数采配置
export function queryDataAcquisitionConfigurationTwo(query) {
  return request({
    url: "/deviceScope/queryDataAcquisitionConfigurationTwo",
    method: "get",
    params: query,
  });
}
src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue
@@ -28,13 +28,24 @@
        <el-table-column prop="inspectionItemClass" align="center" label="检验项分类" min-width="120"></el-table-column>
        <el-table-column prop="inspectionItem" align="center" label="检验项" min-width="100"></el-table-column>
        <el-table-column prop="inspectionItemSubclass" align="center" label="检验子项" min-width="100"></el-table-column>
        <el-table-column prop="referx" align="center" label="参照X" min-width="100"></el-table-column>
        <el-table-column prop="x" align="center" label="X"></el-table-column>
        <el-table-column prop="refery" align="center" label="参照Y" min-width="100"></el-table-column>
        <el-table-column prop="y" align="center" label="Y"></el-table-column>
        <el-table-column prop="anotherName" align="center" label="别名" min-width="100"></el-table-column>
        <el-table-column prop="matchingName" align="center" label="匹配名称" min-width="100"></el-table-column>
        <el-table-column prop="formula" align="center" label="公式"></el-table-column>
        <el-table-column prop="importedParts" align="center" label="部位" min-width="100"
          v-if="deviceName && deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="importedChannel" align="center" label="通道" min-width="100"
          v-if="deviceName && deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="referx" align="center" label="参照X" min-width="100"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="x" align="center" label="X"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="refery" align="center" label="参照Y" min-width="100"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="y" align="center" label="Y"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="anotherName" align="center" label="别名" min-width="100"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="matchingName" align="center" label="匹配名称" min-width="100"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column prop="formula" align="center" label="公式"
          v-if="deviceName && !deviceName.includes('网络分析')"></el-table-column>
        <el-table-column fixed="right" label="操作" width="120" align="center">
          <template slot-scope="scope">
            <el-button type="text" @click="dataConfig(scope.row)">数采配置</el-button>
@@ -127,7 +138,7 @@
      <div class="search_thing" style="margin-bottom: 14px;" v-if="deviceName && deviceName.includes('网络分析')">
        <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>端口:
        </div>
        <el-input size="small" placeholder="请输入(网络分析仪必填)" clearable v-model="configForm.port"></el-input>
        <el-input size="small" placeholder="请输入" clearable v-model="configForm.port"></el-input>
      </div>
      <div class="search_thing" style="margin-bottom: 14px;" v-if="deviceName && !deviceName.includes('网络分析')">
        <div class="search_label">
@@ -173,6 +184,25 @@
        <el-row>
          <el-button @click="dialogVisible4 = false">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="submitForm4" :loading="upLoad4">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <el-dialog title="数采配置" :visible.sync="dialogVisible5" width="400px">
      <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.importedParts"></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.importedChannel"></el-input>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="dialogVisible5 = false">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="submitForm5" :loading="upLoad5">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
@@ -316,7 +346,9 @@
        }
      },
      deleteList: [],
      channelList: []
      channelList: [],
      dialogVisible5: false,
      upLoad5: false,
    };
  },
  // æ–¹æ³•集合
@@ -576,46 +608,52 @@
        structureItemParameterId: row.structureItemParameterId,
        inspectionItemClass: row.inspectionItemClass,
      };
      this.dialogVisible3 = true;
      queryDataAcquisitionConfiguration({
        deviceId: this.deviceId,
        inspectionItem: row.inspectionItem.trim(),
        isDevice: true,
        inspectionItemSubclass: row.inspectionItemSubclass.trim(),
        inspectionItemClass: row.inspectionItemClass ? row.inspectionItemClass.trim() : '',
        structureItemParameterId: row.structureItemParameterId
      }).then(res => {
        const data = res.data;
        if (data[0]) {
          this.domains.splice(0, 1);
          let formula = data[0].formula
          let isIncludes = false
          if (formula && formula != "") {
            for (let key in this.formulas) {
              if (formula.includes(this.formulas[key].label)) {
                isIncludes = true
      if (this.deviceName && this.deviceName.includes('网络分析')) {
        this.dialogVisible5 = true;
        this.$set(this.configForm, 'importedParts', row.importedParts ? row.importedParts : '')
        this.$set(this.configForm, 'importedChannel', row.importedChannel ? row.importedChannel : '')
      } else {
        this.dialogVisible3 = true;
        queryDataAcquisitionConfiguration({
          deviceId: this.deviceId,
          inspectionItem: row.inspectionItem.trim(),
          isDevice: true,
          inspectionItemSubclass: row.inspectionItemSubclass.trim(),
          inspectionItemClass: row.inspectionItemClass ? row.inspectionItemClass.trim() : '',
          structureItemParameterId: row.structureItemParameterId
        }).then(res => {
          const data = res.data;
          if (data[0]) {
            this.domains.splice(0, 1);
            let formula = data[0].formula
            let isIncludes = false
            if (formula && formula != "") {
              for (let key in this.formulas) {
                if (formula.includes(this.formulas[key].label)) {
                  isIncludes = true
                }
              }
            }
          }
          if (!isIncludes && formula) {
            let formulaValue = formula.slice(1, -1)
            this.$set(this.configForm, "formula", formulaValue);
          } else {
            this.$set(this.configForm, "formula", data[0].formula);
          }
          data.forEach(i => {
            this.domains.push({
              referx: i.referx,
              refery: i.refery,
              x: i.x,
              y: i.y,
              anotherName: i.anotherName,
              matchingName: i.matchingName,
              id: i.id
            if (!isIncludes && formula) {
              let formulaValue = formula.slice(1, -1)
              this.$set(this.configForm, "formula", formulaValue);
            } else {
              this.$set(this.configForm, "formula", data[0].formula);
            }
            data.forEach(i => {
              this.domains.push({
                referx: i.referx,
                refery: i.refery,
                x: i.x,
                y: i.y,
                anotherName: i.anotherName,
                matchingName: i.matchingName,
                id: i.id
              });
            });
          });
        }
      });
          }
        });
      }
    },
    submitForm3() {
      this.$refs.configForm.validate(valid => {
@@ -725,6 +763,18 @@
      ];
      this.dialogVisible3 = false;
      this.$refs.configForm.resetFields();
    },
    submitForm5() {
      saveDataAcquisitionConfiguration({
        deviceId: this.deviceId,
        isDevice: true,
        importedParts: this.configForm.importedParts,
        importedChannel: this.configForm.importedChannel,
      }).then(res => {
        this.dialogVisible5 = false;
        this.init();
        this.$message.success("添加成功");
      });
    }
  }
};
src/views/business/inspectionTask/components/NetworkAnalyzerDataAcquisition.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,285 @@
<template>
  <div class="btns">
    <el-button type="primary" size="small" @click="getMetadata()">进口网分仪数采</el-button>
    <el-button type="primary" size="small">国产网分仪数采</el-button>
  </div>
</template>
<script>
import {
  queryDataAcquisitionConfigurationTwo,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  props: ['itemList', 'param', 'equipOptions'],
  data() {
    return {
      itemConfig: [],
      itemListNew: []
    }
  },
  mounted() {
    // console.log(this.param, this.itemList)
  },
  methods: {
    async getMetadata() {
      console.log(this.param, this.itemList)
      this.itemListNew = this.HaveJson(this.itemList)
      let equip = null;
      for (let n in this.param) {
        let obj = this.equipOptions.find(m => m.value == this.param[n].equipValue[0].v.v)
        if (obj && obj.label && obj.label.indexOf('网络分析仪') > -1) {
          equip = obj
        }
      }
      if (equip) {
        await this.getItemConfig(equip)
        this.itemListNew.forEach(item => {
          if (item.inspectionItemType == 1) {
            let obj = this.itemConfig.find(m => m.inspectionItem == item.inspectionItem)
            if (obj) {
              item.aisle = obj.importedChannel
              item.position = obj.importedParts
            }
          }
        })
        this.gatherNetworkAnalyzerSampleItem()
      }
    },
    async getItemConfig(param) {
      let res = await queryDataAcquisitionConfigurationTwo({ ...param })
      if (res.code == 200) {
        this.itemConfig = res.data
      }
    },
    // è¿›å£ç½‘分仪
    gatherNetworkAnalyzerSampleItem() {
      // ä¼ å‚æ•°
      // ç”Ÿæˆè¯·æ±‚信息
      const preStr =
        '<?xml version="1.0" encoding="utf-8"?><soap:Envelope  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><CalValue xmlns="zhrf_CollectData"><dataGridView>'
      const ednStr = '</dataGridView></CalValue></soap:Body></soap:Envelope>'
      let requireData = ''
      const electricItem = this.itemListNew.find(m => m.inspectionItem == '电容(测试值)')
      if (electricItem) {
        electricItem.itemValue = this.param[electricItem.id].resValue.v.v
      }
      const dataArr = []
      let dataItem
      let flag = true
      let flagMsg = ''
      const temperatureItem = this.itemListNew.find(m => m.inspectionItem == '温度')
      if (temperatureItem) {
        temperatureItem.itemValue = this.param[temperatureItem.id].resValue.v.v
      }
      const temperature = temperatureItem ? temperatureItem.itemValue : null
      const cdItem = this.itemListNew.find(m => m.inspectionItem == '电缆长度')
      if (cdItem) {
        cdItem.itemValue = this.param[cdItem.id].resValue.v.v
      }
      const cdItems = this.itemListNew.find(m => m.inspectionItem == '送检长度转换系数')
      if (cdItems) {
        cdItems.itemValue = this.param[cdItems.id].resValue.v.v
      }
      const res =
        (cdItem ? cdItem.itemValue : 0) * (cdItems ? cdItems.itemValue : 0)
      const num = this.roundFun(res, 6)
      const cd = cdItem && cdItems ? num : null
      console.log('cd', cd)
      if (cd && cd != null) {
        if (temperature && temperature != null) {
          if (
            electricItem &&
            electricItem != null &&
            electricItem.itemValue != null
          ) {
            let phaseDifferenceFlag = true
            this.itemListNew.forEach(item => {
              if (item.inspectionItem.indexOf('衰减') > -1 && item.inspectionItemType == 1) {
                dataItem = {
                  Column1: item.inspectionItem,
                  TD: item.aisle == null ? '0' : item.aisle,
                  BW: item.position == null ? '0' : item.position,
                  temperture: temperature,
                  cd: cd
                }
                dataArr.push(dataItem)
                // åˆ¤æ–­æ˜¯å¦æœ‰éƒ¨ä½ã€é€šé“
                if (item.aisle == null || item.aisle == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',通道值为空;'
                }
                if (item.position == null || item.position == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',部位值为空;'
                }
              } else if (item.inspectionItem.indexOf('驻波比') > -1 && item.inspectionItemType == 1
              ) {
                dataItem = {
                  Column1: item.inspectionItem,
                  TD: item.aisle == null ? '0' : item.aisle,
                  BW: item.position == null ? '0' : item.position
                }
                dataArr.push(dataItem)
                // åˆ¤æ–­æ˜¯å¦æœ‰éƒ¨ä½ã€é€šé“
                if (item.aisle == null || item.aisle == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',通道值为空;'
                }
                if (item.position == null || item.position == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',部位值为空;'
                }
              } else if (item.inspectionItem.indexOf('相位差') > -1 && item.inspectionItemType == 1
              ) {
                dataItem = {
                  Column1: item.inspectionItem,
                  Column2: item.itemReference,// TODO: ç›¸ä½å·®-周期数
                  TD: item.aisle == null ? '0' : item.aisle,
                  BW: item.position == null ? '0' : item.position
                }
                dataArr.push(dataItem)
                // åˆ¤æ–­æ˜¯å¦æœ‰éƒ¨ä½ã€é€šé“
                if (item.aisle == null || item.aisle == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',通道值为空;'
                }
                if (item.position == null || item.position == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',部位值为空;'
                }
                if (
                  item.itemReference == null ||
                  item.itemReference.indexOf('数') < 0
                ) {
                  phaseDifferenceFlag = false
                }
              } else if (item.inspectionItem.indexOf('特性阻抗') > -1 && item.inspectionItemType == 1
              ) {
                dataItem = {
                  Column1: item.inspectionItem,
                  TD: item.aisle == null ? '0' : item.aisle,
                  BW: item.position == null ? '0' : item.position,
                  DR: electricItem ? electricItem.itemValue : '0'
                }
                dataArr.push(dataItem)
                // åˆ¤æ–­æ˜¯å¦æœ‰éƒ¨ä½ã€é€šé“
                if (item.aisle == null || item.aisle == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',通道值为空;'
                }
                if (item.position == null || item.position == '') {
                  flag = false
                  flagMsg = flagMsg + item.inspectionItem + ',部位值为空;'
                }
              }
            })
            if (phaseDifferenceFlag) {
              const _that = this
              if (dataArr.length > 0) {
                // åˆ¤æ–­ç›¸ä½å·®ã€ç‰¹æ€§é˜»æŠ—的顺序位置,相位差在前、平均特性阻抗在后
                const index0 = dataArr.findIndex((item) => {
                  return item.Column1.indexOf('相位差') >= 0
                })
                const index1 = dataArr.findIndex((item) => {
                  return item.Column1.indexOf('特性阻抗') >= 0
                })
                if (index0 >= 0) {
                  if (index1 >= 0) {
                    if (index0 < index1) {
                      if (flag) {
                        const dataArrStr = JSON.stringify(dataArr)
                        requireData = preStr + dataArrStr + ednStr
                        this.gatherLoadingShow = true
                        $.ajax({
                          type: 'post',
                          url:
                            'http://127.0.0.1:8089/zhrf_CollectData.asmx?op=CalValue',
                          headers: {
                            'Content-Type': 'text/xml;charset=utf-8'
                          },
                          data: requireData,
                          success: function (response) {
                            console.log('response', response)
                            const resJson = response
                            // TODO
                            if (resJson.message) {
                              const resData = resJson.data
                              if (resData.length > 0) {
                                resData.forEach((resDataEle) => {
                                  const paramItem = _that.dataList[
                                    '采集项'
                                  ].find((ele) => {
                                    return ele.itemName == resDataEle.Column1
                                  })
                                  if (paramItem) {
                                    paramItem.acqItemValue =
                                      resDataEle.Column3
                                    paramItem.calItemValue =
                                      resDataEle.Column4
                                    paramItem.itemValue = resDataEle.Column5
                                  }
                                })
                              }
                            } else {
                              console.log('获取网分仪数据失败')
                            }
                            _that.gatherLoadingShow = false
                          },
                          error: function (
                            XMLHttpRequest,
                            textStatus,
                            errorThrown
                          ) {
                            console.log('获取网分仪接口异常')
                            _that.gatherLoadingShow = false
                          }
                        })
                      } else {
                        this.$message.error(flagMsg)
                      }
                    } else {
                      this.$message.error('相位差需平均特性阻抗之前')
                    }
                  } else {
                    this.$message.error('无平均特性阻抗')
                  }
                } else {
                  this.$message.error('无相位差')
                }
              } else {
                this.$message.error('无检测项目需进行采集')
              }
            } else {
              this.$message.error('相位差要求范围格式错误')
            }
          } else {
            this.$message.error('电容标准不能为空')
          }
        } else {
          this.$message.error('温度不能为空')
        }
      } else {
        this.$message.error('电缆长度和送检长度转换系数不能为空')
      }
    },
    roundFun(value, n) {
      if (value === null) {
        return null
      }
      return Math.round(value * Math.pow(10, n)) / Math.pow(10, n)
    },
  },
}
</script>
<style scoped>
.btns {
  display: flex;
  align-items: center;
  margin-right: 10px;
}
</style>
src/views/business/inspectionTask/inspection.vue
@@ -91,9 +91,9 @@
          </el-radio-group>
        </div>
        <div style="display: flex; align-items: center">
          <el-button v-if="state == 1" size="small" type="primary" @click="openAddUnpass">新增不合格复测</el-button>
          <!-- <el-button v-if="state == 1" size="small" type="primary" @click="openAddUnpass">新增不合格复测</el-button>
          <el-button v-if="state == 1" size="small" type="primary" @click="unpassCheck">不合格复测</el-button>
          <el-button v-if="state > 1" size="small" type="primary" @click="viewUnpassCheck">查看不合格复测</el-button>
          <el-button v-if="state > 1" size="small" type="primary" @click="viewUnpassCheck">查看不合格复测</el-button> -->
          <span v-if="cableTagList.length > 0">&nbsp;&nbsp;电缆配置:</span>
          <el-select v-if="cableTagList.length > 0" v-model="currentTab" clearable placeholder="请选择" size="small"
            @change="(m) => handleChangeCableTag(currentSample.id, 0, 'cableTag', m)
@@ -138,6 +138,10 @@
                type="success">已检</el-tag>
            </el-option>
          </el-select>
          <!-- ç½‘分仪数采国产/进口 -->
          <NetworkAnalyzerDataAcquisition :itemList="currentSample.insProduct" :param="param"
            :equipOptions="equipOptions"
            v-if="currentSample.insProduct && currentSample.insProduct.length > 0 && param" />
          <el-button :loading="dataAcquisitionLoading" v-if="state == 1" size="small" type="primary"
            @click="getDataAcquisitionDevice">数据采集</el-button>
          <el-button :type="dataAcquisitionEidtAble ? '' : 'primary'" v-if="state == 1" size="small"
@@ -529,6 +533,7 @@
import UnPassDialog from "../unpass/components/unPassDialog.vue";
import AddUnPass from "../unpass/components/addUnPass.vue";
import InspectionWord from "./components/InspectionWord.vue";
import NetworkAnalyzerDataAcquisition from "./components/NetworkAnalyzerDataAcquisition.vue";
import PurchaseVerification from "../unpass/components/PurchaseVerification.vue";
import {
  doInsOrder,
@@ -563,6 +568,7 @@
    limsTable,
    UnPassDialog,
    InspectionWord,
    NetworkAnalyzerDataAcquisition,
  },
  data() {
    return {
@@ -966,7 +972,7 @@
        // èµ‹å€¼å½“前样品列表
        this.sampleProduct = res.data.sampleProduct;
        this.currentSample = this.HaveJson(this.sampleProduct[0]);
        let insProduct = this.HaveJson(this.currentSample.insProduct);
        // let insProduct = this.HaveJson(this.currentSample.insProduct);
        // æ¸©åº¦ã€æ¹¿åº¦èµ‹å€¼
        this.otherForm = {
          temperature: this.insOrder.temperature