From e6e74f13b1c49c179587d598d37caecea6f61813 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 27 一月 2026 17:27:54 +0800
Subject: [PATCH] Merge branch 'dev_New' of http://114.132.189.42:9002/r/product-inventory-management into dev_New
---
src/views/inventoryManagement/stockReport/index.vue | 396 +++++++++++++++++++++++++++----------------------------
1 files changed, 195 insertions(+), 201 deletions(-)
diff --git a/src/views/inventoryManagement/stockReport/index.vue b/src/views/inventoryManagement/stockReport/index.vue
index 79f1a02..a0a1f67 100644
--- a/src/views/inventoryManagement/stockReport/index.vue
+++ b/src/views/inventoryManagement/stockReport/index.vue
@@ -12,7 +12,6 @@
>
<el-option label="鏃ユ姤" value="daily" />
<el-option label="鏈堟姤" value="monthly" />
- <el-option label="浣滀笟鎶ヨ〃" value="work" />
<el-option label="杩涘嚭瀛樻姤琛�" value="inout" />
</el-select>
@@ -33,8 +32,8 @@
range-separator="鑷�"
start-placeholder="寮�濮嬫湀浠�"
end-placeholder="缁撴潫鏈堜唤"
- format="YYYY-MM"
- value-format="YYYY-MM"
+ format="YYYY-MM-DD"
+ value-format="YYYY-MM-DD"
style="width: 240px;"
/>
<el-date-picker
@@ -54,93 +53,93 @@
</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">
@@ -163,122 +162,72 @@
width="60"
/>
<el-table-column
- v-if="searchForm.reportType === 'daily'"
- label="鏃ユ湡"
- prop="date"
- width="100"
- align="center"
- />
- <el-table-column
- v-if="searchForm.reportType === 'monthly'"
- label="鏈堜唤"
- prop="month"
- width="100"
- align="center"
- />
- <el-table-column
label="鍏ュ簱鏃堕棿"
prop="createTime"
- width="100"
+ width="200"
show-overflow-tooltip
+ v-if="searchForm.reportType !== 'inout'"
/>
<el-table-column
label="鍏ュ簱鎵规"
prop="inboundBatches"
- width="160"
+ width="240"
show-overflow-tooltip
- />
- <el-table-column
- label="渚涘簲鍟嗗悕绉�"
- prop="supplierName"
- min-width="240"
- show-overflow-tooltip
+ v-if="searchForm.reportType !== 'inout'"
/>
<el-table-column
label="浜у搧澶х被"
- prop="productCategory"
- width="100"
+ prop="productName"
show-overflow-tooltip
/>
<el-table-column
label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- min-width="200"
+ prop="model"
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"
+ prop="totalStockIn"
align="center"
+ v-if="searchForm.reportType === 'inout'"
+ />
+ <el-table-column
+ label="鍏ュ簱鏁伴噺"
+ prop="stockInNum"
+ align="center"
+ v-else
/>
<el-table-column
label="鍑哄簱鏁伴噺"
- prop="outboundNum"
+ prop="totalStockOut"
width="100"
align="center"
+ v-if="searchForm.reportType === 'inout'"
/>
<el-table-column
- label="鏈熸湯搴撳瓨"
- prop="endStock"
- width="100"
+ label="鐜板湪搴撳瓨"
+ prop="currentStock"
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="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-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>
</el-card>
@@ -291,13 +240,17 @@
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()
// 鍝嶅簲寮忔暟鎹�
const tableLoading = ref(false)
const trendChart = ref(null)
@@ -316,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] || '鎶ヨ〃璇︾粏鏁版嵁'
@@ -346,29 +312,20 @@
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) {
- reportData.value = response.data
- 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)
@@ -376,7 +333,37 @@
tableLoading.value = false
}
}
+// // 鐢熸垚鍋囨暟鎹�
+// const generateMockData = () => {
+// // 鐢熸垚缁熻鍗$墖鍋囨暟鎹�
+// const summary = {
+// totalIn: 1000,
+// totalOut: 600,
+// currentStock: 400,
+// turnoverRate: 30
+// }
+// // 鐢熸垚鍥捐〃鍋囨暟鎹�
+// const trendDates = ['2025-09-15', '2025-09-16', '2025-09-17', '2025-09-18', '2025-09-19']
+// const trendValues = [300, 350, 400, 380, 420]
+// const comparisonDates = ['2025-09-15', '2025-09-16', '2025-09-17']
+// const inValues = [100, 150, 200]
+// const outValues = [80, 120, 100]
+
+// const chartData = {
+// trendDates,
+// trendValues,
+// comparisonDates,
+// inValues,
+// outValues
+// }
+
+// reportData.value = {
+// summary,
+// chartData,
+// tableData: []
+// }
+// }
// 楠岃瘉鎼滅储琛ㄥ崟
const validateSearchForm = () => {
if (searchForm.reportType === 'daily') {
@@ -384,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
@@ -401,7 +388,12 @@
// 鑾峰彇鏌ヨ鍙傛暟
const getQueryParams = () => {
const params = {
- reportType: searchForm.reportType
+ reportType: searchForm.reportType,
+ reportDate: "",
+ startMonth: "",
+ endMonth: "",
+ startDate: "",
+ endDate: ""
}
if (searchForm.reportType === 'daily') {
@@ -438,20 +430,20 @@
try {
const params = getQueryParams()
- const response = await exportStockReport(params)
-
+ // const response = await exportStockReport(params)
+ proxy.download("/stockin/exportCopy", params, '搴撳瓨鎶ヨ〃.xlsx')
// 鍒涘缓涓嬭浇閾炬帴
- const blob = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
- const url = window.URL.createObjectURL(blob)
- const link = document.createElement('a')
- link.href = url
- link.download = `${getTableTitle()}_${new Date().getTime()}.xlsx`
- document.body.appendChild(link)
- link.click()
- document.body.removeChild(link)
- window.URL.revokeObjectURL(url)
+ // const blob = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
+ // const url = window.URL.createObjectURL(blob)
+ // const link = document.createElement('a')
+ // link.href = url
+ // link.download = `${getTableTitle()}_${new Date().getTime()}.xlsx`
+ // document.body.appendChild(link)
+ // link.click()
+ // document.body.removeChild(link)
+ // window.URL.revokeObjectURL(url)
- ElMessage.success('瀵煎嚭鎴愬姛')
+ // ElMessage.success('瀵煎嚭鎴愬姛')
} catch (error) {
ElMessage.error('瀵煎嚭澶辫触锛�' + error.message)
}
@@ -558,6 +550,8 @@
yesterday.toISOString().split('T')[0],
today.toISOString().split('T')[0]
]
+
+ fetchStockRecordTypeOptions()
})
</script>
--
Gitblit v1.9.3