zouyu
2024-08-08 c263fb316fc23d9db98ce711fda30d81c28d2d9c
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,10 +428,10 @@
          </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
          @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect" :row-key="rowKey"
        <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" :reserve-selection="true"></el-table-column>
          <el-table-column type="selection" width="65" :selectable="selectable" v-if="active==1"></el-table-column>
          <el-table-column prop="inspectionItemClass" v-if="PROJECT === '装备电缆'" label="检验项分类" min-width="140" show-overflow-tooltip></el-table-column>
          <el-table-column prop="inspectionItemClassEn" v-if="PROJECT === '装备电缆'" label="检验项分类(EN)" min-width="140" show-overflow-tooltip></el-table-column>
          <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip>
@@ -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>
@@ -623,8 +624,11 @@
    <equipConfig :currentId="currentId" v-if="equipConfigShow" :active="active" />
    <cableConfig v-if="cableConfigShow" :active="active" />
<!--    单选特殊值处理框-->
    <el-dialog title="检测到特殊项,请作出以下选择" :visible.sync="bsm1Dia" min-width="400px" :show-close="false"
      :before-close="beforeClose">
    <el-dialog title="检测到特殊项,请作出以下选择" :visible.sync="bsm1Dia"
               :close-on-press-escape="false"
               :close-on-click-modal="false"
               min-width="400px" :show-close="false"
               :before-close="beforeClose">
      <div class="body" style="max-height: 60vh;">
        <el-row v-if="bsm1">
          <el-col class="search_thing" :span="24" style="height: initial;margin: 5px 0;">
@@ -683,9 +687,16 @@
          </el-col>
        </el-row> -->
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button type="primary" @click="save2" :loading="saveLoad">确 定</el-button>
        </el-row>
      </span>
    </el-dialog>
<!--    全选特殊值处理框-->
    <el-dialog title="检测到特殊项,请作出以下选择" :visible.sync="bsm1DiaAll" min-width="400px" :show-close="false"
                :close-on-press-escape="false"
               :close-on-click-modal="false"
               :before-close="beforeClose">
      <div class="body" style="max-height: 60vh;" v-for="(item, index) in bsm1DiaList" :key="index">
        <el-row v-if="item.bsm1">
@@ -737,8 +748,15 @@
          </el-col>
        </el-row>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button type="primary" @click="save1" :loading="saveLoad">确 定</el-button>
        </el-row>
      </span>
    </el-dialog>
    <el-dialog title="特殊值填写" :visible.sync="bsm3Dia" width="800px" :show-close="false">
    <el-dialog title="特殊值填写" :visible.sync="bsm3Dia"
               :close-on-click-modal="false" :close-on-press-escape="false"
               width="800px" :show-close="false">
      <el-table
      :data="editTable"
      style="width: 100%">
@@ -766,7 +784,7 @@
          prop="value"
          label="识别符值">
          <template slot-scope="scope">
            <el-input v-model="scope.row.value" placeholder="请输入" size="small"></el-input>
            <el-input v-model="scope.row.value" placeholder="请输入" @input="inputValueHandler(scope.row,scope.$index)" size="small"></el-input>
          </template>
        </el-table-column>
      </el-table>
@@ -777,7 +795,9 @@
        </el-row>
      </span>
    </el-dialog>
    <el-dialog title="温度循环要求填写" :visible.sync="circulateShow" width="900px" :before-close="beforeCirculateShowClose" :show-close="false">
    <el-dialog title="温度循环要求填写" :visible.sync="circulateShow" width="900px"
               :close-on-click-modal="false" :close-on-press-escape="false"
               :before-close="beforeCirculateShowClose" :show-close="false">
      <div class="search" style="display: flex;background: transparent;">
        <div class="search_thing">
          <div class="search_label">保温时间:</div>
@@ -862,7 +882,9 @@
      </span>
    </el-dialog>
    <!-- 电力试验室---温升试验/热循环 -->
    <el-dialog :title="temperatureTitle" :visible.sync="temperatureShow" width="260px" :before-close="temperatureShowClose" :show-close="false">
    <el-dialog :title="temperatureTitle" :visible.sync="temperatureShow"
               :close-on-click-modal="false" :close-on-press-escape="false"
               width="260px" :before-close="temperatureShowClose" :show-close="false">
      <div>
        <div v-if="isShowInput" style="margin-bottom: 6px">
          <span>循环次数:</span>
