From b6abea8fd6ea87f2eb3a998b12866f7df2f9da8e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 27 一月 2026 15:17:31 +0800
Subject: [PATCH] 进销存升级 1.优化供应商档案页面

---
 src/views/inventoryManagement/stockReport/index.vue |  479 +++++++++++++++++++++++++++--------------------------------
 1 files changed, 216 insertions(+), 263 deletions(-)

diff --git a/src/views/inventoryManagement/stockReport/index.vue b/src/views/inventoryManagement/stockReport/index.vue
index 354c775..1879ea6 100644
--- a/src/views/inventoryManagement/stockReport/index.vue
+++ b/src/views/inventoryManagement/stockReport/index.vue
@@ -12,20 +12,19 @@
         >
           <el-option label="鏃ユ姤" value="daily" />
           <el-option label="鏈堟姤" value="monthly" />
-          <el-option label="浣滀笟鎶ヨ〃" value="work" />
           <el-option label="杩涘嚭瀛樻姤琛�" value="inout" />
         </el-select>
-        
+
         <span class="search_title ml10">鏃堕棿鑼冨洿锛�</span>
-         <el-date-picker
-           v-if="searchForm.reportType === 'daily'"
-           v-model="searchForm.singleDate"
-           type="date"
-           placeholder="璇烽�夋嫨鏃ユ湡"
-           format="YYYY-MM-DD"
-           value-format="YYYY-MM-DD"
-           style="width: 200px;"
-         />
+        <el-date-picker
+          v-if="searchForm.reportType === 'daily'"
+          v-model="searchForm.singleDate"
+          type="date"
+          placeholder="璇烽�夋嫨鏃ユ湡"
+          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD"
+          style="width: 200px;"
+        />
         <el-date-picker
           v-else-if="searchForm.reportType === 'monthly'"
           v-model="searchForm.monthRange"
@@ -48,99 +47,99 @@
           value-format="YYYY-MM-DD"
           style="width: 240px;"
         />
-        
+
         <el-button type="primary" @click="handleQuery" style="margin-left: 10px">
           鏌ヨ
         </el-button>
         <el-button @click="handleReset">閲嶇疆</el-button>
       </div>
-      
+
       <div class="search_right">
-        <el-button type="success" @click="handleExport" icon="Download">
-          瀵煎嚭鎶ヨ〃
-        </el-button>
+        <!--        <el-button type="success" @click="handleExport" icon="Download">-->
+        <!--          瀵煎嚭鎶ヨ〃-->
+        <!--        </el-button>-->
       </div>
     </div>
 
