From 12c8999bab7206bc652fd69ac4f364d84c9e7153 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期五, 12 六月 2026 18:07:46 +0800
Subject: [PATCH] 不合格处理:支持多生产批次提交oa;oa流程查看调整

---
 src/views/business/unpass/components/unPassDialog.vue |  251 +++++++++++++++++++++++++++++++-------------------
 1 files changed, 155 insertions(+), 96 deletions(-)

diff --git a/src/views/business/unpass/components/unPassDialog.vue b/src/views/business/unpass/components/unPassDialog.vue
index abb940f..b6c79ae 100644
--- a/src/views/business/unpass/components/unPassDialog.vue
+++ b/src/views/business/unpass/components/unPassDialog.vue
@@ -1,73 +1,107 @@
 <template>
   <div>
-    <el-dialog title="鏂板涓嶅悎鏍煎鐞�" :visible.sync="isShow" width="740px" :show-close="false" :close-on-click-modal="false"
-      :close-on-press-escape="false">
-      <div class="search">
-        <el-form :inline="true" :model="unPassForm" :rules="unPassFormRules" ref="unPassForm" class="form-inline"
+    <el-dialog :title="type==='view'?'涓嶅悎鏍煎鐞嗚鎯�':'涓嶅悎鏍煎鐞嗘彁浜�'" :visible.sync="isShow" width="40%" :show-close="false" :close-on-click-modal="false"
+      :close-on-press-escape="false" append-to-body>
+      <div>
+        <el-form :model="unPassForm" :rules="unPassFormRules" ref="unPassForm"
           label-width="120px">
