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

---
 deploy.bat                                                               |   10 
 src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue  |    2 
 src/views/procurementManagement/procurementLedger/index.vue              |   78 -----------
 src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue    |    4 
 src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue       |  238 ++++++++++++++++++++++++++-------
 src/views/reportAnalysis/dataDashboard/index.vue                         |    4 
 src/views/inventoryManagement/stockManagement/OilStockInDialog.vue       |    6 
 src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue    |    2 
 src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue      |    6 
 src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue |    2 
 src/views/basicData/tankInfo/index.vue                                   |   48 ++++++
 11 files changed, 249 insertions(+), 151 deletions(-)

diff --git a/deploy.bat b/deploy.bat
index 7586c2d..d00e69e 100644
--- a/deploy.bat
+++ b/deploy.bat
@@ -3,12 +3,12 @@
 setlocal enabledelayedexpansion
 
 :: ================= Config =================
-set "USER=root"
-set "PASS=Xdrjkj@10086#"
-set "IP=36.213.180.217
-set "PORT=65022"
+set "USER=dell"
+set "PASS=qweasdzxc2580@.."
+set "IP=114.132.189.42
+set "PORT=9100"
 set "DIST_DIR=dist"
-set "REMOTE_DIR=/data/project/pim/vue/xjgm"
+set "REMOTE_DIR=/home/vue/tjbm-product"
 set "SSH_OPTS=-o StrictHostKeyChecking=no -o ConnectTimeout=10"
 :: ===========================================
 
diff --git a/src/views/basicData/tankInfo/index.vue b/src/views/basicData/tankInfo/index.vue
index a93d11e..5b15939 100644
--- a/src/views/basicData/tankInfo/index.vue
+++ b/src/views/basicData/tankInfo/index.vue
@@ -85,7 +85,7 @@
         <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="鏄惁鍚敤"
@@ -205,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"
@@ -247,9 +247,16 @@
                 trigger: 'blur',
               }
             ]">
-              <el-input v-model="form.tenantInfo"
-                        placeholder="璇疯緭鍏ョ瀹俊鎭�"
-                        clearable />
+              <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>
@@ -261,7 +268,7 @@
 <script setup>
   import FormDialog from "@/components/Dialog/FormDialog.vue";
   import pagination from "@/components/PIMTable/Pagination.vue";
