From 0218971aa6289516ecce2469778ef40b0a747bf7 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期二, 23 十二月 2025 16:55:45 +0800
Subject: [PATCH] 产品选项

---
 src/views/basicData/product/ProductSelectDialog.vue |  164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 164 insertions(+), 0 deletions(-)

diff --git a/src/views/basicData/product/ProductSelectDialog.vue b/src/views/basicData/product/ProductSelectDialog.vue
new file mode 100644
index 0000000..d4b0119
--- /dev/null
+++ b/src/views/basicData/product/ProductSelectDialog.vue
@@ -0,0 +1,164 @@
+<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-input
+            v-model="query.productName"
+            placeholder="杈撳叆浜у搧澶х被"
+            clearable
+            @keyup.enter="onSearch"
+        />
+      </el-form-item>
+
+      <el-form-item label="鍨嬪彿鍚嶇О">
+        <el-input
+            v-model="query.model"
+            placeholder="杈撳叆鍨嬪彿鍚嶇О"
+            clearable
+            @keyup.enter="onSearch"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" @click="onSearch">鎼滅储</el-button>
+        <el-button @click="onReset">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <!-- 鍒楄〃 -->
+    <el-table
+        v-loading="loading"
+        :data="tableData"
+        height="420"
+        highlight-current-row
+        @current-change="onCurrentChange"
+    >
+      <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>
+
+    <div class="mt-3 flex justify-end">
+      <el-pagination
+          background
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+          v-model:page-size="page.pageSize"
+          v-model:current-page="page.pageNum"
+          :page-sizes="[10, 20, 50, 100]"
+          @size-change="onPageChange"
+          @current-change="onPageChange"
+      />
+    </div>
+
+    <template #footer>
+      <el-button @click="close()">鍙栨秷</el-button>
+      <el-button type="primary" :disabled="!selectedRow" @click="onConfirm">
+        纭畾
+      </el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup lang="ts">
+import {computed, onMounted, reactive, ref, watch} from "vue";
+import {ElMessage} from "element-plus";
+import {list} from '@/api/basicData/productModel'
+
+export type ProductRow = {
+  id: number;
+  productName: string;
+  model: string;
+  unit?: string;
+};
+
+const props = defineProps<{
+  modelValue: boolean;
+}>();
+
+const emit = defineEmits<{
+  (e: "update:modelValue", v: boolean): void;
+  (e: "confirm", row: ProductRow): void; // 鎶婃暣琛屾暟鎹繑缁欑埗缁勪欢
+}>();
+
+const visible = computed({
+  get: () => props.modelValue,
+  set: (v) => emit("update:modelValue", v),
+});
+
+const query = reactive({
+  productName: "",
+  model: "",
+});
+
+const page = reactive({
+  pageNum: 1,
+  pageSize: 10,
+});
+
+const loading = ref(false);
+const tableData = ref<ProductRow[]>([]);
+const total = ref(0);
+const selectedRow = ref<ProductRow | null>(null);
+
+function close() {
+  visible.value = false;
+}
+
+function onCurrentChange(row: ProductRow | null) {
+  selectedRow.value = row;
+}
+
+function onSearch() {
+  page.pageNum = 1;
+  loadData();
+}
+
+function onReset() {
+  query.productName = "";
+  query.model = "";
+  page.pageNum = 1;
+  loadData();
+}
+
+function onPageChange() {
+  loadData();
+}
+
+function onConfirm() {
+  if (!selectedRow.value) {
+    ElMessage.warning("璇烽�夋嫨涓�鏉′骇鍝�");
+    return;
+  }
+  emit("confirm", selectedRow.value);
+  close();
+}
+
+async function loadData() {
+  loading.value = true;
+  try {
+    selectedRow.value = null; // 缈婚〉/鎼滅储鍚庢竻绌洪�夋嫨鏇寸鍚堥鏈�
+    const res = await list({
+      productName: query.productName.trim(),
+      model: query.model.trim(),
+      pageNum: page.pageNum,
+      pageSize: page.pageSize,
+    });
+    tableData.value = res.list;
+    total.value = res.total;
+  } finally {
+    loading.value = false;
+  }
+}
+
+onMounted(() => {
+  loadData()
+})
+</script>

--
Gitblit v1.9.3