spring
2025-04-11 9508c11a63737b4b9e80e1223792f07d3151c2e8
src/views/business/productOrder/components/cable-config.vue
@@ -1,68 +1,46 @@
<template>
  <div class="ins_order_config">
    <div>
      <el-row class="title">
        <el-col :span="6" style="padding-left: 20px;text-align: left;">电缆配置</el-col>
        <el-col :span="18" style="text-align: right;">
          <el-button size="medium" @click="outConfig">
            <span style="color: #3A7BFA;">返 回</span>
          </el-button>
          <el-button size="medium" type="primary" @click="save">保 存</el-button>
        </el-col>
      </el-row>
    </div>
    <div class="search">
      <el-radio-group v-model="currentTab" size="small" style="margin-left: 20px;" @input="changeTab">
        <el-radio-button label="绝缘">绝 缘</el-radio-button>
<!--        <el-radio-button label="护套">护 套</el-radio-button>-->
      </el-radio-group>
      <div v-if="currentTab=='绝缘'" class="search_thing">
        <div class="search_label">芯数:</div>
        <el-select v-model="insulating.num" allow-create
                   clearable
                   default-first-option
                   filterable
                   multiple
                   size="small">
          <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
        </el-select>
  <div>
    <div class="search_form">
      <div v-if="currentTab == '绝缘'" style="display: flex">
        <el-radio-group v-model="currentTab" size="small" style="margin-right: 20px;" @input="changeTab">
          <el-radio-button label="绝缘">绝 缘</el-radio-button>
        </el-radio-group>
        <el-form :model="insulating" ref="entity" size="small" :inline="true">
          <el-form-item label="芯数" prop="num">
            <el-select v-model="insulating.num" allow-create clearable default-first-option filterable multiple
              size="small">
              <el-option v-for="item in quantityList" :key="item.value" :label="item.label"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="检验标准" prop="standardMethodListIds">
            <el-select v-model="insulating.standardMethodListIds" disabled placeholder="请选择检验标准" size="small"
              @change="(value) => methodChange(value)" multiple>
              <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
      </div>
      <div v-if="currentTab=='绝缘'" class="search_thing">
        <div class="search_label">检验标准:</div>
        <el-select v-model="insulating.standardMethodListId" disabled placeholder="请选择检验标准"
                   size="small"
        @change="(value)=>methodChange(value)">
          <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">
          </el-option>
        </el-select>
      <div>
        <el-button size="small" @click="outConfig">返 回</el-button>
        <el-button size="small" type="primary" @click="save">保 存</el-button>
      </div>
<!--      <div class="search_thing" v-if="currentTab=='护套'">-->
<!--        <div class="search_label">检验标准:</div>-->
<!--        <el-select v-model="sheath.standardMethodListId" placeholder="请选择检验标准" size="small"-->
<!--                   disabled-->
<!--        @change="(value)=>methodChange(value)">-->
<!--          <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">-->
<!--          </el-option>-->
<!--        </el-select>-->
<!--      </div>-->
    </div>
    <div class="table">
      <el-table ref="productTable" :data="productList" :row-class-name="tableRowClassName"
                border class="el-table" height="100%"
        style="margin-bottom: 10px;" tooltip-effect="dark" @select="upProductSelect"
        @selection-change="selectProduct" @select-all="handleAll">
      <el-table ref="productTable" :data="productList" :row-class-name="tableRowClassName" border class="el-table"
        :height="'calc(100vh - 200px)'" tooltip-effect="dark" @select="upProductSelect"
        :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" @selection-change="selectProduct"
        @select-all="handleAll">
        <el-table-column :selectable="selectable" type="selection" width="65"></el-table-column>
        <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
        <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass"
          show-overflow-tooltip></el-table-column>
        <el-table-column label="检验项" min-width="140" prop="inspectionItem" 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="inspectionItem"
                placeholder="请输入"
                size="mini"
                @input="searchFilterList"/>
              <el-input v-if="active == 1" v-model="inspectionItem" placeholder="请输入" size="mini"
                @input="searchFilterList" />
            </div>
          </template>
        </el-table-column>
