zss
2024-09-13 9bce6d06fc72b109ebfe1fa779c57e1d62a43b57
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>
@@ -207,6 +207,14 @@
              <el-input size="small" placeholder="选择委托客户" clearable :readonly="active>1" v-model="addObj.phone"></el-input>
            </div>
          </el-col>
          <el-col class="search_thing" :span="6" v-if="addObj.orderType=='C'">
            <div class="search_label"><span class="required-span">* </span>下单至:</div>
            <div class="search_input">
              <el-select size="small" style="width: 100%;" clearable v-model="addObj.departmentLimsId" :disabled="active>1" placeholder="部门">
                <el-option v-for="(a, ai) in deaprtEnum" :key="ai" :value="a.id" :label="a.name"></el-option>
              </el-select>
            </div>
          </el-col>
          <el-col class="search_thing" :span="6">
            <div class="search_label"><span class="required-span">* </span>紧急程度:</div>
            <div class="search_input">
@@ -246,7 +254,7 @@
            </div>
          </el-col> -->
          <el-col class="search_thing" :span="6">
            <div class="search_label"><span class="required-span">* </span>来样方式:</div>
            <div class="search_label"><span class="required-span">* </span>订单类型:</div>
            <div class="search_input">
              <el-select v-model="addObj.formType" size="small" :disabled="active>1" style="width: 100%;">
                <el-option v-for="(a,ai) in formType" :key="ai" :label="a.label" :value="a.value"></el-option>
@@ -359,15 +367,15 @@
          <div class="search_thing">
            <div class="search_label">检验标准:</div>
            <div class="search_input">
              <el-select v-model="standardMethodListId" :placeholder="active>1 ? '' : '请输入'" size="small" @focus="methodFocus"
                :loading="methodLoad" @change="changeStandardMethodListId">
              <el-select v-model="standardMethodListId" :placeholder="active>1 ? '' : '请输选择'" size="small" @focus="methodFocus"
                :loading="methodLoad" multiple @change="changeStandardMethodListId">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
            </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>
@@ -376,7 +384,7 @@
              <el-input size="small" v-model="scope.row.sample" clearable :readonly="active>1"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="sampleCode" label="样品编号" min-width="140" align="center">
          <el-table-column prop="sampleCode" label="样品编号" min-width="100" align="center">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成"
                :readonly="active>1"></el-input>
@@ -391,7 +399,7 @@
              </el-select>
            </template>
          </el-table-column>
          <el-table-column prop="modelNum" label="型号参数" width="130" align="center" v-if="!(active>1)">
          <el-table-column prop="modelNum" label="型号参数" min-width="100" align="center" v-if="!(active>1)">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.modelNum" clearable placeholder="非必填"
                @keyup.enter.native="methodChange(scope.row.standardMethodListId, scope.row)"
@@ -402,8 +410,17 @@
            <template slot-scope="scope">
              <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1"
                placeholder="检验标准" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)"
                @focus="methodFocus" :readonly="active>1" style="width: 100%;" clearable @clear="productList = []">
                @focus="methodFocus" :readonly="active>1" style="width: 100%;" clearable @clear="productList = []" multiple>
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column prop="testRequirements" label="试验标准" align="center" min-width="100">
            <template slot-scope="scope">
              <el-select v-model="scope.row.testRequirements" :disabled="scope.row.model==null||active>1"
                placeholder="试验标准" size="small" :readonly="active>1" style="width: 100%;" clearable>
                <el-option v-for="item in standard" :key="item.id" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </template>
@@ -428,10 +445,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>
@@ -465,17 +482,17 @@
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable type="textarea"
                :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row,'tell')"
                v-if="active==1&&isAskOnlyRead"></el-input>
                v-if="active==1"></el-input>
              <span v-else>
                <template >{{ scope.row.tell }}</template>
              </span>
            </template>
          </el-table-column>
          <el-table-column prop="ask" label="要求值" min-width="220px" v-if="isAskOnlyRead">
          <el-table-column prop="ask" label="要求值" min-width="220px" >
            <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&&scope.row.inspectionValueType!='5'"></el-input>
              <span v-else>
                <!-- <template v-if="(scope.row.ask.indexOf('D')>-1
                ||scope.row.ask.indexOf('W')>-1
@@ -523,7 +540,7 @@
        <el-button type="primary" @click="selectUser">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="选择样品" :visible.sync="selectStandardTree" width="400px">
    <el-dialog title="选择样品" :visible.sync="selectStandardTree" width="500px">
      <div class="body" style="height: 60vh;overflow-y: auto;user-select: none;" v-if="selectStandardTree">
        <el-row>
          <el-col :span="24">
