From 45b6df5b9cba3cab3f0a3001dc7b7d9729923ba4 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 18 七月 2026 11:22:11 +0800
Subject: [PATCH] fix: 销售和采购新增产品修改
---
src/views/procurementManagement/procurementLedger/index.vue | 46 +++++++++++----
src/views/basicData/product/ProductSelectDialog.vue | 11 ++-
src/views/salesManagement/salesLedger/index.vue | 66 +++++++++++----------
3 files changed, 73 insertions(+), 50 deletions(-)
diff --git a/src/views/basicData/product/ProductSelectDialog.vue b/src/views/basicData/product/ProductSelectDialog.vue
index ad27baa..590f8ca 100644
--- a/src/views/basicData/product/ProductSelectDialog.vue
+++ b/src/views/basicData/product/ProductSelectDialog.vue
@@ -2,11 +2,11 @@
<el-dialog v-model="visible" title="閫夋嫨浜у搧" width="900px" destroy-on-close :close-on-click-modal="false">
<el-form :inline="true" :model="query" class="mb-2">
<el-form-item label="浜у搧鍚嶇О">
- <el-input v-model="query.productName" placeholder="杈撳叆浜у搧鍚嶇О" clearable @keyup.enter="onSearch" />
+ <el-input v-model="query.productName" placeholder="杈撳叆浜у搧鍚嶇О" clearable @keyup.enter="onSearch" style="width: 200px" />
</el-form-item>
<el-form-item label="浜у搧鍨嬪彿">
- <el-input v-model="query.model" placeholder="杈撳叆浜у搧鍨嬪彿" clearable @keyup.enter="onSearch" />
+ <el-input v-model="query.model" placeholder="杈撳叆浜у搧鍨嬪彿" clearable @keyup.enter="onSearch" style="width: 200px" />
</el-form-item>
<el-form-item>
@@ -20,9 +20,10 @@
@selection-change="handleSelectionChange" @select="handleSelect">
<el-table-column type="selection" width="55" />
<el-table-column type="index" label="搴忓彿" width="60" />
- <el-table-column prop="productName" label="浜у搧鍚嶇О" min-width="160" />
- <el-table-column prop="model" label="浜у搧鍨嬪彿" min-width="200" />
- <el-table-column prop="unit" label="鍗曚綅" min-width="160" />
+ <el-table-column prop="topProductName" label="浜у搧澶х被" min-width="120" />
+ <el-table-column prop="productName" label="浜у搧鍚嶇О" min-width="140" />
+ <el-table-column prop="model" label="浜у搧鍨嬪彿" min-width="180" />
+ <el-table-column prop="unit" label="鍗曚綅" min-width="100" />
</el-table>
<div class="mt-3 flex justify-end">
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 685a8aa..e2d340b 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -277,20 +277,22 @@
@cancel="closeProductDia">
<el-form :model="productForm" label-width="140px" label-position="top" :rules="productRules" ref="productFormRef">
<el-row :gutter="30">
- <el-col :span="24">
- <el-form-item label="浜у搧澶х被锛�" prop="productId">
- <el-tree-select v-model="productForm.productId" placeholder="璇烽�夋嫨" clearable filterable check-strictly
- @change="getModels" :data="productOptions" :render-after-expand="false" style="width: 100%" />
+ <el-col :span="12">
+ <el-form-item label="浜у搧澶х被锛�" prop="productCategory">
+ <el-input v-model="productForm.productCategory"
+ placeholder="鐐瑰嚮閫夋嫨"
+ readonly
+ @click="showProductSelectDialog = true"
+ style="cursor:pointer" />
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="24">
+ <el-col :span="12">
<el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
- <el-select v-model="productForm.productModelId" placeholder="璇烽�夋嫨" filterable clearable
- @change="getProductModel">
- <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
- </el-select>
+ <el-input v-model="productForm.specificationModel"
+ placeholder="鐐瑰嚮閫夋嫨"
+ readonly
+ @click="showProductSelectDialog = true"
+ style="cursor:pointer" />
</el-form-item>
</el-col>
</el-row>
@@ -372,6 +374,9 @@
</el-row>-->
</el-form>
</FormDialog>
+ <ProductSelectDialog v-model="showProductSelectDialog"
+ @confirm="handleProductSelect"
+ single />
<FileList v-if="fileListDialogVisible" v-model:visible="fileListDialogVisible" record-type="purchase_ledger"
:record-id="recordId" />
<Detail ref="detailRef" />
@@ -445,6 +450,7 @@
const fileList = ref([]);
import useUserStore from "@/store/modules/user";
import { modelList, productTreeList } from "@/api/basicData/product.js";
+import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
import dayjs from "dayjs";
import FileUpload from "@/components/AttachmentUpload/file/index.vue";
import { tableAmountFormatter, formatDecimal, buildAmountSummaryFormat } from '@/utils/numberFormat';
@@ -648,6 +654,7 @@
// 浜у搧琛ㄥ崟寮规鏁版嵁
const productFormVisible = ref(false);
+const showProductSelectDialog = ref(false);
const productOperationType = ref("");
const productOperationIndex = ref("");
const currentId = ref("");
@@ -668,8 +675,8 @@
isChecked: false,
},
productRules: {
- productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+ productCategory: [{ required: true, message: "璇烽�夋嫨浜у搧澶х被", trigger: "change" }],
+ productModelId: [{ required: true, message: "璇烽�夋嫨瑙勬牸鍨嬪彿", trigger: "change" }],
unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
taxInclusiveUnitPrice: [
@@ -1257,6 +1264,19 @@
await nextTick();
}
};
+
+// ProductSelectDialog 閫変腑鍥炶皟
+const handleProductSelect = (products) => {
+ if (!products || !products.length) return;
+ const p = products[0];
+ productForm.value.productId = p.productId;
+ productForm.value.productCategory = p.productName || '';
+ productForm.value.productModelId = p.id;
+ productForm.value.specificationModel = p.model || '';
+ productForm.value.unit = p.unit || '';
+ showProductSelectDialog.value = false;
+};
+
const getProductOptions = () => {
return productTreeList().then(res => {
productOptions.value = convertIdToValue(res);
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 1a0f0a5..23c7438 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -605,35 +605,22 @@
:rules="productRules"
ref="productFormRef">
<el-row :gutter="30">
- <el-col :span="24">
- <el-form-item label="浜у搧澶х被锛�"
- prop="productCategory">
- <el-tree-select v-model="productForm.productCategory"
- placeholder="璇烽�夋嫨"
- clearable
- filterable
- check-strictly
- @change="getModels"
- :data="productOptions"
- :render-after-expand="false"
- style="width: 100%" />
+ <el-col :span="12">
+ <el-form-item label="浜у搧澶х被锛�" prop="productCategory">
+ <el-input v-model="productForm.productCategory"
+ placeholder="鐐瑰嚮閫夋嫨"
+ readonly
+ @click="showProductSelectDialog = true"
+ style="cursor:pointer" />
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="24">
- <el-form-item label="瑙勬牸鍨嬪彿锛�"
- prop="productModelId">
- <el-select v-model="productForm.productModelId"
- placeholder="璇烽�夋嫨"
- clearable
- @change="getProductModel"
- filterable>
- <el-option v-for="item in modelOptions"
- :key="item.id"
- :label="item.model"
- :value="item.id" />
- </el-select>
+ <el-col :span="12">
+ <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
+ <el-input v-model="productForm.specificationModel"
+ placeholder="鐐瑰嚮閫夋嫨"
+ readonly
+ @click="showProductSelectDialog = true"
+ style="cursor:pointer" />
</el-form-item>
</el-col>
</el-row>
@@ -758,6 +745,9 @@
</el-row>
</el-form>
</FormDialog>
+ <ProductSelectDialog v-model="showProductSelectDialog"
+ @confirm="handleProductSelect"
+ single />
<!-- 瀵煎叆寮圭獥 -->
<FormDialog v-model="importUpload.open"
:title="importUpload.title"
@@ -1085,6 +1075,7 @@
buildAmountSummaryFormat,
} from "@/utils/numberFormat";
import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
+ import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
import { getCurrentDate } from "@/utils/index.js";
import { listCustomer } from "@/api/basicData/customer.js";
@@ -1113,6 +1104,7 @@
const total = ref(0);
const fileList = ref([]);
const deliveryFileList = ref([]);
+ const showProductSelectDialog = ref(false);
// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
const operationType = ref("");
@@ -1155,7 +1147,9 @@
const currentId = ref("");
const productFormData = reactive({
productForm: {
+ productId: "",
productCategory: "",
+ productModelId: "",
specificationModel: "",
unit: "",
quantity: "",
@@ -1167,11 +1161,8 @@
isProduction: false,
},
productRules: {
- productCategory: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- specificationModel: [
- { required: true, message: "璇烽�夋嫨", trigger: "change" },
- ],
+ productCategory: [{ required: true, message: "璇烽�夋嫨浜у搧澶х被", trigger: "change" }],
+ productModelId: [{ required: true, message: "璇烽�夋嫨瑙勬牸鍨嬪彿", trigger: "change" }],
unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
taxInclusiveUnitPrice: [
@@ -1503,6 +1494,17 @@
}
return formattedNumber(row, column, cellValue);
};
+ // ProductSelectDialog 閫変腑鍥炶皟
+ const handleProductSelect = (products) => {
+ if (!products || !products.length) return;
+ const p = products[0];
+ productForm.value.productId = p.productId;
+ productForm.value.productCategory = p.productName || '';
+ productForm.value.productModelId = p.id;
+ productForm.value.specificationModel = p.model || '';
+ productForm.value.unit = p.unit || '';
+ showProductSelectDialog.value = false;
+ };
// 鑾峰彇tree瀛愭暟鎹�
const getModels = value => {
productForm.value.productCategory = findNodeById(productOptions.value, value);
--
Gitblit v1.9.3