From 6f90e7110190d146fde06cf1f5b2272fd49b53d6 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 19 十月 2026 17:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue |  136 ++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 114 insertions(+), 22 deletions(-)

diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
index 62415a7..6341f59 100644
--- a/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
@@ -1,45 +1,73 @@
 <template>
   <div>
-    <el-dialog title="缂栬緫" v-model="formDia"
+    <el-dialog :title="operationType === 'add' ? '鏂板璐ㄦ帶椤圭洰' : '缂栬緫璐ㄦ帶椤圭洰'" v-model="formDia"
                :close-on-click-modal="false"
                :close-on-press-escape="false"
                width="80%" @close="closeDia">
       <el-form :model="form" :rules="rules" ref="form" label-width="140px">
         <el-col :span="12">
-          <el-form-item label="鐩戞帶鐩殑" prop="monitorPurpose">
-            <el-input v-model="form.monitorPurpose" size="small" clearable></el-input>
+          <el-form-item label="搴忓彿" prop="sortNo">
+            <el-input-number v-model="form.sortNo" :min="1" style="width:100%" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="璁″垝寮�灞曟椂闂�" prop="plannedTime">
-            <el-input v-model="form.plannedTime" size="small" clearable></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="鐩戞帶椤圭洰" prop="monitorProject">
+          <el-form-item label="璐ㄦ帶椤圭洰" prop="monitorProject">
             <el-input v-model="form.monitorProject" size="small" clearable></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="鍙傚姞鍗曚綅锛堜汉鍛橈級" prop="participant">
-            <el-input v-model="form.participant" size="small" clearable></el-input>
+          <el-form-item label="鎶�鏈爣鍑�" prop="technicalStandardText">
+            <el-input v-model="form.technicalStandardText" size="small" clearable placeholder="鏍囧噯缂栧彿鍙婂悕绉帮紱闈炴娴嬬被鍙~鍐欑▼搴忔枃浠舵垨/" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="棰勭畻锛堝厓锛�" prop="budget">
-            <el-input v-model="form.budget" size="small" clearable></el-input>
+          <el-form-item label="璐ㄦ帶鏂瑰紡" prop="monitorWay">
+            <el-input v-model="form.monitorWay" size="small" clearable placeholder="濡傜洸鏍锋娴嬨�佷汉鍛樻瘮瀵广�佺洃鐫f鏌�" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="缁勭粐浜哄憳" prop="organization">
-            <el-input v-model="form.organization" size="small" clearable></el-input>
+          <el-form-item label="瀹屾垚鏃堕檺" prop="completionMonth">
+            <el-date-picker v-model="form.completionMonth" type="month" value-format="YYYY-MM" format="YYYY.MM" style="width:100%" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="鐩戞帶鏂瑰紡" prop="monitorWay">
-            <el-input v-model="form.monitorWay" size="small" clearable></el-input>
+          <el-form-item label="璐熻矗浜�" prop="responsibleUserId">
+            <el-select v-model="form.responsibleUserId" filterable style="width:100%">
+              <el-option v-for="item in userOptions" :key="item.id" :value="item.id" :label="item.name" />
+            </el-select>
           </el-form-item>
         </el-col>
+        <el-col :span="12">
+          <el-form-item label="浜嬮」绫诲埆" prop="itemKind">
+            <el-select v-model="form.itemKind" style="width: 100%">
+              <el-option label="闈炴娴嬬被" value="OTHER" />
+              <el-option label="妫�娴嬬被" value="INSPECTION" />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <template v-if="form.itemKind === 'INSPECTION'">
+          <el-col :span="12"><el-form-item label="妫�娴嬫爣鍑�" prop="standardMethodId">
+            <el-select v-model="form.standardMethodId" filterable style="width: 100%" placeholder="璇烽�夋嫨妫�娴嬫爣鍑�" @change="handleStandardChange">
+              <el-option v-for="item in standardOptions" :key="item.id" :value="item.id" :label="`${item.code || ''} ${item.name || ''}`" />
+            </el-select>
+          </el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="鍘熷璁板綍妯℃澘" prop="templateIds">
+            <el-select v-model="form.templateIds" multiple collapse-tags filterable style="width: 100%" placeholder="鍙�夋嫨澶氫釜妯℃澘">
+              <el-option v-for="item in templateOptions" :key="item.id" :value="item.id" :label="item.name" />
+            </el-select>
+          </el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="鏍峰搧鍚嶇О"><el-input v-model="form.sampleName" /></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="鏍峰搧瑙勬牸"><el-input v-model="form.sampleSpec" /></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="妫�娴嬪憳"><el-select v-model="form.inspectorUserId" filterable style="width: 100%">
+            <el-option v-for="item in userOptions" :key="item.id" :value="item.id" :label="item.name" />
+          </el-select></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="璇勪环浜�"><el-select v-model="form.evaluatorUserId" filterable style="width: 100%">
+            <el-option v-for="item in userOptions" :key="item.id" :value="item.id" :label="item.name" />
+          </el-select></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="浠诲姟鎴鏃�">
+            <el-date-picker v-model="form.dueDate" type="date" value-format="YYYY-MM-DD" style="width: 100%" />
+          </el-form-item></el-col>
+        </template>
       </el-form>
       <template #footer><span  class="dialog-footer">
 					<el-button @click="closeDia">鍙� 娑�</el-button>
@@ -54,6 +82,9 @@
   addQualityMonitorDetail,
   updateQualityMonitorDetail
 } from "@/api/cnas/process/ensureResults/qualityMonitor";
