From d991871847391f150dd9c5aa9c871a96b75b7880 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期一, 23 三月 2026 17:11:36 +0800
Subject: [PATCH] fix: 质量管理 可编辑
---
src/views/qualityManagement/nonconformingManagement/components/formDia.vue | 199 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 182 insertions(+), 17 deletions(-)
diff --git a/src/views/qualityManagement/nonconformingManagement/components/formDia.vue b/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
index e7340d7..d5836a2 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
@@ -11,6 +11,7 @@
<el-col :span="12">
<el-form-item label="浜у搧鍚嶇О锛�" prop="productId">
<el-tree-select
+ v-if="operationType !== 'edit'"
v-model="form.productId"
placeholder="璇烽�夋嫨"
clearable
@@ -18,7 +19,13 @@
@change="getModels"
:data="productOptions"
:render-after-expand="false"
- :disabled="operationType === 'edit'"
+ style="width: 100%"
+ />
+ <!-- 缂栬緫鎬侊細涓嶄緷璧栦笅鎷夐�夐」鍥炴樉锛岀洿鎺ュ睍绀烘枃鏈� -->
+ <el-input
+ v-else
+ v-model="form.productName"
+ disabled
style="width: 100%"
/>
</el-form-item>
@@ -26,16 +33,28 @@
<el-col :span="12">
<el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
<el-select
+ v-if="operationType !== 'edit'"
v-model="form.productModelId"
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-option
+ v-for="item in modelOptions"
+ :key="item.id"
+ :label="item.model"
+ :value="item.id"
+ />
</el-select>
+ <!-- 缂栬緫鎬侊細涓嶅睍绀鸿鏍煎瀷鍙峰垪琛紝鐩存帴灞曠ず鏂囨湰 -->
+ <el-input
+ v-else
+ v-model="form.model"
+ disabled
+ style="width: 100%"
+ />
</el-form-item>
</el-col>
</el-row>
@@ -187,7 +206,7 @@
},
rules: {
checkTime: [{ required: true, message: "璇烽�夋嫨妫�娴嬫棩鏈�", trigger: "change" }],
- checkUserName: [{ required: true, message: "璇烽�夋嫨妫�楠屽憳", trigger: "change" }],
+ checkName: [{ required: true, message: "璇烽�夋嫨妫�楠屽憳", trigger: "change" }],
productId: [{ required: true, message: "璇烽�夋嫨浜у搧鍚嶇О", trigger: "change" }],
productModelId: [{ required: true, message: "璇烽�夋嫨瑙勬牸鍨嬪彿", trigger: "change" }],
batchNo: [{ required: true, message: "璇疯緭鍏ユ壒鍙�", trigger: "blur" }],
@@ -203,27 +222,114 @@
const modelOptions = ref([])
// 鎵撳紑寮规
-const openDialog = (type, row) => {
+const openDialog = async (type, row) => {
operationType.value = type;
- userListNoPage().then(res => {
- userList.value = res.data || [];
- })
dialogFormVisible.value = true;
form.value = {}
- getProductOptions();
+
+ // 缂栬緫鎬佷笉鏍¢獙瑙勬牸鍨嬪彿锛坧rop 浠嶇粦瀹� productModelId锛屼絾缂栬緫鎬佹敼涓烘枃鏈睍绀猴級
+ data.rules.productModelId = [
+ {
+ required: type !== "edit",
+ message: "璇烽�夋嫨瑙勬牸鍨嬪彿",
+ trigger: "change",
+ },
+ ];
+
+ // 鍏堝姞杞戒笅鎷夐�夐」锛岀‘淇濈紪杈戞暟鎹彲浠ユ纭尮閰嶅洖鏄�
+ const userRes = await userListNoPage();
+ userList.value = userRes.data || [];
+
+ await getProductOptions();
+
// 澶勭悊缁撴灉榛樿鈥滄姤搴熲�濓紝涓斾笉鍙�夋嫨鍏跺畠椤�
form.value.dealResult = getScrapDealResultValue();
if (operationType.value === 'edit') {
- getQualityUnqualifiedInfo(row.id).then(res => {
- const { inspectState, ...rest } = (res.data || {})
- form.value = { ...rest, dealResult: getScrapDealResultValue() }
- })
+ const fallback = row || {};
+ const res = await getQualityUnqualifiedInfo(fallback.id);
+ const { inspectState, ...rest } = res.data || {};
+
+ // 鍏堢敤鍒楄〃琛屾暟鎹妸鈥滃繀鍥炴樉瀛楁鈥濈洿鎺ュ~涓婏紝閬垮厤璇︽儏鎺ュ彛瀛楁鍚嶄笉涓�鑷村鑷村叏绌恒��
+ const productName = rest?.productName ?? fallback?.productName;
+ const modelName = rest?.model ?? fallback?.model;
+
+ const checkTypeValue = rest?.checkType ?? fallback?.checkType;
+ const checkNameValue =
+ rest?.checkName ??
+ rest?.checkUserName ??
+ fallback?.checkName ??
+ fallback?.checkUserName;
+
+ const productId =
+ rest?.productId ??
+ findProductIdByLabel(productOptions.value, productName);
+
+ // 鍏堝洖濉瓧娈碉紙productModelId 闇�瑕佷緷璧� modelOptions锛岀◢鍚庡啀琛ワ級
+ const normalizedProductId = normalizeProductIdByOptions(productId);
+
+ // 缂栬緫鎬佷骇鍝佸悕绉板睍绀哄彧灞曠ず label锛岄伩鍏嶆爲缁勪欢鍥炴樉渚濊禆 value 鍖归厤
+ const productNameLabel =
+ rest?.productName ??
+ fallback?.productName ??
+ findNodeById(productOptions.value, normalizedProductId) ??
+ productName;
+ form.value = {
+ ...rest,
+ productName: productNameLabel,
+ productId: normalizedProductId,
+ productModelId: rest?.productModelId ?? undefined,
+ model: rest?.model ?? fallback?.model,
+ unit: rest?.unit ?? fallback?.unit,
+ batchNo: rest?.batchNo ?? fallback?.batchNo ?? "",
+ checkType:
+ checkTypeValue === undefined || checkTypeValue === null
+ ? undefined
+ : Number(checkTypeValue),
+ checkName: checkNameValue ?? "",
+ checkTime: rest?.checkTime ?? fallback?.checkTime ?? "",
+ defectivePhenomena:
+ rest?.defectivePhenomena ?? fallback?.defectivePhenomena ?? "",
+ dealName: rest?.dealName ?? fallback?.dealName ?? "",
+ dealTime: rest?.dealTime ?? fallback?.dealTime ?? "",
+ dealResult: getScrapDealResultValue(),
+ };
+
+ // 瑙勬牸鍨嬪彿涓嬫媺闇�瑕佷緷璧� productId
+ await loadModelsForProductId(form.value.productId);
+
+ // 瑙勬牸鍨嬪彿鍥炴樉锛堝璇︽儏娌$粰 productModelId锛屽氨鐢� model 鍚嶇О鍙嶆煡锛�
+ if (!form.value.productModelId) {
+ form.value.productModelId = findModelIdByModel(
+ modelOptions.value,
+ modelName
+ );
+ }
+
+ // 鏍规嵁 productModelId 鍥炲~ model/unit
+ if (form.value.productModelId) {
+ form.value.productModelId = normalizeModelIdByOptions(form.value.productModelId);
+ handleChangeModel(form.value.productModelId);
+ } else if (modelName) {
+ // productModelId 浠嶇劧鎷夸笉鍒版椂锛岃嚦灏戜繚璇� model/unit 鏂囨湰鍥炴樉
+ const matched =
+ (modelOptions.value || []).find((m) => {
+ const model = String(m?.model ?? "");
+ const id = String(m?.id ?? "");
+ const target = String(modelName ?? "");
+ return model === target || id === target;
+ }) ?? null;
+ if (matched) {
+ form.value.model = matched.model ?? form.value.model;
+ form.value.unit = matched.unit ?? form.value.unit;
+ } else {
+ form.value.model = modelName;
+ }
+ }
}
}
-const getProductOptions = () => {
- productTreeList().then((res) => {
- productOptions.value = convertIdToValue(res);
- });
+const getProductOptions = async () => {
+ const res = await productTreeList();
+ productOptions.value = convertIdToValue(res);
};
const getModels = (value) => {
form.value.productName = findNodeById(productOptions.value, value);
@@ -236,9 +342,41 @@
})
};
+// 缂栬緫妯″紡/鎴栦换鎰忛渶瑕佹椂锛氬彧鎷夊彇瑙勬牸鍨嬪彿鍒楄〃锛屼笉娓呯┖宸插洖濉殑瀛楁
+const loadModelsForProductId = async (productId) => {
+ if (!productId) return;
+ const res = await modelList({ id: productId });
+ modelOptions.value = res || [];
+
+ // 璁╁崟浣�/鍨嬪彿绛夊瓧娈典繚鎸佷笌褰撳墠 productModelId 涓�鑷�
+ if (form.value.productModelId) {
+ form.value.productModelId = normalizeModelIdByOptions(form.value.productModelId);
+ handleChangeModel(form.value.productModelId);
+ }
+};
+
const handleChangeModel = (value) => {
form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
+};
+
+// 瑙e喅鍥炴樉鏃剁被鍨嬩笉涓�鑷村鑷� el-tree-select / el-select 鍙樉绀� value锛坕d锛�
+const normalizeProductIdByOptions = (productId) => {
+ if (productId === undefined || productId === null) return productId;
+ const target = String(productId);
+ const stack = Array.isArray(productOptions.value) ? [...productOptions.value] : [];
+ while (stack.length) {
+ const node = stack.shift();
+ if (node && String(node?.value ?? "") === target) return node?.value;
+ if (node?.children?.length) stack.push(...node.children);
+ }
+ return productId;
+};
+
+const normalizeModelIdByOptions = (modelId) => {
+ if (modelId === undefined || modelId === null) return modelId;
+ const target = String(modelId);
+ return (modelOptions.value || []).find((m) => String(m?.id ?? "") === target)?.id ?? modelId;
};
const findNodeById = (nodes, productId) => {
for (let i = 0; i < nodes.length; i++) {
@@ -254,6 +392,33 @@
}
return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
};
+
+// 鏍规嵁鏍戣妭鐐� label 鍥炲~ value锛堢紪杈戝洖鏄惧厹搴曠敤锛�
+const findProductIdByLabel = (nodes, label) => {
+ const target = String(label ?? "");
+ if (!target) return undefined;
+
+ const stack = Array.isArray(nodes) ? [...nodes] : [];
+ while (stack.length) {
+ const node = stack.shift();
+ if (node && String(node?.label ?? "") === target) return node?.value;
+ if (node?.children?.length) stack.push(...node.children);
+ }
+ return undefined;
+};
+
+// 鏍规嵁瑙勬牸鍨嬪彿鍚嶇О鍙嶆煡 id锛堢紪杈戝洖鏄惧厹搴曠敤锛�
+const findModelIdByModel = (models, model) => {
+ const target = String(model ?? "");
+ if (!target) return undefined;
+ return (
+ (models || []).find((m) => {
+ const mModel = String(m?.model ?? "");
+ const mId = String(m?.id ?? "");
+ return mModel === target || mId === target;
+ })?.id
+ );
+};
function convertIdToValue(data) {
return data.map((item) => {
const { id, children, ...rest } = item;
--
Gitblit v1.9.3