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