|
|
|
@ -60,12 +60,12 @@
|
|
|
|
<div class="overview-label">盘点差异</div>
|
|
|
|
<div class="overview-label">盘点差异</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col :span="4">
|
|
|
|
<!-- <el-col :span="4">
|
|
|
|
<div class="overview-item">
|
|
|
|
<div class="overview-item">
|
|
|
|
<div class="overview-value text-green-500">{{ overviewStats.avgTurnoverRate.toFixed(1) }}%</div>
|
|
|
|
<div class="overview-value text-green-500">{{ overviewStats.avgTurnoverRate.toFixed(1) }}%</div>
|
|
|
|
<div class="overview-label">平均周转率</div>
|
|
|
|
<div class="overview-label">平均周转率</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-col>
|
|
|
|
</el-col>-->
|
|
|
|
<el-col :span="4">
|
|
|
|
<el-col :span="4">
|
|
|
|
<div class="overview-item">
|
|
|
|
<div class="overview-item">
|
|
|
|
<div class="overview-value text-purple-500">{{ overviewStats.totalInventory }}</div>
|
|
|
|
<div class="overview-value text-purple-500">{{ overviewStats.totalInventory }}</div>
|
|
|
|
@ -101,13 +101,13 @@
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup name="ReportDashboard" lang="ts">
|
|
|
|
<script setup name="ReportDashboard" lang="ts">
|
|
|
|
import {
|
|
|
|
import {
|
|
|
|
getReturnReasonAnalysis,
|
|
|
|
getReturnReasonAnalysis,
|
|
|
|
getInventoryTrendAnalysis,
|
|
|
|
getInventoryTrendAnalysis,
|
|
|
|
getSafetyStockAlert,
|
|
|
|
getSafetyStockAlert,
|
|
|
|
getStagnantInventory,
|
|
|
|
getStagnantInventory,
|
|
|
|
getInventoryDifference,
|
|
|
|
getInventoryDifference,
|
|
|
|
getInventoryTurnover
|
|
|
|
getInventoryTurnover
|
|
|
|
} from '@/api/wms/report';
|
|
|
|
} from '@/api/wms/report';
|
|
|
|
import * as echarts from 'echarts';
|
|
|
|
import * as echarts from 'echarts';
|
|
|
|
import { useRouter } from 'vue-router';
|
|
|
|
import { useRouter } from 'vue-router';
|
|
|
|
@ -204,7 +204,7 @@ const refreshAllData = async () => {
|
|
|
|
loadInventoryDifferenceData(),
|
|
|
|
loadInventoryDifferenceData(),
|
|
|
|
loadInventoryTurnoverData()
|
|
|
|
loadInventoryTurnoverData()
|
|
|
|
]);
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
nextTick(() => {
|
|
|
|
nextTick(() => {
|
|
|
|
updateCharts();
|
|
|
|
updateCharts();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
@ -265,8 +265,8 @@ const loadInventoryTurnoverData = async () => {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const res = await getInventoryTurnover({});
|
|
|
|
const res = await getInventoryTurnover({});
|
|
|
|
reportCards.value[5].count = res.data.length;
|
|
|
|
reportCards.value[5].count = res.data.length;
|
|
|
|
overviewStats.value.avgTurnoverRate = res.data.length > 0
|
|
|
|
overviewStats.value.avgTurnoverRate = res.data.length > 0
|
|
|
|
? res.data.reduce((sum, item) => sum + (item.inventoryTurnoverRate || 0), 0) / res.data.length
|
|
|
|
? res.data.reduce((sum, item) => sum + (item.inventoryTurnoverRate || 0), 0) / res.data.length
|
|
|
|
: 0;
|
|
|
|
: 0;
|
|
|
|
} catch (error) {
|
|
|
|
} catch (error) {
|
|
|
|
console.error('加载库存周转数据失败:', error);
|
|
|
|
console.error('加载库存周转数据失败:', error);
|
|
|
|
@ -459,4 +459,4 @@ onUnmounted(() => {
|
|
|
|
.el-card {
|
|
|
|
.el-card {
|
|
|
|
margin-bottom: 20px;
|
|
|
|
margin-bottom: 20px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</style>
|
|
|
|
|