From 3310360a653c009182c420a12e6240588d5b39f6 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 17 一月 2026 16:27:16 +0800
Subject: [PATCH] 进销存-升级 1.财务报表查询接口传参修改 2.会计核算页面修改且查询接口传参修改 3.项目利润、增值税对比页面联调

---
 src/views/financialManagement/accounting/index.vue |  197 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 129 insertions(+), 68 deletions(-)

diff --git a/src/views/financialManagement/accounting/index.vue b/src/views/financialManagement/accounting/index.vue
index 91588fd..40bf1ae 100644
--- a/src/views/financialManagement/accounting/index.vue
+++ b/src/views/financialManagement/accounting/index.vue
@@ -2,14 +2,31 @@
   <div style="padding: 20px;">
     <!-- 椤甸潰鏍囬鍜岀瓫閫夋潯浠� -->
     <div class="w-full md:w-auto flex items-center gap-3" style="margin-bottom: 20px;">
-      <el-button
-        type="primary"
-        icon="Refresh"
-        @click="resetFilters"
-        size="default"
-      >
-        鏌ヨ
-      </el-button>
+      <el-form :inline="true">
+        <el-form-item label="骞翠唤">
+          <el-date-picker
+            v-model="selectedYear"
+            type="year"
+            placeholder="璇烽�夋嫨骞翠唤"
+            format="YYYY"
+            value-format="YYYY"
+            clearable
+            @change="fetchData()"
+            style="width: 200px"
+            :disabled-date="(date) => date.getFullYear() > new Date().getFullYear()"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            type="primary"
+            icon="Refresh"
+            @click="resetFilters"
+            size="default"
+          >
+            閲嶇疆
+          </el-button>
+        </el-form-item>
+      </el-form>
     </div>
 
     <main class="container mx-auto px-4 pb-10">
@@ -27,7 +44,7 @@
         <el-card class="bg3">
           <p>璧勪骇鍘熷��</p>
           <h3>
-            楼{{ assetInfo.totalOriginalValue }}
+            楼{{ formatCurrency(assetInfo.totalOriginalValue) }}
           </h3>
         </el-card>
 
@@ -35,7 +52,7 @@
         <el-card class="bg4">
           <p>绱鎶樻棫</p>
           <h3>
-            楼{{ assetInfo.totalDepreciation }}
+            楼{{ formatCurrency(assetInfo.totalDepreciation) }}
           </h3>
         </el-card>
 
@@ -43,7 +60,21 @@
         <el-card class="bg5">
           <p>鍑�鍊�</p>
           <h3>
-            楼{{ assetInfo.totalNetValue }}
+            楼{{ formatCurrency(assetInfo.totalNetValue) }}
+          </h3>
+        </el-card>
+        <!-- 璐熷�� -->
+        <el-card class="bg2">
+          <p>璐熷��</p>
+          <h3>
+            楼{{ formatCurrency(assetInfo.debt) }}
+          </h3>
+        </el-card>
+        <!-- 搴撳瓨璧勪骇 -->
+        <el-card class="bg3">
+          <p>搴撳瓨璧勪骇</p>
+          <h3>
+            楼{{ formatCurrency(assetInfo.inventoryValue) }}
           </h3>
         </el-card>
       </div>
@@ -62,7 +93,7 @@
                 style="height: 260px; width: 35%;">
               <div class="chart-num">
                 <span style="font-size: 22px;">璁惧绫诲瀷</span>
-                <span style="font-size: 36px; font-weight: 500; font-family: 'MyCustomFont', sans-serif;">{{ assetInfo.totalEquipment }}</span>
+                <span style="font-size: 36px; font-weight: 500; font-family: 'MyCustomFont', sans-serif;">{{ deviceTypeTotalCount }}</span>
               </div>
             </Echarts>
             <Echarts
@@ -86,7 +117,6 @@
           style="width: 100%"
           :header-cell-style="{ background: '#f5f7fa', color: '#606266' }"
         >
-          <el-table-column prop="id" label="璧勪骇缂栧彿" width="120" />
           <el-table-column prop="deviceName" label="璁惧鍚嶇О" width="250" />
           <el-table-column prop="deviceModel" label="鍨嬪彿瑙勬牸" min-width="150" />
           <el-table-column prop="supplierName" label="渚涘簲鍟�" min-width="120" />
@@ -94,27 +124,17 @@
           <el-table-column prop="number" label="鏁伴噺" width="120" />
           <el-table-column prop="originalValue" label="鍘熷��(鍏�)" width="120">
             <template #default="{ row }">