-    <!-- 缁熻鍗$墖 -->
-    <div class="stats_cards" v-if="reportData.summary">
-      <el-row :gutter="20">
-        <el-col :span="6">
-          <el-card class="stats_card">
-            <div class="stats_content">
-              <div class="stats_icon in">
-                <el-icon><TrendCharts /></el-icon>
-              </div>
-              <div class="stats_info">
-                <div class="stats_value">{{ reportData.summary.totalIn || 0 }}</div>
-                <div class="stats_label">鎬诲叆搴撻噺</div>
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-        <el-col :span="6">
-          <el-card class="stats_card">
-            <div class="stats_content">
-              <div class="stats_icon out">
-                <el-icon><TrendCharts /></el-icon>
-              </div>
-              <div class="stats_info">
-                <div class="stats_value">{{ reportData.summary.totalOut || 0 }}</div>
-                <div class="stats_label">鎬诲嚭搴撻噺</div>
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-        <el-col :span="6">
-          <el-card class="stats_card">
-            <div class="stats_content">
-              <div class="stats_icon stock">
-                <el-icon><Box /></el-icon>
-              </div>
-              <div class="stats_info">
-                <div class="stats_value">{{ reportData.summary.currentStock || 0 }}</div>
-                <div class="stats_label">褰撳墠搴撳瓨</div>
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-        <el-col :span="6">
-          <el-card class="stats_card">
-            <div class="stats_content">
-              <div class="stats_icon turnover">
-                <el-icon><Refresh /></el-icon>
-              </div>
-              <div class="stats_info">
-                <div class="stats_value">{{ reportData.summary.turnoverRate || 0 }}%</div>
-                <div class="stats_label">鍛ㄨ浆鐜�</div>
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-      </el-row>
-    </div>
+    <!--    &lt;!&ndash; 缁熻鍗$墖 &ndash;&gt;-->
+    <!--    <div class="stats_cards" v-if="reportData.summary">-->
+    <!--      <el-row :gutter="20">-->
+    <!--        <el-col :span="6">-->
+    <!--          <el-card class="stats_card">-->
+    <!--            <div class="stats_content">-->
+    <!--              <div class="stats_icon in">-->
+    <!--                <el-icon><TrendCharts /></el-icon>-->
+    <!--              </div>-->
+    <!--              <div class="stats_info">-->
+    <!--                <div class="stats_value">{{ reportData.summary.totalIn || 0 }}</div>-->
+    <!--                <div class="stats_label">鎬诲叆搴撻噺</div>-->
+    <!--              </div>-->
+    <!--            </div>-->
+    <!--          </el-card>-->
+    <!--        </el-col>-->
+    <!--        <el-col :span="6">-->
+    <!--          <el-card class="stats_card">-->
+    <!--            <div class="stats_content">-->
+    <!--              <div class="stats_icon out">-->
+    <!--                <el-icon><TrendCharts /></el-icon>-->
+    <!--              </div>-->
+    <!--              <div class="stats_info">-->
+    <!--                <div class="stats_value">{{ reportData.summary.totalOut || 0 }}</div>-->
+    <!--                <div class="stats_label">鎬诲嚭搴撻噺</div>-->
+    <!--              </div>-->
+    <!--            </div>-->
+    <!--          </el-card>-->
+    <!--        </el-col>-->
+    <!--        <el-col :span="6">-->
+    <!--          <el-card class="stats_card">-->
+    <!--            <div class="stats_content">-->
+    <!--              <div class="stats_icon stock">-->
+    <!--                <el-icon><Box /></el-icon>-->
+    <!--              </div>-->
+    <!--              <div class="stats_info">-->
+    <!--                <div class="stats_value">{{ reportData.summary.currentStock || 0 }}</div>-->
+    <!--                <div class="stats_label">褰撳墠搴撳瓨</div>-->
+    <!--              </div>-->
+    <!--            </div>-->
+    <!--          </el-card>-->
+    <!--        </el-col>-->
+    <!--        <el-col :span="6">-->
+    <!--          <el-card class="stats_card">-->
+    <!--            <div class="stats_content">-->
+    <!--              <div class="stats_icon turnover">-->
+    <!--                <el-icon><Refresh /></el-icon>-->
+    <!--              </div>-->
+    <!--              <div class="stats_info">-->
+    <!--                <div class="stats_value">{{ reportData.summary.turnoverRate || 0 }}%</div>-->
+    <!--                <div class="stats_label">鍛ㄨ浆鐜�</div>-->
+    <!--              </div>-->
+    <!--            </div>-->
+    <!--          </el-card>-->
+    <!--        </el-col>-->
+    <!--      </el-row>-->
+    <!--    </div>-->
 
