licp
2024-07-03 57e76b55709e8ea88a83ab6c3f665fd9ee7fd64c
src/components/do/b1-ins-order/add.vue
@@ -70,6 +70,23 @@
    line-height: 24px;
    margin-top: 5px;
  }
  .circulateTable {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    .opticalProject {
      width: 38%;
    }
    .temperatureList {
      width: 60%;
      .temperatureListTitle {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        line-height: 30px;
      }
    }
  }
</style>
<style>
  .ins_order_add .el-input-group__append,
@@ -419,17 +436,42 @@
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>检验项</span>
              <el-input
                v-if="active==1"
              v-model="inspectionItem"
              @input="searchFilterList"
              size="mini"
              placeholder="请输入"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
          show-overflow-tooltip></el-table-column>
          show-overflow-tooltip>
          <template slot="header" slot-scope="scope">
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>检验项子项</span>
              <el-input
                v-if="active==1"
                v-model="inspectionItemSubclass"
                @input="searchFilterList"
                size="mini"
                placeholder="请输入"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="sonLaboratory" label="子实验室" min-width="130" show-overflow-tooltip :filters="filters"
          :filter-method="filterHandler"></el-table-column>
        <el-table-column prop="methodS" label="试验方法" min-width="120" show-overflow-tooltip>
          <template slot="header" slot-scope="scope">
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>试验方法</span>
              <el-input
                v-if="active==1"
                v-model="methodS"
                @input="searchFilterList"
                size="mini"
                placeholder="请输入"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
        <el-table-column prop="price" label="单价" width="100" show-overflow-tooltip></el-table-column>