@@ -70,54 +48,47 @@
          <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"
                placeholder="请输入"
                size="mini"
                @input="searchFilterList"/>
              <el-input v-if="active == 1" v-model="inspectionItemSubclass" placeholder="请输入" size="mini"
                @input="searchFilterList" />
            </div>
          </template>
        </el-table-column>
        <el-table-column label="要求描述" min-width="220px" prop="tell">
          <template slot-scope="scope">
            <el-input v-if="active==1&&(isAskOnlyRead || isSpecial)" v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
                      size="small" type="textarea"></el-input>
            <el-input v-if="active == 1 && (isAskOnlyRead || isSpecial)" v-model="scope.row.tell"
              :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求描述" size="small"
              type="textarea"></el-input>
            <span v-else>
                <template >{{ scope.row.tell }}</template>
              </span>
              <template>{{ scope.row.tell }}</template>
            </span>
          </template>
        </el-table-column>
        <el-table-column label="要求值" min-width="220px" prop="ask">
          <template slot-scope="scope">
            <el-input v-if="active==1&&(isAskOnlyRead || isSpecial)" v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
                      size="small" type="textarea"></el-input>
            <el-input v-if="active == 1 && (isAskOnlyRead || isSpecial)" v-model="scope.row.ask"
              :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求值" size="small"
              type="textarea"></el-input>
            <span v-else>{{ scope.row.ask }}</span>
          </template>
        </el-table-column>
        <el-table-column label="条件" min-width="140" prop="radius" show-overflow-tooltip>
        <el-table-column label="试验条件" min-width="140" prop="radius" show-overflow-tooltip>
          <template slot-scope="scope">
            <el-input v-if="active==1&&(isAskOnlyRead || isSpecial)&&!scope.row.inspectionItem.includes('高温压力试验')" v-model="scope.row.radius" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
                      size="small" type="textarea">
            <el-input v-if="active == 1 && (isAskOnlyRead || isSpecial) && !scope.row.inspectionItem.includes('高温压力试验')"
              v-model="scope.row.radius" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求描述"
              size="small" type="textarea">
            </el-input>
            <el-select v-if="scope.row.inspectionItem.includes('高温压力试验') && active == 1" v-model="scope.row.radius" clearable
                       placeholder="条件"
                       size="small">
              <el-option v-for="(a,i) in JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option>
            <el-select v-if="scope.row.inspectionItem.includes('高温压力试验') && active == 1" v-model="scope.row.radius"
              clearable placeholder="条件" size="small">
              <el-option v-for="(a, i) in JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option>
            </el-select>
            <span v-if="active != 1">{{scope.row.radius}}</span>
            <span v-if="active != 1">{{ scope.row.radius }}</span>
          </template>
        </el-table-column>
        <el-table-column label="试验方法" min-width="120" prop="methodS" 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"
                placeholder="请输入"
                size="mini"
                @input="searchFilterList"/>
              <el-input v-if="active == 1" v-model="methodS" placeholder="请输入" size="mini" @input="searchFilterList" />
            </div>
          </template>
        </el-table-column>
@@ -125,15 +96,14 @@
        <el-table-column label="单价" prop="price" show-overflow-tooltip width="100"></el-table-column>
        <el-table-column label="区间" min-width="120" prop="section" show-overflow-tooltip></el-table-column>
        <el-table-column label="子实验室" min-width="130" prop="sonLaboratory" show-overflow-tooltip></el-table-column>
        <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130" prop="sonLaboratory"
          show-overflow-tooltip></el-table-column>
        <el-table-column v-if="isSpecial"
          fixed="right"
          label="操作"
          width="100">
        <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130"
          prop="sonLaboratory" show-overflow-tooltip></el-table-column>
        <el-table-column v-if="isSpecial" fixed="right" label="操作" width="100">
          <template slot-scope="scope">
            <el-button type="text" size="small" @click="addProductList(productList,scope.row,scope.$index)" v-if="!scope.row.repetitionTag">插入行</el-button>
            <el-button type="text" size="small" v-if="!!scope.row.repetitionTag&&scope.row.delete" @click="deleteProductList(scope.$index,productList)">删除</el-button>
            <el-button type="text" size="small" @click="addProductList(productList, scope.row, scope.$index)"
              v-if="!scope.row.repetitionTag">插入行</el-button>
            <el-button type="text" size="small" v-if="!!scope.row.repetitionTag && scope.row.delete"
              @click="deleteProductList(scope.$index, productList)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -142,12 +112,13 @@