@@ -563,7 +580,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 +614,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,12 +637,16 @@
        </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" />
<!--    单选特殊值处理框-->
    <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 +705,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,11 +766,18 @@
          </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%">
      style="width: 100%" height="80vh">
      <!-- inspectionItemList -->
      <el-table-column
          prop="inspectionItemList"
@@ -766,7 +802,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 +813,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>
@@ -861,8 +899,19 @@
        <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" 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>
@@ -884,19 +933,24 @@
<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'
import {iuCharts} from "../../../util/echarts";
export default {
    components: {
      ValueTable,
      fiberOpticConfig,
      fiberOpticConfigTwo,
      equipConfig,
      cableConfig
    },
    props: {
      examine: {
        type: Number,
        default: () => 0
      },
      active: {
        type: Number,
        default: () => 0
@@ -908,6 +962,8 @@
    },
    data() {
      return {
        inspectionItemST: null,
        sampleSelectionList: [],//样品表格选中数据
        editTable:[],
        template: null,
        templates: [],
@@ -941,7 +997,9 @@
          production: null,
          productionEn: null,
          companyId: null,
          prepareUser:null
          prepareUser:null,
          departmentLimsId:null,
          departmentLims:null
        },
        sample: {
          sampleCode: null,
@@ -1044,7 +1102,7 @@
        RTS: '',
        totalArr: [],
        model: null,
        standardMethodListId: null,
        standardMethodListId: [],
        symbolList:[
        'RTS','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],
        inspectionItem:null,
@@ -1056,6 +1114,7 @@
          entrustNum: '',
          entrustPoint: ''
        },
        singleVerticalCombustionShow: false,
        isBsm2Val2:false,
        opticalProject: [], // 温度循环弹框光纤项目列表
        opticalProjectList: [], // 温度循环弹框光纤项目选中的数组
@@ -1077,6 +1136,8 @@
        temId: '',
        sonLaboratoryList:[],
        selectiveEcho: [], // 检验下单的时候勾选检验项目,如果使用筛选提交显示检验项目为空 回显列表
        deaprtEnum:[],
        standard:[]
      }
    },
    watch: {
@@ -1101,6 +1162,25 @@
          }
        }
      },
      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: {
        deep: true,
        handler(val) {
@@ -1109,11 +1189,11 @@
      },
      'addObj.sample'(val) {
        this.model = null
        this.standardMethodListId = null
        this.standardMethodListId = []
      },
      'addObj.sampleNum'(val) {
        this.model = null
        this.standardMethodListId = null
        this.standardMethodListId = []
      }
    },
    mounted() {
@@ -1123,8 +1203,10 @@
      // this.selectInsOrderTemplate()
      this.getAuthorizedPerson();
      this.selectEnumByCategoryForUnit()
      this.selectEnumByCategoryForStandard()
      this.selectStandardMethods()
      this.selectEnumByCategoryForOrderType()
      this.selectDepartmentEnum()
      // this.selectEnumByCategoryForSonLaboratory()
      this.selectEnumByCategoryForSampleForm()
      if (this.active != 1) {
@@ -1137,7 +1219,10 @@
            ...res.data.insOrder
          };
          this.addObj.type = String(this.addObj.type)
          this.sampleList = this.HaveJson(res.data.sampleProduct);
          this.sampleList = this.HaveJson(res.data.sampleProduct)
          this.sampleList.forEach(m=>{
            m.standardMethodListId = JSON.parse(m.standardMethodListId)
          });
          this.getProNum()
          this.addObj.sampleNum = this.sampleList.length
          this.$nextTick(() => {
@@ -1151,6 +1236,20 @@
      }
    },
    methods: {
      //特殊值填写处理
      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&&row.symbolItem==element.symbolItem){
              this.editTable[i].value = row.value
            }
          }
        }
      },
      spliceData () {
        if (!this.circulateForm.entrustNum || !this.circulateForm.entrustTime || !this.circulateForm.entrustPoint || this.opticalProjectList.length === 0 || this.temperatureData.length === 0) {
          this.$message.error('请填写完整数据')
@@ -1219,6 +1318,9 @@
          }
        })
        this.circulateShow = false
        this.changeProductList0()
        this.currentMethod.insProduct = this.productList0
        this.getProNum()
      },
      spliceTemperatureTest () {
        if (this.temperatureTest.length === 0) {
@@ -1376,6 +1478,9 @@
            a.price = obj.price
            a.tell = obj.tell
          }
          if(a.state == 0&&a.bsmRow){
            a = this.HaveJson(a.bsmRow)
          }
        })
      },
      searchFilterList () {
@@ -1498,47 +1603,58 @@
        return str.replace(find, value);
      },
      save() {
        if(this.addObj.orderType=='C'&&this.addObj.departmentLimsId){
          this.addObj.departmentLims = this.deaprtEnum.find(m=>m.id==this.addObj.departmentLimsId).name
        }else if(this.addObj.orderType&&this.addObj.orderType!='C'&&!this.addObj.departmentLimsId){
          this.addObj.departmentLims = '检测中心'
          this.addObj.departmentLimsId = this.deaprtEnum.find(m=>m.name=='检测中心').id
        }
        // else{
        //   this.$message.error('请选择检验类别')
        //   return
        // }
        if (!this.addObj.companyId) {
          this.$message.error('未选择客户单位')
          return
        }
        let noLaboratory = this.totalArr.filter(a => a.state == 1&&!a.sonLaboratory)
        if(noLaboratory.length>0){
          let str = ''
          noLaboratory.forEach((m,j)=>{
            str += j==noLaboratory.length-1?m.inspectionItem+'-'+m.inspectionItemSubclass:m.inspectionItem+'-'+m.inspectionItemSubclass+','
          })
          this.$message.error(str+'没有关联实验室室,请联系管理员')
          return
        }
        if (!this.addObj.type) {
          this.$message.error('未选择紧急程度')
        } else if (!this.addObj.formType) {
          this.$message.error('请输入来样方式')
          this.$message.error('请输入订单类型')
        } else if (!this.addObj.orderType) {
          this.$message.error('请选择检验类别')
        } else if (!this.addObj.production) {
          this.$message.error('请输入生产单位')
        } else if (!this.addObj.productionEn) {
          this.$message.error('请输入生产单位EN')
        }else if (!this.addObj.departmentLimsId) {
          this.$message.error('选择下单到哪个部门')
        } else if (this.sampleList.length < 1) {
          this.$message.error('请添加一个样品')
        } else if (!this.sampleList.every(m => m.sample)) {
          this.$message.error('请输入样品名称')
        } else if (!this.sampleList.every(m => m.model)) {
          this.$message.error('请输入样品型号')
        } else if (!this.sampleList.every(m => m.standardMethodListId)) {
        } else if (!this.sampleList.every(m => m.standardMethodListId&&m.standardMethodListId.length>0)) {
          this.$message.error('请选择检验标准')
        } else {
          const select = this.selectTree.split(' - ')
          const productListSelected = this.productListSelected.some(item => item.inspectionItem === '温度循环')
          let isHaveBushing = ''
          this.sampleList.forEach(item => {
            if (!item.bushing || item.bushing.length === 0) {
              isHaveBushing = false
            }
          })
          // 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
          }
          //校验检验项的要求值和要求描述,仅委托要求
          // if(this.active==1&&this.isAskOnlyRead){
          //   const isTrue = this.checkRequiredValueAndRemark(filterProductList)
          //   if(!isTrue){
          //     this.$message.error('检验项的要求值与要求描述不匹配, 请检查')
          //     return
          //   }
          // }
          let sampleList = this.HaveJson(this.sampleList)
          let projectNum = this.totalArr.filter(a => a.state == 1).length
          if(projectNum==0){
@@ -1562,6 +1678,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)){
@@ -1605,7 +1827,7 @@
                        }
                      }
                    }else{
                      this.$message.error('要求值为空,需要去标准库维护!')
                      // this.$message.error('要求值为空,需要去标准库维护!')
                    }
                  }
                  // arr.forEach(f => {
