diff --git a/src/api/mes/productInventory.js b/src/api/mes/productInventory.js
new file mode 100644
index 0000000..2806c0b
--- /dev/null
+++ b/src/api/mes/productInventory.js
@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+
+export function getProductInventoryPage(params = {}) {
+ return request({
+ url: '/admin-api/erp/stock/page',
+ method: 'get',
+ params: {
+ categoryType: 1,
+ ...params
+ }
+ })
+}
\ No newline at end of file
diff --git a/src/locales/en-US.js b/src/locales/en-US.js
index 414221b..bf2a1ed 100644
--- a/src/locales/en-US.js
+++ b/src/locales/en-US.js
@@ -1732,4 +1732,31 @@ export default {
outMode: 'Outbound Mode',
outModeWholePallet: 'Whole Pallet',
outModeSplitPallet: 'Split Pallet'
+ },
+ productInventory: {
+ moduleName: 'Product Inventory',
+ detailTitle: 'Product Inventory Detail',
+ searchPlaceholder: 'Enter product code or name',
+ allWarehouse: 'All Warehouses',
+ warehousePlaceholder: 'Warehouse Filter',
+ productInfo: 'Product Info',
+ stockInfo: 'Stock Info',
+ productName: 'Product Name',
+ barCode: 'Product Code',
+ warehouse: 'Warehouse',
+ area: 'Area',
+ count: 'Base Qty',
+ stockDisplay: 'Stock Display',
+ areaStockDisplay: 'Area Stock Display',
+ totalPackageCount: 'Total Packages',
+ totalBaseCount: 'Total Pieces',
+ unit: 'Unit',
+ category: 'Product Category',
+ standard: 'Spec',
+ packagingRule: 'Packaging/Conversion Rule',
+ latestInTime: 'Latest Inbound',
+ latestOutTime: 'Latest Outbound',
+ remark: 'Remark',
+ empty: 'No product inventory data',
+ noDetailId: 'No product inventory ID'
}}
diff --git a/src/locales/index.js b/src/locales/index.js
index 0b50723..356f13e 100644
--- a/src/locales/index.js
+++ b/src/locales/index.js
@@ -147,6 +147,8 @@ const literalMap = {
'产品出库': 'productOutbound.moduleName',
'新增产品出库': 'productOutbound.createTitle',
'产品出库详情': 'productOutbound.detailTitle',
+ '产品库存查询': 'productInventory.moduleName',
+ '产品库存详情': 'productInventory.detailTitle',
'产品盘点执行': 'productCheck.moduleName',
'新增产品盘点': 'productCheck.createTitle',
'执行盘点': 'productCheck.executeTitle',
diff --git a/src/locales/zh-CN.js b/src/locales/zh-CN.js
index 6a3403e..dd8941d 100644
--- a/src/locales/zh-CN.js
+++ b/src/locales/zh-CN.js
@@ -1817,6 +1817,33 @@ export default {
empty: '暂无出库单据',
createTitle: '新增物料出库'
},
+ productInventory: {
+ moduleName: '产品库存查询',
+ detailTitle: '产品库存详情',
+ searchPlaceholder: '请输入产品编码或名称',
+ allWarehouse: '全部仓库',
+ warehousePlaceholder: '仓库筛选',
+ productInfo: '产品信息',
+ stockInfo: '库存信息',
+ productName: '产品名称',
+ barCode: '产品编码',
+ warehouse: '仓库',
+ area: '库区',
+ count: '基本数量',
+ stockDisplay: '库存展示',
+ areaStockDisplay: '库区库存展示',
+ totalPackageCount: '总包数',
+ totalBaseCount: '总个数',
+ unit: '单位',
+ category: '产品小类',
+ standard: '规格',
+ packagingRule: '包装/换算规则',
+ latestInTime: '最近入库',
+ latestOutTime: '最近出库',
+ remark: '备注',
+ empty: '暂无产品库存数据',
+ noDetailId: '暂无产品库存ID'
+ },
sparepartInventory: {
moduleName: '备件库存查询',
searchPlaceholder: '请输入备件编码或名称',
diff --git a/src/pages.json b/src/pages.json
index 3403dc3..2034190 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -577,6 +577,20 @@
"navigationStyle": "custom"
}
},
+ {
+ "path": "productInventory/index",
+ "style": {
+ "navigationBarTitleText": "\u4ea7\u54c1\u5e93\u5b58\u67e5\u8be2",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productInventory/detail",
+ "style": {
+ "navigationBarTitleText": "\u4ea7\u54c1\u5e93\u5b58\u8be6\u60c5",
+ "navigationStyle": "custom"
+ }
+ },
{
"path": "sparepartInventory/index",
"style": {
diff --git a/src/pages_function/pages/productInventory/detail.vue b/src/pages_function/pages/productInventory/detail.vue
new file mode 100644
index 0000000..ed7d96a
--- /dev/null
+++ b/src/pages_function/pages/productInventory/detail.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('productInventory.barCode') }}
+ {{ textValue(detail.barCode || detail.productBarCode) }}
+
+
+ {{ t('productInventory.productName') }}
+ {{ textValue(detail.name || detail.productName) }}
+
+
+ {{ t('productInventory.category') }}
+ {{ textValue(detail.categoryName || detail.subCategoryName) }}
+
+
+ {{ t('productInventory.packagingRule') }}
+ {{ textValue(detail.packagingRule) }}
+
+
+ {{ t('productInventory.warehouse') }}
+ {{ textValue(detail.warehouseName) }}
+
+
+ {{ t('productInventory.stockDisplay') }}
+
+ {{ item }}
+ -
+
+
+
+ {{ t('productInventory.areaStockDisplay') }}
+
+ {{ item }}
+ -
+
+
+
+ {{ t('productInventory.totalPackageCount') }}
+ {{ formatStockCount(detail.totalPackageCount) }}
+
+
+ {{ t('productInventory.totalBaseCount') }}
+ {{ formatStockCount(detail.totalBaseCount) }}
+
+
+ {{ t('productInventory.unit') }}
+ {{ textValue(detail.unitName) }}
+
+
+ {{ t('productInventory.latestInTime') }}
+ {{ formatDateTime(getLatestInTime(detail)) }}
+
+
+ {{ t('productInventory.latestOutTime') }}
+ {{ formatDateTime(getLatestOutTime(detail)) }}
+
+
+
+
+
+ {{ t('functionCommon.loading') }}
+ {{ t('functionCommon.loadFailed') }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages_function/pages/productInventory/index.vue b/src/pages_function/pages/productInventory/index.vue
new file mode 100644
index 0000000..59ce481
--- /dev/null
+++ b/src/pages_function/pages/productInventory/index.vue
@@ -0,0 +1,320 @@
+
+
+
+
+
+
+
+
+ {{ t('functionCommon.reset') }}
+
+
+
+
+
+
+
+
+ {{ t('productInventory.productName') }}
+ {{ textValue(item.name || item.productName) }}
+
+
+ {{ t('productInventory.stockDisplay') }}
+ {{ textValue(item.stockDisplay) }}
+
+
+ {{ t('productInventory.count') }}
+ {{ formatStockCount(item.count) }}{{ textUnit(item.unitName) }}
+
+
+ {{ t('productInventory.latestInTime') }}
+ {{ formatDateTime(getLatestInTime(item)) }}
+
+
+ {{ t('productInventory.latestOutTime') }}
+ {{ formatDateTime(getLatestOutTime(item)) }}
+
+
+
+
+ {{ t('functionCommon.loading') }}
+ {{ t('productInventory.empty') }}
+ {{ t('functionCommon.loadingMore') }}
+ {{ t('functionCommon.noMoreData') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/utils/permissionMenu.js b/src/utils/permissionMenu.js
index 6cfc06e..f817de2 100644
--- a/src/utils/permissionMenu.js
+++ b/src/utils/permissionMenu.js
@@ -121,6 +121,13 @@ const MENU_ROUTE_MAP = {
materialOutbound: '/pages_function/pages/materialOutbound/index',
materialoutbound: '/pages_function/pages/materialOutbound/index',
'物料出库': '/pages_function/pages/materialOutbound/index',
+ productInventory: '/pages_function/pages/productInventory/index',
+ productinventory: '/pages_function/pages/productInventory/index',
+ productStock: '/pages_function/pages/productInventory/index',
+ productstock: '/pages_function/pages/productInventory/index',
+ productinventoryquery: '/pages_function/pages/productInventory/index',
+ '产品库存': '/pages_function/pages/productInventory/index',
+ '产品库存查询': '/pages_function/pages/productInventory/index',
sparepartinventory: '/pages_function/pages/sparepartInventory/index',
'备件库存查询': '/pages_function/pages/sparepartInventory/index',
materialinventory: '/pages_function/pages/materialInventory/index',