licp
2024-08-20 6f30bbf4f118d3357d1e6e503aa986227e2cc6ea
src/components/do/b1-ins-order/add.vue
@@ -154,10 +154,10 @@
          <el-button size="medium" type="primary" @click="openConfig" v-if="addObj.sampleType==='光缆'">光纤配置</el-button>
          <el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-show="active==1">提交</el-button>
          <!-- 审核 -->
          <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3"
          <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3&&addObj.companyId"
            :disabled="saveLoad">不通过</el-button>
          <el-button size="medium" type="primary" @click="upInsOrderOfState(1)" :loading="saveLoad"
            v-show="active==3">通过</el-button>
            v-show="active==3&&addObj.companyId">通过</el-button>
          <el-button size="medium" @click="$parent.playOrder(0)">
            <span style="color: #3A7BFA;">返回</span>
          </el-button>
@@ -367,7 +367,7 @@
            </div>
          </div>
        </div>
        <el-table class="el-table sampleTable" ref="sampleTable" :data="sampleList" height="250px" tooltip-effect="dark"
        <el-table class="el-table sampleTable" ref="sampleTable" :data="sampleList" max-height="400px" tooltip-effect="dark"
          border @selection-change="selectSample" highlight-current-row @row-click="rowClick" style="margin-top: 10px;">
          <el-table-column type="selection" width="60" :selectable="selectable" v-if="active==1"></el-table-column>
          <el-table-column type="index" label="序号" width="65" align="center"></el-table-column>
@@ -428,7 +428,7 @@
          </el-table-column>
          <el-table-column prop="proNum" label="待检项数量" width="105" align="center"></el-table-column>
        </el-table>
        <el-table class="el-table" ref="productTable" :data="productList" height="380px" tooltip-effect="dark" border
        <el-table class="el-table" ref="productTable" :data="productList" max-height="400px" tooltip-effect="dark" border
          @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect"
          :row-class-name="tableRowClassName" v-loading="getProductLoad" @select-all="handleAll">
          <el-table-column type="selection" width="65" :selectable="selectable" v-if="active==1"></el-table-column>
@@ -475,7 +475,7 @@
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea"
                :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row,'ask')"
                v-if="active==1&&isAskOnlyRead"></el-input>
                v-if="active==1&&isAskOnlyRead&&scope.row.inspectionValueType!='5'"></el-input>
              <span v-else>
                <!-- <template v-if="(scope.row.ask.indexOf('D')>-1
                ||scope.row.ask.indexOf('W')>-1
@@ -563,7 +563,8 @@
        <el-button type="primary" @click="addTemplateDia" :loading="templateLoading">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="检验下发" :visible.sync="issuedDialogVisible" width="400px">
    <el-dialog title="检验下发" :visible.sync="issuedDialogVisible" width="400px" :close-on-click-modal="false"
    :close-on-press-escape="false" :show-close="false">
      <div class="body" style="max-height: 60vh;">
        <el-row>
          <el-col class="search_thing" :span="22">
@@ -596,7 +597,7 @@
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="issuedDialogVisible=false">取 消</el-button>
          <el-button @click="issuedDialogVisible=false;$parent.playOrder(0)">取 消</el-button>
          <el-button type="primary" @click="submitForm2" :loading="upLoad">确 定</el-button>
        </el-row>
      </span>
@@ -619,7 +620,8 @@
        </el-row>
      </span>
    </el-dialog>
    <fiberOpticConfig :currentId="currentId" @saveFiberopticConfig="getTotal()" v-if="configShow" :active="active" />
    <fiberOpticConfig :currentId="currentId" @saveFiberopticConfig="getTotal()" v-if="configShow && examine==0" :active="active" :inspectionItemST='inspectionItemST' />
    <fiberOpticConfigTwo :currentId="currentId"  v-if="configShow && examine==1" :active="active" />
    <equipConfig :currentId="currentId" v-if="equipConfigShow" :active="active" />
    <cableConfig v-if="cableConfigShow" :active="active" />
<!--    单选特殊值处理框-->
@@ -758,7 +760,7 @@
               width="800px" :show-close="false">
      <el-table
      :data="editTable"
      style="width: 100%">
      style="width: 100%" height="80vh">
      <!-- inspectionItemList -->
      <el-table-column
          prop="inspectionItemList"
@@ -880,6 +882,15 @@
        <el-button type="primary" @click="spliceData">保存</el-button>
      </span>
    </el-dialog>
    <el-dialog title="单根垂直燃烧检测次数填写" :visible.sync="singleVerticalCombustionShow" width="900px"
               :close-on-click-modal="false" :close-on-press-escape="false"
               :before-close="beforeCirculateShowClose" :show-close="false">
      <div>111</div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cleanSpliceData">取消</el-button>
        <el-button type="primary" @click="spliceData">保存</el-button>
      </span>
    </el-dialog>
    <!-- 电力试验室---温升试验/热循环 -->
    <el-dialog :title="temperatureTitle" :visible.sync="temperatureShow"
               :close-on-click-modal="false" :close-on-press-escape="false"
