zouyu
2026-04-28 3115fcc80036ec4bfe3a2cd1128c5fdc82a01f42
src/views/business/productOrder/components/addOrder.vue
@@ -74,6 +74,40 @@
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="IFS域:" prop="contract">
                <el-select v-model="addObj.contract" clearable placeholder="请选择" size="small">
                  <el-option label="ZTNS" value="ZTNS"/>
                  <el-option label="KJNS" value="KJNS"/>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="批次号:" prop="updateBatchNo">
                <el-input v-model="addObj.updateBatchNo" clearable placeholder="请输入批次号" size="small">
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="零件号" prop="partNo">
                <el-input v-model="addObj.partNo" clearable placeholder="请输入零件号" size="small">
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="零件描述:" prop="partDesc">
                <el-input v-model="addObj.partDesc" clearable placeholder="请输入零件描述" size="small">
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="供应商名称:" prop="supplierName">
                <el-input v-model="addObj.supplierName" clearable placeholder="请输入供应商名称" size="small">
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="联系方式:" prop="phone">
                <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="选择委托客户" size="small"></el-input>
              </el-form-item>
@@ -93,14 +127,15 @@
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品数量:" prop="sampleNum" style="margin-right: 0">
                <el-input-number v-model="addObj.sampleNum" :disabled="active>1" :max="100" :min="1" :precision="0"
                                 size="small" @change="addStandardTree"></el-input-number>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品状态:" prop="sampleStatus">
                <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
@@ -120,6 +155,8 @@
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="报告发送方式:" prop="send">
                <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4" size="mini">
@@ -128,8 +165,6 @@
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品处理方式:" prop="processing">
                <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini" style="display: flex; flex-direction: column;">
@@ -150,6 +185,8 @@
                          size="small"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="是否留样:" prop="isLeave">
                <el-radio-group v-model="addObj.isLeave" border :disabled="active>1&&tabIndex!=4" size="mini">
@@ -158,8 +195,6 @@
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="委托人:" prop="prepareUser">
                <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
@@ -176,14 +211,14 @@
                          size="small" style="width: 100%" type="textarea"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="备注英文:" prop="remarkEn">
                <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small" type="textarea"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品名称:" prop="sampleView">
                <el-input v-model="addObj.sampleView" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
@@ -233,6 +268,8 @@
            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable size="small"></el-input>
            <el-button v-show="active==1" size="small" style="margin-left: 10px"
                       type="primary" @click="editSpecial">编辑</el-button>
            <el-button v-show="active==1" size="small" type="primary" @click="handleSplitCountNum">拆分</el-button>
            <el-button v-show="active==1" :disabled="sampleList.length<=1" size="small" type="danger" @click="handleDeleteSplitCountNum">删除拆分</el-button>
          </div>
        </div>
        <el-table ref="sampleTable" :data="sampleList" border class="el-table sampleTable" highlight-current-row
@@ -242,18 +279,18 @@
          <el-table-column align="center" label="序号" type="index" width="65"></el-table-column>
          <el-table-column align="center" label="样品名称" min-width="100" prop="sample">
            <template slot-scope="scope">
              <el-input v-model="scope.row.sample" :disabled="active>1" clearable size="small"></el-input>
              <el-input v-model="scope.row.sample" :disabled="active>1 || scope.$index !== 0" clearable size="small"></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="样品编号" min-width="100" prop="sampleCode">
            <template slot-scope="scope">
              <el-input v-model="scope.row.sampleCode" :disabled="active>1" clearable placeholder="不填写则系统自动生成"
              <el-input v-model="scope.row.sampleCode" :disabled="active>1 || scope.$index !== 0" clearable placeholder="不填写则系统自动生成"
                size="small"></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="样品型号" min-width="60" prop="model">
            <template slot-scope="scope">
              <el-select v-model="scope.row.model" :disabled="active>1" allow-create default-first-option filterable
              <el-select v-model="scope.row.model" :disabled="active>1 || scope.$index !== 0" allow-create default-first-option filterable
                placeholder="样品型号" size="small" style="width: 100%;" @change="handleChangeModel">
                <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
