From 6f2e5c16bdefdf7129809ae303aa5e66b74cd2f7 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 24 九月 2026 09:20:22 +0800
Subject: [PATCH] feat(order): 添加检验委托单关联功能

---
 src/views/business/productOrder/components/addOrder.vue |  160 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 154 insertions(+), 6 deletions(-)

diff --git a/src/views/business/productOrder/components/addOrder.vue b/src/views/business/productOrder/components/addOrder.vue
index 27ee756..8ca6aee 100644
--- a/src/views/business/productOrder/components/addOrder.vue
+++ b/src/views/business/productOrder/components/addOrder.vue
@@ -49,6 +49,15 @@
                 <el-input v-model="addObj.entrustCode" clearable disabled placeholder="绯荤粺鐢熸垚" size="small"></el-input>
               </el-form-item>
             </el-col>
+            <el-col v-if="active == 1" :span="6">
+              <el-form-item label="妫�楠屽鎵樺崟:" prop="inspectionOrderId">
+                <el-input v-model="addObj.inspectionOrderCode" disabled placeholder="璇烽�夋嫨妫�楠屽鎵樺崟" size="small" style="width: 208px">
+                  <template slot="append">
+                    <el-button slot="append" icon="el-icon-search" @click="openInspectionOrderList"></el-button>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
             <el-col :span="6">
               <el-form-item label="妫�楠岀被鍒�:" prop="orderType">
                 <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small" style="width: 100%;">
@@ -61,6 +70,8 @@
                 <el-input v-model="addObj.custom" disabled size="small" clearable></el-input>
               </el-form-item>
             </el-col>
+          </el-row>
+          <el-row>
             <el-col :span="6">
               <el-form-item label="濮旀墭鍗曚綅:" prop="company">
                 <el-input v-model="addObj.company" disabled placeholder="閫夋嫨濮旀墭鍗曚綅" size="small" style="width: 208px">
@@ -71,8 +82,6 @@
                 </el-input>
               </el-form-item>
             </el-col>
-          </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">
@@ -93,14 +102,14 @@
                 </el-input>
               </el-form-item>
             </el-col>
+          </el-row>
+          <el-row>
             <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="phone">
                 <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="閫夋嫨濮旀墭瀹㈡埛" size="small"></el-input>
@@ -431,6 +440,28 @@
         <el-button type="primary" @click="selectUser">纭� 瀹�</el-button>
       </span>
     </el-dialog>
+    <el-dialog :visible.sync="inspectionOrderDialogVisible" title="閫夋嫨妫�楠屽鎵樺崟" width="70%">
+      <div v-if="inspectionOrderDialogVisible" class="body">
+        <el-form :inline="true" :model="inspectionOrderQuery" size="small">
+          <el-form-item label="濮旀墭鍗曞彿">
+            <el-input v-model="inspectionOrderQuery.inspectionOrderCode" clearable placeholder="璇疯緭鍏ュ鎵樺崟鍙�"
+              @keyup.enter.native="queryInspectionOrders"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="queryInspectionOrders">鏌ヨ</el-button>
+            <el-button @click="resetInspectionOrderQuery">閲嶇疆</el-button>
+          </el-form-item>
+        </el-form>
+        <lims-table :tableData="inspectionOrderTableData" :column="inspectionOrderColumns"
+                    :isSelection="true" :handleSelectionChange="selectInspectionOrderRows"
+                    @pagination="inspectionOrderPagination" :height="450" key="inspectionOrderTableData"
+                    :page="inspectionOrderPage" :tableLoading="inspectionOrderLoading"></lims-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="inspectionOrderDialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmInspectionOrder">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
     <el-dialog :visible.sync="selectStandardTree" title="閫夋嫨鏍峰搧" width="500px">
       <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"  style="height: 60vh;overflow-y: auto;user-select: none;">
         <el-row>