</template>
<script>
import { Tree } from 'element-ui'
import { selectsStandardMethodByFLSSM, selectStandardProductList } from "@/api/business/rawMaterialOrder";
export default {
  props: {
    active: {
      type: Number,
      default: () => 0
      type: String,
      default: () => '0'
    },
    sampleSelectionList: {
      type: Array,
@@ -159,44 +130,37 @@
    },
  },
  data(vm) {
      return {
        standardList:[],
        vaule0:'',
        currentTab:'绝缘',
        upIndex:0,
        productList: [],
        productIds: [],
        sample: [],
        tree: '',
        standards: [],
        insulating: {
          standardMethodListId: null,
          insProduct: [],
          num: []
        },
        // sheath: {
        //   standardMethodListId: null,
        //   insProduct: []
        // },
        isAskOnlyRead: false,
        inspectionItem:null,
        inspectionItemSubclass:null,
        methodS:null,
        filters: [],
        quantityList: [],
      }
    return {
      standardList: [],
      vaule0: '',
      currentTab: '绝缘',
      upIndex: 0,
      productList: [],
      productIds: [],
      sample: [],
      tree: '',
      standards: [],
      insulating: {
        standardMethodListIds: [],
        insProduct: [],
        num: []
      },
      isAskOnlyRead: false,
      inspectionItem: null,
      inspectionItemSubclass: null,
      methodS: null,
      filters: [],
      quantityList: [],
    }
  },
  mounted() {
    this.$parent.sampleIds.forEach(a => {
      for (var i = 0; i < this.$parent.sampleList.length; i++) {
        if (this.$parent.sampleList[i].id == a) {
          this.sample.push(this.$parent.sampleList[i])
          if(this.$parent.sampleList[i].insulating !== undefined && this.$parent.sampleList[i].insulating !== null){
          if (this.$parent.sampleList[i].insulating !== undefined && this.$parent.sampleList[i].insulating !== null) {
            this.insulating = this.$parent.sampleList[i].insulating
          }
          // if(this.$parent.sampleList[i].sheath !== undefined && this.$parent.sampleList[i].sheath !== null){
          //   this.sheath = this.$parent.sampleList[i].sheath
          // }
          break
        }
      }
@@ -205,7 +169,7 @@
  },
  methods: {
    // 检验项列表筛选
    searchFilterList () {
    searchFilterList() {
      const vtw = {
        inspectionItem: this.inspectionItem, // 检验项
        inspectionItemSubclass: this.inspectionItemSubclass, // 检验项子项
@@ -215,7 +179,7 @@
        return item
      })
      if (isHaveValue) {
        for(let i in vtw) {
        for (let i in vtw) {
          if (vtw[i]) {
            this.productList = this.productList0.filter((item) => {
              return item[i] && item[i].includes(vtw[i])
@@ -226,28 +190,6 @@
        // 没有查询条件时渲染所有数据
        this.productList = this.productList0
      }
    },
    // 要求值变化时
    requestChange(e, row,type) {
      this.sampleList.map(item => {
        if (this.sampleIds.indexOf(item.id) > -1) {
          item.insProduct.map(i => {
            if(i.id == row.id){
              if(row.repetitionTag){
                if(row.repetitionTag==i.repetitionTag){
                  i[type] = e
                }
              }else{
                if(!i.repetitionTag){
                  i[type] = e
                }
              }
            }
            return i
          })
        }
        return item
      })
    },
    outConfig() {
      this.$parent.cableConfigShow = false
@@ -277,10 +219,7 @@
        this.$refs.productTable.doLayout()
      })
    },
    tableRowClassName({
      row,
      rowIndex
    }) {
    tableRowClassName({ row, rowIndex }) {
      if (row.state === 0) {
        return '';
      }
@@ -295,7 +234,7 @@
    },
    selectsStandardMethodByFLSSM2() {
      this.standards = []
      this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
      selectsStandardMethodByFLSSM({
        tree: this.$parent.selectTree
      }).then(res => {
        try {
@@ -303,7 +242,7 @@
            let arr = this.selectTree.split('-')
            let arr0 = arr.slice(0, arr.length - 1)
            let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1)
            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
            selectsStandardMethodByFLSSM({
              tree: selectTree
            }).then(ress => {
              this.standards = ress.data.standardMethodList
@@ -311,9 +250,9 @@
          } else {
            this.standards = res.data.standardMethodList
          }
        } catch (e) {}
        } catch (e) { }
      })
      this.insulating.standardMethodListId = this.sampleSelectionList[0].standardMethodListId
      this.insulating.standardMethodListIds = this.sampleSelectionList[0].standardMethodListId
      // 查询检测标准下拉框选项
      if (this.insulating.insProduct.length > 0) {
        this.productList = this.insulating.insProduct
@@ -327,27 +266,27 @@
      }
    },
    methodChange(val) {
      if (val === null || val === '') return
      if (!val || val.length < 1) return
      let standard = this.standards.find(a => a.id === val)
      if(standard!=null && standard.code==='技术要求'){
      if (standard != null && standard.code === '技术要求') {
        this.isAskOnlyRead = true
      }else{
      } else {
        this.isAskOnlyRead = false
      }
      let selectTreeList = this.$parent.selectTree.split(" - ")
      this.$parent.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.$parent.addObj.model)
      this.$parent.addObj.model && (selectTreeList[selectTreeList.length - 1] = this.$parent.addObj.model)
      const model = this.sampleSelectionList[0].model
      const modelNum = this.sampleSelectionList[0].modelNum
      const cores = this.sampleSelectionList[0].cores
      const conductorMaterial = this.sampleSelectionList[0].conductorMaterial
      const conductorType = this.sampleSelectionList[0].conductorType
      this.$axios.post(this.$api.standardTree.selectStandardProductList, {
        model: this.$parent.addObj.model?this.$parent.addObj.model:model,
      selectStandardProductList({
        model: this.$parent.addObj.model ? this.$parent.addObj.model : model,
        modelNum: modelNum,
        cores: cores,
        conductorMaterial: conductorMaterial,
        conductorType: conductorType,
        standardMethodListId: val,
        standardMethodListIds: val,
        factory: selectTreeList.join(" - "),
        isCableTag: '1',
      }, {
@@ -358,30 +297,23 @@
        res.data.forEach(a => {
          a.state = 0
        })
        // this.insulating.insProduct = res.data
        // this.sheath.insProduct = res.data
        this.productList = res.data
      })
    },
    toggleSelection(row) {
      this.$refs.productTable.toggleRowSelection(row, true);
    },
    save(){
      // if(this.insulating.insProduct.length === 0 && this.sheath.insProduct.length === 0){
      //   this.$message.error('缺少配置无法保存')
      //   return
      // }
      this.insulating.insProduct = this.productList
      if(this.insulating.insProduct.length !== 0){
        if(this.insulating.num.length === 0){
    save() {
      this.insulating.insProduct = this.HaveJson(this.productList)
      if (this.insulating.insProduct.length !== 0) {
        if (this.insulating.num.length === 0) {
          this.$message.error('缺少芯数无法保存')
          return
        }
      }
      // this.sample.forEach(a=>{
      //   a.insulating = this.insulating
      //   a.sheath = this.sheath
      // })
      this.insulating.insProduct.forEach(a => {
        delete a.id
      })
      if (this.currentTab === '绝缘') {
        this.sample.forEach(a => {
          a.insulating = this.insulating
@@ -390,8 +322,8 @@
      this.$emit('goBackAdd')
      this.$message.success('已保存')
    },
    changeTab(val){
      if(val==='绝缘'){
    changeTab(val) {
      if (val === '绝缘') {
        this.productList = this.insulating.insProduct
      }
      setTimeout(() => {
@@ -404,92 +336,42 @@
      const property = column['property'];
      return row[property] === value;
    },
    addProductList(productList,row,index){
      let list = productList.filter(m=>{
        if(m.id==row.id){
    addProductList(productList, row, index) {
      let list = productList.filter(m => {
        if (m.id == row.id) {
          m.delete = false
        }
        return m.id==row.id
        return m.id == row.id
      })
      let num = list.length
      let obj = this.HaveJson(row)
      obj.repetitionTag = num
      obj.delete = true
      obj.state = 0
      productList.splice(index+num,0,obj)
      productList.splice(index + num, 0, obj)
    },
    deleteProductList(index,list){
      if(list[index-1]&&list[index-1].repetitionTag){
        list[index-1].delete=true
    deleteProductList(index, list) {
      if (list[index - 1] && list[index - 1].repetitionTag) {
        list[index - 1].delete = true
      }
      list.splice(index,1)
      list.splice(index, 1)
    },
  }
}
</script>
<style scoped>
.ins_order_config {
    width: 100%;
    height: 100%;
    overflow-y: auto;
    overflow-x: hidden;
  }
.search_form {
  display: flex;
  justify-content: space-between;
}
  .ins_order_config::-webkit-scrollbar {
    width: 0;
  }
.search_input {
  display: flex;
  justify-content: space-between;
}
  .title {
    height: 60px;
    line-height: 60px;
  }
  .search {
      background-color: #fff;
      height: 80px;
      display: flex;
      align-items: center;
   }
   .search_thing {
      width: 300px;
      display: flex;
      align-items: center;
   }
   .search_label {
      width: 100px;
      font-size: 14px;
      text-align: right;
   }
   .search_input {
      width: calc(100% - 70px);
   }
  .table {
      margin-top: 10px;
      background-color: #fff;
      width: calc(100% - 40px);
      height: calc(100% - 60px - 80px - 26px - 24px);
      padding: 20px;
   }
</style>
<style>
  .ins_order_config .has-gutter .el-table__cell .cell {
    line-height: 30px;
    background-color: #fafafa;
  }
  .ins_order_config .has-gutter .el-table__cell {
    background-color: #fafafa !important;
  }
  .ins_order_config .el-table__row .cell {
    font-size: 12px;
  }
  .ins_order_config .el-table .warning-row .cell {
    color: #3A7BFA;
  }
>>>.warning-row {
  color: #1890FF;
}
</style>