From fe6ba6220f32276f147a16c41e7a69c2a18e5012 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 22 九月 2026 11:21:58 +0800
Subject: [PATCH] feat(inventory): 优化库存管理批量详情页面功能

---
 src/views/basicData/tankInfo/index.vue |  186 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 176 insertions(+), 10 deletions(-)

diff --git a/src/views/basicData/tankInfo/index.vue b/src/views/basicData/tankInfo/index.vue
index e748b66..5b15939 100644
--- a/src/views/basicData/tankInfo/index.vue
+++ b/src/views/basicData/tankInfo/index.vue
@@ -18,6 +18,30 @@
                       prefix-icon="Search"
                       @change="handleQuery" />
           </el-form-item>
+          <el-form-item label="鏄惁鍚敤锛�">
+            <el-select v-model="searchForm.isEnabled"
+                       placeholder="璇烽�夋嫨"
+                       clearable
+                       style="width: 140px"
+                       @change="handleQuery">
+              <el-option label="鍚敤"
+                         :value="1" />
+              <el-option label="鏈惎鐢�"
+                         :value="0" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="鐢ㄩ�旓細">
+            <el-select v-model="searchForm.usageType"
+                       placeholder="璇烽�夋嫨"
+                       clearable
+                       style="width: 140px"
+                       @change="handleQuery">
+              <el-option label="绉熻祦"
+                         :value="1" />
+              <el-option label="鑷敤"
+                         :value="2" />
+            </el-select>
+          </el-form-item>
           <el-form-item>
             <el-button type="primary"
                        @click="handleQuery"> 鎼滅储
@@ -61,9 +85,28 @@
         <el-table-column label="缃愬"
                          prop="capacity"
                          min-width="120" />
-        <el-table-column label="搴撳瓨浣欓噺(m鲁)"
+        <el-table-column label="搴撳瓨浣欓噺"
                          prop="remaining"
                          min-width="140" />
+        <el-table-column label="鏄惁鍚敤"
+                         prop="isEnabled"
+                         align="center"
+                         width="100">
+          <template #default="scope">
+            <el-tag :type="scope.row.isEnabled === 1 ? 'success' : 'info'"
+                    size="small">
+              {{ scope.row.isEnabled === 1 ? "鍚敤" : "鏈惎鐢�" }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐢ㄩ��"
+                         prop="usageType"
+                         align="center"
+                         width="90">
+          <template #default="scope">
+            {{ getUsageTypeText(scope.row.usageType) }}
+          </template>
+        </el-table-column>
         <el-table-column label="绉熷淇℃伅"
                          prop="tenantInfo"
                          min-width="160"
@@ -162,7 +205,7 @@
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="搴撳瓨浣欓噺(m鲁)锛�"
+            <el-form-item label="搴撳瓨浣欓噺锛�"
                           prop="remaining">
               <el-input-number v-model="form.remaining"
                                :precision="2"
@@ -172,11 +215,48 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
+            <el-form-item label="鏄惁鍚敤锛�"
+                          prop="isEnabled">
+              <el-switch v-model="form.isEnabled"
+                         :active-value="1"
+                         :inactive-value="0"
+                         active-text="鍚敤"
+                         inactive-text="鏈惎鐢�" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30"
+                v-if="form.isEnabled === 1">
+          <el-col :span="12">
+            <el-form-item label="鐢ㄩ�旓細"
+                          prop="usageType">
+              <el-radio-group v-model="form.usageType">
+                <el-radio :value="1">绉熻祦</el-radio>
+                <el-radio :value="2">鑷敤</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12"
+                  v-if="form.usageType === 1">
             <el-form-item label="绉熷淇℃伅锛�"
-                          prop="tenantInfo">
-              <el-input v-model="form.tenantInfo"
-                        placeholder="璇疯緭鍏ョ瀹俊鎭�"
-                        clearable />
+                          prop="tenantInfo"
+                          :rules="[
+                {
+                required: true,
+                message: '绉熻祦鐨勫偍缃愬繀椤诲~鍐欑瀹俊鎭�',
+                trigger: 'blur',
+              }
+            ]">
+              <el-select v-model="form.tenantInfo"
+                         placeholder="璇烽�夋嫨绉熷"
+                         clearable
+                         filterable
+                         style="width: 100%">
+                <el-option v-for="item in tenantSelectOptions"
+                           :key="item.id"
+                           :label="item.customerName"
+                           :value="item.customerName" />
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -188,7 +268,7 @@
 <script setup>
   import FormDialog from "@/components/Dialog/FormDialog.vue";
   import pagination from "@/components/PIMTable/Pagination.vue";
-  import { ref, reactive, toRefs, getCurrentInstance } from "vue";
+  import { ref, reactive, toRefs, watch, computed, getCurrentInstance } from "vue";
   import { Search } from "@element-plus/icons-vue";
   import { ElMessageBox } from "element-plus";
   import {
@@ -197,8 +277,10 @@
     updateTankInfo,
     delTankInfo,
   } from "@/api/basicData/tankInfo.js";
+  import { listCustomer } from "@/api/basicData/customer.js";
 
   const { proxy } = getCurrentInstance();