@@ -908,6 +930,7 @@
    },
    data() {
      return {
        sampleSelectionList: [],//样品表格选中数据
        editTable:[],
        template: null,
        templates: [],
@@ -1151,6 +1174,21 @@
      }
    },
    methods: {
      //特殊值填写处理
      inputValueHandler(row,index){
        if(row){
          const nextIndex = index+1
          for (let i = nextIndex; i < this.editTable.length; i++) {
            const element = this.editTable[i];
            if(element.model==row.model){
              this.editTable[i].value = row.value
            }else{
              break;
            }
          }
        }
      },
      spliceData () {
        if (!this.circulateForm.entrustNum || !this.circulateForm.entrustTime || !this.circulateForm.entrustPoint || this.opticalProjectList.length === 0 || this.temperatureData.length === 0) {
          this.$message.error('请填写完整数据')
@@ -1219,6 +1257,9 @@
          }
        })
        this.circulateShow = false
        this.changeProductList0()
        this.currentMethod.insProduct = this.productList0
        this.getProNum()
      },
      spliceTemperatureTest () {
        if (this.temperatureTest.length === 0) {
@@ -1376,6 +1417,9 @@
            a.price = obj.price
            a.tell = obj.tell
          }
          if(a.state == 0&&a.bsmRow){
            a = this.HaveJson(a.bsmRow)
          }
        })
      },
      searchFilterList () {
@@ -1529,10 +1573,39 @@
              isHaveBushing = false
            }
          })
          //过滤检测项:去除特殊项
          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)
          // inspectionItem
          let spcialItem = null//this.totalArr.find(a => a.state == 1 && a.inspectionItem.includes('松套管'))
          // console.log('isHaveBushing===', isHaveBushing)
          if (productListSelected && select[2] === '光缆' && isHaveBushing === false) {
            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&& isHaveBushing === false){
            this.$message.error('松套管项目必须进行光纤配置')
            this.$refs.sampleTable.setCurrentRow(this.currentMethod, true)
            this.rowClick(this.currentMethod)
            this.sampleIds = [this.currentMethod.id]
@@ -1562,6 +1635,79 @@
            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){
                isTrue = false
              }
            }
            //判断范围(10-25),要求值必须是-
            if(ele.ask.indexOf('-')>0 && ele.ask.length>1){
              //要求描述的~和要求值的-,等效
              let tell = ele.tell
              if(ele.tell.indexOf('~')>0){
                tell = ele.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){
                  isTrue = false
                 }
                //要求描述中不包含±以及区间的数字,则返回false
                if((tell.indexOf('±')<0&&tell.indexOf('-')<0)){
                  isTrue = false
                }else if(ele.tell.indexOf('-')==0){
                  isTrue = false
                }else if(tell.indexOf('-')>0){
                  const splitTells = tell.split('-')
                  if(splitTells[0].indexOf(min)<0 || splitTells[1].indexOf(max)<0){
                    isTrue = false
                  }
                }else if(tell.indexOf('±')>0&&tell!=ele.ask){
                  //校验要求描述为10±5这种写法的情况
                  let splitNums = ele.tell.split('±')
                  if(splitNums.length<2){
                    isTrue = false
                  }else{
                    let minTell = Number(splitNums[0])-Number(splitNums[1])
                    let maxTell = Number(splitNums[0])+Number(splitNums[1])
                    if(minTell!=min || maxTell!=max){
                      isTrue = false
                    }
                  }
                }
              }else{
                isTrue = false
              }
            }
          })
        }catch(error){
          console.log(error);
          isTrue = false
        }
        return isTrue
      },
      save0(){
        if(this.editTable.every(m=>m.value)){
@@ -1778,7 +1924,6 @@
      },
      saveMethod(sampleList){
        this.saveLoad = true
        console.log(333333,sampleList)
        this.$axios.post(this.$api.insOrder.addInsOrder, {
          str: JSON.stringify({
            insOrder: this.addObj,
@@ -1821,7 +1966,8 @@
            state,
            id: this.currentId,
            companyId:this.addObj.companyId,
            laboratory:this.addObj.laboratory
            laboratory:this.addObj.laboratory,
            company: this.addObj.company
          }, {
            headers: {
              'Content-Type': 'application/json'
@@ -1911,8 +2057,8 @@
        })
      },
      getProNum() {
        this.sampleList.forEach((m, i) => {
          Vue.set(this.sampleList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
        this.sampleSelectionList.forEach((m, i) => {
          Vue.set(this.sampleSelectionList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
        })
        this.$refs.sampleTable.doLayout()
      },
@@ -2045,6 +2191,7 @@
        val.forEach(a => {
          this.sampleIds.push(a.id)
        })
        this.sampleSelectionList = val
      },
      delSample() {
        this.sampleIds.forEach(a => {
@@ -2058,9 +2205,6 @@
        })
        this.$refs.sampleTable.doLayout()
      },
      rowKey (row) {
      return row.id;
    },
      selectProduct(val) {
        this.productListSelected = val
        this.productIds = []
@@ -2079,13 +2223,21 @@
        this.sampleId = row.id
        if (this.active !== 1) {
          this.sampleIds = []
          this.sampleIds.push(row.id)
          this.sampleSelectionList.forEach(ele=>{
            if(ele.id == row.id){
              this.sampleIds.push(row.id)
            }
          })
        }
        this.productList = row.insProduct
        this.productList0 = JSON.parse(JSON.stringify(this.productList))
        setTimeout(() => {
          this.productList.forEach(a => {
            if (a.state == 1) this.toggleSelection(a)
            if (a.state == 1) {
              this.toggleSelection(a)
            }else{
              this.$refs.productTable.toggleRowSelection(a, false);
            }
          })
        }, 200)
      },
@@ -2110,6 +2262,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)
@@ -2282,6 +2435,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
@@ -2329,9 +2487,9 @@
        }
        this.getProductLoad = true
        let selectTreeList = this.selectTree.split(" - ")
        selectTreeList[selectTreeList.length - 1] = this.addObj.model
        this.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.addObj.model)
        this.$axios.post(this.$api.standardTree.selectStandardProductList, {
          model: this.addObj.model + '-' + row.modelNum,
          model: (this.addObj.model?this.addObj.model:row.model) + '-' + row.modelNum,
          standardMethodListId: val,
          factory: selectTreeList.join(" - "),
        }, {
@@ -2427,6 +2585,7 @@
        }
      },
      handleAll(e) {
        console.log(1111,this.bsm1DiaAll,this.bsm1Dia)
        // console.log('e---', e)
        if (e.length > 0) {
          this.productList.map(m => {
@@ -2437,6 +2596,7 @@
          })
        } else {
          this.productList.map(m => {
            console.log('m----', m)
            m.state = 0
            return m
          })
@@ -2574,6 +2734,7 @@
            this.$message.error('未选中样品')
            return
          }
          this.sampleIds = [this.sampleId]
          this.$axios.post(this.$api.insBushing.selectBushingBySampleId, {
            sampleId: this.sampleId
          }).then(res => {
@@ -2697,6 +2858,72 @@
        this.changeProductList0()
        this.currentMethod.insProduct = this.productList0
      },
      save1 () {
        if (this.bsm1DiaList.length > 0) {
          this.bsm1DiaList.forEach(item => {
            if (!item.bsm1Val) {
              throw this.$message.error('特殊项目必须处理')
            }
          })
        }
        if (this.bsm2) {
          if (this.bsm2Val2.length === 0) {
            this.$message.error('特殊项目必须处理')
            return
          }
          let set = new Set()
          for (let i = 0; i < this.bsm2Val2.length; i++) {
            let num0 = set.size
            set.add(JSON.stringify(this.bsm2Val2[i]))
            let num1 = set.size
            if (num1 == num0) {
              this.$message.error('关联项目不能重复')
              return
            }
            set.add(JSON.stringify(this.bsm2Val2[i].reverse()))
            let num2 = set.size
            if (num1 == num2) {
              this.$message.error('关联项目不能重复')
              return
            }
          }
          this.isBsm2Val2 = true;
        }
        this.bsm1DiaAll = false
      },
      save2 () {
        if (this.bsm1DiaList.length > 0) {
          this.bsm1DiaList.forEach(item => {
            if (!item.bsm1Val) {
              throw this.$message.error('特殊项目必须处理')
            }
          })
        }
        if (this.bsm2) {
          if (this.bsm2Val2.length === 0) {
            this.$message.error('特殊项目必须处理')
            return
          }
          let set = new Set()
          for (let i = 0; i < this.bsm2Val2.length; i++) {
            let num0 = set.size
            set.add(JSON.stringify(this.bsm2Val2[i]))
            let num1 = set.size
            if (num1 == num0) {
              this.$message.error('关联项目不能重复')
              return
            }
            set.add(JSON.stringify(this.bsm2Val2[i].reverse()))
            let num2 = set.size
            if (num1 == num2) {
              this.$message.error('关联项目不能重复')
              return
            }
          }
          this.isBsm2Val2 = true;
        }
        this.bsm1Dia = false
      },
      beforeClose(done) {
        // if (this.bsm1) {
        //   if (this.bsm1Val === null || this.bsm1Val === '') {
@@ -2768,9 +2995,8 @@
      getTotal() {
        this.totalArr = []
        this.total = 0;
        // console.log(this.sampleList)
        this.sampleList.forEach(item => {
          if (item.insProduct && item.insProduct.length > 0) {
          if (item.insProduct  && item.insProduct.length > 0) {
            item.insProduct.forEach(a => {
              this.totalArr.push(a)
            })