From 43dd2425ed755ecde59f4c82f43dbf6e0cc33b66 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 9 Mar 2026 09:04:03 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(mes):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=9B=98=E7=82=B9=E6=96=B9=E6=A1=88=E5=8F=82=E6=95=B0=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD=E5=92=8C=E6=95=B0=E6=8D=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增盘点方案参数的 CRUD 接口及相关枚举,支持在管理后台进行参数的创建、更新和删除操作。同时,更新了前端组件以支持参数的动态选择和展示,提升用户体验。 --- src/api/mes/wm/stocktaking/plan.ts | 72 ++++ src/api/mes/wm/stocktaking/result.ts | 39 +++ src/api/mes/wm/stocktaking/taking.ts | 103 ++++++ src/utils/dict.ts | 5 + src/views/mes/utils/constants.ts | 38 +++ .../stocktaking/plan/StockTakingPlanForm.vue | 220 +++++++++++++ .../plan/components/StockTakingParamTable.vue | 182 +++++++++++ src/views/mes/wm/stocktaking/plan/index.vue | 309 ++++++++++++++++++ 8 files changed, 968 insertions(+) create mode 100644 src/api/mes/wm/stocktaking/plan.ts create mode 100644 src/api/mes/wm/stocktaking/result.ts create mode 100644 src/api/mes/wm/stocktaking/taking.ts create mode 100644 src/views/mes/wm/stocktaking/plan/StockTakingPlanForm.vue create mode 100644 src/views/mes/wm/stocktaking/plan/components/StockTakingParamTable.vue create mode 100644 src/views/mes/wm/stocktaking/plan/index.vue diff --git a/src/api/mes/wm/stocktaking/plan.ts b/src/api/mes/wm/stocktaking/plan.ts new file mode 100644 index 000000000..8716f129c --- /dev/null +++ b/src/api/mes/wm/stocktaking/plan.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +// TODO @AI:原则是 plan、task 两个目录;然后每个目录里,index.ts 都只能;param/index.ts 这样; +export interface StockTakingPlanParamVO { + id?: number + planId?: number + type?: number + valueId?: number | string + valueCode?: string + valueName?: string + remark?: string +} + +export interface StockTakingPlanVO { + id?: number + code?: string + name?: string + type?: number + startTime?: string + endTime?: string + blindFlag?: boolean + frozenFlag?: boolean + enableFlag?: boolean + status?: number + remark?: string + params?: StockTakingPlanParamVO[] + createTime?: string +} + +export interface StockTakingPlanGenerateReqVO { + planId: number + code: string + name: string + takingDate?: string + userId: number + remark?: string + params?: StockTakingPlanParamVO[] +} + +export const StockTakingPlanApi = { + getStockTakingPlanPage: async (params: any) => { + return await request.get({ url: '/mes/wm/stocktaking-plan/page', params }) + }, + + getStockTakingPlan: async (id: number) => { + return await request.get({ url: '/mes/wm/stocktaking-plan/get?id=' + id }) + }, + + createStockTakingPlan: async (data: StockTakingPlanVO) => { + return await request.post({ url: '/mes/wm/stocktaking-plan/create', data }) + }, + + updateStockTakingPlan: async (data: StockTakingPlanVO) => { + return await request.put({ url: '/mes/wm/stocktaking-plan/update', data }) + }, + + deleteStockTakingPlan: async (id: number) => { + return await request.delete({ url: '/mes/wm/stocktaking-plan/delete?id=' + id }) + }, + + confirmStockTakingPlan: async (id: number) => { + return await request.put({ url: '/mes/wm/stocktaking-plan/confirm?id=' + id }) + }, + + generateStockTakingTask: async (data: StockTakingPlanGenerateReqVO) => { + return await request.post({ url: '/mes/wm/stocktaking-plan/generate-task', data }) + }, + + exportStockTakingPlan: async (params: any) => { + return await request.download({ url: '/mes/wm/stocktaking-plan/export-excel', params }) + } +} diff --git a/src/api/mes/wm/stocktaking/result.ts b/src/api/mes/wm/stocktaking/result.ts new file mode 100644 index 000000000..58dacbf29 --- /dev/null +++ b/src/api/mes/wm/stocktaking/result.ts @@ -0,0 +1,39 @@ +import request from '@/config/axios' + +// TODO @AI:原则是 plan、task 两个目录;然后每个目录里,index.ts 都只能;param/index.ts 这样; +export interface StockTakingResultVO { + id?: number + taskId?: number + lineId?: number + materialStockId?: number + itemId?: number + itemCode?: string + itemName?: string + specification?: string + unitMeasureName?: string + batchId?: number + batchCode?: string + warehouseId?: number + warehouseName?: string + locationId?: number + locationName?: string + areaId?: number + areaName?: string + quantity?: number + remark?: string + createTime?: string +} + +export const StockTakingResultApi = { + getStockTakingResultPage: async (params: any) => { + return await request.get({ url: '/mes/wm/stocktaking-task-result/page', params }) + }, + + getStockTakingResultList: async (taskId: number) => { + return await request.get({ url: '/mes/wm/stocktaking-task-result/list?taskId=' + taskId }) + }, + + exportStockTakingResult: async (params: any) => { + return await request.download({ url: '/mes/wm/stocktaking-task-result/export-excel', params }) + } +} diff --git a/src/api/mes/wm/stocktaking/taking.ts b/src/api/mes/wm/stocktaking/taking.ts new file mode 100644 index 000000000..2021c5778 --- /dev/null +++ b/src/api/mes/wm/stocktaking/taking.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +// TODO @AI:原则是 plan、task 两个目录;然后每个目录里,index.ts 都只能;param/index.ts 这样; +export interface StockTakingTaskVO { + id?: number + code?: string + name?: string + takingDate?: string + type?: number + userId?: number + userNickname?: string + planId?: number + planCode?: string + planName?: string + blindFlag?: boolean + frozenFlag?: boolean + snapshotTime?: string + startTime?: string + endTime?: string + status?: number + adjustedFlag?: boolean + remark?: string + createTime?: string +} + +export interface StockTakingTaskLineVO { + id: number + taskId: number + materialStockId?: number + itemId?: number + itemCode?: string + itemName?: string + specification?: string + unitMeasureName?: string + batchId?: number + batchCode?: string + quantity?: number + takingQuantity?: number + differenceQuantity?: number + warehouseId?: number + warehouseName?: string + locationId?: number + locationName?: string + areaId?: number + areaName?: string + status?: number + remark?: string +} + +export interface StockTakingTaskLineBatchUpdateReqVO { + taskId: number + items: Array<{ + id: number + takingQuantity: number + remark?: string + }> +} + +export const StockTakingApi = { + getStockTakingPage: async (params: any) => { + return await request.get({ url: '/mes/wm/stocktaking-task/page', params }) + }, + + getStockTaking: async (id: number) => { + return await request.get({ url: '/mes/wm/stocktaking-task/get?id=' + id }) + }, + + createStockTaking: async (data: StockTakingTaskVO) => { + return await request.post({ url: '/mes/wm/stocktaking-task/create', data }) + }, + + updateStockTaking: async (data: StockTakingTaskVO) => { + return await request.put({ url: '/mes/wm/stocktaking-task/update', data }) + }, + + deleteStockTaking: async (id: number) => { + return await request.delete({ url: '/mes/wm/stocktaking-task/delete?id=' + id }) + }, + + startStockTaking: async (id: number) => { + return await request.put({ url: '/mes/wm/stocktaking-task/start?id=' + id }) + }, + + finishStockTaking: async (id: number) => { + return await request.put({ url: '/mes/wm/stocktaking-task/finish?id=' + id }) + }, + + cancelStockTaking: async (id: number) => { + return await request.put({ url: '/mes/wm/stocktaking-task/cancel?id=' + id }) + }, + + getStockTakingLineList: async (taskId: number) => { + return await request.get({ url: '/mes/wm/stocktaking-task/line-list?taskId=' + taskId }) + }, + + batchUpdateStockTakingLines: async (data: StockTakingTaskLineBatchUpdateReqVO) => { + return await request.put({ url: '/mes/wm/stocktaking-task/line-batch-update', data }) + }, + + exportStockTaking: async (params: any) => { + return await request.download({ url: '/mes/wm/stocktaking-task/export-excel', params }) + } +} diff --git a/src/utils/dict.ts b/src/utils/dict.ts index bed41059e..8d563eea8 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -296,6 +296,11 @@ export enum DICT_TYPE { MES_WM_ITEM_RECEIPT_STATUS = 'mes_wm_item_receipt_status', // MES 物料接收单状态 MES_WM_TRANSFER_STATUS = 'mes_wm_transfer_status', // MES 转移单状态 MES_WM_TRANSFER_TYPE = 'mes_wm_transfer_type', // MES 转移单类型 + MES_WM_STOCK_TAKING_TYPE = 'mes_wm_stock_taking_type', // MES 盘点类型 + MES_WM_STOCK_TAKING_PLAN_STATUS = 'mes_wm_stock_taking_plan_status', // MES 盘点方案状态 + MES_WM_STOCK_TAKING_TASK_STATUS = 'mes_wm_stock_taking_task_status', // MES 盘点任务状态 + MES_WM_STOCK_TAKING_LINE_STATUS = 'mes_wm_stock_taking_task_line_status', // MES 盘点任务行状态 + MES_WM_STOCK_TAKING_PARAM_TYPE = 'mes_wm_stock_taking_param_type', // MES 盘点方案参数类型 MES_WM_OUTSOURCE_RECPT_STATUS = 'mes_wm_outsource_recpt_status', // MES 外协入库单状态 MES_WM_PRODUCTION_ISSUE_STATUS = 'mes_wm_production_issue_status', // MES 领料出库单状态 MES_PRODUCT_PRODUCE_STATUS = 'mes_product_produce_status', // MES 生产入库单状态 diff --git a/src/views/mes/utils/constants.ts b/src/views/mes/utils/constants.ts index e73b1e858..ab455700a 100644 --- a/src/views/mes/utils/constants.ts +++ b/src/views/mes/utils/constants.ts @@ -228,6 +228,44 @@ export const MesWmOutsourceReceiptStatusEnum = { CANCELED: MesOrderStatusConstants.CANCELLED } +/** MES 盘点类型枚举 */ +export const MesWmStockTakingTypeEnum = { + OPEN: 1, + CYCLE: 2, + DYNAMIC: 3 +} + +/** MES 盘点方案状态枚举 */ +export const MesWmStockTakingPlanStatusEnum = { + PREPARE: MesOrderStatusConstants.DRAFT, + CONFIRMED: MesOrderStatusConstants.CONFIRMED +} + +/** MES 盘点任务状态枚举 */ +export const MesWmStockTakingTaskStatusEnum = { + PREPARE: MesOrderStatusConstants.DRAFT, + IN_PROGRESS: MesOrderStatusConstants.CONFIRMED, + FINISHED: MesOrderStatusConstants.FINISHED, + CANCELED: MesOrderStatusConstants.CANCELLED +} + +/** MES 盘点任务行状态枚举 */ +export const MesWmStockTakingTaskLineStatusEnum = { + UNCOUNTED: 0, + NORMAL: 1, + GAIN: 2, + LOSS: 3 +} + +/** MES 盘点方案参数类型枚举 */ +export const MesWmStockTakingParamTypeEnum = { + WAREHOUSE: 1, + LOCATION: 2, + AREA: 3, + ITEM: 4, + BATCH: 5 +} + /** MES 外协入库单状态枚举 */ export const MesWmOutsourceRecptStatusEnum = { PREPARE: MesOrderStatusConstants.DRAFT, diff --git a/src/views/mes/wm/stocktaking/plan/StockTakingPlanForm.vue b/src/views/mes/wm/stocktaking/plan/StockTakingPlanForm.vue new file mode 100644 index 000000000..5ca4c6e01 --- /dev/null +++ b/src/views/mes/wm/stocktaking/plan/StockTakingPlanForm.vue @@ -0,0 +1,220 @@ + + + + diff --git a/src/views/mes/wm/stocktaking/plan/components/StockTakingParamTable.vue b/src/views/mes/wm/stocktaking/plan/components/StockTakingParamTable.vue new file mode 100644 index 000000000..073cabbd9 --- /dev/null +++ b/src/views/mes/wm/stocktaking/plan/components/StockTakingParamTable.vue @@ -0,0 +1,182 @@ + + + + diff --git a/src/views/mes/wm/stocktaking/plan/index.vue b/src/views/mes/wm/stocktaking/plan/index.vue new file mode 100644 index 000000000..3c98716c5 --- /dev/null +++ b/src/views/mes/wm/stocktaking/plan/index.vue @@ -0,0 +1,309 @@ + + +