@@ -633,6 +664,11 @@
 import { bigEval } from "@/utils/bigEval";
 import {mapGetters} from "vuex";
 import {addQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling";
+import {
+  addInsOrderWithInspectionOrder,
+  getInspectionOrderForPlaceOrder,
+  pageUnboundInspectionOrder
+} from "@/api/cnas/process/demand/demand";
 
 export default {
   name: 'AddOrder',
@@ -663,6 +699,8 @@
       templates: [],
       addObj: {
         entrustCode: null,
+        inspectionOrderId: null,
+        inspectionOrderCode: null,
         contract:null,
         updateBatchNo: null,
         partDesc: null,
@@ -765,6 +803,26 @@
         unit: null
       },
       type: [],
+      inspectionOrderLoading: false,
+      inspectionOrderDialogVisible: false,
+      inspectionOrderTableData: [],
+      inspectionOrderSelection: [],
+      inspectionOrderQuery: {
+        inspectionOrderCode: ''
+      },
+      inspectionOrderPage: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      inspectionOrderColumns: [
+        {label: '濮旀墭鍗曞彿', prop: 'inspectionOrderCode'},
+        {label: '璇曟牱鍚嶇О', prop: 'sampleName'},
+        {label: '濮旀墭鍗曚綅', prop: 'commissionUnit'},
+        {label: '鐢熶骇鍗曚綅', prop: 'production'},
+        {label: '濮旀墭浜�', prop: 'commissionUser'},
+        {label: '濮旀墭鏃堕棿', prop: 'commissionDate'}
+      ],
       selectUserDia: false,
       tableData1: [],
       tableLoading1: false,
@@ -917,6 +975,85 @@
     this.getInfo();
   },
   methods: {
+    openInspectionOrderList() {
+      this.inspectionOrderSelection = []
+      this.inspectionOrderQuery.inspectionOrderCode = ''
+      this.inspectionOrderPage.current = 1
+      this.inspectionOrderDialogVisible = true
+      this.getInspectionOrderList()
+    },
+    getInspectionOrderList() {
+      this.inspectionOrderLoading = true
+      pageUnboundInspectionOrder({
+        ...this.inspectionOrderPage,
+        ...this.inspectionOrderQuery
+      }).then(res => {
+        this.inspectionOrderTableData = res.data.records || []
+        this.inspectionOrderPage.total = res.data.total || 0
+      }).finally(() => {
+        this.inspectionOrderLoading = false
+      })
+    },
+    queryInspectionOrders() {
+      this.inspectionOrderPage.current = 1
+      this.getInspectionOrderList()
+    },
+    resetInspectionOrderQuery() {
+      this.inspectionOrderQuery.inspectionOrderCode = ''
+      this.queryInspectionOrders()
+    },
+    inspectionOrderPagination({ page, limit }) {
+      this.inspectionOrderPage.current = page
+      this.inspectionOrderPage.size = limit
+      this.getInspectionOrderList()
+    },
+    selectInspectionOrderRows(rows) {
+      this.inspectionOrderSelection = rows
+    },
+    confirmInspectionOrder() {
+      if (this.inspectionOrderSelection.length !== 1) {
+        this.$message.error(this.inspectionOrderSelection.length === 0 ? '璇烽�夋嫨涓�鏉℃楠屽鎵樺崟' : '鍙兘閫夋嫨涓�鏉℃楠屽鎵樺崟')
+        return
+      }
+      const inspectionOrder = this.inspectionOrderSelection[0]
+      this.addObj.inspectionOrderId = inspectionOrder.inspectionOrderId
+      this.addObj.inspectionOrderCode = inspectionOrder.inspectionOrderCode
+      this.inspectionOrderDialogVisible = false
+      this.handleInspectionOrderChange(inspectionOrder.inspectionOrderId)
+    },
+    handleInspectionOrderChange(inspectionOrderId) {
+      if (!inspectionOrderId) {
+        this.addObj.inspectionOrderCode = null
+        return
+      }
+      getInspectionOrderForPlaceOrder({ inspectionOrderId }).then(res => {
+        const inspectionOrder = res.data
+        this.addObj.inspectionOrderCode = inspectionOrder.inspectionOrderCode
+        this.addObj.sample = inspectionOrder.sampleName || this.addObj.sample
+        this.addObj.company = inspectionOrder.commissionUnit || this.addObj.company
+        this.addObj.companyId = inspectionOrder.commissionUnitId || this.addObj.companyId
+        this.addObj.production = inspectionOrder.production || this.addObj.production
+        this.addObj.prepareUser = inspectionOrder.commissionUser || this.addObj.prepareUser
+        this.addObj.phone = inspectionOrder.commissionPhone || this.addObj.phone
+        this.addObj.sampleStatus = inspectionOrder.sampleStatus || this.addObj.sampleStatus
+        this.addObj.isLeave = inspectionOrder.isLeave === null || inspectionOrder.isLeave === undefined
+          ? this.addObj.isLeave : inspectionOrder.isLeave
+        this.addObj.processing = inspectionOrder.processing === null || inspectionOrder.processing === undefined
+          ? this.addObj.processing : inspectionOrder.processing
+        this.addObj.appointed = inspectionOrder.appointed || this.addObj.appointed
+        this.addObj.send = inspectionOrder.send === null || inspectionOrder.send === undefined
+          ? this.addObj.send : inspectionOrder.send
+        if (/^\d+$/.test(inspectionOrder.quantity || '')) {
+          this.addObj.sampleNum = Number(inspectionOrder.quantity)
+        }
+        this.sample.sample = inspectionOrder.sampleName || this.sample.sample
+        this.sample.model = inspectionOrder.modelNo || this.sample.model
+        this.$message.success('宸插甫鍏ユ楠屽鎵樺崟淇℃伅')
+      }).catch(() => {
+        this.addObj.inspectionOrderId = null
+        this.addObj.inspectionOrderCode = null
+      })
+    },
     getInfo() {
       this.selectStandardTreeList()
       this.getAuthorizedPerson();
@@ -1413,7 +1550,18 @@
         })
       }else{
         // 甯歌鎻愪氦
-        addInsOrder({insOrder: {...this.addObj,typeSource:-1}, sampleList: sampleList}).then(res => {
+        const { inspectionOrderId, inspectionOrderCode, ...insOrder } = this.addObj
+        const submitRequest = inspectionOrderId
+          ? addInsOrderWithInspectionOrder({
+            inspectionOrderId,
+            insOrder: {...insOrder, typeSource: -1},
+            sampleList: sampleList
+          })
+          : addInsOrder({
+            insOrder: {...insOrder, typeSource: -1},
+            sampleList: sampleList
+          })
+        submitRequest.then(res => {
           this.saveLoad = false
           this.$message.success('宸叉彁浜�')
           this.bsm3Dia = false;
@@ -1494,7 +1642,7 @@
           this.addObj.phone = selects.phone
           this.addObj.companyId = selects.departId
           this.addObj.production = '涓ぉ鑰愪笣鏈夐檺鍏徃'
-          this.addObj.productionEn = 'Zhongtian Naisi Co., Ltd.'
+          this.addObj.productionEn = 'Zhongtian intelligent cable Co.,Ltd.'
           if(this.active==1){
             this.selectInsOrderTemplate()
           }

--
Gitblit v1.9.3