@@ -712,38 +754,101 @@
        </el-row>
      </span>
    </el-dialog>
    <el-dialog title="温度循环要求填写" :visible.sync="circulateShow" width="800px" :show-close="false">
    <el-dialog title="温度循环要求填写" :visible.sync="circulateShow" width="900px" :before-close="beforeCirculateShowClose" :show-close="false">
      <div class="search" style="display: flex;background: transparent;">
        <div class="search_thing">
          <div class="search_label">保温时间:</div>
          <div class="search_input">
            <el-input v-model="circulateForm.entrustCode" size="small" placeholder=""></el-input>
            <el-input v-model="circulateForm.entrustTime" size="small" placeholder="" type="number"></el-input>
          </div>
        </div>
        <div class="search_thing">
          <div class="search_label">循环次数:</div>
          <div class="search_input">
            <el-input v-model="circulateForm.entrustCode" size="small" placeholder=""></el-input>
            <el-input v-model="circulateForm.entrustNum" size="small" placeholder="" type="number"></el-input>
          </div>
        </div>
        <div class="search_thing">
          <div class="search_label">温度点:</div>
          <div class="search_input">
            <el-input v-model="circulateForm.entrustCode" size="small" placeholder=""></el-input>
            <el-input @blur="changeTemperatureData" v-model="circulateForm.entrustPoint" size="small" placeholder="" type="number"></el-input>
          </div>
        </div>
      </div>
      <div class="circulateTable">
        <div class="opticalProject">
          <div style="line-height: 30px;">光纤项目</div>
          <el-divider></el-divider>
          <div>
            <el-table
              ref="multipleTable"
              border
              :header-cell-style="{'text-align':'center'}"
              :cell-style="{'text-align':'center'}"
              :data="opticalProject"
              tooltip-effect="dark"
              style="width: 100%"
              @row-click="rowClickOptical"
              @select="selectOpticalProject"
              @select-all="selectAllOptical"
              @selection-change="handleSelectionChange">
              <el-table-column
                type="selection"
                width="55">
              </el-table-column>
              <el-table-column prop="value" label="光纤项目" show-overflow-tooltip></el-table-column>
            </el-table>
          </div>
        </div>
        <div class="temperatureList">
          <div class="temperatureListTitle">
            <span>温度点集合(请按照顺序填写,20℃必须为首位)</span>
            <span>
              <el-button type="primary" size="mini" @click="addTemperatureData">新增</el-button>
              <el-button size="mini" @click="deleteTemperatureData">删除</el-button>
            </span>
          </div>
          <el-divider></el-divider>
          <el-table
            :data="temperatureData"
            border
            :header-cell-style="{'text-align':'center'}"
            :cell-style="{'text-align':'center'}"
            style="width: 100%">
            <el-table-column prop="date" label="温度点(℃)" width="120px">
              <template slot-scope="scope">
                <el-input size="small" v-model="scope.row.temperaturePoint" clearable placeholder="请输入" @change="changeTemperature"></el-input>
              </template>
            </el-table-column>
            <el-table-column prop="name" label="要求(dB/Km)">
              <template slot-scope="scope">
                <span>x</span>
                <el-select v-model="scope.row.askSymbol" placeholder="请选择" size="small" style="width: 120px" @change="changeTemperature">
                  <el-option v-for="item in temperatureDataList" :key="item.value" :label="item.label" :value="item.value">
                  </el-option>
                </el-select>
                <el-input size="small" v-model="scope.row.askNum" clearable placeholder="请输入" style="width: 120px" @change="changeTemperature"></el-input>
              </template>
            </el-table-column>
          </el-table>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="spliceData">保存</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
  import ValueTable from '../../tool/value-table.vue'
  import fiberOpticConfig from './fiberoptic-config.vue'
  import equipConfig from './equip-config.vue'
  import cableConfig from './cable-config.vue'
  import Vue from 'vue'
  export default {
import ValueTable from '../../tool/value-table.vue'
import fiberOpticConfig from './fiberoptic-config.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,
@@ -848,8 +953,10 @@
        addSampleDia: false,
        count: 1,
        productList: [],
        productList0: [],
        bsm1DiaList: [],
        productIds: [],
        productListSelected: [],
        getProductLoad: false,
        saveLoad: false,
        templateDia: false,
@@ -899,9 +1006,25 @@
        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,
        inspectionItemSubclass:null,
        methodS:null,
        circulateShow:false,
        circulateForm:{},
        isBsm2Val2:false
        circulateForm:{
          entrustTime: '',
          entrustNum: '',
          entrustPoint: ''
        },
        isBsm2Val2:false,
        opticalProject: [], // 温度循环弹框光纤项目列表
        opticalProjectList: [], // 温度循环弹框光纤项目选中的数组
        temperatureData: [], // 温度循环弹框温度点集合列表
        temperatureDataList: [
          {label: '<', value: '<'},
          {label: '≤', value: '≤'},
          {label: '>', value: '>'},
          {label: '≥', value: '≥'},
          {label: '=', value: '='},
        ]
      }
    },
    watch: {
@@ -976,6 +1099,167 @@
      }
    },
    methods: {
      spliceData () {
        if (!this.circulateForm.entrustNum || !this.circulateForm.entrustTime || !this.circulateForm.entrustPoint || this.opticalProjectList.length === 0 || this.temperatureData.length === 0) {
          this.$message.error('请填写完整数据')
          return
        }
        // 拼接要求值ask
        const opticalProjectList = JSON.parse(JSON.stringify(this.opticalProjectList))
        opticalProjectList.forEach(o => {
          o.temperatureData.forEach(t => {
            if (!t.temperaturePoint || !t.askSymbol || !t.askNum) {
              throw this.$message.error('请填写完整数据')
            }
          })
        })
        let entrustTime = this.circulateForm.entrustTime
        let entrustNum = this.circulateForm.entrustNum
        let opticalProjectList2 = JSON.parse(JSON.stringify(this.opticalProjectList))
        let askArr = []
        let opticalProjectArr = []
        opticalProjectList.forEach(o => {
          opticalProjectArr.push(o.value)
          o.temperatureData.unshift({temperaturePoint: 20})
          o.temperatureData.forEach(t => {
            if (!t.askSymbol) {
                  const askObj = t.temperaturePoint + '℃' + ',' + o.value + ',' + null
                  askArr.push(askObj)
                } else {
                  const askObj = t.temperaturePoint + '℃' + ',' + o.value + ',' + t.askSymbol + t.askNum
                  askArr.push(askObj)
                }
          })
        })
        askArr.push(this.circulateForm.entrustNum)
        const ask = askArr.join(';')
        // 拼接要求描述tell
        let askNum = []
        let temperaturePointList = []
        let temperaturePointList2 = []
        entrustTime = entrustTime + 'h'
        entrustNum = entrustNum + '次'
        opticalProjectList2.forEach(o => {
          o.temperatureData.forEach(t => {
            t.temperaturePoint = t.temperaturePoint + '℃'
            temperaturePointList2.push(t.temperaturePoint)
            temperaturePointList.push(t.temperaturePoint)
            askNum.push(t.askSymbol + t.askNum + 'dB/Km')
          })
        })
        temperaturePointList = Array.from(new Set(temperaturePointList))
        temperaturePointList2 = Array.from(new Set(temperaturePointList2))
        temperaturePointList2.unshift(20 + '℃')
        let additionArr = []
        askNum.forEach(a => {
          additionArr.push(temperaturePointList.join(',') + a)
        })
        additionArr = Array.from(new Set(additionArr))
        const tell = '温度范围:' + temperaturePointList2.join(',') + ';' + '保温时间:' + entrustTime + ';' + '循环次数:'
          + entrustNum + ';' + '光纤(' + opticalProjectArr.join(',') + ')' + '附加衰减绝对值:' + additionArr.join(';')
        this.productList.forEach(item => {
          if (item.inspectionItem === '温度循环') {
            item.ask = ask
            item.tell = tell
          }
        })
        console.log('ask---', ask)
        console.log('tell---', tell)
        this.circulateShow = false
      },
      beforeCirculateShowClose () {
        if (!this.circulateForm.entrustNum || !this.circulateForm.entrustTime || !this.circulateForm.entrustPoint || this.opticalProjectList.length === 0 || this.temperatureData.length === 0) {
          this.$message.error('请填写完整数据')
          return
        }
        let temperaturePoint1 = JSON.parse(JSON.stringify(this.temperatureData))
        temperaturePoint1.forEach(t => {
          if (!t.temperaturePoint || !t.askSymbol || !t.askNum) {
            throw this.$message.error('请填写完整数据')
          }
        })
      },
      handleSelectionChange(val) {
        this.opticalProjectList = val;
      },
      selectAllOptical (val) {
        if (val.length > 0) {
          if (val[val.length-1].temperatureData) {
            this.temperatureData = this.HaveJson(val.temperatureData)
          } else {
            this.temperatureData = []
          }
        } else {
          this.temperatureData = []
        }
        this.circulateForm.entrustPoint = this.temperatureData.length
      },
      selectOpticalProject (val) {
        if (val.temperatureData) {
          this.temperatureData = this.HaveJson(val.temperatureData)
        } else {
          this.temperatureData = []
        }
        this.circulateForm.entrustPoint = this.temperatureData.length
      },
      rowClickOptical (val) {
        const index = this.opticalProjectList.findIndex(item => item.value === val.value)
        if (index > -1 && val.temperatureData) {
          this.temperatureData = this.HaveJson(val.temperatureData)
        }
        this.circulateForm.entrustPoint = this.temperatureData.length
      },
      changeTemperature () {
        this.opticalProjectList.forEach(item => {
          item.temperatureData = this.HaveJson(this.temperatureData)
        })
      },
      addTemperatureData () {
        const obj = {}
        this.temperatureData.push(obj)
        this.circulateForm.entrustPoint = this.temperatureData.length
      },
      deleteTemperatureData () {
        if (this.temperatureData.length > 0) {
          this.temperatureData = this.temperatureData.slice(0,-1)
        }
        this.circulateForm.entrustPoint = this.temperatureData.length
      },
      changeTemperatureData () {
        const length = this.temperatureData.length
        const entrustPoint = Number(this.circulateForm.entrustPoint)
        if (entrustPoint > length) {
          for (let i = 0; i < (entrustPoint - length); i++) {
            const obj = {}
            this.temperatureData.push(obj)
          }
        } else if (entrustPoint < length) {
          const deleteNum = length - entrustPoint
          this.temperatureData = this.temperatureData.slice(0,-deleteNum)
        }
      },
      searchFilterList () {
        const vtw = {
          inspectionItem: this.inspectionItem, // 检验项
          inspectionItemSubclass: this.inspectionItemSubclass, // 检验项子项
          methodS: this.methodS, // 试验方法
        }
        const isHaveValue = Object.values(vtw).some(item => {
          return item
        })
        if (isHaveValue) {
          for(let i in vtw) {
            if (vtw[i]) {
              this.productList = this.productList0.filter((item) => {
                return item[i] && item[i].includes(vtw[i])
              })
            }
          }
        } else {
          // 没有查询条件时渲染所有数据
          this.productList = this.productList0
        }
      },
      getAuthorizedPerson() {
        this.$axios.get(this.$api.user.getUserMenu).then(res => {
          let data = []
@@ -1082,6 +1366,19 @@
        } else if (!this.sampleList.every(m => m.standardMethodListId)) {
          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('光缆温度循环项目必须进行光纤配置')
            return
          }
          let sampleList = this.HaveJson(this.sampleList)
          let projectNum = this.totalArr.filter(a => a.state == 1).length
          if(projectNum==0){
@@ -1135,18 +1432,36 @@
                  })
                }else if(type==1){
                  let arr = this.editTable.filter(b => b.sampleId == item.id)
                  arr.forEach(f => {
                    if(a.ask.includes(f.symbolItem)){
                      let ask = calBack(a.ask, f.symbolItem,f.value)
                      if (ask) {
                        a.ask = ask
                  for (var i=0;i<arr.length;i++){
                    if(a.ask){
                      if(a.ask.includes(arr[i].symbolItem)){
                        let ask = calBack(a.ask, arr[i].symbolItem,arr[i].value)
                        if (ask) {
                          a.ask = ask
                        }
                        let tell = this.handleTell(a.tell, arr[i].symbolItem,arr[i].value)
                        if (tell) {
                          a.tell = tell
                        }
                      }
                      let tell = this.handleTell(a.tell, f.symbolItem,f.value)
                      if (tell) {
                        a.tell = tell
                      }
                    }else{
                      this.$message.error('要求值为空,需要去标准库维护!')
                    }
                  })
                  }
                  // arr.forEach(f => {
                  //   if(a.ask){
                  //     if(a.ask.includes(f.symbolItem)){
                  //       let ask = calBack(a.ask, f.symbolItem,f.value)
                  //       if (ask) {
                  //         a.ask = ask
                  //       }
                  //       let tell = this.handleTell(a.tell, f.symbolItem,f.value)
                  //       if (tell) {
                  //         a.tell = tell
                  //       }
                  //     }
                  //   }else{}
                  // })
                }
              }
            })