@@ -1777,6 +1999,22 @@
        }
      },
      saveMethod(sampleList){
        let isHaveAsk = this.totalArr.filter(a => (a.ask === null||a.ask=='')&&a.state==1)
        if (isHaveAsk.length > 0) {
          this.$message({
            type: 'error',
            message: '请填写要求值后再提交'
          })
          return false;
        }
        let isHaveTell = this.totalArr.filter(a => (a.tell == null||a.tell=='')&&a.state==1)
        if (isHaveTell.length > 0) {
          this.$message({
            type: 'error',
            message: '请填写要求描述后再提交'
          })
          return false;
        }
        this.saveLoad = true
        this.$axios.post(this.$api.insOrder.addInsOrder, {
          str: JSON.stringify({
@@ -1820,7 +2058,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'
@@ -1850,7 +2089,10 @@
              this.distributeData.appointed = ress.data
            })
            setTimeout(() => {
              this.issuedDialogVisible = true;
              // this.issuedDialogVisible = true;
              // this.$message.success('提交成功')
              this.upLoad = false
              this.$parent.playOrder(0)
            }, 1000)
          })
        } else {
@@ -1910,9 +2152,15 @@
        })
      },
      getProNum() {
        this.sampleList.forEach((m, i) => {
          Vue.set(this.sampleList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
        })
        if (this.active != 1) {
          this.sampleList.forEach((m, i) => {
            Vue.set(this.sampleList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
          })
        }else{
          this.sampleSelectionList.forEach((m, i) => {
            Vue.set(this.sampleSelectionList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
          })
        }
        this.$refs.sampleTable.doLayout()
      },
      searchFilter() {
@@ -1928,7 +2176,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--) {
@@ -1967,7 +2231,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]
@@ -1982,7 +2246,7 @@
          this.sample.sample = this.addObj.sample
          this.sample.model = this.addObj.model
          this.sample.unit = this.addObj.unit
          this.sample.standardMethodListId = null
          this.sample.standardMethodListId = []
          this.sample.insProduct = []
          this.sample.id = this.count
          this.sample.childSampleList = []
@@ -2027,14 +2291,14 @@
          this.sample.sample = this.addObj.sample
          this.sample.model = this.addObj.model
          this.sample.unit = this.addObj.unit
          this.sample.standardMethodListId = null
          this.sample.standardMethodListId = []
          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)
@@ -2044,6 +2308,7 @@
        val.forEach(a => {
          this.sampleIds.push(a.id)
        })
        this.sampleSelectionList = val
      },
      delSample() {
        this.sampleIds.forEach(a => {
@@ -2057,9 +2322,6 @@
        })
        this.$refs.sampleTable.doLayout()
      },
      rowKey (row) {
      return row.id;
    },
      selectProduct(val) {
        this.productListSelected = val
        this.productIds = []
@@ -2069,22 +2331,24 @@
      },
      rowClick(row, column, event) {
        this.currentMethod = row
        let obj = this.methods.find(a => a.id == this.currentMethod.standardMethodListId)
        if (obj && obj.code == '委托要求') {
          this.isAskOnlyRead = true
        } else {
          this.isAskOnlyRead = false
        }
        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)
      },
