zouyu
2026-05-07 b0d4df5f39525ae7fe252e8ee65d85fd71dca721
src/views/business/productOrder/components/addOrder.vue
@@ -14,9 +14,13 @@
          <el-select v-show="active==1" v-model="template" placeholder="下单模板" size="small"
                     @change="selectInsOrderTemplateById">
            <el-option v-for="(a, ai) in templates" :key="ai" :label="a.name" :value="a.id">
              <span style="float: left">{{ a.name }}</span>
              <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px"
                 @click.stop="handleDelete(a)"></i>
              <div style="display: flex; align-items: center; justify-content: space-between;">
                <span>{{ a.name }}</span>
                <i class="el-icon-delete"
                   style="color: #66b1ff; font-size: 16px; cursor: pointer;"
                   @click.stop="handleDelete(a)">
                </i>
              </div>
            </el-option>
          </el-select>
          <el-button v-show="active==1" size="small" @click="templateDia=true">
@@ -70,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>
@@ -89,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">
@@ -116,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">
@@ -124,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;">
@@ -146,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">
@@ -154,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>
@@ -172,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
@@ -380,7 +419,7 @@
            <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>
              <el-button style="color:#ff4949" 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>
@@ -390,7 +429,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">
@@ -587,7 +626,7 @@
} from "@/api/business/rawMaterialOrder";
import {
  addInsOrder, addInsOrderTemplate, delInsOrderTemplate,
  getQuarterOnOrder, selectInsOrderTemplateById,
  getQuarterOnOrder, judgeNotSpotCheckOrder, selectInsOrderTemplateById,
  selectOrderManDay,
  updateInsOrder,
  upInsOrder,
@@ -597,7 +636,9 @@
import {selectsStandardMethodByFLSSM} from "@/api/standard/standardLibrary";
import limsTable from "@/components/Table/lims-table.vue";
import {selectCustomPageList} from "@/api/system/customer";
import { bigEval } from "@/utils/bigEval";
import {mapGetters} from "vuex";
import {addQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling";
export default {
  name: 'AddOrder',
@@ -607,7 +648,7 @@
    AuxiliaryWireCore
  },
  computed:{
  ...mapGetters(["nickName"]),
    ...mapGetters(["nickName", 'nameEn', 'userName']),
  },
  dicts: ['check_type1', 'urgency_level', 'form_type', 'sample_status_list'],
  data() {
@@ -621,6 +662,11 @@
      templates: [],
      addObj: {
        entrustCode: null,
        contract:null,
        updateBatchNo: null,
        partDesc: null,
        partNo: null,
        supplierName: null,
        custom: null,
        company: null,
        userId: null,
@@ -656,6 +702,9 @@
        sampleViewEn: '', // 样品名称英文(报告展示字段)
      },
      addObjRules: { // 表单校验规则
        contract: [
          { required: true, message: '请选择IFS域', trigger: 'change' }
        ],
        orderType: [
          { required: true, message: '请选择检验类别', trigger: 'change' }
        ],
@@ -793,10 +842,10 @@
    }
  },
  watch: {
    sampleList() {
      this.addObj.method = null
      this.productList = []
    },
    // sampleList() {
    //   this.addObj.method = null
    //   this.productList = []
    // },
    productList: {
      deep: true,
      handler(val) {
@@ -842,6 +891,11 @@
    this.currentId = this.$route.query.currentId
    this.getUserNowData()
    this.getInfo()
    if(this.tabIndex==4&&this.active==2){
      this.isSpecial = true
    }else{
      this.isSpecial = false
    }
  },
  activated() {
    this.active = this.$route.query.active
@@ -854,7 +908,6 @@
      this.selectStandardTreeList()
      this.getAuthorizedPerson();
      this.selectStandardMethods()
      this.getPrepareUser() // 复制当前账号人为委托人
      if (this.active != 1) {
        // 查看/审核流程
        // 请求接口,回显数据
@@ -878,16 +931,7 @@
          })
        })
      }
      if(this.tabIndex==4&&this.active==2){
        this.isSpecial = true
      }else{
        this.isSpecial = false
      }
    },
    getPrepareUser () {
        // this.addObj.prepareUser = JSON.parse(localStorage.getItem("user")).name;
        // this.addObj.prepareUserEn = JSON.parse(localStorage.getItem("user")).nameEn
        // this.addObj.prepareCode = JSON.parse(localStorage.getItem("user")).account
    },
      // 编辑要求值表格
      editSpecial () {
@@ -924,7 +968,6 @@
              return m.id === a.id&&!m.repetitionTag
            }
          })
          if(obj){
            a.state = obj.state
            a.section = obj.section
@@ -1033,6 +1076,37 @@
          return symbolItem
        }
      },
    /**
     * 获取小数的最大位数
     * @param number  型号参数
     * @param ask     要求值
     * @param calcNum 计算值
     */
    getDecimalPlaces(number, ask, calcNum) {
      console.log("计算小数点-->", number, ask, calcNum);
      let count1 = 0;
      let count2 = 0;
      const reg = /(\d+\.)(\d+)/g;
      let matches = [];
      if (ask) {
        matches = ask.match(reg);
      }
      if (
        matches &&
        matches.length > 0 &&
        matches[0].toString().indexOf(".") > -1
      ) {
        count1 = matches[0].toString().split(".")[1].length;
      }
      if (number.toString().indexOf(".") > -1) {
        count2 = number.toString().split(".")[1].length;
      }
      if (calcNum.toString().indexOf(".") > -1) {
        const pointLength2 = calcNum.toString().split(".")[1].length;
        count2 = count2 > pointLength2 ? count2 : pointLength2;
      }
      return count1 > count2 ? count1 : count2;
    },
      handleAsk(ask,symbolItem, value) {
        try{
          let code = [">", "<", "=", ">", "<", "≥", "≤", "±"];
@@ -1045,7 +1119,13 @@
              let index = code.findIndex(b => m.includes(b))
              if (index > -1) {
                let arr = m.split(code[index]).filter(b => !!b)
                let num = eval(this.replaceAll(arr[0], symbolItem, value))
                let calcNum = this.$Big(
                  bigEval(this.replaceAll(arr[0], symbolItem, value))
                );
                let num = calcNum.toFixed(
                  this.getDecimalPlaces(value, ask, calcNum)
                );
                // let num = eval(this.replaceAll(arr[0], symbolItem, value))
                m = code[index] + '' + num
                arr1.push(m)
              }
@@ -1074,7 +1154,13 @@
            let index = code.findIndex(b => ask.includes(b))
            if (index > -1) {
              let arr = ask.split(code[index]).filter(b => !!b)
              let num = eval(this.replaceAll(arr[0], symbolItem, value))
              let calcNum = this.$Big(
                bigEval(this.replaceAll(arr[0], symbolItem, value))
              );
              let num = calcNum.toFixed(
                this.getDecimalPlaces(value, ask, calcNum)
              );
              // let num = eval(this.replaceAll(arr[0], symbolItem, value))
              return code[index] + '' + num
            }
          }
@@ -1260,36 +1346,62 @@
        }
      },
      saveMethod(sampleList){
        this.saveLoad = true
        if (this.addObj.quarterItemId) {
          this.addObj.quarterItemId = this.addObj.quarterItemId[1]
        }
        if(this.tabIndex==4&&this.active==2){
          if (this.addObj.createTime) {
            delete this.addObj.createTime
          }
          // 退回后提交
          updateInsOrder({insOrder: this.addObj, sampleProduct: sampleList}).then(res => {
            this.saveLoad = false
            this.$message.success('已提交')
            this.bsm3Dia = false;
            this.closeOpenPage()
          }).catch(e=>{
            this.saveLoad = false
          })
        }else{
          // 常规提交
          addInsOrder({insOrder: this.addObj, sampleList: sampleList}).then(res => {
            this.saveLoad = false
            this.$message.success('已提交')
            this.bsm3Dia = false;
            this.closeOpenPage()
          }).catch(e=>{
            this.saveLoad = false
          })
        if (this.addObj.createTime) {
          delete this.addObj.createTime
        }
        if (this.addObj.orderType === '抽检') {
          judgeNotSpotCheckOrder({ insOrder: this.addObj, sampleList: sampleList }).then(res => {
            if (res.data === true) {
              this.saveData(sampleList);
            } else {
              // const message = res.message.replace(/\n/g, '<br>');
              this.$confirm(res.message, '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
                dangerouslyUseHTMLString: true, // 👈 关键点:允许 HTML
                message: res.message // 这里也可以省略,因为第二个参数是 title,第三个是 options
              }).then(() => {
                this.saveData(sampleList);
              }).catch(() => {
                this.$message({
                  type: 'info',
                  message: '已取消'
                });
              });
            }
          });
        } else {
          this.saveData(sampleList)
        }
      },
    saveData(sampleList) {
      this.saveLoad = true
      if(this.tabIndex==4&&this.active==2){
        // 退回后提交
        updateInsOrder({insOrder: this.addObj, sampleProduct: sampleList}).then(res => {
          this.saveLoad = false
          this.$message.success('已提交')
          this.bsm3Dia = false;
          this.closeOpenPage()
        }).catch(e=>{
          this.saveLoad = false
        })
      }else{
        // 常规提交
        addInsOrder({insOrder: {...this.addObj,typeSource:-1}, sampleList: sampleList}).then(res => {
          this.saveLoad = false
          this.$message.success('已提交')
          this.bsm3Dia = false;
          this.closeOpenPage()
        }).catch(e=>{
          this.saveLoad = false
        })
      }
    },
      upInsOrderOfState(state) {
        if (state == 1) {
          this.saveLoad = true
@@ -1348,6 +1460,9 @@
        })
      },
      getUserNowData() {
      this.addObj.prepareUser = this.nickName
      this.addObj.prepareUserEn = this.nameEn
      this.addObj.prepareCode = this.userName
        getUserNow().then(res => {
          let selects = res.data
          if (selects == null) return
@@ -1357,8 +1472,8 @@
          this.addObj.code = selects.code
          this.addObj.phone = selects.phone
          this.addObj.companyId = selects.departId
          this.addObj.production = '中天科技装备电缆有限公司'
          this.addObj.productionEn = 'Zhongtian Technology Industrial Wire&Cable System CO.,LTD'
          this.addObj.production = '中天耐丝有限公司'
          this.addObj.productionEn = 'Zhongtian Naisi Co., Ltd.'
          if(this.active==1){
            this.selectInsOrderTemplate()
          }
@@ -1579,10 +1694,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)
@@ -1912,18 +2027,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)
@@ -1956,11 +2065,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()