-          <div>
-            <el-form-item class="headLine" label="鏍囬:" style="width: 100%" prop="headline">
-              <el-input clearable v-model="unPassForm.headline" size="small" :disabled="type === 'view'" type="textarea"
-                placeholder="璇疯緭鍏�"></el-input>
-            </el-form-item>
-          </div>
-          <el-form-item label="渚涘簲鍟嗗悕绉�:">
-            <el-input clearable v-model="unPassForm.supplierName" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
-          </el-form-item>
-          <el-form-item label="鐗╂枡鍚嶇О:">
-            <el-tooltip class="item" effect="dark" placement="top" :content="unPassForm.materialName">
-              <el-input clearable v-model="unPassForm.materialName" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
-            </el-tooltip>
-          </el-form-item>
-          <el-form-item label="鐢熶骇鎵规:">
-            <el-input clearable v-model="unPassForm.productionBatch" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
-          </el-form-item>
-          <el-form-item label="鍒拌揣鏁伴噺:">
-            <el-input clearable v-model="unPassForm.cargoQuantity" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
-          </el-form-item>
-          <el-form-item label="瑙勬牸鍨嬪彿:">
-            <el-input clearable v-model="unPassForm.specsModels" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
-          </el-form-item>
-          <el-form-item label="鎶ユ鏃堕棿:">
-            <el-date-picker v-model="unPassForm.inspectTime" format="yyyy-MM-dd" value-format="yyyy-MM-dd" size="small"
-              disabled style="width: 175px" type="date" placeholder="閫夋嫨鏃ユ湡">
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="鍙嶉浜�:">
-            <el-input clearable v-model="unPassForm.feedbackUser" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
-          </el-form-item>
-          <el-form-item label="鍙嶉鏃堕棿:" prop="feedbackTime">
-            <el-date-picker v-model="unPassForm.feedbackTime" :disabled="type === 'view'" format="yyyy-MM-dd"
-              value-format="yyyy-MM-dd HH:mm:ss" size="small" style="width: 175px" type="date" placeholder="閫夋嫨鏃ユ湡">
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="鍒嗙被:" prop="classification">
-            <el-select v-model="unPassForm.classification" :disabled="type === 'view'" size="small" placeholder="璇烽�夋嫨">
-              <el-option v-for="item in classificationOptions" :key="item.value" :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="涓嶅悎鏍煎綊灞�:" prop="offGradeAscription">
-            <el-select v-model="unPassForm.offGradeAscription" :disabled="type === 'view'" size="small"
-              placeholder="璇烽�夋嫨">
-              <el-option v-for="item in offGradeAscriptionOptions" :key="item.value" :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="涓嶅悎鏍兼儏鍐垫弿杩�:" prop="unqualifiedDesc">
-            <el-input clearable type="textarea" v-model="unPassForm.unqualifiedDesc" :disabled="type === 'view'"
-              style="width: 484px" size="small" placeholder="璇疯緭鍏�"></el-input>
-          </el-form-item>
+          <el-row >
+            <el-col :span="24">
+              <el-form-item label="鏍囬" prop="headline">
+                <el-input style="width:100%" clearable v-model="unPassForm.headline" size="small" :disabled="type === 'view'" type="textarea"
+                          placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row >
+            <el-col :span="12">
+              <el-form-item label="渚涘簲鍟嗗悕绉�">
+                <el-input style="width:100%" clearable v-model="unPassForm.supplierName" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鐗╂枡鍚嶇О" prop="materialName">
+                <el-input style="width:100%" clearable v-model="unPassForm.materialName" :disabled="type==='view'" size="small" placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row >
+            <el-col :span="12">
+              <el-form-item label="鐢熶骇鎵规">
+                <el-input style="width:100%" clearable v-model="unPassForm.productionBatch" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鍒拌揣鏁伴噺">
+                <el-input style="width:100%" clearable v-model="unPassForm.cargoQuantity" disabled size="small" placeholder="璇疯緭鍏�" >
+                  <template slot="append">{{unPassForm.buyUnitMeas}}</template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row >
+            <el-col :span="12">
+              <el-form-item label="瑙勬牸鍨嬪彿">
+                <el-input style="width:100%" clearable v-model="unPassForm.specsModels" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鎶ユ鏃堕棿">
+                <el-date-picker style="width:100%" v-model="unPassForm.inspectTime" format="yyyy-MM-dd" value-format="yyyy-MM-dd" size="small"
+                                disabled type="date" placeholder="閫夋嫨鏃ユ湡">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row >
+            <el-col :span="12">
+              <el-form-item label="鍙嶉浜�">
+                <el-input style="width:100%" clearable v-model="unPassForm.feedbackUser" disabled size="small" placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鍙嶉鏃堕棿" prop="feedbackTime">
+                <el-date-picker style="width:100%" :picker-options="{ disabledDate: this.disabledDate }" v-model="unPassForm.feedbackTime" :disabled="type === 'view'" format="yyyy-MM-dd"
+                                 value-format="yyyy-MM-dd" size="small" type="date" placeholder="閫夋嫨鏃ユ湡">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row >
+            <el-col :span="12">
+              <el-form-item label="鍒嗙被" prop="classification">
+                <el-select style="width:100%" v-model="unPassForm.classification" :disabled="type === 'view' || !unPassForm.id" size="small" placeholder="璇烽�夋嫨">
+                  <el-option v-for="item in classificationOptions" :key="item.value" :label="item.label"
+                             :value="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="涓嶅悎鏍煎綊灞�" prop="offGradeAscription">
+                <el-select style="width:100%" v-model="unPassForm.offGradeAscription" :disabled="type === 'view'" size="small"
+                           placeholder="璇烽�夋嫨">
+                  <el-option v-for="item in offGradeAscriptionOptions" :key="item.value" :label="item.label"
+                             :value="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row >
+            <el-col :span="24">
+              <el-form-item label="涓嶅悎鏍兼儏鍐垫弿杩�" prop="unqualifiedDesc">
+                <el-input style="width:100%" clearable type="textarea" v-model="unPassForm.unqualifiedDesc" :disabled="type === 'view'"
+                           size="small" placeholder="璇疯緭鍏�"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
         </el-form>
-        <el-upload v-if="type === 'add'" ref="upload" :action="action2" :on-change="beforeUpload" :on-error="onError"
+        <el-upload v-if="type !== 'view'" ref="upload" :action="action2" :on-change="beforeUpload" :on-error="onError"
           :on-remove="handleRemoveFile" :on-success="getUnpassUrl" :headers="uploadHeader" :file-list="unPassFilesList">
