diff --git a/src/api/infra/config.js b/src/api/infra/config.js
new file mode 100644
index 0000000..fd91bcc
--- /dev/null
+++ b/src/api/infra/config.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getConfigPage(params = {}) {
+ return request({
+ url: '/admin-api/infra/config/page',
+ method: 'get',
+ params
+ })
+}
diff --git a/src/api/mes/productCheck.js b/src/api/mes/productCheck.js
new file mode 100644
index 0000000..4bc6f64
--- /dev/null
+++ b/src/api/mes/productCheck.js
@@ -0,0 +1,72 @@
+import request from '@/utils/request'
+
+export function createProductCheck(data) {
+ return request({
+ url: '/admin-api/erp/stock-check/create',
+ method: 'post',
+ data
+ })
+}
+
+export function generateProductCheckItemsByProduct(data) {
+ return request({
+ url: '/admin-api/erp/stock-check/generate-items/by-product',
+ method: 'post',
+ data
+ })
+}
+export function generateProductCheckItemsByLocation(data) {
+ return request({
+ url: '/admin-api/erp/stock-check/generate-items/by-location',
+ method: 'post',
+ data
+ })
+}
+
+export function getProductCheckPage(params = {}) {
+ return request({
+ url: '/admin-api/erp/stock-check/page',
+ method: 'get',
+ params: { ...params, categoryType: 1 }
+ })
+}
+
+export function getProductCheckDetail(id) {
+ return request({
+ url: '/admin-api/erp/stock-check/get',
+ method: 'get',
+ params: { id }
+ })
+}
+
+export function updateProductCheck(data) {
+ return request({
+ url: '/admin-api/erp/stock-check/update',
+ method: 'put',
+ data
+ })
+}
+
+export function submitProductCheck(data) {
+ return request({
+ url: '/admin-api/erp/stock-check/submit',
+ method: 'put',
+ data
+ })
+}
+
+export function auditProductCheck(data) {
+ return request({
+ url: '/admin-api/erp/stock-check/audit',
+ method: 'put',
+ data
+ })
+}
+
+export function deleteProductCheck(id) {
+ return request({
+ url: '/admin-api/erp/stock-check/delete',
+ method: 'delete',
+ params: { ids: String(id) }
+ })
+}
diff --git a/src/locales/en-US.js b/src/locales/en-US.js
index d11a0f3..414221b 100644
--- a/src/locales/en-US.js
+++ b/src/locales/en-US.js
@@ -1526,6 +1526,110 @@ export default {
createSuccess: 'Created successfully',
createPalletFailed: 'Failed to create pallet'
},
+ productCheck: {
+ moduleName: 'Product Stock Check',
+ createTitle: 'New Product Stock Check',
+ executeTitle: 'Execute Stock Check',
+ detailTitle: 'Product Stock Check Detail',
+ selectProductTitle: 'Select Product',
+ selectItemTitle: 'Select Check Items',
+ selectWarehouseTitle: 'Select Warehouse',
+ selectAreaTitle: 'Select Area',
+ all: 'All',
+ reset: 'Reset',
+ clear: 'Clear',
+ loading: 'Loading...',
+ loadingMore: 'Loading more...',
+ noMoreData: 'No more data',
+ confirm: 'Confirm',
+ cancel: 'Cancel',
+ submit: 'OK',
+ submitting: 'Submitting...',
+ tip: 'Tip',
+ choose: 'Please select',
+ delete: 'Delete',
+ save: 'Save',
+ statusDraft: 'Pending Submit',
+ statusAuditing: 'Pending Review',
+ statusApproved: 'Reviewed',
+ statusRejected: 'Rejected',
+ searchDocumentPlaceholder: 'Enter check No.',
+ searchProductPlaceholder: 'Search product name/code/spec',
+ searchWarehousePlaceholder: 'Search warehouse name',
+ searchAreaPlaceholder: 'Search area name/code',
+ searchItemPlaceholder: 'Search product/warehouse/area',
+ productInfo: 'Product Info',
+ checkInfo: 'Check Info',
+ checkTime: 'Check Time',
+ selectCheckTime: 'Select check time',
+ sourceType: 'Source Type',
+ sourceTypeStock: 'By Stock',
+ sourceTypeProduct: 'By Product',
+ selectWarehouse: 'Select warehouse',
+ selectWarehouseFirst: 'Select warehouse first',
+ selectArea: 'Select area',
+ warehouse: 'Warehouse',
+ area: 'Area',
+ warehouseAddress: 'Address',
+ principal: 'Principal',
+ checkStatus: 'Check Status',
+ checked: 'Checked',
+ unchecked: 'Unchecked',
+ creator: 'Creator',
+ reviewer: 'Reviewer',
+ auditor: 'Reviewer',
+ documentNo: 'Check No.',
+ remark: 'Remark',
+ remarkPlaceholder: 'Enter remark',
+ productAndItems: 'Products & Items',
+ selectProduct: 'Select Product',
+ product: 'Product',
+ checkItems: 'Check Items',
+ selectAll: 'Select All',
+ selectedCount: '{count} selected',
+ selectedItemCount: '{count} item(s) selected',
+ selectCheckItems: 'Select check items',
+ stockCount: 'Book Qty',
+ code: 'Code',
+ spec: 'Spec',
+ unit: 'Unit',
+ difference: 'Difference',
+ actualCount: 'Actual Qty',
+ saveDraft: 'Save Draft',
+ finishCheck: 'Finish Check',
+ execute: 'Execute',
+ submitAudit: 'Submit Review',
+ auditPass: 'Approve',
+ auditReject: 'Reject',
+ auditPassSuccess: 'Approved',
+ auditRejectSuccess: 'Rejected',
+ submitAuditSuccess: 'Review submitted',
+ submitFailed: 'Submit failed',
+ selectAuditor: 'Select reviewer',
+ selectStatus: 'Select Check Status',
+ confirmAuditPass: 'Approve this product stock check?',
+ confirmAuditReject: 'Reject this product stock check?',
+ confirmDelete: 'Delete this product stock check?',
+ deleteSuccess: 'Deleted',
+ operationFailed: 'Operation failed',
+ loadFailed: 'Load failed',
+ detailLoadFailed: 'Failed to load detail',
+ emptyList: 'No product stock checks',
+ emptyProduct: 'No product data',
+ emptyWarehouse: 'No warehouses',
+ emptyArea: 'No areas',
+ emptyItemList: 'No check items',
+ emptyAddProduct: 'Please add a product',
+ selectProductFirst: 'Select product first',
+ completeCheckItems: 'Complete check item information',
+ createSuccess: 'Created successfully',
+ saveFailed: 'Save failed',
+ saveSuccess: 'Saved',
+ checkSuccess: 'Check completed',
+ noDetailId: 'No detail ID',
+ enterActualCount: 'Enter actual quantity',
+ confirmActualCountZero: '{items} actual quantity is 0. Continue?'
+ },
productOutbound: {
moduleName: 'Product Outbound',
createTitle: 'New Product Outbound',
diff --git a/src/locales/index.js b/src/locales/index.js
index 4dade9c..0b50723 100644
--- a/src/locales/index.js
+++ b/src/locales/index.js
@@ -146,7 +146,13 @@ const literalMap = {
'选择任务产品': 'productInbound.selectTaskProductTitle',
'产品出库': 'productOutbound.moduleName',
'新增产品出库': 'productOutbound.createTitle',
- '产品出库详情': 'productOutbound.detailTitle'
+ '产品出库详情': 'productOutbound.detailTitle',
+ '产品盘点执行': 'productCheck.moduleName',
+ '新增产品盘点': 'productCheck.createTitle',
+ '执行盘点': 'productCheck.executeTitle',
+ '选择盘点项': 'productCheck.selectItemTitle',
+ '选择仓库': 'productCheck.selectWarehouseTitle',
+ '选择库区': 'productCheck.selectAreaTitle'
}
export function getCurrentLocale() {
diff --git a/src/locales/zh-CN.js b/src/locales/zh-CN.js
index 9157821..6a3403e 100644
--- a/src/locales/zh-CN.js
+++ b/src/locales/zh-CN.js
@@ -1529,6 +1529,110 @@ export default {
createSuccess: '新增成功',
createPalletFailed: '新增托盘失败'
},
+ productCheck: {
+ moduleName: '产品盘点执行',
+ createTitle: '新增产品盘点',
+ executeTitle: '执行盘点',
+ detailTitle: '\u4ea7\u54c1\u76d8\u70b9\u8be6\u60c5',
+ selectProductTitle: '选择产品',
+ selectItemTitle: '选择盘点项',
+ selectWarehouseTitle: '选择仓库',
+ selectAreaTitle: '选择库区',
+ all: '全部',
+ reset: '重置',
+ clear: '清空',
+ loading: '加载中...',
+ loadingMore: '加载更多...',
+ noMoreData: '没有更多数据',
+ confirm: '确认',
+ cancel: '取消',
+ submit: '确定',
+ submitting: '提交中...',
+ tip: '提示',
+ choose: '请选择',
+ delete: '删除',
+ save: '保存',
+ statusDraft: '待提交',
+ statusAuditing: '待审核',
+ statusApproved: '已审核',
+ statusRejected: '已驳回',
+ searchDocumentPlaceholder: '请输入盘点单号',
+ searchProductPlaceholder: '搜索产品名称/编码/规格',
+ searchWarehousePlaceholder: '搜索仓库名称',
+ searchAreaPlaceholder: '搜索库区名称/编码',
+ searchItemPlaceholder: '搜索产品/仓库/库区',
+ productInfo: '产品信息',
+ checkInfo: '盘点信息',
+ checkTime: '盘点时间',
+ selectCheckTime: '请选择盘点时间',
+ sourceType: '生成来源',
+ sourceTypeStock: '按库存',
+ sourceTypeProduct: '按产品',
+ selectWarehouse: '请选择仓库',
+ selectWarehouseFirst: '请先选择仓库',
+ selectArea: '请选择库区',
+ warehouse: '仓库',
+ area: '库区',
+ warehouseAddress: '地址',
+ principal: '负责人',
+ checkStatus: '盘点状态',
+ checked: '已盘点',
+ unchecked: '未盘点',
+ creator: '创建人',
+ reviewer: '审核人',
+ auditor: '审核人',
+ documentNo: '盘点单号',
+ remark: '备注',
+ remarkPlaceholder: '请输入备注',
+ productAndItems: '产品与盘点项',
+ selectProduct: '选择产品',
+ product: '产品',
+ checkItems: '盘点项',
+ selectAll: '全选',
+ selectedCount: '已选 {count} 个',
+ selectedItemCount: '已选 {count} 项',
+ selectCheckItems: '请选择盘点项',
+ stockCount: '账面数量',
+ code: '编码',
+ spec: '规格',
+ unit: '单位',
+ difference: '差异',
+ actualCount: '实盘数量',
+ saveDraft: '保存草稿',
+ finishCheck: '完成盘点',
+ execute: '执行盘点',
+ submitAudit: '提交审核',
+ auditPass: '审核通过',
+ auditReject: '审核驳回',
+ auditPassSuccess: '审核通过',
+ auditRejectSuccess: '已驳回',
+ submitAuditSuccess: '提交审核成功',
+ submitFailed: '提交失败',
+ selectAuditor: '请选择审核人',
+ selectStatus: '选择盘点状态',
+ confirmAuditPass: '确认审核通过该产品盘点单?',
+ confirmAuditReject: '确认驳回该产品盘点单?',
+ confirmDelete: '确认删除该产品盘点单?',
+ deleteSuccess: '删除成功',
+ operationFailed: '操作失败',
+ loadFailed: '加载失败',
+ detailLoadFailed: '详情加载失败',
+ emptyList: '暂无产品盘点单',
+ emptyProduct: '暂无产品数据',
+ emptyWarehouse: '暂无仓库',
+ emptyArea: '暂无库区',
+ emptyItemList: '暂无盘点项',
+ emptyAddProduct: '请添加产品',
+ selectProductFirst: '请先选择产品',
+ completeCheckItems: '请完善盘点项信息',
+ createSuccess: '创建成功',
+ saveFailed: '保存失败',
+ saveSuccess: '保存成功',
+ checkSuccess: '盘点完成',
+ noDetailId: '暂无详情ID',
+ enterActualCount: '请输入实盘数量',
+ confirmActualCountZero: '{items} 实盘数量为 0,确认继续?'
+ },
productOutbound: {
moduleName: '产品出库',
createTitle: '新增产品出库',
diff --git a/src/pages.json b/src/pages.json
index 0a15a39..858f740 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -500,6 +500,62 @@
"navigationStyle": "custom"
}
},
+ {
+ "path": "productCheck/index",
+ "style": {
+ "navigationBarTitleText": "产品盘点执行",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/create",
+ "style": {
+ "navigationBarTitleText": "新增产品盘点",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/execute",
+ "style": {
+ "navigationBarTitleText": "执行盘点",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/productSelect",
+ "style": {
+ "navigationBarTitleText": "选择产品",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/warehouseSelect",
+ "style": {
+ "navigationBarTitleText": "选择仓库",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/areaSelect",
+ "style": {
+ "navigationBarTitleText": "选择库区",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/itemSelect",
+ "style": {
+ "navigationBarTitleText": "选择盘点项",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "productCheck/itemSelectByProduct",
+ "style": {
+ "navigationBarTitleText": "选择盘点项",
+ "navigationStyle": "custom"
+ }
+ },
{
"path": "sparepartOutbound/index",
"style": {
diff --git a/src/pages_function/pages/moldRepair/userSelect.vue b/src/pages_function/pages/moldRepair/userSelect.vue
index c9462ce..c659ad4 100644
--- a/src/pages_function/pages/moldRepair/userSelect.vue
+++ b/src/pages_function/pages/moldRepair/userSelect.vue
@@ -128,7 +128,10 @@ function handleConfirm() {
sparepartInbound: '_sparepartInboundUserSelectResult',
sparepartOutbound: '_sparepartOutboundUserSelectResult',
materialInbound: '_materialInboundUserSelectResult',
- materialOutbound: '_materialOutboundUserSelectResult'
+ materialOutbound: '_materialOutboundUserSelectResult',
+ productInbound: '_productInboundUserSelectResult',
+ productOutbound: '_productOutboundUserSelectResult',
+ productCheck: '_productCheckUserSelectResult'
}
const key = keyMap[fromSource.value] || '_moldRepairUserSelectResult'
getApp().globalData[key] = {
diff --git a/src/pages_function/pages/productCheck/areaSelect.vue b/src/pages_function/pages/productCheck/areaSelect.vue
new file mode 100644
index 0000000..2b9bb6c
--- /dev/null
+++ b/src/pages_function/pages/productCheck/areaSelect.vue
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ loading ? t('productCheck.loading') : t('productCheck.emptyArea') }}
+
+
+
+ {{ t('productCheck.confirm') }}
+
+
+
+
+
+
+
diff --git a/src/pages_function/pages/productCheck/create.vue b/src/pages_function/pages/productCheck/create.vue
new file mode 100644
index 0000000..1d67fe6
--- /dev/null
+++ b/src/pages_function/pages/productCheck/create.vue
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.checkTime') }}*
+
+
+ {{ checkDate || t('productCheck.selectCheckTime') }}
+
+
+
+
+
+
+ {{ t('productCheck.sourceType') }}*
+
+ {{ t('productCheck.sourceTypeStock') }}
+ {{ t('productCheck.sourceTypeProduct') }}
+
+
+
+
+ {{ t('productCheck.remark') }}
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.warehouse') }}*
+
+ {{ selectedWarehouse ? selectedWarehouse.label : t('productCheck.selectWarehouse') }}
+
+
+
+
+
+ {{ t('productCheck.area') }}*
+
+ {{ selectedArea ? selectedArea.label : t('productCheck.selectArea') }}
+
+
+
+
+
+
+ {{ t('productCheck.checkItems') }}
+ {{ itemList.length ? t('productCheck.selectedItemCount', { count: itemList.length }) : t('productCheck.selectCheckItems') }}
+
+
+
+
+
+
+
+
+ {{ t('productCheck.selectProduct') }}
+
+
+
+
+ {{ textValue(product.name) }}
+
+
+
+
+
+
+ {{ t('productCheck.checkItems') }}
+ {{ itemList.length ? t('productCheck.selectedItemCount', { count: itemList.length }) : t('productCheck.selectCheckItems') }}
+
+
+
+
+
+
+
+ {{ selectedProducts.length }}
+ {{ t('productCheck.product') }}
+
+
+ {{ itemList.length }}
+ {{ t('productCheck.checkItems') }}
+
+
+ {{ totalStockCount }}
+ {{ t('productCheck.stockCount') }}
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.code') }}
+ {{ textValue(item.productBarCode) }}
+
+
+ {{ t('productCheck.warehouse') }}
+ {{ textValue(item.warehouseName) }}
+
+
+ {{ t('productCheck.area') }}
+ {{ textValue(item.areaName) }}
+
+
+ {{ t('productCheck.stockCount') }}
+ {{ textValue(item.stockCount) }}
+
+
+
+
+
+
+
+ {{ sourceType === 1 ? t('productCheck.selectCheckItems') : t('productCheck.emptyAddProduct') }}
+
+
+
+
+
+
+ {{ t('productCheck.cancel') }}
+ {{ t('productCheck.save') }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages_function/pages/productCheck/execute.vue b/src/pages_function/pages/productCheck/execute.vue
new file mode 100644
index 0000000..8a27e06
--- /dev/null
+++ b/src/pages_function/pages/productCheck/execute.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.documentNo') }}
+ {{ textValue(detail.no) }}
+
+
+ {{ t('productCheck.checkTime') }}
+ {{ formatDateTime(detail.checkTime) }}
+
+
+ {{ t('productCheck.warehouse') }}
+ {{ textValue(getWarehouseNames()) }}
+
+
+ {{ t('productCheck.creator') }}
+ {{ textValue(detail.creatorName || detail.creator) }}
+
+
+
+
+
+
+
+ {{ t('productCheck.loading') }}
+
+
+
+
+
+
+ {{ t('productCheck.warehouse') }}
+ {{ textValue(item.warehouseName) }}
+
+
+ {{ t('productCheck.area') }}
+ {{ textValue(item.areaName) }}
+
+
+ {{ t('productCheck.stockCount') }}
+ {{ formatNumber(item.stockCount) }} {{ textValue(item.productUnitName || item.unitName) }}
+
+
+ {{ t('productCheck.difference') }}
+ {{ getDiffText(item) }}
+
+
+
+
+ {{ t('productCheck.actualCount') }}*
+ {{ textValue(item._actualCount) }}
+
+ -
+
+ +
+
+
+
+
+ {{ t('productCheck.remark') }}
+ {{ textValue(item._remark) }}
+
+
+
+
+ {{ t('productCheck.emptyItemList') }}
+
+
+
+
+
+ {{ t('productCheck.saveDraft') }}
+ {{ t('productCheck.finishCheck') }}
+
+
+
+
+
+
+
diff --git a/src/pages_function/pages/productCheck/index.vue b/src/pages_function/pages/productCheck/index.vue
new file mode 100644
index 0000000..0efdc22
--- /dev/null
+++ b/src/pages_function/pages/productCheck/index.vue
@@ -0,0 +1,595 @@
+
+
+
+
+
+
+
+
+
+ {{ selectedStatusLabel || t('productCheck.all') }}
+
+
+ {{ t('productCheck.reset') }}
+
+
+
+
+
+
+
+
+ {{ t('productCheck.productInfo') }}
+ {{ textValue(item.productNames || getProductNames(item)) }}
+
+
+ {{ t('productCheck.checkTime') }}
+ {{ formatDateTime(item.checkTime || item.createTime) }}
+
+
+ {{ t('productCheck.warehouse') }}
+ {{ textValue(getWarehouseNames(item)) }}
+
+
+ {{ t('productCheck.checkStatus') }}
+ {{ checkStatusText(item.checkStatus) }}
+
+
+ {{ t('productCheck.creator') }}
+ {{ textValue(item.creatorName || item.creator) }}
+
+
+ {{ t('productCheck.reviewer') }}
+ {{ textValue(item.auditUserName) }}
+
+
+
+ {{ t('productCheck.execute') }}
+ {{ t('productCheck.submitAudit') }}
+ {{ t('productCheck.auditPass') }}
+ {{ t('productCheck.auditReject') }}
+ {{ t('productCheck.delete') }}
+
+
+
+ {{ t('productCheck.loading') }}
+ {{ t('productCheck.emptyList') }}
+ {{ t('productCheck.loadingMore') }}
+ {{ t('productCheck.noMoreData') }}
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ *{{ t('productCheck.auditor') }}
+
+ {{ selectedAuditor ? selectedAuditor.label : t('productCheck.choose') }}
+
+
+
+
+ {{ t('productCheck.remark') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ option.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages_function/pages/productCheck/itemSelect.vue b/src/pages_function/pages/productCheck/itemSelect.vue
new file mode 100644
index 0000000..a1b0185
--- /dev/null
+++ b/src/pages_function/pages/productCheck/itemSelect.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.selectAll') }}
+
+ {{ t('productCheck.selectedItemCount', { count: selectedItems.length }) }}
+
+
+
+
+
+
+
+ {{ t('productCheck.warehouse') }}
+ {{ textValue(item.warehouseName) }}
+
+
+ {{ t('productCheck.area') }}
+ {{ textValue(item.areaName) }}
+
+
+ {{ t('productCheck.stockCount') }}
+ {{ textValue(item.stockCount) }}
+
+
+ {{ t('productCheck.unit') }}
+ {{ textValue(item.productUnitName || item.unitName) }}
+
+
+
+
+
+
+ {{ loading ? t('productCheck.loading') : t('productCheck.emptyItemList') }}
+
+
+
+ {{ t('productCheck.cancel') }}
+ {{ t('productCheck.confirm') }}
+
+
+
+
+
+
+
diff --git a/src/pages_function/pages/productCheck/itemSelectByProduct.vue b/src/pages_function/pages/productCheck/itemSelectByProduct.vue
new file mode 100644
index 0000000..a6175b5
--- /dev/null
+++ b/src/pages_function/pages/productCheck/itemSelectByProduct.vue
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.selectAll') }}
+
+ {{ t('productCheck.selectedItemCount', { count: selectedItems.length }) }}
+
+
+
+
+
+
+
+ {{ t('productCheck.warehouse') }}
+ {{ textValue(item.warehouseName) }}
+
+
+ {{ t('productCheck.area') }}
+ {{ textValue(item.areaName) }}
+
+
+ {{ t('productCheck.stockCount') }}
+ {{ textValue(item.stockCount) }}
+
+
+ {{ t('productCheck.unit') }}
+ {{ textValue(item.productUnitName || item.unitName) }}
+
+
+
+
+
+
+ {{ loading ? t('productCheck.loading') : t('productCheck.emptyItemList') }}
+
+
+
+ {{ t('productCheck.cancel') }}
+ {{ t('productCheck.confirm') }}
+
+
+
+
+
+
+
diff --git a/src/pages_function/pages/productCheck/productSelect.vue b/src/pages_function/pages/productCheck/productSelect.vue
new file mode 100644
index 0000000..808bfa1
--- /dev/null
+++ b/src/pages_function/pages/productCheck/productSelect.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.selectAll') }}
+
+ {{ t('productCheck.selectedCount', { count: selectedItems.length }) }}
+
+
+
+
+
+
+
+ {{ t('productCheck.spec') }}
+ {{ textValue(item.standard || item.deviceSpec) }}
+
+
+ {{ t('productCheck.unit') }}
+ {{ textValue(item.unitName || item.productUnitName) }}
+
+
+
+
+
+
+ {{ loading ? t('productCheck.loading') : t('productCheck.emptyProduct') }}
+
+
+
+ {{ t('productCheck.cancel') }}
+ {{ t('productCheck.confirm') }}
+
+
+
+
+
+
+
diff --git a/src/pages_function/pages/productCheck/warehouseSelect.vue b/src/pages_function/pages/productCheck/warehouseSelect.vue
new file mode 100644
index 0000000..8efc09f
--- /dev/null
+++ b/src/pages_function/pages/productCheck/warehouseSelect.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('productCheck.principal') }}
+ {{ textValue(item.principalName || item.ownerName || item.contactName) }}
+
+
+ {{ t('productCheck.warehouseAddress') }}
+ {{ textValue(item.address) }}
+
+
+
+
+
+
+ {{ loading ? t('productCheck.loading') : t('productCheck.emptyWarehouse') }}
+
+
+
+ {{ t('productCheck.confirm') }}
+
+
+
+
+
+
+
diff --git a/src/utils/permissionMenu.js b/src/utils/permissionMenu.js
index 7042de1..465e021 100644
--- a/src/utils/permissionMenu.js
+++ b/src/utils/permissionMenu.js
@@ -97,6 +97,12 @@ const MENU_ROUTE_MAP = {
productoutbound: '/pages_function/pages/productOutbound/index',
productOut: '/pages_function/pages/productOutbound/index',
'产品出库': '/pages_function/pages/productOutbound/index',
+ productCheck: '/pages_function/pages/productCheck/index',
+ productcheck: '/pages_function/pages/productCheck/index',
+ productInventoryCheck: '/pages_function/pages/productCheck/index',
+ productCheckExecution: '/pages_function/pages/productCheck/index',
+ '产品盘点': '/pages_function/pages/productCheck/index',
+ '产品盘点执行': '/pages_function/pages/productCheck/index',
sparepartoutbound: '/pages_function/pages/sparepartOutbound/index',
'备件出库': '/pages_function/pages/sparepartOutbound/index',
sparepartinbound: '/pages_function/pages/sparepartInbound/index',