@@ -2177,6 +2441,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()
@@ -2282,6 +2553,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
@@ -2298,6 +2574,13 @@
          this.units = res.data
        })
      },
      selectEnumByCategoryForStandard() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "试验标准"
        }).then(res => {
          this.standard = res.data
        })
      },
      selectEnumByCategoryForOrderType() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "检验类别"
@@ -2310,7 +2593,7 @@
      },
      selectEnumByCategoryForSampleForm() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "来样方式"
          category: "订单类型"
        }).then(res => {
          this.formType = res.data
          if (this.formType.length > 0) {
@@ -2321,17 +2604,14 @@
      methodChange(val, row) {
        if (val === null || val === '') return
        this.currentMethod = row
        let obj = this.methods.find(a => a.id == this.currentMethod.standardMethodListId)
        if (obj && obj.code == '委托要求') {
          this.isAskOnlyRead = true
        } else {
          this.isAskOnlyRead = false
        }
        this.getProductLoad = true
        let selectTreeList = this.selectTree.split(" - ")
        this.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.addObj.model)
        this.$axios.post(this.$api.standardTree.selectStandardProductList, {
          model: row.model + '-' + row.modelNum,
          standardMethodListId: val,
          factory: this.selectTree,
          model: (this.addObj.model?this.addObj.model:row.model) + '-' + row.modelNum,
          standardMethodListId: val.join(','),
          factory: selectTreeList.join(" - "),
        }, {
          headers: {
            'Content-Type': 'application/json'
@@ -2400,17 +2680,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 => {
@@ -2425,6 +2715,7 @@
        }
      },
      handleAll(e) {
        console.log(1111,this.bsm1DiaAll,this.bsm1Dia)
        // console.log('e---', e)
        if (e.length > 0) {
          this.productList.map(m => {
@@ -2435,6 +2726,7 @@
          })
        } else {
          this.productList.map(m => {
            console.log('m----', m)
            m.state = 0
            return m
          })
@@ -2572,6 +2864,7 @@
            this.$message.error('未选中样品')
            return
          }
          this.sampleIds = [this.sampleId]
          this.$axios.post(this.$api.insBushing.selectBushingBySampleId, {
            sampleId: this.sampleId
          }).then(res => {
@@ -2695,6 +2988,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 === '') {
@@ -2766,7 +3125,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 => {
@@ -2859,6 +3217,11 @@
        if(this.sonLaboratoryList.length>0){
          this.distributeData.sonLaboratory = this.sonLaboratoryList[0].value
        }
      },
      selectDepartmentEnum(){
        this.$axios.get(this.$api.department.selectDepartmentLimsEnum).then(res=>{
          this.deaprtEnum = res.data
        })
      }
    }
  }