diff --git a/src/api/mes/productInbound.js b/src/api/mes/productInbound.js new file mode 100644 index 0000000..c20ffbe --- /dev/null +++ b/src/api/mes/productInbound.js @@ -0,0 +1,73 @@ +import request from '@/utils/request' + +export function createProductInbound(data) { + return request({ + url: '/admin-api/erp/stock-in/create', + method: 'post', + data: { ...data, inType: '产品入库' } + }) +} + +export function getProductInboundPage(params = {}) { + return request({ + url: '/admin-api/erp/stock-in/page', + method: 'get', + params: { ...params, inType: '产品入库' } + }) +} + +export function getProductInboundDetail(id) { + return request({ + url: '/admin-api/erp/stock-in/get', + method: 'get', + params: { id } + }) +} + +export function submitProductInbound(data) { + return request({ + url: '/admin-api/erp/stock-in/submit', + method: 'put', + data + }) +} + +export function auditProductInbound(data) { + return request({ + url: '/admin-api/erp/stock-in/audit', + method: 'put', + data + }) +} + +export function getTaskPage(params = {}) { + return request({ + url: '/admin-api/mes/task/page', + method: 'get', + params + }) +} + +export function getTaskDefaultPackagingSchemes(taskId) { + return request({ + url: '/admin-api/mes/task/task-detail/default-packaging-schemes', + method: 'get', + params: { taskId } + }) +} + +export function getPalletPage(params = {}) { + return request({ + url: '/admin-api/erp/pallet/page', + method: 'get', + params + }) +} + +export function createPallet(data) { + return request({ + url: '/admin-api/erp/pallet/create', + method: 'post', + data + }) +} diff --git a/src/locales/en-US.js b/src/locales/en-US.js index 0e02e75..44d0994 100644 --- a/src/locales/en-US.js +++ b/src/locales/en-US.js @@ -1390,5 +1390,141 @@ export default { validatorRepairStatusRequired: 'Repair result is required', validatorFinishDateRequired: 'Finish date is required', validatorConfirmDateRequired: 'Confirm date is required' + }, + productInbound: { + moduleName: 'Product Inbound', + createTitle: 'New Product Inbound', + detailTitle: 'Product Inbound Detail', + selectProductTitle: 'Select Product', + selectTaskTitle: 'Select Task Order', + selectTaskProductTitle: 'Select Task Product', + selectPalletTitle: 'Select Pallet', + createPalletTitle: 'New Pallet', + all: 'All', + reset: 'Reset', + clear: 'Clear', + loading: 'Loading...', + loadingMore: 'Loading more...', + noMoreData: 'No more data', + confirm: 'Confirm', + cancel: 'Cancel', + back: 'Back', + submit: 'OK', + submitting: 'Submitting...', + tip: 'Tip', + choose: 'Please select', + yes: 'Yes', + no: 'No', + statusPending: 'Pending Inbound', + statusAuditing: 'Pending Review', + statusStored: 'Stored', + statusRejected: 'Rejected', + searchDocumentPlaceholder: 'Enter document No.', + searchProductPlaceholder: 'Search product name/code/spec', + searchTaskPlaceholder: 'Search task order No.', + searchTaskProductPlaceholder: 'Search product name/code', + searchPalletPlaceholder: 'Search pallet code', + productInfo: 'Product Info', + inboundInfo: 'Inbound Info', + inboundTime: 'Inbound Time', + selectInboundTime: 'Select inbound time', + operator: 'Operator', + selectOperator: 'Select operator', + inboundQuantity: 'Inbound Quantity', + reviewer: 'Reviewer', + auditor: 'Auditor', + documentNo: 'Document No.', + inboundType: 'Inbound Type', + remark: 'Remark', + remarkPlaceholder: 'Enter remark', + attachment: 'Attachment', + chooseFile: 'Choose File', + itemList: 'Inbound List', + addProduct: 'Add Product', + product: 'Product', + pallet: 'Pallet', + packageCount: 'Packages', + pieceCount: 'Pieces', + inboundPackageCount: 'Inbound Packages', + inboundPieceCount: 'Inbound Pieces', + palletQuantity: 'Pallets', + taskOrder: 'Task Order', + taskProduct: 'Task Product', + emptyAddProduct: 'Please add a product', + emptyInboundList: 'No product inbound orders', + emptyItemList: 'No inbound items', + confirmInbound: 'Confirm Inbound', + inboundSuccess: 'Inbound successful', + saveFailed: 'Save failed', + loadFailed: 'Load failed', + detailLoadFailed: 'Failed to load detail', + operationFailed: 'Operation failed', + submitAudit: 'Submit Review', + auditPass: 'Approve', + auditReject: 'Reject', + auditPassSuccess: 'Approved', + auditRejectSuccess: 'Rejected', + submitAuditSuccess: 'Review submitted', + submitFailed: 'Submit failed', + selectAuditor: 'Select auditor', + selectInboundStatus: 'Select Inbound Status', + confirmAuditPass: 'Confirm approving this product inbound order?', + confirmAuditReject: 'Confirm rejecting this product inbound order?', + noDetailId: 'No detail ID', + completeProductPalletInfo: 'Complete product and pallet information', + addProductFirst: 'Please add a product first', + taskInfo: 'Task Info', + relatedTask: 'Related Task Order', + selectTask: 'Select task order', + selectTaskProduct: 'Select task product', + selectProduct: 'Select product', + selectPallet: 'Select pallet', + selectPalletFirst: 'Select pallet first', + selectTaskFirst: 'Select task order first', + selectProductFirst: 'Select product first', + emptyTaskProducts: 'No products for this task order', + completePalletInfo: 'Complete pallet warehouse/location/packages', + productAdded: 'Product added', + taskProductLoadFailed: 'Failed to load task products', + workOrderNo: 'Work Order No.', + code: 'Code', + packagingScheme: 'Packaging Scheme', + palletPackageQuantity: 'Packages per Pallet', + packageQuantity: 'Pieces per Package', + selectedPalletCount: '{count} pallet(s) selected', + selectedCount: '{count} selected', + packageUnit: '{count} pkg', + pieceUnit: '{count} pcs', + warehouse: 'Warehouse', + area: 'Area', + location: 'Location', + deliveryDate: 'Delivery Date', + emptyTask: 'No task orders', + emptyProduct: 'No product data', + emptyTaskProduct: 'No task products', + emptyPallet: 'No pallets', + spec: 'Spec', + unit: 'Unit', + palletCode: 'Pallet Code', + palletType: 'Pallet Type', + palletStatus: 'Pallet Status', + autoCode: 'Auto Code', + length: 'Length', + width: 'Width', + height: 'Height', + productCount: 'Packages', + ratedLoadWeight: 'Rated Load', + enterPalletCode: 'Enter pallet code', + selectPalletType: 'Select pallet type', + selectPalletStatus: 'Select pallet status', + enterPackageCount: 'Enter packages', + selectWarehouse: 'Select warehouse', + selectArea: 'Select area', + selectUnit: 'Select unit', + selectWarehouseFirst: 'Select warehouse first', + emptyArea: 'No areas', + enterRatedLoadWeight: 'Enter rated load', + createSuccess: 'Created successfully', + createPalletFailed: 'Failed to create pallet' } } diff --git a/src/locales/index.js b/src/locales/index.js index 449526c..1fcc551 100644 --- a/src/locales/index.js +++ b/src/locales/index.js @@ -136,6 +136,14 @@ const literalMap = { '新增保养': 'moldMaintain.addTitle', '更换压网': 'moldPressureNet.moduleName', '压网历史': 'moldPressureNet.historyTitle' + , '产品入库': 'productInbound.moduleName', + '新增产品入库': 'productInbound.createTitle', + '产品入库详情': 'productInbound.detailTitle', + '选择产品': 'productInbound.selectProductTitle', + '选择托盘': 'productInbound.selectPalletTitle', + '新增托盘': 'productInbound.createPalletTitle', + '选择任务单': 'productInbound.selectTaskTitle', + '选择任务产品': 'productInbound.selectTaskProductTitle' } export function getCurrentLocale() { diff --git a/src/locales/zh-CN.js b/src/locales/zh-CN.js index 1a932ee..c58872c 100644 --- a/src/locales/zh-CN.js +++ b/src/locales/zh-CN.js @@ -1394,6 +1394,142 @@ export default { validatorFinishDateRequired: '请选择完成日期', validatorConfirmDateRequired: '请选择验收日期' }, + productInbound: { + moduleName: '产品入库', + createTitle: '新增产品入库', + detailTitle: '产品入库详情', + selectProductTitle: '选择产品', + selectTaskTitle: '选择任务单', + selectTaskProductTitle: '选择任务产品', + selectPalletTitle: '选择托盘', + createPalletTitle: '新增托盘', + all: '全部', + reset: '重置', + clear: '清空', + loading: '加载中...', + loadingMore: '加载更多...', + noMoreData: '没有更多数据', + confirm: '确认', + cancel: '取消', + back: '返回', + submit: '确定', + submitting: '提交中...', + tip: '提示', + choose: '请选择', + yes: '是', + no: '否', + statusPending: '待入库', + statusAuditing: '待审核', + statusStored: '已入库', + statusRejected: '已驳回', + searchDocumentPlaceholder: '请输入单据编号', + searchProductPlaceholder: '搜索产品名称/编码/规格', + searchTaskPlaceholder: '搜索任务单号', + searchTaskProductPlaceholder: '搜索产品名称/编码', + searchPalletPlaceholder: '搜索托盘码', + productInfo: '产品信息', + inboundInfo: '入库信息', + inboundTime: '入库时间', + selectInboundTime: '请选择入库时间', + operator: '经办人', + selectOperator: '请选择经办人', + inboundQuantity: '入库数量', + reviewer: '审核人', + auditor: '审核人', + documentNo: '单据编号', + inboundType: '入库类型', + remark: '备注', + remarkPlaceholder: '请输入备注', + attachment: '附件', + chooseFile: '选择文件', + itemList: '入库清单', + addProduct: '添加产品', + product: '产品', + pallet: '托盘', + packageCount: '包数', + pieceCount: '个数', + inboundPackageCount: '入库包数', + inboundPieceCount: '入库个数', + palletQuantity: '托盘数量', + taskOrder: '任务单', + taskProduct: '任务产品', + emptyAddProduct: '请添加产品', + emptyInboundList: '暂无产品入库单', + emptyItemList: '暂无入库清单', + confirmInbound: '确认入库', + inboundSuccess: '入库成功', + saveFailed: '保存失败', + loadFailed: '加载失败', + detailLoadFailed: '详情加载失败', + operationFailed: '操作失败', + submitAudit: '提交审核', + auditPass: '审核通过', + auditReject: '审核驳回', + auditPassSuccess: '审核通过', + auditRejectSuccess: '已驳回', + submitAuditSuccess: '提交审核成功', + submitFailed: '提交失败', + selectAuditor: '请选择审核人', + selectInboundStatus: '选择入库状态', + confirmAuditPass: '确认审核通过该产品入库单?', + confirmAuditReject: '确认驳回该产品入库单?', + noDetailId: '暂无详情ID', + completeProductPalletInfo: '请完善产品和托盘信息', + addProductFirst: '请先添加产品', + taskInfo: '任务信息', + relatedTask: '关联任务单', + selectTask: '请选择任务单', + selectTaskProduct: '请选择任务产品', + selectProduct: '请选择产品', + selectPallet: '请选择托盘', + selectPalletFirst: '请先选择托盘', + selectTaskFirst: '请先选择任务单', + selectProductFirst: '请先选择产品', + emptyTaskProducts: '当前任务单暂无产品', + completePalletInfo: '请完善托盘仓库/库位/包数', + productAdded: '已添加产品', + taskProductLoadFailed: '任务产品加载失败', + workOrderNo: '工单号', + code: '编码', + packagingScheme: '包装方案', + palletPackageQuantity: '每托包数', + packageQuantity: '每包个数', + selectedPalletCount: '已选择 {count} 个托盘', + selectedCount: '已选 {count} 个', + packageUnit: '{count} 包', + pieceUnit: '{count} 个', + warehouse: '仓库', + area: '库区', + location: '库位', + deliveryDate: '交付日期', + emptyTask: '暂无任务单', + emptyProduct: '暂无产品数据', + emptyTaskProduct: '暂无任务产品', + emptyPallet: '暂无托盘', + spec: '规格', + unit: '单位', + palletCode: '托盘码', + palletType: '托盘类型', + palletStatus: '托盘状态', + autoCode: '自动编码', + length: '长', + width: '宽', + height: '高', + productCount: '包数', + ratedLoadWeight: '额定载重', + enterPalletCode: '请输入托盘码', + selectPalletType: '请选择托盘类型', + selectPalletStatus: '请选择托盘状态', + enterPackageCount: '请输入包数', + selectWarehouse: '请选择仓库', + selectArea: '请选择库区', + selectUnit: '请选择单位', + selectWarehouseFirst: '请先选择仓库', + emptyArea: '暂无库区', + enterRatedLoadWeight: '请输入额定载重', + createSuccess: '新增成功', + createPalletFailed: '新增托盘失败' + }, sparepartInbound: { moduleName: '备件入库', tabPending: '待入库', diff --git a/src/pages.json b/src/pages.json index 693ab5e..bd04494 100644 --- a/src/pages.json +++ b/src/pages.json @@ -395,6 +395,69 @@ "navigationStyle": "custom" } }, + { + "path": "productInbound/index", + "style": { + "navigationBarTitleText": "产品入库", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/create", + "style": { + "navigationBarTitleText": "新增产品入库", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/detail", + "style": { + "navigationBarTitleText": "产品入库详情", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/productSelect", + "style": { + "navigationBarTitleText": "选择产品", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/productConfirm", + "style": { + "navigationBarTitleText": "新增产品入库", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/palletSelect", + "style": { + "navigationBarTitleText": "选择托盘", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/palletCreate", + "style": { + "navigationBarTitleText": "新增托盘", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/taskSelect", + "style": { + "navigationBarTitleText": "选择任务单", + "navigationStyle": "custom" + } + }, + { + "path": "productInbound/taskProductSelect", + "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 8909271..db9001b 100644 --- a/src/pages_function/pages/moldRepair/userSelect.vue +++ b/src/pages_function/pages/moldRepair/userSelect.vue @@ -63,7 +63,7 @@ const selectedId = ref('') const searchText = ref('') const userList = ref([]) const loading = ref(false) -const fromSource = ref('moldRepair') // moldRepair | sparepartInbound | sparepartOutbound +const fromSource = ref('moldRepair') // moldRepair | sparepartInbound | sparepartOutbound | productInbound let searchTimer = null const pageTitle = computed(() => { @@ -124,7 +124,11 @@ function handleConfirm() { return } // 根据来源使用不同的 globalData key - const keyMap = { sparepartInbound: '_sparepartInboundUserSelectResult', sparepartOutbound: '_sparepartOutboundUserSelectResult' } + const keyMap = { + sparepartInbound: '_sparepartInboundUserSelectResult', + sparepartOutbound: '_sparepartOutboundUserSelectResult', + productInbound: '_productInboundUserSelectResult' + } const key = keyMap[fromSource.value] || '_moldRepairUserSelectResult' getApp().globalData[key] = { field: field.value === 'confirmBy' ? 'confirmBy' : 'acceptedBy', diff --git a/src/pages_function/pages/productInbound/create.vue b/src/pages_function/pages/productInbound/create.vue new file mode 100644 index 0000000..3fb6564 --- /dev/null +++ b/src/pages_function/pages/productInbound/create.vue @@ -0,0 +1,365 @@ +