@@ -280,7 +317,7 @@
          <el-table-column align="center" label="检验标准" min-width="100" prop="standardMethodListId">
            <template slot-scope="scope">
              <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1"
                :loading="methodLoad" :readonly="active>1" clearable placeholder="检验标准"
                :loading="methodLoad" :readonly="active>1 || scope.$index !== 0" clearable placeholder="检验标准"
                size="small" style="width: 100%;" @change="(value)=>methodChange(value, scope.row)" @clear="productList = []" @focus="methodFocus">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
@@ -381,12 +418,12 @@
          <el-table-column label="区间" min-width="120" prop="section" 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&&active==1" label="操作" width="100">
            <template slot-scope="scope">
              <el-button v-if="!scope.row.repetitionTag" size="small" type="text" @click="addProductList(productList,scope.row,scope.$index)">插入行</el-button>
              <el-button v-if="!!scope.row.repetitionTag&&scope.row.delete" size="small" type="text" @click="deleteProductList(scope.$index,productList)">删除</el-button>
            </template>
          </el-table-column>
<!--            <el-table-column v-if="isSpecial&&active==1" label="操作" width="100">-->
<!--            <template slot-scope="scope">-->
<!--              <el-button v-if="!scope.row.repetitionTag" size="small" type="text" @click="addProductList(productList,scope.row,scope.$index)">插入行</el-button>-->
<!--              <el-button v-if="!!scope.row.repetitionTag&&scope.row.delete" size="small" type="text" @click="deleteProductList(scope.$index,productList)">删除</el-button>-->
<!--            </template>-->
<!--          </el-table-column>-->
        </el-table>
      </div>
    </div>