+import { selectStandardMethodList } from '@/api/cnas/process/method/standardMethod';
+import { selectStandardTemplatePageList } from '@/api/standard/model';
+import { selectUserCondition } from '@/api/performance/class';
 
 export default {
   name: 'detailFormDialog',
@@ -66,6 +97,10 @@
       formDia: false,
       form: {
         qualityMonitorDetailsId: '',
+        sortNo: null,
+        technicalStandardText: '',
+        completionMonth: '',
+        responsibleUserId: null,
         monitorPurpose: '',
         plannedTime: '',
         monitorProject: '',
@@ -73,10 +108,26 @@
         budget: '',
         organization: '',
         monitorWay: '',
+        itemKind: 'OTHER',
+        standardMethodId: null,
+        templateId: null,
+        templateIds: [],
+        sampleName: '',
+        sampleSpec: '',
+        inspectorUserId: null,
+        evaluatorUserId: null,
+        dueDate: null,
       },
+      standardOptions: [],
+      templateOptions: [],
+      userOptions: [],
       rules: {
-        monitorPurpose: [{ required: true, message: '璇疯緭鍏ョ洃鎺х洰鐨�', trigger: 'blur' }],
-        monitorProject: [{ required: true, message: '璇疯緭鍏ョ洃鎺ч」鐩�', trigger: 'blur' }],
+        monitorProject: [{ required: true, message: '璇疯緭鍏ヨ川鎺ч」鐩�', trigger: 'blur' }],
+        technicalStandardText: [{ required: true, message: '璇疯緭鍏ユ妧鏈爣鍑�', trigger: 'blur' }],
+        monitorWay: [{ required: true, message: '璇疯緭鍏ヨ川鎺ф柟寮�', trigger: 'blur' }],
+        completionMonth: [{ required: true, message: '璇烽�夋嫨瀹屾垚鏃堕檺', trigger: 'change' }],
+        responsibleUserId: [{ required: true, message: '璇烽�夋嫨璐熻矗浜�', trigger: 'change' }],
+        templateIds: [{ required: true, type: 'array', min: 1, message: '璇疯嚦灏戦�夋嫨涓�涓師濮嬭褰曟ā鏉�', trigger: 'change' }],
       },
       upLoad: false,
       operationType: '',
@@ -86,18 +137,59 @@
   methods: {
     openDia(type, row) {
       this.formDia = true
+      selectStandardMethodList({ current: 1, size: 1000 }).then(res => { this.standardOptions = res.data?.records || res.data || [] })
+      selectStandardTemplatePageList({ current: 1, size: 1000 }).then(res => { this.templateOptions = res.data?.records || res.data || [] })
+      selectUserCondition({ type: 1 }).then(res => { this.userOptions = res.data || [] })
       this.operationType = type
       if (type === 'edit') {
         this.searchInfo(row)
       }
     },
     searchInfo (row) {
-      this.form = {...row}
+      const templateIds = row.templateIds
+        ? String(row.templateIds).split(',').filter(Boolean).map(id => Number(id))
+        : (row.templateId ? [Number(row.templateId)] : [])
+      this.form = {...row, itemKind: row.itemKind || 'OTHER', templateIds}
+    },
+    handleStandardChange(id) {
+      const standard = this.standardOptions.find(item => Number(item.id) === Number(id))
+      if (standard) this.form.technicalStandardText = `${standard.code || ''} ${standard.name || ''}`.trim()
+      this.form.templateIds = []
+      this.form.templateId = null
+    },
+    buildEntity () {
+      const entity = this.HaveJson(this.form)
+      const templateIds = Array.isArray(this.form.templateIds)
+        ? this.form.templateIds.map(id => Number(id)).filter(id => Number.isInteger(id) && id > 0)
+        : []
+      entity.templateIds = templateIds.join(',') || null
+      entity.templateId = templateIds.length ? templateIds[0] : null
+      entity.reviewerUserId = null
+      return entity
     },
     // 鎻愪氦琛ㄥ崟
     submitForm () {
       this.$refs['form'].validate((valid) => {
         if (valid) {
+          if (this.form.itemKind === 'INSPECTION') {
+            const required = ['standardMethodId','sampleName','inspectorUserId','evaluatorUserId','dueDate']
+            if (required.some(key => !this.form[key])) {
+              this.$message.warning('璇疯ˉ榻愭娴嬫爣鍑嗐�佹ā鏉裤�佹牱鍝併�佹娴嬪憳銆佽瘎浠蜂汉鍜屼换鍔℃埅姝㈡棩')
+              return
+            }
+            if (!Array.isArray(this.form.templateIds) || !this.form.templateIds.length) {
+              this.$message.warning('璇疯嚦灏戦�夋嫨涓�涓師濮嬭褰曟ā鏉�')
+              return
+            }
+            if (this.form.inspectorUserId === this.form.evaluatorUserId) {
+              this.$message.warning('妫�娴嬪憳涓嶈兘鍚屾椂鎷呬换璇勪环浜�')
+              return
+            }
+            if (this.form.dueDate.slice(0, 7) > this.form.completionMonth) {
+              this.$message.warning('浠诲姟鎴鏃ヤ笉鑳芥櫄浜庤鍒掑畬鎴愭湀浠�')
+              return
+            }
+          }
           if (this.operationType === 'add') {
             this.handleAdd()
           } else {
@@ -108,7 +200,7 @@
     },
     // 鎻愪氦鏂板
     handleAdd () {
-      let entity = this.HaveJson(this.form)
+      let entity = this.buildEntity()
       entity.qualityMonitorId = this.qualityMonitorId
       this.upLoad = true
       addQualityMonitorDetail(entity).then(res => {
@@ -122,7 +214,7 @@
     },
     // 鎻愪氦淇敼
     handleEdit () {
-      const entity = this.HaveJson(this.form)
+      const entity = this.buildEntity()
       this.upLoad = true
       updateQualityMonitorDetail(entity).then(res => {
         this.upLoad = false

--
Gitblit v1.9.3