@@ -905,6 +916,7 @@
<script>
import ValueTable from '../../tool/value-table.vue'
import fiberOpticConfig from './fiberoptic-config.vue'
import fiberOpticConfigTwo from './fiberoptic-config-two.vue'
import equipConfig from './equip-config.vue'
import cableConfig from './cable-config.vue'
import Vue from 'vue'
@@ -914,10 +926,15 @@
    components: {
      ValueTable,
      fiberOpticConfig,
      fiberOpticConfigTwo,
      equipConfig,
      cableConfig
    },
    props: {
      examine: {
        type: Number,
        default: () => 0
      },
      active: {
        type: Number,
        default: () => 0
@@ -929,6 +946,7 @@
    },
    data() {
      return {
        inspectionItemST: null,
        sampleSelectionList: [],//样品表格选中数据
        editTable:[],
        template: null,
@@ -1078,6 +1096,7 @@
          entrustNum: '',
          entrustPoint: ''
        },
        singleVerticalCombustionShow: false,
        isBsm2Val2:false,
        opticalProject: [], // 温度循环弹框光纤项目列表
        opticalProjectList: [], // 温度循环弹框光纤项目选中的数组
@@ -1121,6 +1140,25 @@
            })
            this.filters = arr
          }
        }
      },
      productListSelected: {
        deep: true,
        handler(val) {
          if(val.length>0){
            for(let i =0 ; i< val.length; i++){
              if(val[i].inspectionItem.includes('松套管')){
                this.inspectionItemST = 1
                break;
              }else{
                this.inspectionItemST = 0
              }
            }
          }else{
            this.inspectionItemST = 0
          }
          console.log('0000',this.inspectionItemST);
        }
      },
      sampleList: {
@@ -1177,12 +1215,11 @@
      inputValueHandler(row,index){
        if(row){
          const nextIndex = index+1
          console.log(nextIndex, this.editTable)
          for (let i = nextIndex; i < this.editTable.length; i++) {
            const element = this.editTable[i];
            if(element.model==row.model){
            if(element.model==row.model&&row.symbolItem==element.symbolItem){
              this.editTable[i].value = row.value
            }else{
              break;
            }
          }
        }
@@ -1572,13 +1609,43 @@
              isHaveBushing = false
            }
          })
          // console.log('isHaveBushing===', isHaveBushing)
          if (productListSelected && select[2] === '光缆' && isHaveBushing === false) {
            this.$message.error('光缆温度循环项目必须进行光纤配置')
          //过滤检测项:去除特殊项
          let filterProductList = this.productListSelected.filter(ele=>ele.bsm==0&&/[0-9]/.test(ele.ask)).filter(ele=>{
              if(select[1].indexOf('通信')>=0 && ['光缆','光纤'].includes(select[2])){
                return !['温度循环','光纤接头损耗'].includes(ele.inspectionItem)
              }
              return true
          }).filter(ele=>{
              if(select[1].indexOf('电力')>=0){
                return !['温升试验','热循环'].includes(ele.inspectionItem)
              }
              return true
          })
          //校验检验项的要求值和要求描述,仅委托要求
          if(this.active==1&&this.isAskOnlyRead){
            const isTrue = this.checkRequiredValueAndRemark(filterProductList)
            if(!isTrue){
              this.$message.error('检验项的要求值与要求描述不匹配, 请检查')
              return
            }
          }
          // console.log('isHaveBushing===', this.totalArr)
          let spcialItem = this.totalArr.filter(a => a.state == 1 && a.inspectionItem.includes('松套管'))
          if (productListSelected && select[2] === '光缆' && isHaveBushing === false&&spcialItem.length==0) {
            this.$message.error('光缆温度循环项目必须进行光纤配置')
            this.$refs.sampleTable.setCurrentRow(this.currentMethod, true)
            this.rowClick(this.currentMethod)
            this.sampleIds = [this.currentMethod.id]
            this.openConfig()
            return
          }else if(spcialItem.length>0&& isHaveBushing === false){
            this.$message.error('松套管项目必须进行光纤配置')
            // this.$refs.sampleTable.setCurrentRow(this.currentMethod, true)
            // this.rowClick(this.currentMethod)
            spcialItem.forEach(item=>{
              this.sampleIds.push(item.id)
            })
            this.openConfig()
            return
          }
@@ -1605,6 +1672,112 @@
            this.saveMethod(sampleList)
          }
        }
      },
      /**
       * 校验委托要求的检验项的要求描述和要求值
       *
       */
      checkRequiredValueAndRemark(data){
        let isTrue = true
        try{
          data.forEach(ele=>{
            //判断(≤,≥,>,<,=)这几种情况
            //判断要求值中的数字是否包含在要求描述中
            if(['≤','≥','>','<','='].includes(ele.ask[0])){
              const askVal = ele.ask.substring(1,ele.ask.length)
              if(isNaN(askVal) || ele.tell.indexOf(askVal)<0){
                console.log(1111);
                isTrue = false
              }
            }
            //判断范围(10-25),要求值必须是-
            if(ele.ask.indexOf('-')>0 && ele.ask.length>1){
              //要求描述的~和要求值的-,等效
              let tell = ele.tell
              if(ele.tell.indexOf('~')>0 || ele.tell.indexOf('(') || ele.tell.indexOf(')')){
                tell = tell.replace('~','-')
                tell = tell.replace('(','(')
                tell = tell.replace(')',')')
              }
              const splits = ele.ask.split('-')
              //满足格式要求,并且两个都是数字
              if(splits.length==2 && !isNaN(splits[0]) && !isNaN(splits[1])){
                /**
                 * 判断情况
                 * 1.要求描述与要求描述相同
                 * 2.要求描述包含要求值
                 * 3.要求描述为3N-10N这种情况
                 * 4.要求描述为10±5这种情况
                 * 5.
                 */
                 let min = Math.min(...splits)
                 let max = Math.max(...splits)
                 if(min==max){
                  console.log(2222);
                  isTrue = false
                 }
                //要求描述中不包含±以及区间的数字,则返回false
                if(tell.indexOf('±')<0&&tell.indexOf('-')<0){
                  console.log(3333,ele);
                  console.log(3333333,tell,tell.indexOf('±')<0,tell.indexOf('-')<0);
                  isTrue = false
                }else if(ele.tell.indexOf('-')==0){
                  console.log(4444);
                  isTrue = false
                }else if(tell.indexOf('-')>0){
                  if(tell.indexOf('±')>0){
                    ////校验要求描述为(10-15)±5这种写法的情况
                    const num = tell.split('±')[1]
                    const startIndex = tell.indexOf('(')
                    const endIndex = tell.indexOf(')')
                    if(startIndex>-1 && endIndex>0 ){
                      const str = tell.substring(startIndex,endIndex)
                      if(str && str.indexOf('-')>0){
                        let strList = str.split('-')
                        const minNum = Number(strList[0]-num)
                        const maxNum = Number(strList[1]+num)
                        if(minNum>min || maxNum<max){
                          console.log(555555);
                          isTrue = false
                        }
                      }
                    }else{
                      //校验要求描述为10±5这种写法的情况
                      let splitNums = ele.tell.split('±')
                      if(splitNums.length<2){
                        console.log(66666);
                        isTrue = false
                      }else{
                        let minTell = Number(splitNums[0])-Number(splitNums[1])
                        let maxTell = Number(splitNums[0])+Number(splitNums[1])
                        if(minTell!=min || maxTell!=max){
                          console.log(7777777);
                          isTrue = false
                        }
                      }
                    }
                  }else{
                    const splitTells = tell.split('-')
                    if(splitTells[0].indexOf(min)<0 || splitTells[1].indexOf(max)<0){
                      console.log(88888888);
                      isTrue = false
                    }
                  }
                }
              }else{
                console.log(89999999);
                isTrue = false
              }
            }
            // else if(ele.ask.indexOf('&')>0 && ele.ask.length>1){
            //   //判断
            // }
          })
        }catch(error){
          console.log(error);
          isTrue = false
        }
        return isTrue
      },
      save0(){
        if(this.editTable.every(m=>m.value)){
@@ -1821,7 +1994,6 @@
      },
      saveMethod(sampleList){
        this.saveLoad = true
        console.log(333333,sampleList)
        this.$axios.post(this.$api.insOrder.addInsOrder, {
          str: JSON.stringify({
            insOrder: this.addObj,
@@ -1973,7 +2145,23 @@
        this.selectTree = ''
        this.models = val.children
        this.getNodeParent(node)
        let flag = false
        if (node.level == 3) {
          if(node.data.children.length>0){
            node.data.children.forEach(a => {
              let key = Object.keys(a)
              if(!key.includes('level')) {
                flag = true
              }
            })
          }
        }
        this.selectTree = this.selectTree.replace(' - ', '')
        if(flag) {
          this.selectTree =  '-  - ' + this.selectTree
        }
        let data = this.selectTree.split(' - ')
        let data2 = ''
        for (let index = data.length - 1; index >= 0; index--) {
@@ -2012,7 +2200,7 @@
        this.addObj.factory = trees[0]
        this.addObj.laboratory = trees[1]
        this.addObj.sampleType = trees[2]
        if (trees[3] === undefined || trees[3] === '') {
        if (trees[3] === undefined || trees[3] === '' || trees[3] === '- ') {
          this.addObj.sample = trees[2]
        } else {
          this.addObj.sample = trees[3]
@@ -2074,12 +2262,12 @@
          this.sample.unit = this.addObj.unit
          this.sample.standardMethodListId = null
          this.sample.insProduct = []
          this.sample.id = this.count
          this.sample.id = parseInt(i+1)
          this.sample.childSampleList = []
          this.sample.insulating = null
          this.sample.sheath = null
          this.sampleList.push(this.HaveJson(this.sample))
          this.count++
          // this.count++
        }
        this.computationalPairing(this.sampleList.length)
        this.bsm2Val2 = this.HaveJson(this.bsm2Val3)
@@ -2160,6 +2348,7 @@
          row.bsm1 = false
        }else if(arr.length>0){
          try{
          row.bsmRow = this.HaveJson(row)
          let section = arr[0].section
          let arr0 = JSON.parse(row.section)
          let arr1 = JSON.parse(row.ask)
@@ -2227,6 +2416,13 @@
        } else if ((row.inspectionItem === '温升试验' || row.inspectionItem === '热循环') && row.state === 0) {
          this.temperatureShow = false;
        }
        // if (row.inspectionItem === '单根垂直燃烧' && select[2] === '光缆' && row.state === 1) {
        //   this.singleVerticalCombustionShow = true;
        //   return
        // } else if (row.inspectionItem === '单根垂直燃烧' && select[2] === '光缆' && row.state === 0) {
        //   this.singleVerticalCombustionShow = false;
        // }
        this.changeProductList0()
        this.currentMethod.insProduct = this.productList0
        this.getProNum()
@@ -2332,6 +2528,11 @@
        this.$axios.post(this.$api.insOrder.selectInsOrderTemplateById + '?id=' + e).then(res => {
          if (res.code == 201) return
          let obj = JSON.parse(res.data)
          console.log(obj);
          //制单人设置为当前登录用户
          let user = JSON.parse(localStorage.getItem('user'))
          obj.addObj.custom = user.name
          obj.addObj.userId = user.userId
          this.addObj = obj.addObj;
          this.sampleList = obj.sampleList;
          this.selectTree = obj.selectTree
@@ -2380,6 +2581,8 @@
        this.getProductLoad = true
        let selectTreeList = this.selectTree.split(" - ")
        this.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.addObj.model)
        console.log( this.selectTree);
        this.$axios.post(this.$api.standardTree.selectStandardProductList, {
          model: (this.addObj.model?this.addObj.model:row.model) + '-' + row.modelNum,
          standardMethodListId: val,
@@ -2452,17 +2655,27 @@
      },
      // 要求值变化时
      requestChange(e, row,type) {
        this.sampleList.map(item => {
          if (this.sampleIds.indexOf(item.id) > -1) {
            item.insProduct.map(m => {
              if (m.id == row.id) {
                m[type] = e;
        //this.currentMethod 当前样品id
        this.sampleList.forEach(item=>{
          if(item.id == this.currentMethod.id){
            item.insProduct.forEach(i=>{
              if(i.id == row.id){
                i[type] = e
              }
              return m;
            })
          }
          return item
        })
        // this.sampleList.map(item => {
        //   if (this.sampleIds.indexOf(item.id) > -1) {
        //     item.insProduct.map(m => {
        //       if (m.id == row.id) {
        //         m[type] = e;
        //       }
        //       return m;
        //     })
        //   }
        //   return item
        // })
      },
      selectStandardMethods() {
        this.$axios.get(this.$api.standardTree.selectStandardMethodEnum).then(res => {
@@ -2477,6 +2690,7 @@
        }
      },
      handleAll(e) {
        console.log(1111,this.bsm1DiaAll,this.bsm1Dia)
        // console.log('e---', e)
        if (e.length > 0) {
          this.productList.map(m => {
@@ -2625,6 +2839,7 @@
            this.$message.error('未选中样品')
            return
          }
          this.sampleIds = [this.sampleId]
          this.$axios.post(this.$api.insBushing.selectBushingBySampleId, {
            sampleId: this.sampleId
          }).then(res => {
@@ -2885,7 +3100,6 @@
      getTotal() {
        this.totalArr = []
        this.total = 0;
        // console.log(this.sampleList)
        this.sampleList.forEach(item => {
          if (item.insProduct && item.insProduct.length > 0) {
            item.insProduct.forEach(a => {