From f42a646e394dbf4b68cb1beba0015ca8de03a61c Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 27 五月 2026 14:19:43 +0800
Subject: [PATCH] 君歌 1.不合格管理修改
---
src/views/qualityManagement/nonconformingManagement/components/formDia.vue | 539 ++++++++++++++++++++++++++++++-----------------------------
1 files changed, 275 insertions(+), 264 deletions(-)
diff --git a/src/views/qualityManagement/nonconformingManagement/components/formDia.vue b/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
index 20d01e0..6358d87 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
@@ -2,70 +2,108 @@
<div>
<el-dialog
v-model="dialogFormVisible"
- :title="operationType === 'add' ? '鏂板涓嶅悎鏍肩鐞�' : '缂栬緫涓嶅悎鏍肩鐞�'"
- width="70%"
+ :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎搧澶勭悊鍗�' : '缂栬緫涓嶅悎鏍煎搧澶勭悊鍗�'"
+ width="80%"
@close="closeDia"
>
<el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
+ <!-- 绗竴琛岋細椤圭洰鍚嶇О銆侀」鐩紪鍙� -->
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="绫诲埆锛�" prop="inspectType">
- <el-select v-model="form.inspectType">
- <el-option label="鍘熸潗鏂欐楠�" :value="0" />
- <el-option label="杩囩▼妫�楠�" :value="1" />
- <el-option label="鍑哄巶妫�楠�" :value="2" />
- </el-select>
+ <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">
+ <el-input v-model="form.projectName" placeholder="璇疯緭鍏ラ」鐩悕绉�" clearable/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椤圭洰缂栧彿锛�" prop="projectNo">
+ <el-input v-model="form.projectNo" placeholder="璇疯緭鍏ラ」鐩紪鍙�" clearable/>
</el-form-item>
</el-col>
</el-row>
+
+ <!-- 绗簩琛岋細璁惧鍚嶇О銆佽澶囧浘鍙� -->
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="浜у搧鍚嶇О锛�" prop="productId">
- <el-tree-select
- v-model="form.productId"
- placeholder="璇烽�夋嫨"
- clearable
- check-strictly
- @change="getModels"
- :data="productOptions"
- :render-after-expand="false"
- style="width: 100%"
- />
+ <el-form-item label="璁惧鍚嶇О锛�" prop="equipmentName">
+ <el-input v-model="form.equipmentName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" clearable/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="model">
- <el-select v-model="form.model" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'edit'"
- filterable readonly @change="handleChangeModel">
- <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
- </el-select>
+ <el-form-item label="璁惧鍥惧彿锛�" prop="equipmentDrawingNo">
+ <el-input v-model="form.equipmentDrawingNo" placeholder="璇疯緭鍏ヨ澶囧浘鍙�" clearable/>
</el-form-item>
</el-col>
</el-row>
+
+ <!-- 绗笁琛岋細鐗╂枡/閮ㄤ欢鍚嶇О銆佺墿鏂欏浘鍙� -->
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="鍗曚綅锛�" prop="unit">
- <el-input v-model="form.unit" placeholder="璇疯緭鍏�" clearable/>
+ <el-form-item label="鐗╂枡/閮ㄤ欢鍚嶇О锛�" prop="materialName">
+ <el-input v-model="form.materialName" placeholder="璇疯緭鍏ョ墿鏂�/閮ㄤ欢鍚嶇О" clearable/>
</el-form-item>
</el-col>
<el-col :span="12">
+ <el-form-item label="鐗╂枡鍥惧彿锛�" prop="materialDrawingNo">
+ <el-input v-model="form.materialDrawingNo" placeholder="璇疯緭鍏ョ墿鏂欏浘鍙�" clearable/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗洓琛岋細鍨嬪彿瑙勬牸銆佹潗璐ㄣ�佹暟閲忋�佷笉鍚堟牸鏁� -->
+ <el-row :gutter="30">
+ <el-col :span="6">
+ <el-form-item label="鍨嬪彿瑙勬牸锛�" prop="specificationModel">
+ <el-input v-model="form.specificationModel" placeholder="璇疯緭鍏ュ瀷鍙疯鏍�" clearable/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鏉愯川锛�" prop="materialQuality">
+ <el-input v-model="form.materialQuality" placeholder="璇疯緭鍏ユ潗璐�" clearable/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
<el-form-item label="鏁伴噺锛�" prop="quantity">
- <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.quantity" placeholder="璇疯緭鍏�" clearable :precision="2"/>
+ <el-input-number :step="1" :min="0" style="width: 100%" v-model="form.quantity" placeholder="璇疯緭鍏ユ暟閲�" :precision="0"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="涓嶅悎鏍兼暟锛�" prop="unqualifiedQuantity">
+ <el-input-number :step="1" :min="0" style="width: 100%" v-model="form.unqualifiedQuantity" placeholder="璇疯緭鍏ヤ笉鍚堟牸鏁�" :precision="0"/>
</el-form-item>
</el-col>
</el-row>
+
+ <!-- 绗簲琛岋細涓嶅悎鏍煎伐搴忋�佷緵璐у晢鍚嶇О -->
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="妫�楠屽憳锛�" prop="checkName">
- <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+ <el-form-item label="涓嶅悎鏍煎伐搴忥細" prop="unqualifiedProcess">
+ <el-radio-group v-model="form.unqualifiedProcess">
+ <el-radio :label="1">鏉ユ枡</el-radio>
+ <el-radio :label="2">鍒剁▼</el-radio>
+ <el-radio :label="3">鎴愬搧</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="渚涜揣鍟嗗悕绉帮細" prop="supplierName">
+ <el-input v-model="form.supplierName" placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О" clearable/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗叚琛岋細妫�楠屽憳銆佹楠屾棩鏈熴�佽矗浠讳汉銆佽矗浠婚儴闂� -->
+ <el-row :gutter="30">
+ <el-col :span="6">
+ <el-form-item label="妫�楠屽憳锛�" prop="inspectorName">
+ <el-select v-model="form.inspectorName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
<el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="妫�娴嬫棩鏈燂細" prop="checkTime">
+ <el-col :span="6">
+ <el-form-item label="妫�楠屾棩鏈燂細" prop="inspectDate">
<el-date-picker
- v-model="form.checkTime"
+ v-model="form.inspectDate"
type="date"
placeholder="璇烽�夋嫨鏃ユ湡"
value-format="YYYY-MM-DD"
@@ -75,93 +113,142 @@
/>
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="涓嶅悎鏍肩幇璞★細" prop="defectivePhenomena">
- <el-input v-model="form.defectivePhenomena" placeholder="璇疯緭鍏�" clearable/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="澶勭悊缁撴灉锛�" prop="dealResult">
- <el-select v-model="form.dealResult" placeholder="璇烽�夋嫨" clearable>
- <el-option :label="item.label" :value="item.value" v-for="item in rejection_handling" :key="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="澶勭悊浜猴細" prop="dealName">
- <el-select v-model="form.dealName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+ <el-col :span="6">
+ <el-form-item label="璐d换浜猴細" prop="responsiblePerson">
+ <el-select v-model="form.responsiblePerson" placeholder="璇烽�夋嫨" clearable style="width: 100%">
<el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="澶勭悊鏃ユ湡锛�" prop="dealTime">
- <el-date-picker
- v-model="form.dealTime"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
+ <el-col :span="6">
+ <el-form-item label="璐d换閮ㄩ棬锛�" prop="responsibleDept">
+ <el-input v-model="form.responsibleDept" placeholder="璇疯緭鍏ヨ矗浠婚儴闂�" clearable/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗竷琛岋細闂鎻忚堪 -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="闂鎻忚堪锛�" prop="problemDescription">
+ <el-input
+ v-model="form.problemDescription"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ラ棶棰樻弿杩�"
clearable
- style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
+
+ <!-- 绗叓琛岋細鍘熷洜鍒嗘瀽鍙婂缓璁� -->
<el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="宸ユ椂鎹熷け锛�" prop="lossWorking">
- <el-input-number
- v-model="form.lossWorking"
- :min="0"
- :step="0.01"
- :precision="2"
- style="width: 100%"
- placeholder="璇疯緭鍏�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鏉愭枡璐规崯澶憋細" prop="lossMaterial">
- <el-input-number
- v-model="form.lossMaterial"
- :min="0"
- :step="0.01"
- :precision="2"
- style="width: 100%"
- placeholder="璇疯緭鍏�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍘熷洜鍒嗘瀽锛�" prop="reasonAnalysis">
+ <el-col :span="24">
+ <el-form-item label="鍘熷洜鍒嗘瀽鍙婂缓璁細" prop="reasonAnalysis">
<el-input
v-model="form.reasonAnalysis"
type="textarea"
:rows="4"
- placeholder="璇疯緭鍏�"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="棰勯槻涓庣籂姝f帾鏂斤細" prop="preventiveCorrective">
- <el-input
- v-model="form.preventiveCorrective"
- type="textarea"
- :rows="4"
- placeholder="璇疯緭鍏�"
+ placeholder="璇疯緭鍏ュ師鍥犲垎鏋愬強寤鸿"
clearable
/>
</el-form-item>
</el-col>
</el-row>
+
+ <!-- 绗節琛岋細绾犳鎺柦 -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="绾犳鎺柦锛�" prop="correctionAction">
+ <el-input
+ v-model="form.correctionAction"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ョ籂姝f帾鏂�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗崄琛岋細澶勭疆鏂瑰紡 -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="澶勭疆鏂瑰紡锛�" prop="disposalMethod">
+ <el-radio-group v-model="form.disposalMethod">
+ <el-radio :label="1">璁╂鎺ユ敹</el-radio>
+ <el-radio :label="2">鍘傚唴缁翠慨</el-radio>
+ <el-radio :label="3">杩斿巶缁翠慨</el-radio>
+ <el-radio :label="4">鎹㈣揣</el-radio>
+ <el-radio :label="5">閫�璐�</el-radio>
+ <el-radio :label="6">鎶ュ簾</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗崄涓�琛岋細鍘傚唴/杩斿巶缁翠慨璇勪及 -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="鍘傚唴/杩斿巶缁翠慨璇勪及锛�" prop="repairEvaluation">
+ <el-input
+ v-model="form.repairEvaluation"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ュ巶鍐�/杩斿巶缁翠慨璇勪及"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗崄浜岃锛氶闃叉帾鏂� -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="棰勯槻鎺柦锛�" prop="preventiveAction">
+ <el-input
+ v-model="form.preventiveAction"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ラ闃叉帾鏂�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗崄涓夎锛氱姸鎬� -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="鐘舵�侊細" prop="status">
+ <el-radio-group v-model="form.status">
+ <el-radio :label="0">鑽夌</el-radio>
+ <el-radio :label="1">寰呭鏍�</el-radio>
+ <el-radio :label="2">瀹℃壒涓�</el-radio>
+ <el-radio :label="3">宸插畬鎴�</el-radio>
+ <el-radio :label="4">宸查┏鍥�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗崄鍥涜锛氬娉� -->
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="澶囨敞锛�" prop="remark">
+ <el-input
+ v-model="form.remark"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ュ娉�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 绗崄浜旇锛氫笉鑹搧鐓х墖 -->
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="涓嶈壇鍝佺収鐗囷細" prop="defectivePhotos">
@@ -181,7 +268,7 @@
<el-button type="primary" v-if="operationType !== 'view'">涓婁紶</el-button>
<template #tip v-if="operationType !== 'view'">
<div class="el-upload__tip">
- 鏂囦欢鏍煎紡鏀寔 doc锛宒ocx锛寈ls锛寈lsx锛宲pt锛宲ptx锛宲df锛宼xt锛寈ml锛宩pg锛宩peg锛宲ng锛実if锛宐mp锛宺ar锛寊ip锛�7z
+ 鏂囦欢鏍煎紡鏀寔 jpg锛宩peg锛宲ng锛実if锛宐mp
</div>
</template>
</el-upload>
@@ -200,8 +287,7 @@
</template>
<script setup>
-import { ref, reactive, toRefs, getCurrentInstance, watch } from "vue";
-import {modelList, productTreeList} from "@/api/basicData/product.js";
+import { ref, reactive, toRefs, getCurrentInstance } from "vue";
import {
getQualityUnqualifiedInfo,
qualityUnqualifiedAdd,
@@ -216,54 +302,62 @@
const dialogFormVisible = ref(false);
const operationType = ref('')
-const { rejection_handling } = proxy.useDict("rejection_handling")
const defectivePhotoFileList = ref([]);
const defectivePhotoUploadRef = ref(null);
const upload = reactive({
url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
headers: { Authorization: "Bearer " + getToken() },
});
+
const data = reactive({
form: {
- checkTime: "",
- process: "",
- checkName: "",
- productName: "",
- productId: "",
- model: "",
- unit: "",
- quantity: "",
- checkCompany: "",
- checkResult: "",
- inspectType: '',
- defectivePhenomena: '',
+ // 鍩烘湰淇℃伅
+ projectName: '',
+ projectNo: '',
+ equipmentName: '',
+ equipmentDrawingNo: '',
+ materialName: '',
+ materialDrawingNo: '',
+ specificationModel: '',
+ materialQuality: '',
+ quantity: 0,
+ unqualifiedQuantity: 0,
+ unqualifiedProcess: undefined,
+ supplierName: '',
+ inspectorName: '',
+ inspectDate: '',
+ responsiblePerson: '',
+ responsibleDept: '',
+
+ // 闂鎻忚堪鍜屽鐞�
+ problemDescription: '',
+ reasonAnalysis: '',
+ correctionAction: '',
+ disposalMethod: undefined,
+ repairEvaluation: '',
+ preventiveAction: '',
+
+ // 鐘舵��
+ status: 0,
+ remark: '',
+
+ // 闄勪欢
defectivePhotos: '',
tempFileIds: [],
- dealResult: '',
- dealName: '',
- dealTime: '',
- reasonAnalysis: '',
- preventiveCorrective: '',
- lossWorking: 0,
- lossMaterial: 0,
},
rules: {
- checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },],
- process: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkName: [{ required: true, message: "璇烽�夋嫨妫�楠屽憳", trigger: "change" }],
- productId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- model: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkResult: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- dealName: [{ required: true, message: "璇烽�夋嫨澶勭悊浜�", trigger: "change" }],
+ projectName: [{ required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" }],
+ materialName: [{ required: true, message: "璇疯緭鍏ョ墿鏂�/閮ㄤ欢鍚嶇О", trigger: "blur" }],
+ quantity: [{ required: true, message: "璇疯緭鍏ユ暟閲�", trigger: "blur" }],
+ unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏ヤ笉鍚堟牸鏁�", trigger: "blur" }],
+ inspectorName: [{ required: true, message: "璇烽�夋嫨妫�楠屽憳", trigger: "change" }],
+ inspectDate: [{ required: true, message: "璇烽�夋嫨妫�楠屾棩鏈�", trigger: "change" }],
+ problemDescription: [{ required: true, message: "璇疯緭鍏ラ棶棰樻弿杩�", trigger: "blur" }],
},
});
+
const { form, rules } = toRefs(data);
-const productOptions = ref([]);
-const modelOptions = ref([]);
-const userList = ref([]); // 妫�楠屽憳/澶勭悊浜轰笅鎷夊垪琛�
+const userList = ref([]); // 妫�楠屽憳/璐d换浜轰笅鎷夊垪琛�
// 鎵撳紑寮规
const openDialog = async (type, row) => {
@@ -279,95 +373,57 @@
if (operationType.value === 'add') {
defectivePhotoFileList.value = [];
form.value = {
- checkName: userStore.nickName || '',
- dealName: '',
- dealTime: '',
- dealResult: '',
- defectivePhenomena: '',
+ projectName: '',
+ projectNo: '',
+ equipmentName: '',
+ equipmentDrawingNo: '',
+ materialName: '',
+ materialDrawingNo: '',
+ specificationModel: '',
+ materialQuality: '',
+ quantity: 0,
+ unqualifiedQuantity: 0,
+ unqualifiedProcess: undefined,
+ supplierName: '',
+ inspectorName: userStore.nickName || '',
+ inspectDate: '',
+ responsiblePerson: '',
+ responsibleDept: '',
+ problemDescription: '',
+ reasonAnalysis: '',
+ correctionAction: '',
+ disposalMethod: undefined,
+ repairEvaluation: '',
+ preventiveAction: '',
+ status: 0,
+ remark: '',
defectivePhotos: '',
tempFileIds: [],
- inspectType: '',
- checkTime: '',
- productId: '',
- model: '',
- unit: '',
- quantity: '',
- productName: '',
- reasonAnalysis: '',
- preventiveCorrective: '',
- lossWorking: 0,
- lossMaterial: 0,
};
} else {
defectivePhotoFileList.value = [];
form.value = {};
}
- getProductOptions();
+
if (operationType.value === 'edit') {
getQualityUnqualifiedInfo(row.id).then(res => {
- const { inspectState, ...rest } = (res.data || {})
- form.value = {
- reasonAnalysis: '',
- preventiveCorrective: '',
- lossWorking: 0,
- lossMaterial: 0,
- ...rest
- }
+ const data = res.data?.records?.[0] || res.data || {}
+ form.value = { ...data }
})
}
}
-const getProductOptions = () => {
- productTreeList().then((res) => {
- productOptions.value = convertIdToValue(res);
- });
-};
-const getModels = (value) => {
- form.value.productName = findNodeById(productOptions.value, value);
- modelList({ id: value }).then((res) => {
- modelOptions.value = res;
- })
-};
-const findNodeById = (nodes, productId) => {
- for (let i = 0; i < nodes.length; i++) {
- if (nodes[i].value === productId) {
- return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
- }
- if (nodes[i].children && nodes[i].children.length > 0) {
- const foundNode = findNodeById(nodes[i].children, productId);
- if (foundNode) {
- return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
- }
- }
- }
- return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
-};
-function convertIdToValue(data) {
- return data.map((item) => {
- const { id, children, ...rest } = item;
- const newItem = {
- ...rest,
- value: id, // 灏� id 鏀逛负 value
- };
- if (children && children.length > 0) {
- newItem.children = convertIdToValue(children);
- }
-
- return newItem;
- });
-}
+
// 鎻愪氦浜у搧琛ㄥ崟
const submitForm = () => {
proxy.$refs.formRef.validate(valid => {
if (valid) {
- // 鐘舵�佸瓧娈典笉鍦ㄨ〃鍗曞~鍐欙紝涔熶笉浼犵粰鍚庣
- const { inspectState, ...payload } = (form.value || {})
if (operationType.value === "add") {
- qualityUnqualifiedAdd(payload).then(res => {
+ qualityUnqualifiedAdd(form.value).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
})
} else {
- qualityUnqualifiedUpdate(payload).then(res => {
+ qualityUnqualifiedUpdate(form.value).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
})
@@ -376,16 +432,18 @@
})
}
-// 涓婁紶鍓嶆牎妫�锛堝弬鑰冨崗鍚屽鎵归檮浠朵笂浼狅級
+// 涓婁紶鍓嶆牎妫�
function handleBeforeUpload() {
proxy.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��...");
return true;
}
+
function handleUploadError() {
proxy.$modal.msgError("涓婁紶鏂囦欢澶辫触");
proxy.$modal.closeLoading();
}
-// 涓嶈壇鍝佺収鐗囦笂浼犳垚鍔燂細淇濆瓨 tempId 涓� tempPath锛屽苟鍥炲啓鍒拌〃鍗�
+
+// 涓嶈壇鍝佺収鐗囦笂浼犳垚鍔�
function handleDefectivePhotoUploadSuccess(res, file) {
proxy.$modal.closeLoading();
if (res?.code === 200) {
@@ -396,76 +454,29 @@
if (!form.value.tempFileIds) form.value.tempFileIds = [];
if (tempId) form.value.tempFileIds.push(tempId);
- // el-upload 鍒楄〃鍥炴樉闇�瑕� url/name
- file.id = tempId || file.id;
+ file.url = tempPath;
file.name = originalName;
- file.url = tempPath ? (import.meta.env.VITE_APP_BASE_API + tempPath) : file.url;
-
- // 浠モ�滆矾寰勫瓧绗︿覆鈥濆舰寮忎紶缁欐柊澧�/缂栬緫鎺ュ彛锛堝悗绔嫢鍙 tempFileIds 涔熶笉鍐茬獊锛�
- syncDefectivePhotosFromFileList();
- proxy.$modal.msgSuccess("涓婁紶鎴愬姛");
} else {
proxy.$modal.msgError(res?.msg || "涓婁紶澶辫触");
- defectivePhotoUploadRef.value?.handleRemove(file);
}
}
-function handleDefectivePhotoRemove(file) {
- // 鍚屾绉婚櫎 tempFileIds
- const tempId = file?.id || file?.response?.data?.tempId;
- if (tempId && Array.isArray(form.value.tempFileIds)) {
- form.value.tempFileIds = form.value.tempFileIds.filter(id => id !== tempId);
+// 涓嶈壇鍝佺収鐗囩Щ闄�
+function handleDefectivePhotoRemove(file, fileList) {
+ const tempId = file?.response?.data?.tempId;
+ if (tempId && form.value.tempFileIds) {
+ const idx = form.value.tempFileIds.indexOf(tempId);
+ if (idx > -1) form.value.tempFileIds.splice(idx, 1);
}
- syncDefectivePhotosFromFileList();
+ defectivePhotoFileList.value = fileList;
}
-function syncDefectivePhotosFromFileList() {
- const base = import.meta.env.VITE_APP_BASE_API;
- const paths = (defectivePhotoFileList.value || [])
- .map(f => f?.url || f?.response?.data?.tempPath || f?.response?.data?.url)
- .filter(Boolean)
- .map(url => (typeof url === "string" ? url.replace(base, "") : ""))
- .filter(Boolean);
- form.value.defectivePhotos = paths.join(",");
-}
-
-// 缂栬緫/璇︽儏鏃讹紝鎶婂悗绔繑鍥炵殑 defectivePhotos 璺緞涓茶浆鎴� el-upload 鍙洖鏄剧殑 fileList
-watch(
- () => form.value?.defectivePhotos,
- val => {
- if (!val) {
- defectivePhotoFileList.value = [];
- return;
- }
- const base = import.meta.env.VITE_APP_BASE_API;
- const list = String(val)
- .split(",")
- .map((p, idx) => {
- const path = p?.trim();
- if (!path) return null;
- return {
- name: `鍥剧墖${idx + 1}`,
- url: path.startsWith("http") ? path : base + path,
- id: undefined,
- };
- })
- .filter(Boolean);
- defectivePhotoFileList.value = list;
- },
- { immediate: true }
-);
-// 鍏抽棴寮规
const closeDia = () => {
- defectivePhotoFileList.value = []
- proxy.resetForm("formRef");
dialogFormVisible.value = false;
emit('close')
-};
+}
+
defineExpose({
openDialog,
-});
+})
</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
--
Gitblit v1.9.3