From d57994cbc653a15548f61e4696905eb01ce4fdb9 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 28 八月 2026 20:17:41 +0800
Subject: [PATCH] feat: 选择产品添加产品大类选择

---
 src/views/basicData/product/ProductSelectDialog.vue |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/views/basicData/product/ProductSelectDialog.vue b/src/views/basicData/product/ProductSelectDialog.vue
index 590f8ca..1586f58 100644
--- a/src/views/basicData/product/ProductSelectDialog.vue
+++ b/src/views/basicData/product/ProductSelectDialog.vue
@@ -1,12 +1,18 @@
 <template>
   <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-select v-model="query.topProductParentId" placeholder="閫夋嫨浜у搧澶х被" clearable @change="onSearch" style="width: 150px">
+          <el-option v-for="item in categoryList" :key="item.id" :label="item.label || item.productName" :value="item.id" />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="浜у搧鍚嶇О">
-        <el-input v-model="query.productName" placeholder="杈撳叆浜у搧鍚嶇О" clearable @keyup.enter="onSearch" style="width: 200px" />
+        <el-input v-model="query.productName" placeholder="杈撳叆浜у搧鍚嶇О" clearable @keyup.enter="onSearch" style="width: 150px" />
       </el-form-item>
 
       <el-form-item label="浜у搧鍨嬪彿">
-        <el-input v-model="query.model" placeholder="杈撳叆浜у搧鍨嬪彿" clearable @keyup.enter="onSearch" style="width: 200px" />
+        <el-input v-model="query.model" placeholder="杈撳叆浜у搧鍨嬪彿" clearable @keyup.enter="onSearch" style="width: 150px" />
       </el-form-item>
 
       <el-form-item>
@@ -45,6 +51,7 @@
 import { computed, onMounted, reactive, ref, watch, nextTick } from "vue";
 import { ElMessage } from "element-plus";
 import { productModelList, productModelListByUrl } from '@/api/basicData/productModel'
+import { productTreeList } from '@/api/basicData/product'
 
 export type ProductRow = {
   id: number;
@@ -70,7 +77,19 @@
 const query = reactive({
   productName: "",
   model: "",
+  topProductParentId: undefined as number | undefined,
 });
+
+const categoryList = ref<any[]>([]);
+
+async function loadCategory() {
+  try {
+    const res = await productTreeList();
+    categoryList.value = res || [];
+  } catch (e) {
+    console.error("Failed to load product categories", e);
+  }
+}
 
 const page = reactive({
   pageNum: 1,
@@ -132,6 +151,7 @@
 function onReset() {
   query.productName = "";
   query.model = "";
+  query.topProductParentId = props.topProductParentId;
   page.pageNum = 1;
   loadData();
 }
@@ -162,7 +182,7 @@
       model: query.model.trim(),
       current: page.pageNum,
       size: page.pageSize,
-      topProductParentId: props.topProductParentId,
+      topProductParentId: query.topProductParentId ?? props.topProductParentId,
     };
     const res: any = props.requestUrl
       ? await productModelListByUrl(props.requestUrl, params)
@@ -179,10 +199,13 @@
 watch(() => props.modelValue, (visible) => {
   if (visible) {
     multipleSelection.value = [];
+    query.topProductParentId = props.topProductParentId;
   }
 });
 
 onMounted(() => {
-  loadData()
+  query.topProductParentId = props.topProductParentId;
+  loadCategory();
+  loadData();
 })
 </script>

--
Gitblit v1.9.3