licp
2024-07-03 57e76b55709e8ea88a83ab6c3f665fd9ee7fd64c
src/components/do/b1-ins-order/cable-config.vue
@@ -2,52 +2,72 @@
  <div class="ins_order_config">
    <div>
      <el-row class="title">
        <el-col :span="6" style="padding-left: 20px;">电缆配置</el-col>
        <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;">
      <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 class="search_thing" v-if="currentTab=='绝缘'">
        <div class="search_label">芯数:</div>
        <el-input size="small" placeholder="请输入" clearable
                  v-model="vaule0"></el-input>
                  v-model="insulating.num"></el-input>
      </div>
      <el-button size="small" type="primary"@click="openAdd" style="margin-left: 20px;margin-right: 20px;" v-if="currentTab=='绝缘'">
        确 定</el-button>
      <div class="search_thing">
      <div class="search_thing" v-if="currentTab=='绝缘'">
        <div class="search_label">检验标准:</div>
        <el-select v-model="vaule0" placeholder="请选择检验标准" size="small"
        clearable>
          <el-option v-for="item in standardList" :key="item.value" :label="item.label" :value="item.value">
        <el-select v-model="insulating.standardMethodListId" 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>
      <div class="search_thing" style="padding-left: 30px;">
        <el-button size="small" type="primary"@click="openAdd">保 存</el-button>
      <div class="search_thing" v-if="currentTab=='护套'">
        <div class="search_label">检验标准:</div>
        <el-select v-model="sheath.standardMethodListId" 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>
    </div>
    <div class="table">
      <ValueTable ref="ValueTable"
            :url="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours"
            :componentData="componentData" :key="upIndex" />
      <el-table class="el-table" ref="productTable" :data="productList" height="100%" tooltip-effect="dark" border
        @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect"
        :row-class-name="tableRowClassName" @select-all="handleAll">
        <el-table-column type="selection" width="65" :selectable="selectable"></el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
        <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
          show-overflow-tooltip></el-table-column>
        <el-table-column prop="sonLaboratory" label="子实验室" min-width="130" show-overflow-tooltip></el-table-column>
        <el-table-column prop="methodS" label="试验方法" min-width="120" show-overflow-tooltip>
        </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>
        <el-table-column prop="section" label="区间" min-width="120" show-overflow-tooltip></el-table-column>
        <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)"
              v-if="active==1&&isAskOnlyRead"></el-input>
            <span v-else>{{ scope.row.ask }}</span>
          </template>
        </el-table-column>
      </el-table>
    </div>
  </div>
</template>
<script>
import ValueTable from '../../tool/value-table.vue'
import { Tree } from 'element-ui'
export default {
  components: {
    ValueTable
  },
  props: {
    active: {
      type: Number,
@@ -59,42 +79,167 @@
        standardList:[],
        vaule0:'',
        currentTab:'绝缘',
        componentData: {
               entity: {
                  number: null,
                  department: null,
                  laboratory: null,
                  orderBy: {
                     field: 'id',
                     order: 'desc'
                  }
               },
               isIndex: true,
               showSelect: true,
               select: true,
               do: [],
               tagField: {},
               linkEvent: {
               },
               selectField: {
                  laboratory: {
                     select: []
                  },
                  unit: {
                     select: []
                  },
               },
               requiredAdd: [],
               requiredUp: []
           },
        upIndex:0,
        productList: [],
        productIds: [],
        sample: [],
        tree: '',
        standards: [],
        insulating: {
          standardMethodListId: null,
          insProduct: [],
          num: 1
        },
        sheath: {
          standardMethodListId: null,
          insProduct: []
        },
        isAskOnlyRead: false
      }
  },
  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){
            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
        }
      }
    })
    let obj = this.$parent.addObj
    this.tree = obj.factory + ' - ' + obj.laboratory + ' - ' + obj.sampleType + ' - ' + obj.sample
    this.selectsStandardMethodByFLSSM2()
    this.productList = this.insulating.insProduct
    setTimeout(() => {
      this.productList.forEach(a => {
        if (a.state == 1) this.toggleSelection(a)
      })
    }, 200)
  },
  methods: {
    outConfig() {
      this.$parent.cableConfigShow = false
    },
    selectProduct(val) {
      this.productIds = []
      val.forEach(a => {
        this.productIds.push(a.id)
      })
    },
    upProductSelect(selection, row) {
      row.state = row.state == 1 ? 0 : 1
    },
    handleAll(e) {
      if (e.length > 0) {
        this.productList.map(m => {
          m.state = 1
          return m
        })
      } else {
        this.productList.map(m => {
          m.state = 0
          return m
        })
      }
      this.$nextTick(() => {
        this.$refs.productTable.doLayout()
      })
    },
    tableRowClassName({
      row,
      rowIndex
    }) {
      if (row.state === 0) {
        return 'warning-row';
      }
      return '';
    },
    selectable() {
      if (this.active > 1) {
        return false
      } else {
        return true
      }
    },
    selectsStandardMethodByFLSSM2() {
      this.standards = []
      this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
        tree: this.tree
      }).then(res => {
        this.standards = res.data.standardMethodList
      })
    },
    methodChange(val) {
      if (val === null || val === '') return
      let standard = this.standards.find(a => a.id === val)
      if(standard!=null && standard.code==='委托要求'){
        this.isAskOnlyRead = true
      }else{
        this.isAskOnlyRead = false
      }
      this.$axios.post(this.$api.standardTree.selectStandardProductList, {
        model: this.$parent.addObj.model,
        standardMethodListId: val,
        factory: this.tree + ' - '
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
        res.data.forEach(a => {
          a.state = 0
        })
        if(this.currentTab==='绝缘'){
          this.insulating.insProduct = res.data
        }else if(this.currentTab==='护套'){
          this.sheath.insProduct = res.data
        }
        this.productList = res.data
        setTimeout(() => {
          this.productList.forEach(a => {
            if (a.state == 1) this.toggleSelection(a)
          })
        }, 200)
      })
    },
    toggleSelection(row) {
      this.$refs.productTable.toggleRowSelection(row, true);
    },
    save(){
      if(this.insulating.insProduct.length === 0 && this.sheath.insProduct.length === 0){
        this.$message.error('缺少配置无法保存')
        return
      }
      if(this.insulating.insProduct.length !== 0){
        if(this.insulating.num === null || this.insulating.num === '' || this.insulating.num <= 0){
          this.$message.error('缺少芯数无法保存')
          return
        }
      }
      this.sample.forEach(a=>{
        a.insulating = this.insulating
        a.sheath = this.sheath
      })
      this.$message.success('已保存')
    },
    changeTab(val){
      if(val==='绝缘'){
        this.productList = this.insulating.insProduct
      }else if(val==='护套'){
        this.productList = this.sheath.insProduct
      }
      setTimeout(() => {
        this.productList.forEach(a => {
          if (a.state == 1) this.toggleSelection(a)
        })
      }, 200)
    }
  }
}
</script>
@@ -146,3 +291,21 @@
      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: #bababa;
  }
</style>