李林
2024-03-18 2281a3da368d9366e7d97e85719fe0f4a0492f9b
src/components/do/b1-ins-order/add.vue
@@ -2,6 +2,11 @@
   .ins_order_add {
      width: 100%;
      height: 100%;
      overflow-y: auto;
   }
   .ins_order_add::-webkit-scrollbar {
      width: 0;
   }
   .title {
@@ -12,7 +17,7 @@
   .search {
      width: calc(100% - 40px);
      background-color: #fff;
      padding: 10px 40px 10px 0;
      padding: 5px 40px 5px 0;
   }
   .search_thing {
@@ -35,6 +40,7 @@
      color: orange;
      font-size: 18px;
   }
</style>
<style>
   .ins_order_add .el-input-group__append,
@@ -64,6 +70,10 @@
   .ins_order_add .el-table__row .cell {
      font-size: 12px;
   }
   .ins_order_add .el-table .warning-row .cell{
      color: #bababa;
   }
</style>
<template>
@@ -78,7 +88,7 @@
               <el-button size="medium" @click="">
                  <span style="color: #3A7BFA;">保存模板</span>
               </el-button>
               <el-button size="medium" type="primary" @click="save">提交</el-button>
               <el-button size="medium" type="primary" @click="save" :loading="saveLoad">提交</el-button>
               <el-button size="medium" @click="$parent.playOrder(0)">
                  <span style="color: #3A7BFA;">返回</span>
               </el-button>
@@ -91,12 +101,6 @@
               <div class="search_label">委托编号:</div>
               <div class="search_input">
                  <el-input v-model="addObj.entrustCode" size="small" placeholder="系统生成" disabled></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label"><span class="required-span">* </span>样品编号:</div>
               <div class="search_input">
                  <el-input v-model="addObj.sampleCode" size="small" placeholder="请输入" clearable></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
@@ -115,37 +119,10 @@
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label"><span class="required-span">* </span>样品名称:</div>
               <div class="search_input">
                  <el-input readonly size="small" v-model="addObj.sample">
                     <template slot="append"><el-button slot="append" icon="el-icon-search"
                           @click="selectStandardTree = true"></el-button></template>
                  </el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label"><span class="required-span">* </span>实验室名称:</div>
               <div class="search_input">
                  <el-input size="small" clearable disabled v-model="addObj.laboratory"></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label"><span class="required-span">* </span>样品类型:</div>
               <div class="search_input">
                  <el-input size="small" clearable disabled v-model="addObj.sampleType"></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label"><span class="required-span">* </span>规格型号:</div>
               <div class="search_input">
                  <el-input size="small" placeholder="请输入" clearable v-model="addObj.model"></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label">约定时间:</div>
               <div class="search_label">需求时间:</div>
               <div class="search_input">
                  <el-date-picker type="date" placeholder="选择日期" size="small" value-format="yyyy-MM-dd" style="width: 100%;"
                     v-model="addObj.appointedTime"></el-date-picker>
                     v-model="addObj.appointed"></el-date-picker>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
@@ -157,32 +134,18 @@
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label"><span class="required-span">* </span>样品数量:</div>
               <div class="search_input">
                  <el-input-number size="small" v-model="addObj.sampleNum" :controls="false" :min="0" :max="1000"
                     :precision="0" style="width: 50%;" @change="onSample"></el-input-number>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label">OTC订单号:</div>
               <div class="search_input">
                  <el-input size="small" placeholder="请输入" clearable v-model="addObj.otcCode"></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label">样品留样:</div>
               <div class="search_input">
                  <el-radio-group v-model="addObj.isLeave" @change="addObj.leaveNum = null">
                     <el-radio :label="1">留样</el-radio>
                     <el-radio :label="0">不留样</el-radio>
               <div class="search_label" style="width: 175px;">是否涉及配套样品:</div>
               <div class="search_input" style="width: calc(100% - 175px);">
                  <el-radio-group v-model="addObj.mating" @change="$refs.sampleTable.doLayout()">
                     <el-radio :label="1">是</el-radio>
                     <el-radio :label="0">否</el-radio>
                  </el-radio-group>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label">留样数量:</div>
               <div class="search_input">
                  <el-input-number size="small" v-model="addObj.leaveNum" :controls="false" :min="0"
                     :disabled="addObj.isLeave == 0" style="width: 50%;"></el-input-number>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6" style="align-items: flex-start;margin: 8px 0;">
@@ -192,24 +155,39 @@
                     v-model="addObj.remark"></el-input>
               </div>
            </el-col>
            <el-col class="search_thing" :span="6">
               <div class="search_label" style="width: 160px;">是否涉及配套样品:</div>
               <div class="search_input" style="width: calc(100% - 160px);">
                  <el-radio-group v-model="addObj.mating" @change="$refs.sampleTable.doLayout()">
                     <el-radio :label="1">是</el-radio>
                     <el-radio :label="0">否</el-radio>
                  </el-radio-group>
               </div>
            </el-col>
         </el-row>
      </div>
      <div style="display: flex;">
         <el-table class="el-table" ref="sampleTable" :data="sampleList" height="300px" tooltip-effect="dark" border
            @selection-change="selectSample">
      <div>
         <div style="text-align: right;line-height: 45px;">
            <el-button type="primary" size="small" @click="addSampleDia = true">添加样品</el-button>
            <el-button size="small" @click="delSample">
               <span style="color: #3A7BFA;">删除样品</span>
            </el-button>
         </div>
         <el-table class="el-table" ref="sampleTable" :data="sampleList" height="250px" tooltip-effect="dark" border
            @selection-change="selectSample" highlight-current-row @row-click="rowClick">
            <el-table-column type="selection" width="60"></el-table-column>
            <el-table-column type="index" label="序号" width="65" align="center"></el-table-column>
            <el-table-column prop="sample" label="样品名称" align="center" show-overflow-tooltip
               min-width="100"></el-table-column>
            <el-table-column prop="sampleCode" label="样品编号" width="140" align="center">
               <template slot-scope="scope">
                  <el-input size="small" v-model="scope.row.sampleCode" clearable></el-input>
               </template>
            </el-table-column>
            <el-table-column prop="factory" label="工厂" align="center" show-overflow-tooltip min-width="100">
            </el-table-column>
            <el-table-column prop="laboratory" label="实验室" align="center" show-overflow-tooltip min-width="100">
            </el-table-column>
            <el-table-column prop="sampleType" label="样品类型" align="center" show-overflow-tooltip min-width="100">
            </el-table-column>
            <el-table-column prop="model" label="样品型号" align="center" show-overflow-tooltip min-width="100">
            </el-table-column>
            <el-table-column prop="isLeave" label="是否留样" align="center" show-overflow-tooltip min-width="100">
               <template slot-scope="scope">
                  <span>{{scope.row.isLeave==1?'是':'否'}}</span>
               </template>
            </el-table-column>
            <el-table-column prop="joinName" label="配套样品名称" width="140" align="center" v-if="addObj.mating==1">
               <template slot-scope="scope">
                  <el-input size="small" type="textarea" :autosize="{ minRows: 1, maxRows: 1}"
@@ -222,9 +200,38 @@
                     v-model="scope.row.joinModel"></el-input>
               </template>
            </el-table-column>
            <el-table-column prop="joinNum" label="配套样品数量" width="140" align="center" v-if="addObj.mating==1">
               <template slot-scope="scope">
                  <el-input-number size="small" v-model="scope.row.joinNum" :min="1" :max="100" :precision="0"
                     :controls="false" style="width: 80%;"></el-input-number>
               </template>
            </el-table-column>
            <el-table-column label="操作" width="65" align="center">
               <template slot-scope="scope">
                  <el-button type="text" size="small" @click="">删除</el-button>
                  {{scope.index}}
                  <el-button type="text" size="small" @click="sampleList.splice(scope.$index, 1)">删除</el-button>
               </template>
            </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-class-name="tableRowClassName">
            <el-table-column type="selection" width="65"></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="子实验室" width="130" show-overflow-tooltip></el-table-column>
            <el-table-column prop="method" 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="manDay" label="预计时间(天)" width="120" show-overflow-tooltip></el-table-column>
            <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
            <!-- <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> -->
            <el-table-column prop="section" label="区间" 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}"></el-input>
               </template>
            </el-table-column>
         </el-table>