@@ -394,7 +431,7 @@
      <div v-if="selectUserDia" class="body">
        <lims-table :tableData="tableData1" :column="column1"
                    :isSelection="true" :handleSelectionChange="selectMethod"
                    @pagination="pagination1" height="400px" key="tableData1"
                    @pagination="pagination1" :height="400" key="tableData1"
                    :page="page1" :tableLoading="tableLoading1"></lims-table>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -627,6 +664,11 @@
      templates: [],
      addObj: {
        entrustCode: null,
        contract:null,
        updateBatchNo: null,
        partDesc: null,
        partNo: null,
        supplierName: null,
        custom: null,
        company: null,
        userId: null,
@@ -662,6 +704,9 @@
        sampleViewEn: '', // 样品名称英文(报告展示字段)
      },
      addObjRules: { // 表单校验规则
        contract: [
          { required: true, message: '请选择IFS域', trigger: 'change' }
        ],
        orderType: [
          { required: true, message: '请选择检验类别', trigger: 'change' }
        ],
@@ -861,6 +906,37 @@
    this.getInfo();
  },
  methods: {
    // 拆分
    handleSplitCountNum () {
      if(!this.sampleList || this.sampleList.length===0){
        this.$message.error("请先选择样品")
        return
      }
      this.sample.joinName = null
      this.sample.joinModel = null
      this.sample.joinNum = 1
      // 两条数据保持一致
      this.sample.sample = this.sampleList[0].sample
      this.sample.model = this.sampleList[0].model
      this.sample.unit = this.sampleList[0].unit
      this.sample.modelNum = this.sampleList[0].modelNum
      this.sample.standardMethodListId = this.sampleList[0].standardMethodListId
      this.sample.insProduct = this.sampleList[0].insProduct
      this.sample.id = this.count
      this.sample.childSampleList = this.sampleList[0].childSampleList
      this.sample.insulating = null
      this.sample.sheath = null
      this.sampleList.push(this.HaveJson(this.sample))
      this.sampleList.forEach(item => {
        item.quantity = 1
      })
      this.count++
    },
    //删除拆分行
    handleDeleteSplitCountNum(){
      this.count--;
      this.sampleList.pop()
    },
    getInfo() {
      this.selectStandardTreeList()
      this.getAuthorizedPerson();
@@ -918,14 +994,14 @@
      },
      changeProductList0(){
        this.productList0.forEach(a=>{
          let obj = this.productList.find(m => {
            if(a.repetitionTag){
              return m.id === a.id&&m.repetitionTag == a.repetitionTag
            }else{
              return m.id === a.id&&!m.repetitionTag
            }
          })
        //   let obj = this.productList.find(m => {
        //     if(a.repetitionTag){
        //       return m.id === a.id&&m.repetitionTag == a.repetitionTag
        //     }else{
        //       return m.id === a.id&&!m.repetitionTag
        //     }
        //   })
          let obj = this.productList.find(m => m.id == a.id)
          if(obj){
            a.state = obj.state
            a.section = obj.section
@@ -1652,10 +1728,10 @@
            this.$set(row, 'sectionCopy', row.section)
          }
        }
        if (row.ask.includes('[')) {
        if (row.ask && row.ask.includes('[')) {
          this.$set(row, 'askCopy', row.ask)
        }
        if (row.tell.includes('[')) {
        if (row.tell && row.tell.includes('[')) {
          this.$set(row, 'tellCopy', row.tell)
        }
        let arr = this.productList.filter(m=>m.state==1&&row.sectionCopy&&row.sectionCopy.includes(m.sectionCopy)&&m.ask&&m.sectionCopy.indexOf('[')==-1)
@@ -1926,24 +2002,35 @@
      },
      // 要求值变化时
      requestChange(e, row,type) {
        //this.currentMethod 当前样品id
        this.sampleList.forEach(item=>{
          if(item.id == this.currentMethod.id){
            item.insProduct.forEach(i=>{
              if(i.id == row.id){
                if(row.repetitionTag){
                  if(row.repetitionTag==i.repetitionTag){
                    i[type] = e
                  }
                }else{
                  if(!i.repetitionTag){
                    i[type] = e
                  }
                }
        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
        })
        //this.currentMethod 当前样品id
        // this.sampleList.forEach(item=>{
        //   if(item.id == this.currentMethod.id){
        //     item.insProduct.forEach(i=>{
        //       if(i.id == row.id){
        //         if(row.repetitionTag){
        //           if(row.repetitionTag==i.repetitionTag){
        //             i[type] = e
        //           }
        //         }else{
        //           if(!i.repetitionTag){
        //             i[type] = e
        //           }
        //         }
        //       }
        //     })
        //   }
        // })
      },
      selectStandardMethods() {
        selectStandardMethodEnum().then(res => {
@@ -1958,7 +2045,12 @@
        }
      },
      selectable0(row,index) {
        if (this.active > 1||row.repetitionTag) {
        // if (this.active > 1||row.repetitionTag) {
        //   return false
        // } else {
        //   return true
        // }
        if (this.active > 1) {
          return false
        } else {
          return true
@@ -1985,18 +2077,12 @@
              this.$set(p, 'sectionCopy', p.section)
            }
          }
          if (p.ask.includes('[')) {
          if (p.ask && p.ask.includes('[')) {
            this.$set(p, 'askCopy', p.ask)
          }
          if (p.tell.includes('[')) {
          if (p.tell && p.tell.includes('[')) {
            this.$set(p, 'tellCopy', p.tell)
          }
          // if (p.manHour.includes('[')) {
          //   this.$set(p, 'manHourCopy', p.manHour)
          // }
          // if (p.price.includes('[')) {
          //   this.$set(p, 'priceCopy', p.price)
          // }
          if (p.bsm === '1' && p.sectionCopy !== '' && p.sectionCopy !== null && p.sectionCopy !== undefined && p.state === 1) {
            if (p.sectionCopy.indexOf('[') > -1) {
              p.bsmRow = this.HaveJson(p)
@@ -2029,11 +2115,6 @@
            return item
          })
        }
        this.productList.forEach(item => {
          if (item.id == row.id) {
            item.state = row.state;
          }
        })
        this.changeProductList0()
        this.currentMethod.insProduct = this.productList0
        this.getProNum()