From 7865eae79dd946be2fed91dbd135097fbf2dfd35 Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 24 Jun 2026 11:36:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BA=A7=E5=93=81=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E6=89=A7=E8=A1=8C=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/infra/config.js | 9 + src/api/mes/productCheck.js | 72 +++ src/locales/en-US.js | 104 +++ src/locales/index.js | 8 +- src/locales/zh-CN.js | 104 +++ src/pages.json | 56 ++ .../pages/moldRepair/userSelect.vue | 5 +- .../pages/productCheck/areaSelect.vue | 152 +++++ .../pages/productCheck/create.vue | 444 +++++++++++++ .../pages/productCheck/execute.vue | 340 ++++++++++ .../pages/productCheck/index.vue | 595 ++++++++++++++++++ .../pages/productCheck/itemSelect.vue | 221 +++++++ .../productCheck/itemSelectByProduct.vue | 227 +++++++ .../pages/productCheck/productSelect.vue | 229 +++++++ .../pages/productCheck/warehouseSelect.vue | 159 +++++ src/utils/permissionMenu.js | 6 + 16 files changed, 2729 insertions(+), 2 deletions(-) create mode 100644 src/api/infra/config.js create mode 100644 src/api/mes/productCheck.js create mode 100644 src/pages_function/pages/productCheck/areaSelect.vue create mode 100644 src/pages_function/pages/productCheck/create.vue create mode 100644 src/pages_function/pages/productCheck/execute.vue create mode 100644 src/pages_function/pages/productCheck/index.vue create mode 100644 src/pages_function/pages/productCheck/itemSelect.vue create mode 100644 src/pages_function/pages/productCheck/itemSelectByProduct.vue create mode 100644 src/pages_function/pages/productCheck/productSelect.vue create mode 100644 src/pages_function/pages/productCheck/warehouseSelect.vue 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 @@ + + + + + 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 @@ +