@@ -266,6 +273,71 @@
            <el-button type="primary" @click="activeStandardTree">确 定</el-button>
         </span>
      </el-dialog>
      <el-dialog title="添加样品" :visible.sync="addSampleDia" width="400px">
         <div class="body" style="max-height: 60vh;">
            <el-row>
               <el-col class="search_thing" :span="22">
                  <div class="search_label"><span class="required-span">* </span>样品名称:</div>
                  <div class="search_input">
                     <el-input readonly size="small" v-model="sample.sample">
                        <template slot="append"><el-button slot="append" icon="el-icon-search"
                              @click="selectStandardTree = true"></el-button></template>
                     </el-input>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="22">
                  <div class="search_label"><span class="required-span">* </span>工厂名称:</div>
                  <div class="search_input">
                     <el-input size="small" clearable disabled v-model="sample.factory"></el-input>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="22">
                  <div class="search_label"><span class="required-span">* </span>实验室名称:</div>
                  <div class="search_input">
                     <el-input size="small" clearable disabled v-model="sample.laboratory"></el-input>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="22">
                  <div class="search_label"><span class="required-span">* </span>样品类型:</div>
                  <div class="search_input">
                     <el-input size="small" clearable disabled v-model="sample.sampleType"></el-input>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="22">
                  <div class="search_label"><span class="required-span">* </span>规格型号:</div>
                  <div class="search_input">
                     <el-input size="small" placeholder="请输入" clearable v-model="sample.model"></el-input>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="22">
                  <div class="search_label">样品编号:</div>
                  <div class="search_input">
                     <el-input v-model="sample.sampleCode" size="small" placeholder="请输入" clearable></el-input>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="24">
                  <div class="search_label">样品数量:</div>
                  <div class="search_input">
                     <el-input-number size="small" v-model="sample.sampleNum" :min="1" :max="100" :precision="0"
                        style="width: 50%;"></el-input-number>
                  </div>
               </el-col>
               <el-col class="search_thing" :span="22">
                  <div class="search_label">样品留样:</div>
                  <div class="search_input">
                     <el-radio-group v-model="sample.isLeave">
                        <el-radio :label="1">留样</el-radio>
                        <el-radio :label="0">不留样</el-radio>
                     </el-radio-group>
                  </div>
               </el-col>
            </el-row>
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button @click="addSampleDia = false">取 消</el-button>
            <el-button type="primary" @click="onSample()" :loading="getProductLoad">确 定</el-button>
         </span>
      </el-dialog>
   </div>
