From cca940a6460bc4ec4266df4e413b05921d1f2e1d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 16 四月 2026 09:55:16 +0800
Subject: [PATCH] 中兴实强 1.新增生产订单时候查询工序接口传参修改
---
src/views/productionManagement/processRoute/processRouteItem/index.vue | 279 ++++++++++++++++++++++++++++++++-----------------------
1 files changed, 164 insertions(+), 115 deletions(-)
diff --git a/src/views/productionManagement/processRoute/processRouteItem/index.vue b/src/views/productionManagement/processRoute/processRouteItem/index.vue
index 3aecfa0..213c6aa 100644
--- a/src/views/productionManagement/processRoute/processRouteItem/index.vue
+++ b/src/views/productionManagement/processRoute/processRouteItem/index.vue
@@ -179,18 +179,27 @@
</el-select>
</el-form-item>
- <el-form-item label="浜у搧鍚嶇О" prop="productModelId">
+ <el-form-item label="浜у搧鍚嶇О" prop="selectedProducts">
<el-button type="primary" @click="showProductSelectDialog = true">
- {{ form.productName && form.model
- ? `${form.productName} - ${form.model}`
- : '閫夋嫨浜у搧' }}
+ {{ form.selectedProducts.length ? '閲嶆柊閫夋嫨浜у搧' : '閫夋嫨浜у搧' }}
</el-button>
+ <div v-if="form.selectedProducts.length" class="selected-product-tags">
+ <el-tag
+ v-for="product in form.selectedProducts"
+ :key="product.id"
+ class="selected-product-tag"
+ type="info"
+ effect="plain"
+ >
+ {{ product.productName }} - {{ product.model }}
+ </el-tag>
+ </div>
</el-form-item>
<el-form-item label="鍗曚綅" prop="unit">
<el-input
v-model="form.unit"
- :placeholder="form.productModelId ? '鏍规嵁閫夋嫨鐨勪骇鍝佽嚜鍔ㄥ甫鍑�' : '璇峰厛閫夋嫨浜у搧'"
+ :placeholder="form.selectedProducts.length === 1 ? '鏍规嵁閫夋嫨鐨勪骇鍝佽嚜鍔ㄥ甫鍑�' : '澶氫釜浜у搧鏃朵笉灞曠ず鍗曚釜鍗曚綅'"
clearable
:disabled="true"
/>
@@ -202,8 +211,8 @@
</el-form>
<template #footer>
- <el-button @click="closeDialog">鍙栨秷</el-button>
<el-button type="primary" @click="handleSubmit" :loading="submitLoading">纭畾</el-button>
+ <el-button @click="closeDialog">鍙栨秷</el-button>
</template>
</el-dialog>
@@ -211,7 +220,6 @@
<ProductSelectDialog
v-model="showProductSelectDialog"
@confirm="handleProductSelect"
- single
/>
</div>
</template>
@@ -269,6 +277,8 @@
routeId: routeId.value,
processId: undefined,
productModelId: undefined,
+ productModelIds: "",
+ selectedProducts: [],
productName: "",
model: "",
unit: "",
@@ -277,94 +287,118 @@
const rules = {
processId: [{ required: true, message: '璇烽�夋嫨宸ュ簭', trigger: 'change' }],
- productModelId: [{ required: true, message: '璇烽�夋嫨浜у搧', trigger: 'change' }],
+ selectedProducts: [{
+ required: true,
+ validator: (_, value, callback) => {
+ if (Array.isArray(value) && value.length > 0) {
+ callback();
+ return;
+ }
+ callback(new Error('璇烽�夋嫨浜у搧'));
+ },
+ trigger: 'change',
+ }],
};
-// 鏍规嵁宸ュ簭ID鑾峰彇宸ュ簭鍚嶇О
const getProcessName = (processId) => {
if (!processId) return '';
- const process = processOptions.value.find(p => p.id === processId);
+ const process = processOptions.value.find((p) => p.id === processId);
return process ? process.name : '';
};
-// 鑾峰彇鍒楄〃
const getList = () => {
tableLoading.value = true;
const listPromise =
- pageType.value === "order"
+ pageType.value === 'order'
? findProductProcessRouteItemList({ orderId: orderId.value })
: findProcessRouteItemList({ routeId: routeId.value });
listPromise
- .then(res => {
+ .then((res) => {
tableData.value = res.data || [];
tableLoading.value = false;
- // 鍒楄〃鍔犺浇瀹屾垚鍚庡垵濮嬪寲鎷栨嫿鎺掑簭
nextTick(() => {
initSortable();
});
})
- .catch(err => {
+ .catch((err) => {
tableLoading.value = false;
- console.error("鑾峰彇鍒楄〃澶辫触锛�", err);
- proxy?.$modal?.msgError("鑾峰彇鍒楄〃澶辫触");
+ console.error('鑾峰彇鍒楄〃澶辫触:', err);
+ proxy?.$modal?.msgError('鑾峰彇鍒楄〃澶辫触');
});
};
-// 鑾峰彇宸ュ簭鍒楄〃
const getProcessList = () => {
processList({})
- .then(res => {
+ .then((res) => {
processOptions.value = res.data || [];
})
- .catch(err => {
- console.error("鑾峰彇宸ュ簭澶辫触锛�", err);
+ .catch((err) => {
+ console.error('鑾峰彇宸ュ簭澶辫触:', err);
});
};
-// 鑾峰彇宸ヨ壓璺嚎璇︽儏锛堜粠璺敱鍙傛暟鑾峰彇锛�
const getRouteInfo = () => {
routeInfo.value = {
processRouteCode: route.query.processRouteCode || '',
productName: route.query.productName || '',
model: route.query.model || '',
bomNo: route.query.bomNo || '',
- description: route.query.description || ''
+ description: route.query.description || '',
};
};
-// 鏂板
+const getEditSelectedProducts = (row) => {
+ const idList = String(row.productModelIds || row.productModelId || '')
+ .split(',')
+ .map((item) => item.trim())
+ .filter(Boolean);
+ const nameList = String(row.productName || '')
+ .split(',')
+ .map((item) => item.trim());
+ const modelList = String(row.model || '')
+ .split(',')
+ .map((item) => item.trim());
+
+ return idList.map((id, index) => ({
+ id: Number(id) || id,
+ productName: nameList[index] || row.productName || '',
+ model: modelList[index] || row.model || '',
+ unit: row.unit || '',
+ }));
+};
+
const handleAdd = () => {
operationType.value = 'add';
resetForm();
dialogVisible.value = true;
};
-// 缂栬緫
const handleEdit = (row) => {
operationType.value = 'edit';
+ const selectedProducts = getEditSelectedProducts(row);
form.value = {
id: row.id,
routeId: routeId.value,
processId: row.processId,
productModelId: row.productModelId,
- productName: row.productName || "",
- model: row.model || "",
- unit: row.unit || "",
+ productModelIds: row.productModelIds || (row.productModelId ? String(row.productModelId) : ''),
+ selectedProducts,
+ productName: row.productName || '',
+ model: row.model || '',
+ unit: row.unit || '',
isQuality: row.isQuality,
};
dialogVisible.value = true;
};
-// 鍒犻櫎
const handleDelete = (row) => {
ElMessageBox.confirm('纭鍒犻櫎璇ュ伐鑹鸿矾绾块」鐩紵', '鎻愮ず', {
confirmButtonText: '纭',
cancelButtonText: '鍙栨秷',
- type: 'warning'
+ type: 'warning',
})
.then(() => {
- // 鐢熶骇璁㈠崟涓嬩娇鐢� productProcessRoute 鐨勫垹闄ゆ帴鍙o紙璺敱鍚庢嫾鎺� id锛夛紝鍏跺畠鎯呭喌浣跨敤宸ヨ壓璺嚎椤圭洰鎵归噺鍒犻櫎鎺ュ彛
const deletePromise =
pageType.value === 'order'
? deleteRouteItem(row.id)
@@ -382,112 +416,115 @@
.catch(() => {});
};
-// 浜у搧閫夋嫨
const handleProductSelect = (products) => {
if (products && products.length > 0) {
- const product = products[0];
- form.value.productModelId = product.id;
- form.value.productName = product.productName;
- form.value.model = product.model;
- form.value.unit = product.unit || "";
+ const firstProduct = products[0];
+ form.value.selectedProducts = products;
+ form.value.productModelIds = products.map((item) => item.id).join(',');
+ form.value.productModelId = products.length === 1 ? firstProduct.id : undefined;
+ form.value.productName = products.length === 1 ? firstProduct.productName : '';
+ form.value.model = products.length === 1 ? firstProduct.model : '';
+ form.value.unit = products.length === 1 ? (firstProduct.unit || '') : '';
showProductSelectDialog.value = false;
- // 瑙﹀彂琛ㄥ崟楠岃瘉
- formRef.value?.validateField('productModelId');
+ formRef.value?.validateField('selectedProducts');
}
};
-// 鎻愪氦
const handleSubmit = () => {
formRef.value.validate((valid) => {
- if (valid) {
- submitLoading.value = true;
-
- if (operationType.value === 'add') {
- // 鏂板锛氫紶鍗曚釜瀵硅薄锛屽寘鍚玠ragSort瀛楁
- // dragSort = 褰撳墠鍒楄〃闀垮害 + 1锛岃〃绀烘柊澧炶褰曟帓鍦ㄦ渶鍚�
- const dragSort = tableData.value.length + 1;
- const isOrderPage = pageType.value === 'order';
-
- const addPromise = isOrderPage
- ? addRouteItem({
- productOrderId: orderId.value,
- productRouteId: routeId.value,
- processId: form.value.processId,
- productModelId: form.value.productModelId,
- isQuality: form.value.isQuality,
- dragSort,
- })
- : addOrUpdateProcessRouteItem({
- routeId: routeId.value,
- processId: form.value.processId,
- productModelId: form.value.productModelId,
- isQuality: form.value.isQuality,
- dragSort,
- });
-
- addPromise
- .then(() => {
- proxy?.$modal?.msgSuccess('鏂板鎴愬姛');
- closeDialog();
- getList();
- })
- .catch(() => {
- proxy?.$modal?.msgError('鏂板澶辫触');
- })
- .finally(() => {
- submitLoading.value = false;
- });
- } else {
- // 缂栬緫锛氱敓浜ц鍗曚笅浣跨敤 productProcessRoute/updateRouteItem锛屽叾瀹冩儏鍐典娇鐢ㄥ伐鑹鸿矾绾块」鐩洿鏂版帴鍙�
- const isOrderPage = pageType.value === 'order';
-
- const updatePromise = isOrderPage
- ? addOrUpdateProductProcessRouteItem({
- id: form.value.id,
- processId: form.value.processId,
- productModelId: form.value.productModelId,
- isQuality: form.value.isQuality,
- })
- : addOrUpdateProcessRouteItem({
- routeId: routeId.value,
- processId: form.value.processId,
- productModelId: form.value.productModelId,
- id: form.value.id,
- isQuality: form.value.isQuality,
- });
-
- updatePromise
- .then(() => {
- proxy?.$modal?.msgSuccess('淇敼鎴愬姛');
- closeDialog();
- getList();
- })
- .catch(() => {
- proxy?.$modal?.msgError('淇敼澶辫触');
- })
- .finally(() => {
- submitLoading.value = false;
- });
- }
+ if (!valid) {
+ return;
}
+
+ submitLoading.value = true;
+
+ if (operationType.value === 'add') {
+ const dragSort = tableData.value.length + 1;
+ const isOrderPage = pageType.value === 'order';
+
+ const addPromise = isOrderPage
+ ? addRouteItem({
+ productOrderId: orderId.value,
+ productRouteId: routeId.value,
+ processId: form.value.processId,
+ productModelId: form.value.productModelId,
+ productModelIds: form.value.productModelIds,
+ isQuality: form.value.isQuality,
+ dragSort,
+ })
+ : addOrUpdateProcessRouteItem({
+ routeId: routeId.value,
+ processId: form.value.processId,
+ productModelId: form.value.productModelId,
+ productModelIds: form.value.productModelIds,
+ isQuality: form.value.isQuality,
+ dragSort,
+ });
+
+ addPromise
+ .then(() => {
+ proxy?.$modal?.msgSuccess('鏂板鎴愬姛');
+ closeDialog();
+ getList();
+ })
+ .catch(() => {
+ proxy?.$modal?.msgError('鏂板澶辫触');
+ })
+ .finally(() => {
+ submitLoading.value = false;
+ });
+ return;
+ }
+
+ const isOrderPage = pageType.value === 'order';
+ const updatePromise = isOrderPage
+ ? addOrUpdateProductProcessRouteItem({
+ id: form.value.id,
+ processId: form.value.processId,
+ productModelId: form.value.productModelId,
+ productModelIds: form.value.productModelIds,
+ isQuality: form.value.isQuality,
+ })
+ : addOrUpdateProcessRouteItem({
+ routeId: routeId.value,
+ processId: form.value.processId,
+ productModelId: form.value.productModelId,
+ productModelIds: form.value.productModelIds,
+ id: form.value.id,
+ isQuality: form.value.isQuality,
+ });
+
+ updatePromise
+ .then(() => {
+ proxy?.$modal?.msgSuccess('淇敼鎴愬姛');
+ closeDialog();
+ getList();
+ })
+ .catch(() => {
+ proxy?.$modal?.msgError('淇敼澶辫触');
+ })
+ .finally(() => {
+ submitLoading.value = false;
+ });
});
};
-// 閲嶇疆琛ㄥ崟
const resetForm = () => {
form.value = {
id: undefined,
routeId: routeId.value,
processId: undefined,
productModelId: undefined,
- productName: "",
- model: "",
- unit: "",
+ productModelIds: '',
+ selectedProducts: [],
+ productName: '',
+ model: '',
+ unit: '',
+ isQuality: false,
};
formRef.value?.resetFields();
};
-// 鍏抽棴寮圭獥
const closeDialog = () => {
dialogVisible.value = false;
resetForm();
@@ -753,6 +790,18 @@
margin: 10px 0;
}
+.selected-product-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-top: 10px;
+}
+
+.selected-product-tag {
+ max-width: 100%;
+}
+
+
.card-footer {
display: flex;
justify-content: space-around;
--
Gitblit v1.9.3