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>
+ <!-- <!– 缁熻鍗$墖 –>-->
+ <!-- <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>
+ <!-- <!– 鍥捐〃鍖哄煙 –>-->
+ <!-- <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