+  const { customer_type } = proxy.useDict("customer_type");
   const tableData = ref([]);
   const selectedRows = ref([]);
   const tableLoading = ref(false);
@@ -214,6 +296,8 @@
     searchForm: {
       tankNo: "",
       category: "",
+      isEnabled: "",
+      usageType: "",
     },
     form: {
       id: null,
@@ -222,6 +306,8 @@
       oilProduct: "",
       capacity: null,
       remaining: null,
+      isEnabled: 1,
+      usageType: null,
       tenantInfo: "",
     },
     rules: {
@@ -230,6 +316,51 @@
     },
   });
   const { searchForm, form, rules } = toRefs(data);
+
+  // 鐢ㄩ�旀枃妗堬細1 绉熻祦 / 2 鑷敤
+  const getUsageTypeText = value => ({ 1: "绉熻祦", 2: "鑷敤" })[value] || "--";
+
+  // 绉熷鍙兘浠庛�屼唬鍌ㄥ鎴枫�嶅垎绫婚噷閫夛紱瀛楀吀鐨� value 鏈繀灏辨槸涓枃鏍囩锛屾寜 label 鍙嶆煡鐪熷疄鍙栧��
+  const tenantOptions = ref([]);
+  let loadedTenantType = null;
+  const loadTenantOptions = () => {
+    const hit = (customer_type.value || []).find(
+      item => item.label === "浠e偍瀹㈡埛"
+    );
+    const customerType = hit ? hit.value : "浠e偍瀹㈡埛";
+    if (customerType === loadedTenantType) return;
+    loadedTenantType = customerType;
+    listCustomer({ current: -1, size: -1, customerType }).then(res => {
+      tenantOptions.value = res.data.records || [];
+    });
+  };
+  // 瀛楀吀寮傛鍒拌揪鍚庡啀鎷変竴娆★紱瀛楀吀鍛戒腑缂撳瓨鏃� immediate 杩欎竴娆″氨澶熶簡
+  watch(customer_type, loadTenantOptions, { immediate: true });
+
+  // 鍘嗗彶鏁版嵁鏄墜宸ュ~鐨勭瀹㈠悕锛屾湭蹇呰繕鍦ㄤ唬鍌ㄥ鎴峰垪琛ㄩ噷锛岃ˉ涓�涓复鏃堕�夐」淇濊瘉鍥炴樉
+  const tenantSelectOptions = computed(() => {
+    const list = tenantOptions.value;
+    const current = form.value.tenantInfo;
+    if (current && !list.some(item => item.customerName === current)) {
+      return [...list, { id: `legacy-${current}`, customerName: current }];
+    }
+    return list;
+  });
+
+  // 鏈惎鐢ㄦ椂鐢ㄩ�斾笌绉熷淇℃伅涓�寰嬫竻绌猴紱閫夎嚜鐢ㄦ椂绉熷淇℃伅鑷姩娓呯┖锛堢璧佹墠闇�瑕佺瀹級
+  watch(
+    () => [form.value.isEnabled, form.value.usageType],
+    () => {
+      if (form.value.isEnabled !== 1) {
+        form.value.usageType = null;
+        form.value.tenantInfo = "";
+        return;
+      }
+      if (form.value.usageType !== 1) {
+        form.value.tenantInfo = "";
+      }
+    }
+  );
 
   const getList = () => {
     tableLoading.value = true;
@@ -259,14 +390,49 @@
     selectedRows.value = selection;
   };
 
+  const buildEmptyForm = () => ({
+    id: null,
+    tankNo: "",
+    category: "",
+    oilProduct: "",
+    capacity: null,
+    remaining: null,
+    isEnabled: 1,
+    usageType: null,
+    tenantInfo: "",
+  });
+
   const openForm = (type, row) => {
     operationType.value = type;
-    form.value = {};
+    // 鍏堥噸缃啀璧嬪�硷細resetFields 浼氭妸瀛楁鎵撳洖鎸傝浇鏃剁殑鍒濆�硷紝鏀惧悗闈細鎶婂垰濉ソ鐨勫�兼竻鎺�
     proxy.resetForm("formRef");
+    form.value = buildEmptyForm();
     dialogFormVisible.value = true;
     if (type === "edit" && row) {
-      const { id, tankNo, category, oilProduct, capacity, remaining, tenantInfo } = row;
-      form.value = { id, tankNo, category, oilProduct, capacity, remaining, tenantInfo };
+      const {
+        id,
+        tankNo,
+        category,
+        oilProduct,
+        capacity,
+        remaining,
+        isEnabled,
+        usageType,
+        tenantInfo,
+      } = row;
+      form.value = {
+        ...buildEmptyForm(),
+        id,
+        tankNo,
+        category,
+        oilProduct,
+        capacity,
+        remaining,
+        // 鍘嗗彶鏁版嵁娌℃湁璇ュ瓧娈碉紝缂哄け鏃舵寜銆屽惎鐢ㄣ�嶅鐞嗭紝閬垮厤淇濆瓨鏃惰璇疆涓烘湭鍚敤
+        isEnabled: isEnabled ?? 1,
+        usageType: usageType ?? null,
+        tenantInfo: tenantInfo ?? "",
+      };
     }
   };
 

--
Gitblit v1.9.3