-  import { ref, reactive, toRefs, watch, 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 {
@@ -270,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);
@@ -311,6 +320,33 @@
   // 鐢ㄩ�旀枃妗堬細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],
diff --git a/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue b/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
index 8be2811..27276c8 100644
--- a/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
+++ b/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
@@ -10,13 +10,14 @@
     <div class="detail-content">
       <div class="detail-table-wrapper">
         <el-tabs v-model="detailTab"
-                 class="detail-tabs">
+                 class="detail-tabs"
+                 @tab-change="handleTabChange">
           <el-tab-pane label="搴撳瓨淇℃伅"
                        name="main">
             <el-table
-              :data="tableData"
+              :data="inventoryData"
               border
-              v-loading="tableLoading"
+              v-loading="inventoryLoading"
               style="width: 100%"
               height="100%"
             >
@@ -92,9 +93,9 @@
           <el-tab-pane label="鍏ュ簱淇℃伅"
                        name="in">
             <el-table
-              :data="tableData"
+              :data="inboundData"
               border
-              v-loading="tableLoading"
+              v-loading="inboundLoading"
               style="width: 100%"
               height="100%"
             >
@@ -102,6 +103,8 @@
                            align="center"
                            :header-cell-style="groupHeaderStyle">
             <el-table-column label="娌瑰搧" prop="productName" min-width="90" show-overflow-tooltip />
+            <el-table-column label="鎵瑰彿" prop="batchNo" min-width="150" show-overflow-tooltip />
+            <el-table-column label="鍏ュ簱鏁伴噺(鍚�)" prop="stockInNum" min-width="110" show-overflow-tooltip />
             <el-table-column label="鍏ュ簱鍚嶇О" prop="oilDepotName" min-width="130" show-overflow-tooltip />
             <el-table-column label="鍏ュ簱绫诲埆" prop="inboundCategory" min-width="100" show-overflow-tooltip />
             <el-table-column label="鍌ㄧ綈鍙�" prop="tankNo" min-width="100" show-overflow-tooltip />
@@ -168,9 +171,9 @@
           <el-tab-pane label="鍑哄簱淇℃伅"
                        name="out">
             <el-table
-              :data="tableData"
+              :data="outboundData"
               border
-              v-loading="tableLoading"
+              v-loading="outboundLoading"
               style="width: 100%"
               height="100%"
             >
@@ -178,21 +181,22 @@
                            align="center"
                            :header-cell-style="groupHeaderStyle">
             <el-table-column label="鍑哄簱绫诲埆" prop="outCategory" min-width="90" show-overflow-tooltip />
-            <el-table-column label="鍌ㄥ簱鍚嶇О" prop="outOilDepotName" min-width="130" show-overflow-tooltip />
-            <el-table-column label="鍌ㄧ綈鍙�" prop="outTankNo" min-width="100" show-overflow-tooltip />
+            <el-table-column label="鎵瑰彿" prop="batchNo" min-width="150" show-overflow-tooltip />
+            <el-table-column label="鍌ㄥ簱鍚嶇О" prop="oilDepotName" min-width="130" show-overflow-tooltip />
+            <el-table-column label="鍌ㄧ綈鍙�" prop="tankNo" min-width="100" show-overflow-tooltip />
             <el-table-column label="鍑哄簱鏃ユ湡" prop="outDate" min-width="110" show-overflow-tooltip />
             <el-table-column label="娌瑰搧" prop="productName" min-width="90" show-overflow-tooltip />
             <el-table-column label="鍑哄簱鍚ㄤ綅(鍚�)" prop="outTonnage" min-width="110" show-overflow-tooltip />
-            <el-table-column label="瀹㈡埛鍚嶇О" prop="outCustomerName" min-width="120" show-overflow-tooltip />
-            <el-table-column label="瀹㈡埛瀵规帴浜�" prop="outContactPerson" min-width="100" show-overflow-tooltip />
-            <el-table-column label="瀵规帴浜虹數璇�" prop="outContactPhone" min-width="120" show-overflow-tooltip />
+            <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" min-width="120" show-overflow-tooltip />
+            <el-table-column label="瀹㈡埛瀵规帴浜�" prop="contactPerson" min-width="100" show-overflow-tooltip />
+            <el-table-column label="瀵规帴浜虹數璇�" prop="contactPhone" min-width="120" show-overflow-tooltip />
           </el-table-column>
           <el-table-column label="瑁呮补鎿嶄綔淇℃伅"
                            align="center"
                            :header-cell-style="groupHeaderStyle">
             <el-table-column label="瑁呮补妫�楠�" prop="loadingInspectionStatus" min-width="90" show-overflow-tooltip />
             <el-table-column label="瑁呰溅楣や綅" prop="loadingCranePosition" min-width="100" show-overflow-tooltip />
-            <el-table-column label="瀵嗗害" prop="outDensity" min-width="80" show-overflow-tooltip />
+            <el-table-column label="瀵嗗害" prop="density" min-width="80" show-overflow-tooltip />
             <el-table-column label="瑁呮补鎷嶇収" prop="loadingPhotos" align="center" min-width="90">
               <template #default="scope">
                 <el-image
@@ -210,17 +214,17 @@
           <el-table-column label="鍑哄簱杩囩鏁版嵁"
                            align="center"
                            :header-cell-style="groupHeaderStyle">
-            <el-table-column label="姣涢噸(鍚�)" prop="outGrossWeight" min-width="90" show-overflow-tooltip />
-            <el-table-column label="鐨噸(鍚�)" prop="outTareWeight" min-width="90" show-overflow-tooltip />
-            <el-table-column label="鍑�閲�(鍚�)" prop="outNetWeight" min-width="90" show-overflow-tooltip />
-            <el-table-column label="浜忛噺(鍚�)" prop="outLossQuantity" min-width="90" show-overflow-tooltip />
-            <el-table-column label="瀹為檯鍏ュ簱浣撶Н(鍗�)" prop="outActualVolume" min-width="130" show-overflow-tooltip />
-            <el-table-column label="纾呭崟" prop="outPoundPhotos" align="center" min-width="90">
+            <el-table-column label="姣涢噸(鍚�)" prop="grossWeight" min-width="90" show-overflow-tooltip />
+            <el-table-column label="鐨噸(鍚�)" prop="tareWeight" min-width="90" show-overflow-tooltip />
+            <el-table-column label="鍑�閲�(鍚�)" prop="netWeight" min-width="90" show-overflow-tooltip />
+            <el-table-column label="浜忛噺(鍚�)" prop="lossQuantity" min-width="90" show-overflow-tooltip />
+            <el-table-column label="瀹為檯鍑哄簱浣撶Н(鍗�)" prop="actualVolume" min-width="130" show-overflow-tooltip />
+            <el-table-column label="纾呭崟" prop="poundPhotos" align="center" min-width="90">
               <template #default="scope">
                 <el-image
-                  v-if="toPhotoArray(scope.row.outPoundPhotos).length"
-                  :src="getPhotoUrl(toPhotoArray(scope.row.outPoundPhotos)[0])"
-                  :preview-src-list="getPhotoUrls(scope.row.outPoundPhotos)"
+                  v-if="toPhotoArray(scope.row.poundPhotos).length"
+                  :src="getPhotoUrl(toPhotoArray(scope.row.poundPhotos)[0])"
+                  :preview-src-list="getPhotoUrls(scope.row.poundPhotos)"
                   preview-teleported
                   fit="cover"
                   style="width: 40px; height: 40px; border-radius: 4px"
@@ -232,24 +236,43 @@
           <el-table-column label="鍑哄簱鐗╂祦淇℃伅"
                            align="center"
                            :header-cell-style="groupHeaderStyle">
-            <el-table-column label="鍙告満濮撳悕" prop="outDriverName" min-width="100" show-overflow-tooltip />
-            <el-table-column label="鍙告満鐢佃瘽" prop="outDriverPhone" min-width="120" show-overflow-tooltip />
-            <el-table-column label="鎶艰繍鍛樺鍚�" prop="outEscortName" min-width="100" show-overflow-tooltip />
-            <el-table-column label="鎶艰繍鍛樼數璇�" prop="outEscortPhone" min-width="120" show-overflow-tooltip />
-            <el-table-column label="杞︾墝鍙�" prop="outTruckPlateNo" min-width="110" show-overflow-tooltip />
-            <el-table-column label="杞︽寕鐗屽彿" prop="outTrailerPlateNo" min-width="110" show-overflow-tooltip />
+            <el-table-column label="鍙告満濮撳悕" prop="driverName" min-width="100" show-overflow-tooltip />
+            <el-table-column label="鍙告満鐢佃瘽" prop="driverPhone" min-width="120" show-overflow-tooltip />
+            <el-table-column label="鎶艰繍鍛樺鍚�" prop="escortName" min-width="100" show-overflow-tooltip />
+            <el-table-column label="鎶艰繍鍛樼數璇�" prop="escortPhone" min-width="120" show-overflow-tooltip />
+            <el-table-column label="杞︾墝鍙�" prop="truckPlateNo" min-width="110" show-overflow-tooltip />
+            <el-table-column label="杞︽寕鐗屽彿" prop="trailerPlateNo" min-width="110" show-overflow-tooltip />
           </el-table-column>
             </el-table>
           </el-tab-pane>
         </el-tabs>
       </div>
       <pagination
-        v-show="total > 0"
-        :total="total"
+        v-if="detailTab === 'main'"
+        v-show="inventoryTotal > 0"
+        :total="inventoryTotal"
         layout="total, sizes, prev, pager, next, jumper"
-        :page="page.current"
-        :limit="page.size"
-        @pagination="paginationChange"
+        :page="inventoryPage.current"
+        :limit="inventoryPage.size"
+        @pagination="handleInventoryPageChange"
+      />
+      <pagination
+        v-if="detailTab === 'in'"
+        v-show="inboundTotal > 0"
+        :total="inboundTotal"
+        layout="total, sizes, prev, pager, next, jumper"
+        :page="inboundPage.current"
+        :limit="inboundPage.size"
+        @pagination="handleInboundPageChange"
+      />
+      <pagination
+        v-if="detailTab === 'out'"
+        v-show="outboundTotal > 0"
+        :total="outboundTotal"
+        layout="total, sizes, prev, pager, next, jumper"
+        :page="outboundPage.current"
+        :limit="outboundPage.size"
+        @pagination="handleOutboundPageChange"
       />
     </div>
   </el-dialog>
@@ -259,6 +282,8 @@
 import pagination from "@/components/PIMTable/Pagination.vue";
 import { computed, reactive, ref, watch } from "vue";
 import { getStockInventoryBatchNoQty } from "@/api/inventoryManagement/stockInventory.js";
+import { getStockInRecordListPage } from "@/api/inventoryManagement/stockInRecord.js";
+import { getStockOutPage } from "@/api/inventoryManagement/stockOut.js";
 
 const props = defineProps({
   visible: {
@@ -282,36 +307,112 @@
   },
 });
 
-const tableData = ref([]);
-const tableLoading = ref(false);
-const total = ref(0);
+// 涓変釜椤电鍚勮嚜鐙珛鏌ヨ銆佸悇鑷垎椤碉細搴撳瓨淇℃伅璧版壒鍙锋槑缁嗭紝鍏ュ簱/鍑哄簱璧板悇鑷殑璁板綍鍒楄〃
 const detailTab = ref("main");
-const page = reactive({
+
+const inventoryData = ref([]);
+const inventoryLoading = ref(false);
+const inventoryTotal = ref(0);
+const inventoryPage = reactive({
   current: 1,
   size: 20,
 });
 
+const inboundData = ref([]);
+const inboundLoading = ref(false);
+const inboundTotal = ref(0);
+const inboundPage = reactive({
+  current: 1,
+  size: 20,
+});
+const inboundLoaded = ref(false);
+
+const outboundData = ref([]);
+const outboundLoading = ref(false);
+const outboundTotal = ref(0);
+const outboundPage = reactive({
+  current: 1,
+  size: 20,
+});
+const outboundLoaded = ref(false);
+
 const getList = () => {
   if (!props.record?.productId || !props.record?.productModelId) {
-    tableData.value = [];
-    total.value = 0;
+    inventoryData.value = [];
+    inventoryTotal.value = 0;
     return;
   }
 
-  tableLoading.value = true;
+  inventoryLoading.value = true;
   getStockInventoryBatchNoQty({
-    current: page.current,
-    size: page.size,
+    current: inventoryPage.current,
+    size: inventoryPage.size,
     productId: props.record.productId,
     productModelId: props.record.productModelId,
   })
     .then((res) => {
-      tableData.value = res.data?.records || [];
-      total.value = res.data?.total || 0;
+      inventoryData.value = res.data?.records || [];
+      inventoryTotal.value = res.data?.total || 0;
     })
     .finally(() => {
-      tableLoading.value = false;
+      inventoryLoading.value = false;
     });
+};
+
+const getInboundList = () => {
+  if (!props.record?.productModelId) {
+    inboundData.value = [];
+    inboundTotal.value = 0;
+    return;
+  }
+
+  inboundLoading.value = true;
+  getStockInRecordListPage({
+    current: inboundPage.current,
+    size: inboundPage.size,
+    productModelId: props.record.productModelId,
+  })
+    .then((res) => {
+      inboundData.value = res.data?.records || [];
+      inboundTotal.value = res.data?.total || 0;
+      inboundLoaded.value = true;
+    })
+    .finally(() => {
+      inboundLoading.value = false;
+    });
+};
+
+const getOutboundList = () => {
+  if (!props.record?.productModelId) {
+    outboundData.value = [];
+    outboundTotal.value = 0;
+    return;
+  }
+
+  outboundLoading.value = true;
+  getStockOutPage({
+    current: outboundPage.current,
+    size: outboundPage.size,
+    productModelId: props.record.productModelId,
+  })
+    .then((res) => {
+      outboundData.value = res.data?.records || [];
+      outboundTotal.value = res.data?.total || 0;
+      outboundLoaded.value = true;
+    })
+    .finally(() => {
+      outboundLoading.value = false;
+    });
+};
+
+// 鐐瑰摢涓〉绛炬煡鍝釜锛氬叆搴�/鍑哄簱棣栨杩涘叆鏃舵墠璇锋眰锛岄伩鍏嶆墦寮�寮圭獥灏卞彂涓変釜璇锋眰
+const handleTabChange = (name) => {
+  if (name === "in" && !inboundLoaded.value) {
+    getInboundList();
+  }
+  if (name === "out" && !outboundLoaded.value) {
+    getOutboundList();
+  }
 };
 
 // 鍥剧墖鍒楋細鍚庣杩斿洖涓� JSON 瀛楃涓诧紝鍏煎鏁扮粍/瀛楃涓蹭袱绉嶅舰鎬�
@@ -349,10 +450,22 @@
   fontSize: "13px",
 };
 
-const paginationChange = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
+const handleInventoryPageChange = (obj) => {
+  inventoryPage.current = obj.page;
+  inventoryPage.size = obj.limit;
   getList();
+};
+
+const handleInboundPageChange = (obj) => {
+  inboundPage.current = obj.page;
+  inboundPage.size = obj.limit;
+  getInboundList();
+};
+
+const handleOutboundPageChange = (obj) => {
+  outboundPage.current = obj.page;
+  outboundPage.size = obj.limit;
+  getOutboundList();
 };
 
 const handleSubtract = (row) => {
@@ -369,10 +482,24 @@
 
 const closeModal = () => {
   isShow.value = false;
-  page.current = 1;
-  page.size = 20;
-  tableData.value = [];
-  total.value = 0;
+  detailTab.value = "main";
+
+  inventoryPage.current = 1;
+  inventoryPage.size = 20;
+  inventoryData.value = [];
+  inventoryTotal.value = 0;
+
+  inboundPage.current = 1;
+  inboundPage.size = 20;
+  inboundData.value = [];
+  inboundTotal.value = 0;
+  inboundLoaded.value = false;
+
+  outboundPage.current = 1;
+  outboundPage.size = 20;
+  outboundData.value = [];
+  outboundTotal.value = 0;
+  outboundLoaded.value = false;
 };
 
 watch(
@@ -381,7 +508,12 @@
     if (!visible) {
       return;
     }
-    page.current = 1;
+    detailTab.value = "main";
+    inventoryPage.current = 1;
+    inboundPage.current = 1;
+    outboundPage.current = 1;
+    inboundLoaded.value = false;
+    outboundLoaded.value = false;
     getList();
   },
   { immediate: true }
diff --git a/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue b/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
index ab1199c..241b416 100644
--- a/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
+++ b/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
@@ -408,7 +408,8 @@
                           prop="unloadPhotos"
                           :rules="[{ required: true, message: '璇蜂笂浼犲嵏娌瑰叧閿幆鑺備笌杞﹁締鍏抽敭浣嶇疆鎷嶇収', trigger: 'change' }]">
               <ImageUpload v-model:file-list="formState.unloadPhotos"
-                           :limit="10" />
+                           :limit="10"
+                           permanent />
             </el-form-item>
           </el-col>
         </el-row>
@@ -496,7 +497,8 @@
                           prop="poundPhotos"
                           :rules="[{ required: true, message: '璇蜂笂浼犵鍗�', trigger: 'change' }]">
               <ImageUpload v-model:file-list="formState.poundPhotos"
-                           :limit="10" />
+                           :limit="10"
+                           permanent />
             </el-form-item>
           </el-col>
         </el-row>
diff --git a/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue b/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue
index 7c7f80e..ad3a544 100644
--- a/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue
+++ b/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue
@@ -362,7 +362,8 @@
                           prop="loadingPhotos"
                           :rules="[{ required: true, message: '璇蜂笂浼犺娌瑰叧閿幆鑺備笌杞﹁締鍏抽敭浣嶇疆鎷嶇収', trigger: 'change' }]">
               <ImageUpload v-model:file-list="formState.loadingPhotos"
-                           :limit="10" />
+                           :limit="10"
+                           permanent />
             </el-form-item>
           </el-col>
         </el-row>
@@ -445,7 +446,8 @@
                           prop="poundPhotos"
                           :rules="[{ required: true, message: '璇蜂笂浼犵鍗�', trigger: 'change' }]">
               <ImageUpload v-model:file-list="formState.poundPhotos"
-                           :limit="10" />
+                           :limit="10"
+                           permanent />
             </el-form-item>
           </el-col>
         </el-row>
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 7fc3509..25a190c 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -99,20 +99,8 @@
                                prop="specificationModel" />
               <el-table-column label="鍗曚綅"
                                prop="unit" />
-              <el-table-column label="鍏ュ簱瀹℃牳鐘舵��"
-                               prop="stockInApprovalStatus"
-                               width="120">
-                <template #default="scope">
-                  <el-tag :type="getStockInApprovalStatusType(scope.row.stockInApprovalStatus)"
-                          size="small">
-                    {{ scope.row.stockInApprovalStatus || '--' }}
-                  </el-tag>
-                </template>
-              </el-table-column>
               <el-table-column label="鏁伴噺"
                                prop="quantity" />
-              <el-table-column label="閿�鍞彂璐ф暟閲�"
-                               prop="shippedQuantity" />
               <el-table-column label="鍙敤鏁伴噺"
                                prop="availableQuality" />
               <el-table-column label="閫�璐ф暟閲�"
@@ -191,17 +179,6 @@
             <el-tag :type="getApprovalStatusType(scope.row.approvalStatus)"
                     size="small">
               {{ approvalStatusText[scope.row.approvalStatus] || '鏈煡鐘舵��' }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍏ュ簱鐘舵��"
-                         prop="stockInStatus"
-                         width="100"
-                         show-overflow-tooltip>
-          <template #default="scope">
-            <el-tag :type="getStockInStatusType(scope.row.stockInStatus)"
-                    size="small">
-              {{ scope.row.stockInStatus || '--' }}
             </el-tag>
           </template>
         </el-table-column>
@@ -587,16 +564,6 @@
               </el-tag>
             </template>
           </el-table-column>
-          <el-table-column label="鍏ュ簱瀹℃牳鐘舵��"
-                           prop="stockInApprovalStatus"
-                           width="120">
-            <template #default="scope">
-              <el-tag :type="getStockInApprovalStatusType(scope.row.stockInApprovalStatus)"
-                      size="small">
-                {{ scope.row.stockInApprovalStatus || '--' }}
-              </el-tag>
-            </template>
-          </el-table-column>
           <el-table-column fixed="right"
                            label="鎿嶄綔"
                            min-width="60"
@@ -604,8 +571,7 @@
             <template #default="scope">
               <el-button link
                          type="primary"
-                         @click="openProductForm('edit', scope.row, scope.$index)"
-                         :disabled="scope.row.stockInApprovalStatus === '瀹屽叏鍏ュ簱'">缂栬緫
+                         @click="openProductForm('edit', scope.row, scope.$index)">缂栬緫
               </el-button>
             </template>
           </el-table-column>
@@ -917,26 +883,6 @@
       2: "warning", // 瀹℃壒涓� - 姗欒壊
       3: "success", // 瀹℃壒閫氳繃 - 缁胯壊
       4: "danger", // 瀹℃壒澶辫触 - 绾㈣壊
-    };
-    return typeMap[status] || "";
-  };
-
-  // 鑾峰彇鍏ュ簱鐘舵�佹爣绛剧被鍨�
-  const getStockInStatusType = status => {
-    const typeMap = {
-      寰呭叆搴�: "info", // 寰呭叆搴� - 鐏拌壊
-      鍏ュ簱涓�: "warning", // 鍏ュ簱涓� - 姗欒壊
-      瀹屽叏鍏ュ簱: "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
-    };
-    return typeMap[status] || "";
-  };
-
-  // 鑾峰彇鍏ュ簱瀹℃牳鐘舵�佹爣绛剧被鍨�
-  const getStockInApprovalStatusType = status => {
-    const typeMap = {
-      寰呭叆搴�: "info", // 寰呭叆搴� - 鐏拌壊
-      鍏ュ簱涓�: "warning", // 鍏ュ簱涓� - 姗欒壊
-      瀹屽叏鍏ュ簱: "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
     };
     return typeMap[status] || "";
   };
@@ -1447,14 +1393,6 @@
   };
   // 鎵撳紑寮规
   const openForm = async (type, row) => {
-    // 缂栬緫鏃舵鏌ュ叆搴撶姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
-    if (type === "edit" && row) {
-      if (row.stockInStatus === "瀹屽叏鍏ュ簱") {
-        proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑璁板綍涓嶈兘缂栬緫");
-        return;
-      }
-    }
-
     await getTemplateList();
     await userListNoPage().then(res => {
       userList.value = res.data;
@@ -1619,12 +1557,6 @@
   };
   // 鎵撳紑浜у搧寮规
   const openProductForm = async (type, row, index) => {
-    // 缂栬緫鏃舵鏌ヤ骇鍝佸叆搴撳鏍哥姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
-    if (type === "edit" && row && row.stockInApprovalStatus === "瀹屽叏鍏ュ簱") {
-      proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑浜у搧涓嶈兘缂栬緫");
-      return;
-    }
-
     productOperationType.value = type;
     productOperationIndex.value = index;
     productForm.value = {};
@@ -1809,14 +1741,6 @@
     }
     if (productSelectedRows.value.length === 0) {
       proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-      return;
-    }
-    // 妫�鏌ラ�変腑鐨勪骇鍝佷腑鏄惁鏈夊畬鍏ㄥ叆搴撶殑
-    const hasFullyStocked = productSelectedRows.value.some(
-      row => row.stockInApprovalStatus === "瀹屽叏鍏ュ簱"
-    );
-    if (hasFullyStocked) {
-      proxy.$modal.msgWarning("閫変腑鐨勪骇鍝佷腑鍖呭惈瀹屽叏鍏ュ簱鐨勪骇鍝侊紝鏃犳硶鍒犻櫎");
       return;
     }
     if (operationType.value === "add") {
diff --git a/src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue b/src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue
index e522631..8bc87f8 100644
--- a/src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue
+++ b/src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue
@@ -30,7 +30,9 @@
 import ProductTypeSwitch from './ProductTypeSwitch.vue'
 import { productInOutAnalysis } from '@/api/viewIndex.js'
 
-const productType = ref(2) // 1=鍘熸潗鏂� 2=鎴愬搧
+// 1=鍘熸潗鏂� 2=鎴愬搧 3=鍗婃垚鍝併��
+// 榛樿鎴愬搧锛氭湰绉熸埛銆屽師鏉愭枡銆嶅ぇ绫诲拰銆屽崐鎴愬搧銆嶅ぇ绫讳笅閮芥病鏈夋寕浜у搧鍨嬪彿锛岄�夊畠浠繀鐒舵槸涓�鏉″叏 0 鐨勫钩绾�
+const productType = ref(2)
 
 const chartStyle = { width: '100%', height: '130%' }
 
diff --git a/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue b/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
index bab6024..2de751d 100644
--- a/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
+++ b/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
@@ -47,7 +47,7 @@
 import { customerRevenueAnalysis } from '@/api/viewIndex.js'
 import { listCustomer } from '@/api/basicData/customer.js'
 
-const dateType = ref(1) // 1=鍛� 2=鏈� 3=瀛e害
+const dateType = ref(3) // 1=鍛� 2=鏈� 3=瀛e害
 const customerValue = ref(null)
 const customerOptions = ref([])
 
diff --git a/src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue b/src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue
index da39694..f356297 100644
--- a/src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue
+++ b/src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue
@@ -33,7 +33,7 @@
   height: '100%',
 }
 
-// 澶嶇敤鏈粍浠剁殑椤甸潰鍙寚瀹氬垵濮嬪懆鏈燂紝涓嶄紶浠嶆寜銆屽懆銆嶅睍绀猴紙dataDashboard 涓嶅彈褰卞搷锛�
+// 澶嶇敤鏈粍浠剁殑椤甸潰鍙寚瀹氬垵濮嬪懆鏈燂紝涓嶄紶鎸夈�屽懆銆嶅睍绀�
 const props = defineProps({
   defaultDateType: {
     type: Number,
diff --git a/src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue b/src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue
index b5c56f0..fdbd962 100644
--- a/src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue
+++ b/src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue
@@ -32,7 +32,7 @@
   height: '100%',
 }
 
-// 澶嶇敤鏈粍浠剁殑椤甸潰鍙寚瀹氬垵濮嬪懆鏈燂紝涓嶄紶浠嶆寜銆屽懆銆嶅睍绀猴紙dataDashboard 涓嶅彈褰卞搷锛�
+// 澶嶇敤鏈粍浠剁殑椤甸潰鍙寚瀹氬垵濮嬪懆鏈燂紝涓嶄紶鎸夈�屽懆銆嶅睍绀�
 const props = defineProps({
   defaultDateType: {
     type: Number,
diff --git a/src/views/reportAnalysis/dataDashboard/index.vue b/src/views/reportAnalysis/dataDashboard/index.vue
index ff53a7b..a6a5f66 100644
--- a/src/views/reportAnalysis/dataDashboard/index.vue
+++ b/src/views/reportAnalysis/dataDashboard/index.vue
@@ -34,9 +34,9 @@
 
     <!-- 鍙充晶鍖哄煙 -->
     <div class="right-panel">
-      <RightTop />
+      <RightTop :default-date-type="3" />
 
-       <RightBottom />
+       <RightBottom :default-date-type="3" />
     </div>
     </div>
     </div>

--
Gitblit v1.9.3