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