@@ -1562,6 +1877,7 @@
        this.$refs.sampleTable.doLayout()
      },
      selectProduct(val) {
        this.productListSelected = val
        this.productIds = []
        val.forEach(a => {
          this.productIds.push(a.id)
@@ -1639,11 +1955,21 @@
          }
          return item
        })
        if (row.inspectionItem === '温度循环') {
        const select = this.selectTree.split(' - ')
        if (row.inspectionItem === '温度循环' && select[2] === '光缆' && row.state === 1) {
          this.circulateShow = true;
          return
        } else if (row.inspectionItem === '温度循环' && select[2] === '光缆' && row.state === 0) {
          this.circulateShow = false;
        }
        this.getProNum()
      },
      searchProject () {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "光纤项目"
        }).then(res => {
          this.opticalProject = res.data
        })
      },
      permute(nums) {
        const result = [];
@@ -1798,6 +2124,7 @@
          row.insProduct = this.HaveJson(res.data)
          this.getProductLoad = false
          this.productList = row.insProduct
          this.productList0 = JSON.parse(JSON.stringify(this.productList))
          this.$refs.sampleTable.setCurrentRow(row)
          setTimeout(() => {
            this.productList.forEach(a => {
@@ -1805,6 +2132,7 @@
            })
          }, 200)
        })
        this.searchProject()
      },
      changeModel() {
        this.sampleList.forEach(a => {
@@ -1864,7 +2192,6 @@
        }
      },
      handleAll(e) {
        console.log('全选')
        if (e.length > 0) {
          this.productList.map(m => {
            m.state = 1