-    <!-- 鍥捐〃鍖哄煙 -->
-    <div class="chart_section" v-if="reportData.chartData">
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-card>
-            <template #header>
-              <span>搴撳瓨瓒嬪娍鍥�</span>
-            </template>
-            <div ref="trendChart" style="height: 300px;"></div>
-          </el-card>
-        </el-col>
-        <el-col :span="12">
-          <el-card>
-            <template #header>
-              <span>杩涘嚭搴撳姣�</span>
-            </template>
-            <div ref="comparisonChart" style="height: 300px;"></div>
-          </el-card>
-        </el-col>
-      </el-row>
-    </div>
+    <!--    &lt;!&ndash; 鍥捐〃鍖哄煙 &ndash;&gt;-->
+    <!--    <div class="chart_section" v-if="reportData.chartData">-->
+    <!--      <el-row :gutter="20">-->
+    <!--        <el-col :span="12">-->
+    <!--          <el-card>-->
+    <!--            <template #header>-->
+    <!--              <span>搴撳瓨瓒嬪娍鍥�</span>-->
+    <!--            </template>-->
+    <!--            <div ref="trendChart" style="height: 300px;"></div>-->
+    <!--          </el-card>-->
+    <!--        </el-col>-->
+    <!--        <el-col :span="12">-->
+    <!--          <el-card>-->
+    <!--            <template #header>-->
+    <!--              <span>杩涘嚭搴撳姣�</span>-->
+    <!--            </template>-->
+    <!--            <div ref="comparisonChart" style="height: 300px;"></div>-->
+    <!--          </el-card>-->
+    <!--        </el-col>-->
+    <!--      </el-row>-->
+    <!--    </div>-->
 
     <!-- 璇︾粏鏁版嵁琛ㄦ牸 -->
     <div class="table_section">
@@ -148,138 +147,88 @@
         <template #header>
           <span>{{ getTableTitle() }}</span>
         </template>
-         <el-table
-           v-loading="tableLoading"
-           :data="reportData.tableData"
-           border
-           height="400"
-           style="width: 100%"
-           :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
-         >
+        <el-table
+            v-loading="tableLoading"
+            :data="reportData.tableData"
+            border
+            height="400"
+            style="width: 100%"
+            :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
+        >
           <el-table-column
-            align="center"
-            label="搴忓彿"
-            type="index"
-            width="60"
+              align="center"
+              label="搴忓彿"
+              type="index"
+              width="60"
           />
-           <el-table-column
-             v-if="searchForm.reportType === 'daily'"
-             label="鏃ユ湡"
-             prop="createTime"
-             width="100"
-             align="center"
-           />
-           <el-table-column
-             v-if="searchForm.reportType === 'monthly'"
-             label="鏈堜唤"
-             prop="createTime"
-             width="100"
-             align="center"
-           />
-           <el-table-column
-             label="鍏ュ簱鏃堕棿"
-             prop="createTime"
-             width="100"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="鍏ュ簱鎵规"
-             prop="inboundBatches"
-             width="160"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="渚涘簲鍟嗗悕绉�"
-             prop="supplierName"
-             min-width="240"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="浜у搧澶х被"
-             prop="productCategory"
-             width="100"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="瑙勬牸鍨嬪彿"
-             prop="specificationModel"
-             min-width="200"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="鍗曚綅"
-             prop="unit"
-             width="70"
-             show-overflow-tooltip
-           />
-           <!-- <el-table-column
-             label="鏈熷垵搴撳瓨"
-             prop="beginStock"
-             width="100"
-             align="center"
-           /> -->
-           <el-table-column
-             label="鍏ュ簱鏁伴噺"
-             prop="inboundNum"
-             width="100"
-             align="center"
-           />
-           <!-- <el-table-column
-             label="鍑哄簱鏁伴噺"
-             prop=""
-             width="100"
-             align="center"
-           /> -->
-           <el-table-column
-             label="鐜板湪搴撳瓨"
-             prop="inboundNum0"
-             width="100"
-             align="center"
-           />
-           <el-table-column
-             label="鍚◣鍗曚环"
-             prop="taxInclusiveUnitPrice"
-             width="100"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="鍚◣鎬讳环"
-             prop="taxInclusiveTotalPrice"
-             width="100"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="绋庣巼(%)"
-             prop="taxRate"
-             width="80"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="涓嶅惈绋庢�讳环"
-             prop="taxExclusiveTotalPrice"
-             width="100"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             label="鍏ュ簱浜�"
-             prop="createBy"
-             width="80"
-             show-overflow-tooltip
-           />
-           <el-table-column
-             v-if="searchForm.reportType === 'work'"
-             label="鎿嶄綔浜哄憳"
-             prop="operator"
-             width="80"
-             align="center"
-           />
-           <el-table-column
-             v-if="searchForm.reportType === 'work'"
-             label="鎿嶄綔鏃堕棿"
-             prop="operateTime"
-             width="150"
-             align="center"
-           />
+          <el-table-column
+              label="鍏ュ簱鏃堕棿"
+              prop="createTime"
+              width="200"
+              show-overflow-tooltip
+              v-if="searchForm.reportType !== 'inout'"
+          />
+          <el-table-column
+              label="鍏ュ簱鎵规"
+              prop="inboundBatches"
+              width="240"
+              show-overflow-tooltip
+              v-if="searchForm.reportType !== 'inout'"
+          />
+          <el-table-column
+              label="浜у搧澶х被"
+              prop="productName"
+              show-overflow-tooltip
+          />
+          <el-table-column
+              label="瑙勬牸鍨嬪彿"
+              prop="model"
+              show-overflow-tooltip
+          />
+          <el-table-column
+              label="鍗曚綅"
+              prop="unit"
+              show-overflow-tooltip
+          />
+          <el-table-column
+              label="鍏ュ簱鏁伴噺"
+              prop="totalStockIn"
+              align="center"
+              v-if="searchForm.reportType === 'inout'"
+          />
+          <el-table-column
+              label="鍏ュ簱鏁伴噺"
+              prop="stockInNum"
+              align="center"
+              v-else
+          />
+          <el-table-column
+              label="鍑哄簱鏁伴噺"
+              prop="totalStockOut"
+              width="100"
+              align="center"
+              v-if="searchForm.reportType === 'inout'"
+          />
+          <el-table-column
+              label="鐜板湪搴撳瓨"
+              prop="currentStock"
+              align="center"
+          />
+          <el-table-column label="鏉ユ簮"
+                           prop="recordType"
+                           v-if="searchForm.reportType !== 'inout'"
+                           show-overflow-tooltip>
+            <template #default="scope">
+              {{ getRecordType(scope.row.recordType) }}
+            </template>
+          </el-table-column>
+          <el-table-column
+              label="鍏ュ簱浜�"
+              prop="createBy"
+              width="80"
+              v-if="searchForm.reportType !== 'inout'"
+              show-overflow-tooltip
+          />
         </el-table>
       </el-card>
     </div>