-              楼{{ formatCurrency(row.taxIncludingPriceTotal) }}
+              {{ formatCurrency(row.taxIncludingPriceTotal) }}
             </template>
           </el-table-column>
           <el-table-column prop="depreciation" label="绱鎶樻棫(鍏�)" width="140">
             <template #default="{ row }">
-              楼{{ formatCurrency(row.taxIncludingPriceTotal-row.unTaxIncludingPriceTotal) }}
+              {{ formatCurrency(row.deprAmount) }}
             </template>
           </el-table-column>
           <el-table-column prop="netValue" label="鍑�鍊�(鍏�)" width="120">
             <template #default="{ row }">
-              楼{{ formatCurrency(row.unTaxIncludingPriceTotal) }}
-            </template>
-          </el-table-column>
-          <el-table-column prop="status" label="鐘舵��" width="100">
-            <template #default="{ row }">
-              <el-tag
-                :type="getStatusTagType(row.status)"
-                size="small"
-              >
-                {{ row.status }}
-              </el-tag>
+              {{ formatCurrency(row.netValue) }}
             </template>
           </el-table-column>
         </el-table>
@@ -142,20 +162,27 @@
 import 'element-plus/dist/index.css';
 import Echarts from "@/components/Echarts/echarts.vue";
 import { getLedgerPage } from "@/api/equipmentManagement/ledger";
+import { getAccountingTotal, getDeviceTypeDistribution, getCalculateDepreciation } from "@/api/financialManagement/accounting";
 import dayjs from "dayjs";
 
 // 绛涢�夋潯浠�
 const dateRange = ref(null);
 const equipmentType = ref('');
+const selectedYear = ref(dayjs().format('YYYY')); // 榛樿褰撳墠骞翠唤
 
 
 // 鍥哄畾璧勪骇淇℃伅
 const assetInfo = ref({
-  totalEquipment: 0,
-  totalOriginalValue: 0,
-  totalDepreciation: 0,
-  totalNetValue: 0
+  totalEquipment: 0, // deviceTotal
+  totalOriginalValue: 0, // deviceAmount
+  totalDepreciation: 0, // deprAmount
+  totalNetValue: 0, // netValue
+  debt: 0, // 璐熷��
+  inventoryValue: 0 // 搴撳瓨璧勪骇
 });
+
+// 璁惧绫诲瀷鎬绘暟锛堢敤浜庡浘琛ㄦ樉绀猴級
+const deviceTypeTotalCount = ref(0);
 
 // 璁惧鍒楄〃
 const equipmentList = ref([]);