-          <el-button size="small" type="primary" style="text-align: left">闄勪欢涓婁紶</el-button>
+          <el-button icon="el-icon-upload" size="small" type="primary" style="text-align: left">闄勪欢涓婁紶</el-button>
         </el-upload>
-        <div v-if="type !== 'add'">
-          <div style="padding-left: 40px;margin-bottom: 4px">闄勪欢锛�</div>
-          <div style="padding-left: 40px;margin-bottom: 4px" v-for="item in unqualifiedHandlerFiles">
+        <div v-if="type!=='add'">
+          <div style="margin:4px 0px;font-weight: bold">闄勪欢锛�</div>
+          <div style="padding-left: 20px;margin-bottom: 4px" v-for="item in unqualifiedHandlerFiles">
             <span>{{ item.fileName }}</span><el-link type="primary" style="margin-left: 20px;vertical-align: top"
               :underline="false" @click="handleDown(item)">涓嬭浇</el-link>
           </div>
@@ -77,13 +111,14 @@
         <el-button @click="$emit('resetForm')">鍙� 娑�</el-button>
         <el-button type="primary" @click="handlunPass" :loading="handlunPassLoading" v-if="type === 'add'">纭�
           瀹�</el-button>
+        <el-button type="primary" @click="reSubmitPushOa" :loading="handlunPassLoading" v-if="type === 'resubmit'">閲嶆柊鎻愪氦</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { getInsOrder, getUnqualifiedHandler, downFile, addUnqualifiedHandler } from '@/api/business/unpass.js'
+import { getInsOrder,getInsOrderList, getUnqualifiedHandler, downFile, addUnqualifiedHandler,reSubmitPushOa } from '@/api/business/unpass.js'
 import {mapGetters} from "vuex";
 export default {
   name: "unPassDialog",
@@ -94,9 +129,11 @@
       type: Boolean,
       default: () => false
     },
-    orderId: {
-      type: String,
-      default: () => null
+    selectOrderIds: {
+      type: Array,
+      default: () => {
+        return []
+      }
     },
   },
   data() {
@@ -126,6 +163,9 @@
         ],
         headline: [
           { required: true, message: '璇峰~鍐欐爣棰�', trigger: 'blur' }
+        ],
+        materialName: [
+          { required: true, message: '璇峰~鍐欑墿鏂欏悕绉�', trigger: 'blur' }
         ]
       },
       unPassFilesList: [], // 涓嶅悎鏍煎鐞嗛檮浠舵暟鎹�
@@ -141,30 +181,35 @@
   },
   // 鏂规硶闆嗗悎
   methods: {
+    disabledDate(time){
+        return time < new Date().getTime() - 86400000
+    },
     getInsOrder(type, row) {
       this.type = type
       if (type === 'add') {
         // 璧嬪�奸粯璁ゆ暟鎹�
-        getInsOrder({
-          orderId: this.orderId
+        getInsOrderList({
+          selectOrderIds: this.selectOrderIds
         }).then(res => {
           if (res.code === 200) {
-            this.unPassForm.headline = `No.0005-涓ぉ瑁呭鐢电嚎-澶栬喘鍝佷笉鍚堟牸鍙嶉璇勫鍙婄籂姝i闃叉祦绋�(姝e紡鐗�)-${this.nickName}-${new Date().toISOString().substring(0, 10)}` // 鏍囬
             this.unPassForm.feedbackTime = new Date().toISOString().substring(0, 10) // 鎶ユ鏃堕棿
+            this.unPassForm.headline = `No.0020-涓ぉ鑰愪笣-渚涘簲鍟嗚川閲忓紓甯稿弽棣堟祦绋�-${res.data.supplierName}-${this.unPassForm.feedbackTime}` // 鏍囬
             this.unPassForm.feedbackUser = this.nickName // 鍙嶉浜�
-            this.unPassForm.insOrderId = res.data.insOrder.id // 璁㈠崟id
-            this.unPassForm.materialName = res.data.insOrder.sampleType // 鐗╂枡鍚嶇О
-            this.unPassForm.specsModels = res.data.insOrder.partDetail // 瑙勬牸鍨嬪彿
-            this.unPassForm.inventoryQuantityId = res.data.insOrderTemplate.inventoryQuantityId // 鍘熸潗鏂檌d
-            this.unPassForm.supplierName = res.data.insOrderTemplate.supplierName // 渚涘簲鍟嗗悕绉�
-            this.unPassForm.productionBatch = res.data.insOrderTemplate.updateBatchNo // 鐢熶骇鎵规
-            this.unPassForm.cargoQuantity = res.data.insOrderTemplate.qtyArrived + res.data.insOrderTemplate.buyUnitMeas // 鍒拌揣鏁伴噺
-            this.unPassForm.inspectTime = res.data.insOrderTemplate.sendTime.substring(0, 10)  // 鎶ユ鏃堕棿
+            // this.unPassForm.insOrderId = res.data.insOrder.id // 璁㈠崟id
+            this.unPassForm.materialName = res.data.sampleType // 鐗╂枡鍚嶇О
+            this.unPassForm.specsModels = res.data.partDetail // 瑙勬牸鍨嬪彿
+            // this.unPassForm.inventoryQuantityId = res.data.inventoryQuantityId // 鍘熸潗鏂檌d
+            this.unPassForm.supplierName = res.data.supplierName // 渚涘簲鍟嗗悕绉�
+            this.unPassForm.productionBatch = res.data.updateBatchNo // 鐢熶骇鎵规
+            this.unPassForm.cargoQuantity = res.data.qtyArrived // 鍒拌揣鏁伴噺
+            this.unPassForm.buyUnitMeas = res.data.buyUnitMeas // 閲囪喘鍗曚綅
+            this.unPassForm.inspectTime = res.data.sendTime  // 鎶ユ鏃堕棿
           }
         })
       } else {
-        this.getInfo(row.handlerId)
-        this.unPassForm = { ...row }
+        this.getInfo(row.id)
+        console.log(row)
+        this.unPassForm = { ...row,unqualifiedHandlerFiles:[] }
       }
     },
     getInfo(handlerId) {
@@ -180,16 +225,7 @@
       downFile({
         id: row.id,
       }).then(res => {
-        if (res.code === 200) {
-          let url = '';
-          if (res.data.type == 1) {
-            url = this.javaApi + '/img/' + res.data.fileUrl
-            this.$download.saveAs(url, row.fileName);
-          } else {
-            url = this.javaApi + '/word/' + res.data.fileUrl
-            this.$download.saveAs(url, row.fileName);
-          }
-        }
+        this.$download.saveAs(res.data.fileUrl, row.fileName);
       }).catch(error => {
 
       })
@@ -202,7 +238,33 @@
             delete item.orderBy
           })
           this.handlunPassLoading = true
-          addUnqualifiedHandler(this.unPassForm).then(res => {
+          addUnqualifiedHandler({
+            ...this.unPassForm,
+            selectOrderIds: this.selectOrderIds
+          }).then(res => {
+            if (res.code === 200) {
+              this.$message.success('鎻愪氦鎴愬姛')
+              this.$emit('resetForm')
+            }
+            this.handlunPassLoading = false
+          })
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    //閲嶆柊鎻愪氦骞朵笖鎺ㄩ�乷a
+    reSubmitPushOa(){
+      this.$refs['unPassForm'].validate((valid) => {
+        if (valid) {
+          if(this.unPassForm.unqualifiedHandlerFiles){
+            this.unPassForm.unqualifiedHandlerFiles.forEach(item => {
+              delete item.orderBy
+            })
+          }
+          this.handlunPassLoading = true
+          reSubmitPushOa(this.unPassForm).then(res => {
             if (res.code === 200) {
               this.$message.success('鎻愪氦鎴愬姛')
               this.$emit('resetForm')
@@ -260,13 +322,10 @@
     ...mapGetters(["nickName"]),
     action2() {
       return this.javaApi + '/unqualifiedHandler/uploadFileByUnqualified'
-    }
+    },
   },
 }
 </script>
 
 <style scoped>
-.headLine>>>.el-form-item__content {
-  width: 68%;
-}
 </style>

--
Gitblit v1.9.3