@@ -291,12 +240,14 @@
 import { ElMessage } from 'element-plus'
 import * as echarts from 'echarts'
 import {
-  getStockDailyReport,
   getStockMonthlyReport,
-  getWorkReport,
   getStockInOutReport,
-  exportStockReport
 } from '@/api/inventoryManagement/stockReport'
+import {
+  getStockInventoryInAndOutReportList,
+  getStockInventoryReportList
+} from "@/api/inventoryManagement/stockInventory.js";
+import {findAllQualifiedStockRecordTypeOptions} from "@/api/basicData/enum.js";
 
 
 const { proxy } = getCurrentInstance()
@@ -318,12 +269,25 @@
   tableData: []
 })
 
+const stockRecordTypeOptions = ref([])
+
+const getRecordType = (recordType) => {
+  return stockRecordTypeOptions.value.find(item => item.value === recordType)?.label || ''
+}
+
+// 鑾峰彇鏉ユ簮绫诲瀷閫夐」
+const fetchStockRecordTypeOptions = () => {
+  findAllQualifiedStockRecordTypeOptions()
+      .then(res => {
+        stockRecordTypeOptions.value = res.data;
+      })
+}
+
 // 鑾峰彇琛ㄦ牸鏍囬
 const getTableTitle = () => {
   const typeMap = {
     daily: '鏃ユ姤璇︾粏鏁版嵁',
     monthly: '鏈堟姤璇︾粏鏁版嵁',
-    work: '浣滀笟鎶ヨ〃璇︾粏鏁版嵁',
     inout: '杩涘嚭瀛樻姤琛ㄨ缁嗘暟鎹�'
   }
   return typeMap[searchForm.reportType] || '鎶ヨ〃璇︾粏鏁版嵁'
@@ -343,38 +307,25 @@
   if (!validateSearchForm()) {
     return
   }
-  
+
   tableLoading.value = true
   try {
     const params = getQueryParams()
     let response
-    
-    switch (searchForm.reportType) {
-      case 'daily':
-        response = await getStockDailyReport(params)
-        break
-      case 'monthly':
-        response = await getStockMonthlyReport(params)
-        break
-      case 'work':
-        response = await getWorkReport(params)
-        break
-      case 'inout':
-        response = await getStockInOutReport(params)
-        break
-      default:
-        throw new Error('鏈煡鐨勬姤琛ㄧ被鍨�')
+
+    if (searchForm.reportType === 'inout') {
+      response = await getStockInventoryInAndOutReportList(params)
+    } else {
+      response = await getStockInventoryReportList(params)
     }
-    
     if (response.code === 200) {
-      // generateMockData()
-      reportData.value.tableData = response.data.tableData
-      reportData.value.summary = response.data.summary
-      reportData.value.chartData = response.data.chartData
-      nextTick(() => {
-        initCharts()
-      })
-      
+      reportData.value.tableData = response.data.records
+      // reportData.value.summary = response.data.summary
+      // reportData.value.chartData = response.data.chartData
+      // nextTick(() => {
+      //   initCharts()
+      // })
+
     }
   } catch (error) {
     ElMessage.error('鏌ヨ澶辫触锛�' + error.message)
@@ -420,7 +371,7 @@
       ElMessage.warning('璇烽�夋嫨鏃ユ湡')
       return false
     }
-  } else if (searchForm.reportType === 'work' || searchForm.reportType === 'inout') {
+  } else if (searchForm.reportType === 'inout') {
     if (!searchForm.dateRange || searchForm.dateRange.length !== 2) {
       ElMessage.warning('璇烽�夋嫨鏃ユ湡鑼冨洿')
       return false
@@ -444,7 +395,7 @@
     startDate: "",
     endDate: ""
   }
-  
+
   if (searchForm.reportType === 'daily') {
     params.reportDate = searchForm.singleDate
   } else if (searchForm.reportType === 'monthly') {
@@ -454,7 +405,7 @@
     params.startDate = searchForm.dateRange[0]
     params.endDate = searchForm.dateRange[1]
   }
-  
+
   return params
 }
 
@@ -476,7 +427,7 @@
   if (!validateSearchForm()) {
     return
   }
-  
+
   try {
     const params = getQueryParams()
     // const response = await exportStockReport(params)
@@ -491,7 +442,7 @@
     // link.click()
     // document.body.removeChild(link)
     // window.URL.revokeObjectURL(url)
-    
+
     // ElMessage.success('瀵煎嚭鎴愬姛')
   } catch (error) {
     ElMessage.error('瀵煎嚭澶辫触锛�' + error.message)
@@ -501,7 +452,7 @@
 // 鍒濆鍖栧浘琛�
 const initCharts = () => {
   if (!reportData.value.chartData) return
-  
+
   initTrendChart()
   initComparisonChart()
 }
@@ -509,7 +460,7 @@
 // 鍒濆鍖栬秼鍔垮浘
 const initTrendChart = () => {
   if (!trendChart.value) return
-  
+
   const chart = echarts.init(trendChart.value)
   const option = {
     title: {
@@ -546,7 +497,7 @@
 // 鍒濆鍖栧姣斿浘
 const initComparisonChart = () => {
   if (!comparisonChart.value) return
-  
+
   const chart = echarts.init(comparisonChart.value)
   const option = {
     title: {
@@ -593,12 +544,14 @@
 onMounted(() => {
   const today = new Date()
   searchForm.singleDate = today.toISOString().split('T')[0]
-  
+
   const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000)
   searchForm.dateRange = [
     yesterday.toISOString().split('T')[0],
     today.toISOString().split('T')[0]
   ]
+
+  fetchStockRecordTypeOptions()
 })
 </script>
 

--
Gitblit v1.9.3