</template>
@@ -281,24 +353,25 @@
            templates: [],
            addObj: {
               entrustCode: null,
               sampleCode: null,
               custom: null,
               company: null,
               userId: null,
               type: '0',
               code: null,
               laboratory: null,
               appointedTime: null,
               factory: null,
               sample: null,
               sampleType: null,
               sampleNum: null,
               model: null,
               isLeave: 0,
               leaveNum: null,
               appointed: null,
               remark: null,
               otcCode: null,
               mating: 0
            },
            sample: {
               sampleCode: null,
               laboratory: null,
               factory: null,
               sampleType: null,
               sample: null,
               model: null,
               sampleNum: 1,
               isLeave: 0,
            },
            type: [],
            selectUserDia: false,
@@ -335,7 +408,13 @@
            expandedKeys: [],
            sampleList: [],
            sampleIds: [],
            methodList: []
            methodList: [],
            addSampleDia: false,
            count: 1,
            productList: [],
            productIds: [],
            getProductLoad: false,
            saveLoad: false
         }
      },
      mounted() {
@@ -367,7 +446,20 @@
            this.selectUserDia = false
         },
         save() {
            console.log(this.addObj);
            this.saveLoad = true
            this.$axios.post(this.$api.insOrder.addInsOrder,{
               insOrder: this.addObj,
               list: this.sampleList
            },{
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res=>{
               this.saveLoad = false
               if(res.code==201)return
               this.$message.success('已提交')
               this.$parent.playOrder(0)
            })
         },
         getUserNow() {
            this.$axios.get(this.$api.user.getUserNow).then(res => {
@@ -425,31 +517,108 @@
               this.$message.error('未选择样品')
               return
            }
            this.addObj.factory = trees[0]
            this.addObj.laboratory = trees[1]
            this.addObj.sampleType = trees[2]
            this.addObj.sample = trees[3]
            this.addObj.model = trees[4]
            this.sample.factory = trees[0]
            this.sample.laboratory = trees[1]
            this.sample.sampleType = trees[2]
            this.sample.sample = trees[3]
            this.sample.model = trees[4]
            this.selectStandardTree = false
            this.onSample()
         },
         selectSample(val) {
            this.sampleIds = []
            val.forEach(a => {
               this.sampleIds = a.id
               this.sampleIds.push(a.id)
            })
         },
         onSample() {
            this.sampleList = []
            if (this.addObj.sampleNum == 0 || this.addObj.sample == null || this.addObj.sample == '') return
            for (var i = 0; i < this.addObj.sampleNum; i++) {
               this.sampleList.push({
                  sample: this.addObj.sample,
                  joinName: null,
                  joinModel: null
               })
            if (this.sample.sample == null || this.sample.sample == '') {
               this.$message.error('请选择样品')
               return
            }
            if (this.sample.model == null || this.sample.model == '') {
               this.$message.error('请输入样品型号')
               return
            }
            this.getProductLoad = true
            this.$axios.post(this.$api.standardTree.selectStandardProductList, {
               factory: this.sample.factory,
               laboratory: this.sample.laboratory,
               sampleType: this.sample.sampleType,
               sample: this.sample.sample,
               model: this.sample.model
            }, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
               res.data.forEach(a => {
                  a.state = 1
               })
               for (var i = 0; i < this.sample.sampleNum; i++) {
                  this.sample.joinName = null
                  this.sample.joinModel = null
                  this.sample.joinNum = 1
                  this.sample.insProduct = res.data
                  this.sample.id = this.count
                  this.sampleList.push(this.HaveJson(this.sample))
                  this.count++
               }
               this.$refs.sampleTable.doLayout()
               this.getProductLoad = false
               this.addSampleDia = false
               this.sample = {
                  sampleCode: null,
                  laboratory: null,
                  factory: null,
                  sampleType: null,
                  sample: null,
                  model: null,
                  sampleNum: 1,
                  isLeave: 0,
               }
            })
         },
         delSample() {
            this.sampleIds.forEach(a => {
               for (var i = 0; i < this.sampleList.length; i++) {
                  if (this.sampleList[i].id == a) {
                     this.sampleList.splice(i, 1)
                     i -= 1
                     break
                  }
               }
            })
            this.$refs.sampleTable.doLayout()
         },
         selectProduct(val) {
            this.productIds = []
            val.forEach(a => {
               this.productIds.push(a.id)
            })
         },
         rowClick(row, column, event) {
            this.productList = row.insProduct
            setTimeout(() => {
               this.productList.forEach(a => {
                  if (a.state == 1) this.toggleSelection(a)
               })
            }, 300)
         },
         toggleSelection(row) {
            this.$refs.productTable.toggleRowSelection(row, true);
         },
         upProductSelect(selection, row) {
            row.state = row.state == 1 ? 0 : 1
         },
         tableRowClassName({
            row,
            rowIndex
         }) {
            if (row.state === 0) {
               return 'warning-row';
            }
            return '';
         }
      }
   }
</script>
</script>