@@ -306,63 +333,96 @@
 const fetchData = async () => {
   try {
     // 鑾峰彇鍥哄畾璧勪骇姹囨�讳俊鎭�
-    const assetInfoRes = await getAssetInfo({
+    const assetInfoRes = await getAccountingTotal({
       startDate: dateRange.value ? dateRange.value[0] : null,
       endDate: dateRange.value ? dateRange.value[1] : null,
-      equipmentType: equipmentType.value
+      equipmentType: equipmentType.value,
+      year: selectedYear.value
     });
 
     if (assetInfoRes.code === 200) {
-      assetInfo.value = assetInfoRes.data;
+      // 鏄犲皠鍚庣瀛楁鍒板墠绔瓧娈�
+      const data = assetInfoRes.data;
+      assetInfo.value = {
+        totalEquipment: data.deviceTotal || 0, // 璁惧鎬绘暟
+        totalOriginalValue: data.deviceAmount || 0, // 璧勪骇鍘熷��
+        totalDepreciation: data.deprAmount || 0, // 绱鎶樻棫
+        totalNetValue: data.netValue || 0, // 鍑�鍊�
+        debt: data.debt || 0, // 璐熷��
+        inventoryValue: data.inventoryValue || 0 // 搴撳瓨璧勪骇
+      };
     }
 
-    // 鑾峰彇璁惧鍒楄〃
-    const equipmentListRes = await getLedgerPage({
-      current: pagination.value.currentPage,
-      size: pagination.value.pageSize,
+    // 鑾峰彇璁惧绫诲瀷鍒嗗竷鏁版嵁锛堥ゼ鍥惧拰鎶樼嚎鍥撅級
+    const distributionRes = await getDeviceTypeDistribution({
       startDate: dateRange.value ? dateRange.value[0] : null,
       endDate: dateRange.value ? dateRange.value[1] : null,
-      equipmentType: equipmentType.value
+      equipmentType: equipmentType.value,
+      year: selectedYear.value
     });
 
-    if (equipmentListRes.code === 200) {
-      equipmentList.value = equipmentListRes.data.records;
-      pagination.value.total = equipmentListRes.data.total;
-
-      // 鏍规嵁 equipmentList 鎸� deviceName 杩涜鍒嗙被缁熻
-      const deviceNameMap = {};
-      equipmentList.value.forEach(item => {
-        const deviceName = item.deviceName;
-        if (!deviceNameMap[deviceName]) {
-          deviceNameMap[deviceName] = {
-            name: deviceName,
-            count: 0,
-            totalValue: 0
-          };
-        }
-        deviceNameMap[deviceName].count += item.number || 1; // 鍋囪 number 涓鸿澶囨暟閲�
-        deviceNameMap[deviceName].totalValue += item.taxIncludingPriceTotal || 0; // 绱姞鍚◣鎬讳环
-      });
-
-      // 杞崲涓� typeDistributionData 鏍煎紡
-      typeDistributionData.value = Object.values(deviceNameMap).map(item => ({
-        name: item.name,
-        value: item.count,
-        count: item.count,
-        amount: `楼${formatCurrency(item.totalValue)}`
-      }));
+    if (distributionRes.code === 200) {
+      const data = distributionRes.data;
+      
+      // 鏇存柊璁惧绫诲瀷鎬绘暟
+      deviceTypeTotalCount.value = data.totalCount || 0;
+      
+      // 杞崲楗煎浘鏁版嵁鏍煎紡
+      if (data.details && data.details.length > 0) {
+        typeDistributionData.value = data.details.map(item => ({
+          name: item.type || '',
+          value: Number(item.count || 0),
+          count: Number(item.count || 0),
+          amount: `楼${formatCurrency(item.amount || 0)}`
+        }));
+      } else if (data.categories && data.categories.length > 0) {
+        // 濡傛灉娌℃湁 details锛屼娇鐢� categories銆乧ountData 鍜� amountData 鏋勫缓
+        typeDistributionData.value = data.categories.map((category, index) => ({
+          name: category,
+          value: Number(data.countData[index] || 0),
+          count: Number(data.countData[index] || 0),
+          amount: `楼${formatCurrency(data.amountData[index] || 0)}`
+        }));
+      } else {
+        typeDistributionData.value = [];
+      }
 
       // 鏇存柊x杞存暟鎹�
-      xAxis.value[0].data = typeDistributionData.value.map(item => item.name);
+      xAxis.value[0].data = data.categories || typeDistributionData.value.map(item => item.name);
 
       // 鏋勫缓鎶樼嚎鍥炬暟鎹�
       typeDistributionLineSeries.value = [
         {
           name: '璁惧鏁伴噺',
           type: 'line',
-          data: typeDistributionData.value.map(item => item.count)
+          data: data.countData || typeDistributionData.value.map(item => item.count)
         }
       ];
+    }
+
+    // 鑾峰彇璁惧鍒楄〃锛堟姌鏃ц绠楁暟鎹級
+    const equipmentListRes = await getCalculateDepreciation({
+      current: pagination.value.currentPage,
+      size: pagination.value.pageSize,
+      startDate: dateRange.value ? dateRange.value[0] : null,
+      endDate: dateRange.value ? dateRange.value[1] : null,
+      equipmentType: equipmentType.value,
+      year: selectedYear.value
+    });
+
+    if (equipmentListRes.code === 200) {
+      // 濡傛灉杩斿洖鐨勬槸鍒嗛〉鏁版嵁
+      if (equipmentListRes.data.records) {
+        equipmentList.value = equipmentListRes.data.records;
+        pagination.value.total = equipmentListRes.data.total;
+      } else if (Array.isArray(equipmentListRes.data)) {
+        // 濡傛灉杩斿洖鐨勬槸鏁扮粍
+        equipmentList.value = equipmentListRes.data;
+        pagination.value.total = equipmentListRes.data.length;
+      } else {
+        equipmentList.value = [];
+        pagination.value.total = 0;
+      }
     }
   } catch (error) {
     console.error('鑾峰彇鍥哄畾璧勪骇鏁版嵁澶辫触锛�', error);
@@ -401,6 +461,7 @@
 const resetFilters = () => {
   dateRange.value = null;
   equipmentType.value = '';
+  selectedYear.value = dayjs().format('YYYY'); // 閲嶇疆涓哄綋鍓嶅勾浠�
   fetchData();
 };
 
@@ -486,10 +547,10 @@
   }
 }
 
-/* 澶у睆骞曞強浠ヤ笂 (lg:grid-cols-5) */
+/* 澶у睆骞曞強浠ヤ笂 (lg:grid-cols-6) */
 @media (min-width: 1024px) {
   .grid-container {
-    grid-template-columns: repeat(5, minmax(0, 1fr));
+    grid-template-columns: repeat(6, minmax(0, 1fr));
   }
 }
 

--
Gitblit v1.9.3