diff --git a/.gitee/image/common/im-feature.png b/.gitee/image/common/im-feature.png new file mode 100644 index 000000000..da3f01280 Binary files /dev/null and b/.gitee/image/common/im-feature.png differ diff --git a/.gitee/image/common/im-preview-home.png b/.gitee/image/common/im-preview-home.png new file mode 100644 index 000000000..c4790a324 Binary files /dev/null and b/.gitee/image/common/im-preview-home.png differ diff --git a/.gitee/image/common/im-preview-manager.png b/.gitee/image/common/im-preview-manager.png new file mode 100644 index 000000000..b8bb057dc Binary files /dev/null and b/.gitee/image/common/im-preview-manager.png differ diff --git a/.gitignore b/.gitignore index 20fba96c3..dd97ac638 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,6 @@ vite.config.ts.* skills-lock.json .atomcode datalog + +# Playwright CLI 录制产物(本地调试,不入库) +.playwright-cli diff --git a/README.md b/README.md index 824643468..52b8d7045 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 🐶 新手必读 -- nodejs >= v20.19.0(推荐 v22 / v24) && pnpm >= 10.32.1(强制使用 pnpm) +- nodejs >= v22.18.0(推荐v24) && pnpm >= 11.0.0(强制使用 pnpm) - 演示地址【Vue3 + element-plus】: - 演示地址【Vue3 + vben5(ant-design-vue)】: - 演示地址【Vue2 + element-ui】: @@ -272,3 +272,16 @@ ![功能图](/.gitee/image/common/iot-feature.png) ![预览图](/.gitee/image/common/iot-preview.png) + +### IM 即时通讯 + +演示地址(Vue3 + Vben5): + +使用文档: + + +![功能图](/.gitee/image/common/im-feature.png) + +| 聊天界面 | 聊天管理 | +| --- | --- | +| ![聊天界面](/.gitee/image/common/im-preview-home.png) | ![聊天管理](/.gitee/image/common/im-preview-manager.png) | diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index a3ae11913..93a6f0e28 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -54,6 +54,7 @@ "camunda-bpmn-moddle": "catalog:", "cropperjs": "catalog:", "dayjs": "catalog:", + "dhtmlx-gantt": "catalog:", "diagram-js": "catalog:", "fast-xml-parser": "catalog:", "highlight.js": "catalog:", diff --git a/apps/web-antd/src/api/iot/alert/config/index.ts b/apps/web-antd/src/api/iot/alert/config/index.ts index d419a5563..a1d3bdfcc 100644 --- a/apps/web-antd/src/api/iot/alert/config/index.ts +++ b/apps/web-antd/src/api/iot/alert/config/index.ts @@ -14,6 +14,9 @@ export namespace AlertConfigApi { receiveUserIds?: number[]; receiveUserNames?: string[]; receiveTypes?: number[]; + smsTemplateCode?: string; + mailTemplateCode?: string; + notifyTemplateCode?: string; createTime?: Date; } } diff --git a/apps/web-antd/src/api/member/user/index.ts b/apps/web-antd/src/api/member/user/index.ts index e02f332ed..35229ad98 100644 --- a/apps/web-antd/src/api/member/user/index.ts +++ b/apps/web-antd/src/api/member/user/index.ts @@ -13,6 +13,7 @@ export namespace MemberUserApi { loginIp: string; mark: string; mobile: string; + email?: string; name?: string; nickname?: string; registerIp: string; diff --git a/apps/web-antd/src/api/mes/home/index.ts b/apps/web-antd/src/api/mes/home/index.ts new file mode 100644 index 000000000..cf1aa9953 --- /dev/null +++ b/apps/web-antd/src/api/mes/home/index.ts @@ -0,0 +1,55 @@ +import { requestClient } from '#/api/request'; + +export namespace MesHomeApi { + /** MES 首页汇总统计 */ + export interface Summary { + workOrderActiveCount: number; // 进行中工单数 + workOrderPrepareCount: number; // 待排产工单数 + workOrderFinishedCount: number; // 已完成工单数 + todayOutput: number; // 今日产量 + yesterdayOutput: number; // 昨日产量 + todayQualifiedQuantity: number; // 今日合格品数 + todayUnqualifiedQuantity: number; // 今日不良品数 + machineryTotal: number; // 设备总数 + machineryProducing: number; // 生产中设备数 + machineryStop: number; // 停机设备数 + machineryMaintenance: number; // 维护中设备数 + andonActiveCount: number; // 未处置安灯呼叫数 + repairActiveCount: number; // 待处理维修工单数 + } + + /** MES 工单状态分布 */ + export interface WorkOrderStatus { + status: number; // 工单状态 + statusName: string; // 工单状态名称 + count: number; // 数量 + } + + /** MES 生产趋势 */ + export interface ProductionTrend { + date: string; // 日期 + quantity: number; // 产量 + qualifiedQuantity: number; // 合格品数 + unqualifiedQuantity: number; // 不良品数 + } +} + +/** 获得首页汇总统计 */ +export function getHomeSummary() { + return requestClient.get('/mes/home-statistics/summary'); +} + +/** 获得工单状态分布 */ +export function getWorkOrderStatusDistribution() { + return requestClient.get( + '/mes/home-statistics/work-order-status', + ); +} + +/** 获得生产趋势 */ +export function getProductionTrend(days?: number) { + return requestClient.get( + '/mes/home-statistics/production-trend', + { params: { days } }, + ); +} diff --git a/apps/web-antd/src/api/mes/pro/card/index.ts b/apps/web-antd/src/api/mes/pro/card/index.ts new file mode 100644 index 000000000..a9d123cc3 --- /dev/null +++ b/apps/web-antd/src/api/mes/pro/card/index.ts @@ -0,0 +1,79 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProCardApi { + /** MES 生产流转卡 */ + export interface Card { + id?: number; // 编号 + code?: string; // 流转卡编码 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 工单编码 + workOrderName?: string; // 工单名称 + batchCode?: string; // 批次号 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品编码 + itemName?: string; // 产品名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + transferedQuantity?: number; // 流转数量 + status?: number; // 状态 + remark?: string; // 备注 + } + + /** MES 生产流转卡分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + workOrderId?: number; + itemId?: number; + batchCode?: string; + } +} + +/** 查询生产流转卡分页 */ +export function getCardPage(params: MesProCardApi.PageParams) { + return requestClient.get>( + '/mes/pro/card/page', + { params }, + ); +} + +/** 查询生产流转卡详情 */ +export function getCard(id: number) { + return requestClient.get(`/mes/pro/card/get?id=${id}`); +} + +/** 新增生产流转卡 */ +export function createCard(data: MesProCardApi.Card) { + return requestClient.post('/mes/pro/card/create', data); +} + +/** 修改生产流转卡 */ +export function updateCard(data: MesProCardApi.Card) { + return requestClient.put('/mes/pro/card/update', data); +} + +/** 删除生产流转卡 */ +export function deleteCard(id: number) { + return requestClient.delete(`/mes/pro/card/delete?id=${id}`); +} + +/** 导出生产流转卡 */ +export function exportCard(params: any) { + return requestClient.download('/mes/pro/card/export-excel', { params }); +} + +/** 提交生产流转卡 */ +export function submitCard(id: number) { + return requestClient.put(`/mes/pro/card/submit?id=${id}`); +} + +/** 完成生产流转卡 */ +export function finishCard(id: number) { + return requestClient.put(`/mes/pro/card/finish?id=${id}`); +} + +/** 取消生产流转卡 */ +export function cancelCard(id: number) { + return requestClient.put(`/mes/pro/card/cancel?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/pro/card/process/index.ts b/apps/web-antd/src/api/mes/pro/card/process/index.ts new file mode 100644 index 000000000..a6f372fe2 --- /dev/null +++ b/apps/web-antd/src/api/mes/pro/card/process/index.ts @@ -0,0 +1,62 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProCardProcessApi { + /** MES 流转卡工序记录 */ + export interface CardProcess { + id?: number; // 编号 + cardId?: number; // 流转卡编号 + sort?: number; // 序号 + processId?: number; // 工序编号 + processCode?: string; // 工序编码 + processName?: string; // 工序名称 + inputTime?: number; // 进入工序时间 + outputTime?: number; // 出工序时间 + inputQuantity?: number; // 投入数量 + outputQuantity?: number; // 产出数量 + unqualifiedQuantity?: number; // 不合格品数量 + workstationId?: number; // 工位编号 + workstationCode?: string; // 工位编码 + workstationName?: string; // 工位名称 + userId?: number; // 操作人编号 + nickname?: string; // 操作人名称 + ipqcId?: number; // 过程检验单编号 + remark?: string; // 备注 + } + + /** MES 流转卡工序记录分页查询参数 */ + export interface PageParams extends PageParam { + cardId?: number; + } +} + +/** 查询流转卡工序记录分页 */ +export function getCardProcessPage(params: MesProCardProcessApi.PageParams) { + return requestClient.get>( + '/mes/pro/card-process/page', + { params }, + ); +} + +/** 查询流转卡工序记录详情 */ +export function getCardProcess(id: number) { + return requestClient.get( + `/mes/pro/card-process/get?id=${id}`, + ); +} + +/** 新增流转卡工序记录 */ +export function createCardProcess(data: MesProCardProcessApi.CardProcess) { + return requestClient.post('/mes/pro/card-process/create', data); +} + +/** 修改流转卡工序记录 */ +export function updateCardProcess(data: MesProCardProcessApi.CardProcess) { + return requestClient.put('/mes/pro/card-process/update', data); +} + +/** 删除流转卡工序记录 */ +export function deleteCardProcess(id: number) { + return requestClient.delete(`/mes/pro/card-process/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/pro/task/index.ts b/apps/web-antd/src/api/mes/pro/task/index.ts index d7bfd2f5e..5e160c840 100644 --- a/apps/web-antd/src/api/mes/pro/task/index.ts +++ b/apps/web-antd/src/api/mes/pro/task/index.ts @@ -48,6 +48,8 @@ export namespace MesProTaskApi { name?: string; workOrderId?: number; workstationId?: number; + routeId?: number; + processId?: number; itemId?: number; statuses?: number[]; status?: number; @@ -66,3 +68,28 @@ export function getTaskPage(params: MesProTaskApi.PageParams) { export function getTask(id: number) { return requestClient.get(`/mes/pro/task/get?id=${id}`); } + +/** 新增生产任务 */ +export function createTask(data: MesProTaskApi.Task) { + return requestClient.post('/mes/pro/task/create', data); +} + +/** 修改生产任务 */ +export function updateTask(data: MesProTaskApi.Task) { + return requestClient.put('/mes/pro/task/update', data); +} + +/** 删除生产任务 */ +export function deleteTask(id: number) { + return requestClient.delete(`/mes/pro/task/delete?id=${id}`); +} + +/** 导出生产任务 */ +export function exportTask(params: any) { + return requestClient.download('/mes/pro/task/export-excel', { params }); +} + +/** 查询甘特图任务列表(非分页) */ +export function getGanttTaskList(params: any) { + return requestClient.get('/mes/pro/task/gantt-list', { params }); +} diff --git a/apps/web-antd/src/api/mes/pro/task/issue/index.ts b/apps/web-antd/src/api/mes/pro/task/issue/index.ts new file mode 100644 index 000000000..b3ccf956b --- /dev/null +++ b/apps/web-antd/src/api/mes/pro/task/issue/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProTaskIssueApi { + /** MES 生产任务投料 */ + export interface TaskIssue { + id?: number; // 编号 + taskId?: number; // 生产任务编号 + workOrderId?: number; // 生产工单编号 + workstationId?: number; // 工作站编号 + sourceDocType?: string; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceLineId?: number; // 来源单据行编号 + sourceDocCode?: string; // 来源单据编码 + batchCode?: string; // 投料批次 + itemId?: number; // 产品物料编号 + itemName?: string; // 产品名称 + itemCode?: string; // 产品编码 + itemSpecification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位名称 + issuedQuantity?: number; // 总投料数量 + availableQuantity?: number; // 当前可用数量 + usedQuantity?: number; // 当前使用数量 + remark?: string; // 备注 + } + + /** MES 生产任务投料分页查询参数 */ + export interface PageParams extends PageParam { + taskId?: number; // 生产任务编号 + workOrderId?: number; // 生产工单编号 + workstationId?: number; // 工作站编号 + itemId?: number; // 产品物料编号 + } +} + +/** 查询生产任务投料分页 */ +export function getTaskIssuePage(params: MesProTaskIssueApi.PageParams) { + return requestClient.get>( + '/mes/pro/task-issue/page', + { params }, + ); +} + +/** 查询生产任务投料详情 */ +export function getTaskIssue(id: number) { + return requestClient.get( + `/mes/pro/task-issue/get?id=${id}`, + ); +} + +/** 新增生产任务投料 */ +export function createTaskIssue(data: MesProTaskIssueApi.TaskIssue) { + return requestClient.post('/mes/pro/task-issue/create', data); +} + +/** 修改生产任务投料 */ +export function updateTaskIssue(data: MesProTaskIssueApi.TaskIssue) { + return requestClient.put('/mes/pro/task-issue/update', data); +} + +/** 删除生产任务投料 */ +export function deleteTaskIssue(id: number) { + return requestClient.delete(`/mes/pro/task-issue/delete?id=${id}`); +} + +/** 按生产任务查询投料列表 */ +export function getTaskIssueListByTask(taskId: number) { + return requestClient.get( + `/mes/pro/task-issue/list-by-task?taskId=${taskId}`, + ); +} diff --git a/apps/web-antd/src/api/mes/pro/workorder/bom/index.ts b/apps/web-antd/src/api/mes/pro/workorder/bom/index.ts new file mode 100644 index 000000000..f04ef761c --- /dev/null +++ b/apps/web-antd/src/api/mes/pro/workorder/bom/index.ts @@ -0,0 +1,62 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProWorkOrderBomApi { + /** MES 生产工单 BOM */ + export interface WorkOrderBom { + id?: number; // 编号 + workOrderId?: number; // 生产工单编号 + itemId?: number; // BOM 物料编号 + itemName?: string; // 物料名称 + itemCode?: string; // 物料编码 + itemSpecification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 预计使用量 + remark?: string; // 备注 + itemOrProduct?: string; // 物料产品标识 + } + + /** MES 生产工单 BOM 分页查询参数 */ + export interface PageParams extends PageParam { + workOrderId?: number; + } +} + +/** 查询工单 BOM 分页 */ +export function getWorkOrderBomPage(params: MesProWorkOrderBomApi.PageParams) { + return requestClient.get>( + '/mes/pro/work-order-bom/page', + { params }, + ); +} + +/** 查询工单 BOM 详情 */ +export function getWorkOrderBom(id: number) { + return requestClient.get( + `/mes/pro/work-order-bom/get?id=${id}`, + ); +} + +/** 新增工单 BOM */ +export function createWorkOrderBom(data: MesProWorkOrderBomApi.WorkOrderBom) { + return requestClient.post('/mes/pro/work-order-bom/create', data); +} + +/** 修改工单 BOM */ +export function updateWorkOrderBom(data: MesProWorkOrderBomApi.WorkOrderBom) { + return requestClient.put('/mes/pro/work-order-bom/update', data); +} + +/** 删除工单 BOM */ +export function deleteWorkOrderBom(id: number) { + return requestClient.delete(`/mes/pro/work-order-bom/delete?id=${id}`); +} + +/** 查询工单物料需求列表 */ +export function getWorkOrderBomItemListByWorkOrderId(workOrderId: number) { + return requestClient.get( + `/mes/pro/work-order-bom/item-list-by-work-order-id?workOrderId=${workOrderId}`, + ); +} diff --git a/apps/web-antd/src/api/mes/pro/workorder/index.ts b/apps/web-antd/src/api/mes/pro/workorder/index.ts index fcc22b79e..c4c0a152a 100644 --- a/apps/web-antd/src/api/mes/pro/workorder/index.ts +++ b/apps/web-antd/src/api/mes/pro/workorder/index.ts @@ -5,35 +5,48 @@ import { requestClient } from '#/api/request'; export namespace MesProWorkOrderApi { /** MES 生产工单 */ export interface WorkOrder { - id?: number; + id?: number; // 编号 code?: string; // 工单编码 name?: string; // 工单名称 type?: number; // 工单类型 + orderSourceType?: number; // 来源类型 + orderSourceCode?: string; // 来源单据编号 + productId?: number; // 产品编号 + productName?: string; // 产品名称 + productCode?: string; // 产品编码 + productSpecification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 生产数量 + quantityProduced?: number; // 已生产数量 + quantityChanged?: number; // 调整数量 + quantityScheduled?: number; // 已排产数量 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + vendorId?: number; // 供应商编号 + vendorName?: string; // 供应商名称 + vendorCode?: string; // 供应商编码 + batchCode?: string; // 批次号 + requestDate?: number; // 需求日期 + parentId?: number; // 父工单编号 + parentCode?: string; // 父工单编码 + finishDate?: number; // 完成时间 + cancelDate?: number; // 取消时间 status?: number; // 工单状态 - sourceType?: number; - productId?: number; // 产品物料编号 - productCode?: string; - productName?: string; - productSpecification?: string; - quantity?: number; - unitName?: string; - routeId?: number; - routeName?: string; - clientId?: number; - clientName?: string; - planStartTime?: number | string; - planEndTime?: number | string; - actualStartTime?: number | string; - actualEndTime?: number | string; - remark?: string; - createTime?: number | string; + remark?: string; // 备注 + createTime?: number; // 创建时间 } + /** MES 生产工单分页查询参数 */ export interface PageParams extends PageParam { code?: string; name?: string; + orderSourceCode?: string; + productId?: number; + clientId?: number; status?: number; type?: number; + requestDate?: number[]; } } @@ -51,3 +64,38 @@ export function getWorkOrder(id: number) { `/mes/pro/work-order/get?id=${id}`, ); } + +/** 新增生产工单 */ +export function createWorkOrder(data: MesProWorkOrderApi.WorkOrder) { + return requestClient.post('/mes/pro/work-order/create', data); +} + +/** 修改生产工单 */ +export function updateWorkOrder(data: MesProWorkOrderApi.WorkOrder) { + return requestClient.put('/mes/pro/work-order/update', data); +} + +/** 删除生产工单 */ +export function deleteWorkOrder(id: number) { + return requestClient.delete(`/mes/pro/work-order/delete?id=${id}`); +} + +/** 导出生产工单 */ +export function exportWorkOrder(params: any) { + return requestClient.download('/mes/pro/work-order/export-excel', { params }); +} + +/** 完成工单 */ +export function finishWorkOrder(id: number) { + return requestClient.put(`/mes/pro/work-order/finish?id=${id}`); +} + +/** 取消工单 */ +export function cancelWorkOrder(id: number) { + return requestClient.put(`/mes/pro/work-order/cancel?id=${id}`); +} + +/** 确认工单 */ +export function confirmWorkOrder(id: number) { + return requestClient.put(`/mes/pro/work-order/confirm?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/qc/defectrecord/index.ts b/apps/web-antd/src/api/mes/qc/defectrecord/index.ts new file mode 100644 index 000000000..a434a29b6 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/defectrecord/index.ts @@ -0,0 +1,49 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcDefectRecordApi { + /** MES 质检缺陷记录 */ + export interface DefectRecord { + id?: number; // 编号 + qcType?: number; // 检验类型 + qcId?: number; // 检验单 ID + lineId?: number; // 检验行 ID + name?: string; // 缺陷描述 + level?: number; // 缺陷等级 + quantity?: number; // 缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询质检缺陷记录 */ +export function getDefectRecord(id: number) { + return requestClient.get( + `/mes/qc/defect-record/get?id=${id}`, + ); +} + +/** 查询质检缺陷记录分页 */ +export function getDefectRecordPage( + params: PageParam & { lineId?: number; qcId?: number; qcType?: number; }, +) { + return requestClient.get>( + '/mes/qc/defect-record/page', + { params }, + ); +} + +/** 新增质检缺陷记录 */ +export function createDefectRecord(data: MesQcDefectRecordApi.DefectRecord) { + return requestClient.post('/mes/qc/defect-record/create', data); +} + +/** 修改质检缺陷记录 */ +export function updateDefectRecord(data: MesQcDefectRecordApi.DefectRecord) { + return requestClient.put('/mes/qc/defect-record/update', data); +} + +/** 删除质检缺陷记录 */ +export function deleteDefectRecord(id: number) { + return requestClient.delete(`/mes/qc/defect-record/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/qc/indicatorresult/index.ts b/apps/web-antd/src/api/mes/qc/indicatorresult/index.ts new file mode 100644 index 000000000..dfa8a7f93 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/indicatorresult/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIndicatorResultApi { + /** MES 检验结果明细 */ + export interface IndicatorResultDetail { + id?: number; // 编号 + resultId?: number; // 关联检验结果 ID + indicatorId?: number; // 检测指标 ID + value?: string; // 检测值(统一存为字符串) + valueNumber?: number; // UI 数值绑定(提交前转字符串) + remark?: string; // 备注 + // 关联查询字段(来自 indicator) + indicatorName?: string; // 检测指标名称 + valueType?: number; // 质检值类型 + valueSpecification?: string; // 值属性 + } + + /** MES 检验结果 */ + export interface IndicatorResult { + id?: number; // 编号 + code?: string; // 样品编号 + qcId?: number; // 关联质检单 ID + qcType?: number; // 质检类型 + itemId?: number; // 产品物料 ID + sn?: string; // 物资 SN + remark?: string; // 备注 + createTime?: Date; // 创建时间 + items?: IndicatorResultDetail[]; // 检验结果明细列表 + } +} + +/** 查询检验结果分页 */ +export function getIndicatorResultPage( + params: PageParam & { qcId?: number; qcType?: number }, +) { + return requestClient.get>( + '/mes/qc/indicator-result/page', + { params }, + ); +} + +/** 查询检验结果明细(含检测项模板):编辑传 id,新增不传 */ +export function getIndicatorResultDetail( + qcId: number, + qcType: number, + id?: number, +) { + return requestClient.get( + '/mes/qc/indicator-result/get-detail', + { params: { id, qcId, qcType } }, + ); +} + +/** 新增检验结果 */ +export function createIndicatorResult( + data: MesQcIndicatorResultApi.IndicatorResult, +) { + return requestClient.post('/mes/qc/indicator-result/create', data); +} + +/** 修改检验结果 */ +export function updateIndicatorResult( + data: MesQcIndicatorResultApi.IndicatorResult, +) { + return requestClient.put('/mes/qc/indicator-result/update', data); +} + +/** 删除检验结果 */ +export function deleteIndicatorResult(id: number) { + return requestClient.delete(`/mes/qc/indicator-result/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/qc/ipqc/index.ts b/apps/web-antd/src/api/mes/qc/ipqc/index.ts new file mode 100644 index 000000000..9c885bedb --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/ipqc/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIpqcApi { + /** MES 过程检验单 */ + export interface Ipqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + type?: number; // IPQC 检验类型 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + workOrderId?: number; // 生产工单 ID + workOrderCode?: string; // 工单编号(关联查询) + workOrderName?: string; // 工单名称(关联查询) + taskId?: number; // 生产任务 ID + workstationId?: number; // 工位 ID + workstationName?: string; // 工位名称(关联查询) + processId?: number; // 工序 ID + processName?: string; // 工序名称(关联查询) + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + checkQuantity?: number; // 检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格品数量 + laborScrapQuantity?: number; // 工废数量 + materialScrapQuantity?: number; // 料废数量 + otherScrapQuantity?: number; // 其他废品数量 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + checkResult?: number; // 检测结果 + inspectDate?: number; // 检测日期 + inspectorUserId?: number; // 检测人员用户 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询过程检验单分页 */ +export function getIpqcPage(params: PageParam) { + return requestClient.get>( + '/mes/qc/ipqc/page', + { params }, + ); +} + +/** 查询过程检验单详情 */ +export function getIpqc(id: number) { + return requestClient.get(`/mes/qc/ipqc/get?id=${id}`); +} + +/** 新增过程检验单 */ +export function createIpqc(data: MesQcIpqcApi.Ipqc) { + return requestClient.post('/mes/qc/ipqc/create', data); +} + +/** 修改过程检验单 */ +export function updateIpqc(data: MesQcIpqcApi.Ipqc) { + return requestClient.put('/mes/qc/ipqc/update', data); +} + +/** 完成过程检验单 */ +export function finishIpqc(id: number) { + return requestClient.put(`/mes/qc/ipqc/finish?id=${id}`); +} + +/** 删除过程检验单 */ +export function deleteIpqc(id: number) { + return requestClient.delete(`/mes/qc/ipqc/delete?id=${id}`); +} + +/** 导出过程检验单 */ +export function exportIpqc(params: any) { + return requestClient.download('/mes/qc/ipqc/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/qc/ipqc/line/index.ts b/apps/web-antd/src/api/mes/qc/ipqc/line/index.ts new file mode 100644 index 000000000..4f114c845 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/ipqc/line/index.ts @@ -0,0 +1,42 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIpqcLineApi { + /** MES 过程检验单行 */ + export interface IpqcLine { + id?: number; // 编号 + ipqcId?: number; // 过程检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + toolId?: number; // 检测工具 ID + toolName?: string; // 检测工具名称(关联查询) + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询过程检验单行分页 */ +export function getIpqcLinePage(params: PageParam & { ipqcId?: number }) { + return requestClient.get>( + '/mes/qc/ipqc/line/page', + { params }, + ); +} + +/** 查询过程检验单行详情 */ +export function getIpqcLine(id: number) { + return requestClient.get( + `/mes/qc/ipqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antd/src/api/mes/qc/iqc/index.ts b/apps/web-antd/src/api/mes/qc/iqc/index.ts new file mode 100644 index 000000000..cdb04cb6a --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/iqc/index.ts @@ -0,0 +1,80 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIqcApi { + /** MES 来料检验单 */ + export interface Iqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + vendorId?: number; // 供应商 ID + vendorNickname?: string; // 供应商简称(关联查询) + vendorBatch?: string; // 供应商批次号 + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + receivedQuantity?: number; // 本次接收数量 + checkQuantity?: number; // 本次检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格品数量 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + checkResult?: number; // 检测结果 + receiveDate?: number; // 来料日期 + inspectDate?: number; // 检测日期 + inspector?: string; // 检测人员(昵称) + inspectorUserId?: number; // 检测人员 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询来料检验单分页 */ +export function getIqcPage(params: PageParam) { + return requestClient.get>('/mes/qc/iqc/page', { + params, + }); +} + +/** 查询来料检验单详情 */ +export function getIqc(id: number) { + return requestClient.get(`/mes/qc/iqc/get?id=${id}`); +} + +/** 新增来料检验单 */ +export function createIqc(data: MesQcIqcApi.Iqc) { + return requestClient.post('/mes/qc/iqc/create', data); +} + +/** 修改来料检验单 */ +export function updateIqc(data: MesQcIqcApi.Iqc) { + return requestClient.put('/mes/qc/iqc/update', data); +} + +/** 完成来料检验单 */ +export function finishIqc(id: number) { + return requestClient.put(`/mes/qc/iqc/finish?id=${id}`); +} + +/** 删除来料检验单 */ +export function deleteIqc(id: number) { + return requestClient.delete(`/mes/qc/iqc/delete?id=${id}`); +} + +/** 导出来料检验单 */ +export function exportIqc(params: any) { + return requestClient.download('/mes/qc/iqc/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/qc/iqc/line/index.ts b/apps/web-antd/src/api/mes/qc/iqc/line/index.ts new file mode 100644 index 000000000..dc37aa99b --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/iqc/line/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIqcLineApi { + /** MES 来料检验单行 */ + export interface IqcLine { + id?: number; // 编号 + iqcId?: number; // 来料检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + tool?: string; // 检测工具 + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询来料检验单行分页 */ +export function getIqcLinePage(params: PageParam & { iqcId?: number }) { + return requestClient.get>( + '/mes/qc/iqc/line/page', + { params }, + ); +} + +/** 查询来料检验单行详情 */ +export function getIqcLine(id: number) { + return requestClient.get( + `/mes/qc/iqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antd/src/api/mes/qc/oqc/index.ts b/apps/web-antd/src/api/mes/qc/oqc/index.ts new file mode 100644 index 000000000..793f6db43 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/oqc/index.ts @@ -0,0 +1,81 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcOqcApi { + /** MES 出货检验单 */ + export interface Oqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + clientId?: number; // 客户 ID + clientNickname?: string; // 客户简称(关联查询) + batchCode?: string; // 批次号 + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + minCheckQuantity?: number; // 最低检测数 + maxUnqualifiedQuantity?: number; // 最大不合格数 + outQuantity?: number; // 本次出货数量 + checkQuantity?: number; // 本次检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格品数量 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + checkResult?: number; // 检测结果 + outDate?: number; // 出货日期 + inspectDate?: number; // 检测日期 + inspectorUserId?: number; // 检测人员用户 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询出货检验单分页 */ +export function getOqcPage(params: PageParam) { + return requestClient.get>('/mes/qc/oqc/page', { + params, + }); +} + +/** 查询出货检验单详情 */ +export function getOqc(id: number) { + return requestClient.get(`/mes/qc/oqc/get?id=${id}`); +} + +/** 新增出货检验单 */ +export function createOqc(data: MesQcOqcApi.Oqc) { + return requestClient.post('/mes/qc/oqc/create', data); +} + +/** 修改出货检验单 */ +export function updateOqc(data: MesQcOqcApi.Oqc) { + return requestClient.put('/mes/qc/oqc/update', data); +} + +/** 完成出货检验单 */ +export function finishOqc(id: number) { + return requestClient.put(`/mes/qc/oqc/finish?id=${id}`); +} + +/** 删除出货检验单 */ +export function deleteOqc(id: number) { + return requestClient.delete(`/mes/qc/oqc/delete?id=${id}`); +} + +/** 导出出货检验单 */ +export function exportOqc(params: any) { + return requestClient.download('/mes/qc/oqc/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/qc/oqc/line/index.ts b/apps/web-antd/src/api/mes/qc/oqc/line/index.ts new file mode 100644 index 000000000..aa7deb59a --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/oqc/line/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcOqcLineApi { + /** MES 出货检验单行 */ + export interface OqcLine { + id?: number; // 编号 + oqcId?: number; // 出货检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + tool?: string; // 检测工具 + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询出货检验单行分页 */ +export function getOqcLinePage(params: PageParam & { oqcId?: number }) { + return requestClient.get>( + '/mes/qc/oqc/line/page', + { params }, + ); +} + +/** 查询出货检验单行详情 */ +export function getOqcLine(id: number) { + return requestClient.get( + `/mes/qc/oqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antd/src/api/mes/qc/pendinginspect/index.ts b/apps/web-antd/src/api/mes/qc/pendinginspect/index.ts new file mode 100644 index 000000000..dceda8213 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/pendinginspect/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcPendingInspectApi { + /** MES 待检任务 */ + export interface PendingInspect { + sourceDocType?: number; // 来源单据类型(MesBizTypeConstants) + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号 + qcType?: number; // 检验类型(MesQcTypeEnum) + itemId?: number; // 物料 ID + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitName?: string; // 单位名称 + quantity?: number; // 待检数量 + // 供应商(IQC 场景) + vendorId?: number; // 供应商 ID + vendorName?: string; // 供应商名称 + // 工单/工作站/任务(IPQC/RQC 场景) + workOrderId?: number; // 生产工单 ID + workstationId?: number; // 工作站 ID + workstationName?: string; // 工作站名称 + taskId?: number; // 生产任务 ID + taskCode?: string; // 生产任务编码 + // 客户(OQC/RQC 场景) + clientId?: number; // 客户 ID + clientName?: string; // 客户名称 + recordTime?: number; // 记录时间(epoch ms) + } +} + +/** 查询待检任务分页 */ +export function getPendingInspectPage(params: PageParam) { + return requestClient.get>( + '/mes/qc/pending-inspect/page', + { params }, + ); +} diff --git a/apps/web-antd/src/api/mes/qc/rqc/index.ts b/apps/web-antd/src/api/mes/qc/rqc/index.ts new file mode 100644 index 000000000..60b54da15 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/rqc/index.ts @@ -0,0 +1,77 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcRqcApi { + /** MES 退货检验单 */ + export interface Rqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + type?: number; // 检验类型 + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + batchCode?: string; // 批次号 + checkQuantity?: number; // 检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格数量 + checkResult?: number; // 检测结果 + inspectDate?: number; // 检测日期 + inspectorUserId?: number; // 检测人员用户 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + // 缺陷统计 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + } +} + +/** 查询退货检验单分页 */ +export function getRqcPage(params: PageParam) { + return requestClient.get>('/mes/qc/rqc/page', { + params, + }); +} + +/** 查询退货检验单详情 */ +export function getRqc(id: number) { + return requestClient.get(`/mes/qc/rqc/get?id=${id}`); +} + +/** 新增退货检验单 */ +export function createRqc(data: MesQcRqcApi.Rqc) { + return requestClient.post('/mes/qc/rqc/create', data); +} + +/** 修改退货检验单 */ +export function updateRqc(data: MesQcRqcApi.Rqc) { + return requestClient.put('/mes/qc/rqc/update', data); +} + +/** 完成退货检验单 */ +export function finishRqc(id: number) { + return requestClient.put(`/mes/qc/rqc/finish?id=${id}`); +} + +/** 删除退货检验单 */ +export function deleteRqc(id: number) { + return requestClient.delete(`/mes/qc/rqc/delete?id=${id}`); +} + +/** 导出退货检验单 */ +export function exportRqc(params: any) { + return requestClient.download('/mes/qc/rqc/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/qc/rqc/line/index.ts b/apps/web-antd/src/api/mes/qc/rqc/line/index.ts new file mode 100644 index 000000000..abb44a758 --- /dev/null +++ b/apps/web-antd/src/api/mes/qc/rqc/line/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcRqcLineApi { + /** MES 退货检验单行 */ + export interface RqcLine { + id?: number; // 编号 + rqcId?: number; // 退货检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + tool?: string; // 检测工具 + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询退货检验单行分页 */ +export function getRqcLinePage(params: PageParam & { rqcId?: number }) { + return requestClient.get>( + '/mes/qc/rqc/line/page', + { params }, + ); +} + +/** 查询退货检验单行详情 */ +export function getRqcLine(id: number) { + return requestClient.get( + `/mes/qc/rqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antd/src/api/mes/wm/arrivalnotice/index.ts b/apps/web-antd/src/api/mes/wm/arrivalnotice/index.ts new file mode 100644 index 000000000..73e8eb849 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/arrivalnotice/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmArrivalNoticeApi { + /** MES 到货通知单 */ + export interface ArrivalNotice { + id?: number; // 通知单编号 + code?: string; // 通知单编号 + name?: string; // 通知单名称 + purchaseOrderCode?: string; // 采购订单编号 + vendorId?: number; // 供应商编号 + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + arrivalDate?: number; // 到货日期 + contactName?: string; // 联系人 + contactTelephone?: string; // 联系方式 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询到货通知单分页 */ +export function getArrivalNoticePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/arrival-notice/page', + { params }, + ); +} + +/** 查询到货通知单详情 */ +export function getArrivalNotice(id: number) { + return requestClient.get( + `/mes/wm/arrival-notice/get?id=${id}`, + ); +} + +/** 新增到货通知单 */ +export function createArrivalNotice( + data: MesWmArrivalNoticeApi.ArrivalNotice, +) { + return requestClient.post('/mes/wm/arrival-notice/create', data); +} + +/** 修改到货通知单 */ +export function updateArrivalNotice( + data: MesWmArrivalNoticeApi.ArrivalNotice, +) { + return requestClient.put('/mes/wm/arrival-notice/update', data); +} + +/** 删除到货通知单 */ +export function deleteArrivalNotice(id: number) { + return requestClient.delete(`/mes/wm/arrival-notice/delete?id=${id}`); +} + +/** 提交到货通知单 */ +export function submitArrivalNotice(id: number) { + return requestClient.put(`/mes/wm/arrival-notice/submit?id=${id}`); +} + +/** 导出到货通知单 */ +export function exportArrivalNotice(params: any) { + return requestClient.download('/mes/wm/arrival-notice/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/arrivalnotice/line/index.ts b/apps/web-antd/src/api/mes/wm/arrivalnotice/line/index.ts new file mode 100644 index 000000000..b763b2ad5 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/arrivalnotice/line/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmArrivalNoticeLineApi { + /** MES 到货通知单行 */ + export interface ArrivalNoticeLine { + id?: number; // 行编号 + noticeId?: number; // 到货通知单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + arrivalQuantity?: number; // 到货数量 + qualifiedQuantity?: number; // 合格数量 + iqcCheckFlag?: boolean; // 是否检验 + iqcId?: number; // 来料检验单编号 + iqcCode?: string; // 来料检验单编码 + remark?: string; // 备注 + } +} + +/** 查询到货通知单行分页 */ +export function getArrivalNoticeLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/arrival-notice-line/page', { params }); +} + +/** 查询到货通知单行详情 */ +export function getArrivalNoticeLine(id: number) { + return requestClient.get( + `/mes/wm/arrival-notice-line/get?id=${id}`, + ); +} + +/** 新增到货通知单行 */ +export function createArrivalNoticeLine( + data: MesWmArrivalNoticeLineApi.ArrivalNoticeLine, +) { + return requestClient.post( + '/mes/wm/arrival-notice-line/create', + data, + ); +} + +/** 修改到货通知单行 */ +export function updateArrivalNoticeLine( + data: MesWmArrivalNoticeLineApi.ArrivalNoticeLine, +) { + return requestClient.put('/mes/wm/arrival-notice-line/update', data); +} + +/** 删除到货通知单行 */ +export function deleteArrivalNoticeLine(id: number) { + return requestClient.delete(`/mes/wm/arrival-notice-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/barcode/index.ts b/apps/web-antd/src/api/mes/wm/barcode/index.ts index 7e8154141..39673a3ae 100644 --- a/apps/web-antd/src/api/mes/wm/barcode/index.ts +++ b/apps/web-antd/src/api/mes/wm/barcode/index.ts @@ -5,17 +5,17 @@ import { requestClient } from '#/api/request'; export namespace MesWmBarcodeApi { /** MES 条码清单 */ export interface Barcode { - id?: number; - configId?: number; - format?: number; - bizType?: number; - content?: string; - bizId?: number; - bizCode?: string; - bizName?: string; - status?: number; - remark?: string; - createTime?: Date; + id?: number; // 条码编号 + configId?: number; // 条码配置编号 + format?: number; // 条码格式 + bizType?: number; // 业务类型 + content?: string; // 条码内容 + bizId?: number; // 业务对象编号 + bizCode?: string; // 业务对象编码 + bizName?: string; // 业务对象名称 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 } } diff --git a/apps/web-antd/src/api/mes/wm/batch/index.ts b/apps/web-antd/src/api/mes/wm/batch/index.ts new file mode 100644 index 000000000..14d5fa1bd --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/batch/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmBatchApi { + /** MES 批次 */ + export interface Batch { + id?: number; // 批次 ID + code?: string; // 批次编码 + itemId?: number; // 物料 ID + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + itemSpecification?: string; // 规格型号 + unitName?: string; // 单位名称 + produceDate?: Date; // 生产日期 + expireDate?: Date; // 有效期 + receiptDate?: Date; // 入库日期 + vendorId?: number; // 供应商 ID + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + clientId?: number; // 客户 ID + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + purchaseOrderCode?: string; // 采购订单编号 + salesOrderCode?: string; // 销售订单编号 + workOrderId?: number; // 生产工单 ID + workOrderCode?: string; // 生产工单编号 + taskId?: number; // 生产任务 ID + taskCode?: string; // 生产任务编号 + workstationId?: number; // 工作站 ID + workstationCode?: string; // 工作站编码 + toolId?: number; // 工具 ID + toolCode?: string; // 工具编号 + moldId?: number; // 模具 ID + lotNumber?: string; // 生产批号 + qualityStatus?: number; // 质量状态 + remark?: string; // 备注 + } + + /** MES 批次分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; // 批次号 + itemId?: number; // 物料编号 + vendorId?: number; // 供应商编号 + clientId?: number; // 客户编号 + workOrderId?: number; // 工单编号 + taskId?: number; // 生产任务编号 + workstationId?: number; // 工作站编号 + toolId?: number; // 工具编号 + moldId?: number; // 模具编号 + salesOrderCode?: string; // 销售订单号 + purchaseOrderCode?: string; // 采购订单号 + lotNumber?: string; // 批号 + qualityStatus?: number; // 质量状态 + produceDate?: string[]; // 生产日期 + expireDate?: string[]; // 过期日期 + receiptDate?: string[]; // 入库日期 + } +} + +/** 查询批次详情 */ +export function getBatch(id: number) { + return requestClient.get(`/mes/wm/batch/get?id=${id}`); +} + +/** 查询批次分页 */ +export function getBatchPage(params: MesWmBatchApi.PageParams) { + return requestClient.get>( + '/mes/wm/batch/page', + { params }, + ); +} + +/** 批次向前追溯 */ +export function getForwardBatchList(code: string) { + return requestClient.get('/mes/wm/batch/forward-list', { + params: { code }, + }); +} + +/** 批次向后追溯 */ +export function getBackwardBatchList(code: string) { + return requestClient.get( + '/mes/wm/batch/backward-list', + { params: { code } }, + ); +} diff --git a/apps/web-antd/src/api/mes/wm/itemreceipt/detail/index.ts b/apps/web-antd/src/api/mes/wm/itemreceipt/detail/index.ts new file mode 100644 index 000000000..b147288ed --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/itemreceipt/detail/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmItemReceiptDetailApi { + /** MES 采购入库明细 */ + export interface ItemReceiptDetail { + id?: number; // 明细编号 + lineId?: number; // 入库单行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询采购入库明细列表(按行编号) */ +export function getItemReceiptDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/item-receipt-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询采购入库明细详情 */ +export function getItemReceiptDetail(id: number) { + return requestClient.get( + `/mes/wm/item-receipt-detail/get?id=${id}`, + ); +} + +/** 新增采购入库明细 */ +export function createItemReceiptDetail( + data: MesWmItemReceiptDetailApi.ItemReceiptDetail, +) { + return requestClient.post('/mes/wm/item-receipt-detail/create', data); +} + +/** 修改采购入库明细 */ +export function updateItemReceiptDetail( + data: MesWmItemReceiptDetailApi.ItemReceiptDetail, +) { + return requestClient.put('/mes/wm/item-receipt-detail/update', data); +} + +/** 删除采购入库明细 */ +export function deleteItemReceiptDetail(id: number) { + return requestClient.delete(`/mes/wm/item-receipt-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/itemreceipt/index.ts b/apps/web-antd/src/api/mes/wm/itemreceipt/index.ts index d7086de99..c1a77cd98 100644 --- a/apps/web-antd/src/api/mes/wm/itemreceipt/index.ts +++ b/apps/web-antd/src/api/mes/wm/itemreceipt/index.ts @@ -1,3 +1,5 @@ +import type { PageParam, PageResult } from '@vben/request'; + import { requestClient } from '#/api/request'; export namespace MesWmItemReceiptApi { @@ -19,16 +21,66 @@ export namespace MesWmItemReceiptApi { locationName?: string; // 库区名称 areaId?: number; // 库位编号 areaName?: string; // 库位名称 - receiptDate?: Date | number | string; // 入库日期 + receiptDate?: number; // 入库日期 status?: number; // 状态 remark?: string; // 备注 createTime?: Date; // 创建时间 } } +/** 查询采购入库单分页 */ +export function getItemReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/item-receipt/page', + { params }, + ); +} + /** 查询采购入库单详情 */ export function getItemReceipt(id: number) { return requestClient.get( `/mes/wm/item-receipt/get?id=${id}`, ); } + +/** 新增采购入库单 */ +export function createItemReceipt(data: MesWmItemReceiptApi.ItemReceipt) { + return requestClient.post('/mes/wm/item-receipt/create', data); +} + +/** 修改采购入库单 */ +export function updateItemReceipt(data: MesWmItemReceiptApi.ItemReceipt) { + return requestClient.put('/mes/wm/item-receipt/update', data); +} + +/** 删除采购入库单 */ +export function deleteItemReceipt(id: number) { + return requestClient.delete(`/mes/wm/item-receipt/delete?id=${id}`); +} + +/** 提交采购入库单 */ +export function submitItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/submit?id=${id}`); +} + +/** 执行上架 */ +export function stockItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/stock?id=${id}`); +} + +/** 执行入库 */ +export function finishItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/finish?id=${id}`); +} + +/** 取消采购入库单 */ +export function cancelItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/cancel?id=${id}`); +} + +/** 导出采购入库单 */ +export function exportItemReceipt(params: any) { + return requestClient.download('/mes/wm/item-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/itemreceipt/line/index.ts b/apps/web-antd/src/api/mes/wm/itemreceipt/line/index.ts index 55562e84c..8ce7236c1 100644 --- a/apps/web-antd/src/api/mes/wm/itemreceipt/line/index.ts +++ b/apps/web-antd/src/api/mes/wm/itemreceipt/line/index.ts @@ -3,11 +3,12 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace MesWmItemReceiptLineApi { - /** MES 物料接收单行 */ + /** MES 采购入库单行 */ export interface ItemReceiptLine { id?: number; // 行编号 receiptId?: number; // 入库单编号 receiptCode?: string; // 入库单编码 + arrivalNoticeLineId?: number; // 到货通知单行编号 purchaseOrderCode?: string; // 采购订单号 itemId?: number; // 物料编号 itemCode?: string; // 物料编码 @@ -15,14 +16,48 @@ export namespace MesWmItemReceiptLineApi { specification?: string; // 规格型号 unitMeasureName?: string; // 单位 receivedQuantity?: number; // 入库数量 + batchId?: number; // 批次编号 batchCode?: string; // 批次号 + productionDate?: number; // 生产日期 + expireDate?: number; // 有效期 + lotNumber?: string; // 生产批号 + iqcCheckFlag?: boolean; // 是否检验 + iqcId?: number; // 来料检验单编号 + iqcCode?: string; // 来料检验单编码 + remark?: string; // 备注 } } -/** 查询物料接收单行分页 */ +/** 查询采购入库单行分页 */ export function getItemReceiptLinePage(params: PageParam) { return requestClient.get>( '/mes/wm/item-receipt-line/page', { params }, ); } + +/** 查询采购入库单行详情 */ +export function getItemReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/item-receipt-line/get?id=${id}`, + ); +} + +/** 新增采购入库单行 */ +export function createItemReceiptLine( + data: MesWmItemReceiptLineApi.ItemReceiptLine, +) { + return requestClient.post('/mes/wm/item-receipt-line/create', data); +} + +/** 修改采购入库单行 */ +export function updateItemReceiptLine( + data: MesWmItemReceiptLineApi.ItemReceiptLine, +) { + return requestClient.put('/mes/wm/item-receipt-line/update', data); +} + +/** 删除采购入库单行 */ +export function deleteItemReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/item-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/miscissue/index.ts b/apps/web-antd/src/api/mes/wm/miscissue/index.ts new file mode 100644 index 000000000..1a54df4f4 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/miscissue/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscIssueApi { + /** MES 杂项出库单 */ + export interface MiscIssue { + id?: number; // 编号 + code?: string; // 出库单编号 + name?: string; // 出库单名称 + type?: number; // 业务类型 + sourceDocType?: string; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceDocCode?: string; // 来源单据编码 + issueDate?: number; // 出库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询杂项出库单分页 */ +export function getMiscIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/misc-issue/page', + { params }, + ); +} + +/** 查询杂项出库单详情 */ +export function getMiscIssue(id: number) { + return requestClient.get( + `/mes/wm/misc-issue/get?id=${id}`, + ); +} + +/** 新增杂项出库单 */ +export function createMiscIssue(data: MesWmMiscIssueApi.MiscIssue) { + return requestClient.post('/mes/wm/misc-issue/create', data); +} + +/** 修改杂项出库单 */ +export function updateMiscIssue(data: MesWmMiscIssueApi.MiscIssue) { + return requestClient.put('/mes/wm/misc-issue/update', data); +} + +/** 删除杂项出库单 */ +export function deleteMiscIssue(id: number) { + return requestClient.delete(`/mes/wm/misc-issue/delete?id=${id}`); +} + +/** 提交杂项出库单 */ +export function submitMiscIssue(id: number) { + return requestClient.put(`/mes/wm/misc-issue/submit?id=${id}`); +} + +/** 执行出库 */ +export function finishMiscIssue(id: number) { + return requestClient.put(`/mes/wm/misc-issue/finish?id=${id}`); +} + +/** 取消杂项出库单 */ +export function cancelMiscIssue(id: number) { + return requestClient.put(`/mes/wm/misc-issue/cancel?id=${id}`); +} + +/** 导出杂项出库单 */ +export function exportMiscIssue(params: any) { + return requestClient.download('/mes/wm/misc-issue/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/wm/miscissue/line/index.ts b/apps/web-antd/src/api/mes/wm/miscissue/line/index.ts new file mode 100644 index 000000000..56f4d8950 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/miscissue/line/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscIssueLineApi { + /** MES 杂项出库单行 */ + export interface MiscIssueLine { + id?: number; // 编号 + issueId?: number; // 出库单编号 + sourceDocLineId?: number; // 来源单据行编号 + materialStockId?: number; // 库存编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasure?: string; // 计量单位 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 出库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseCode?: string; // 仓库编码 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationCode?: string; // 库区编码 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaCode?: string; // 库位编码 + areaName?: string; // 库位名称 + remark?: string; // 备注 + quantityMax?: number; // 可出库最大数量(前端用于限制出库数量,取自库存在库数量) + } +} + +/** 查询杂项出库单行分页 */ +export function getMiscIssueLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/misc-issue-line/page', + { params }, + ); +} + +/** 查询杂项出库单行列表 */ +export function getMiscIssueLineListByIssueId(issueId: number) { + return requestClient.get( + `/mes/wm/misc-issue-line/list-by-issue-id?issueId=${issueId}`, + ); +} + +/** 查询杂项出库单行详情 */ +export function getMiscIssueLine(id: number) { + return requestClient.get( + `/mes/wm/misc-issue-line/get?id=${id}`, + ); +} + +/** 新增杂项出库单行 */ +export function createMiscIssueLine(data: MesWmMiscIssueLineApi.MiscIssueLine) { + return requestClient.post('/mes/wm/misc-issue-line/create', data); +} + +/** 修改杂项出库单行 */ +export function updateMiscIssueLine(data: MesWmMiscIssueLineApi.MiscIssueLine) { + return requestClient.put('/mes/wm/misc-issue-line/update', data); +} + +/** 删除杂项出库单行 */ +export function deleteMiscIssueLine(id: number) { + return requestClient.delete(`/mes/wm/misc-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/miscreceipt/index.ts b/apps/web-antd/src/api/mes/wm/miscreceipt/index.ts new file mode 100644 index 000000000..112cb4aac --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/miscreceipt/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscReceiptApi { + /** MES 杂项入库单 */ + export interface MiscReceipt { + id?: number; // 编号 + code?: string; // 入库单编号 + name?: string; // 入库单名称 + type?: number; // 杂项类型 + sourceDocType?: string; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceDocCode?: string; // 来源单据编码 + receiptDate?: number; // 入库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询杂项入库单分页 */ +export function getMiscReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/misc-receipt/page', + { params }, + ); +} + +/** 查询杂项入库单详情 */ +export function getMiscReceipt(id: number) { + return requestClient.get( + `/mes/wm/misc-receipt/get?id=${id}`, + ); +} + +/** 新增杂项入库单 */ +export function createMiscReceipt(data: MesWmMiscReceiptApi.MiscReceipt) { + return requestClient.post('/mes/wm/misc-receipt/create', data); +} + +/** 修改杂项入库单 */ +export function updateMiscReceipt(data: MesWmMiscReceiptApi.MiscReceipt) { + return requestClient.put('/mes/wm/misc-receipt/update', data); +} + +/** 删除杂项入库单 */ +export function deleteMiscReceipt(id: number) { + return requestClient.delete(`/mes/wm/misc-receipt/delete?id=${id}`); +} + +/** 提交杂项入库单 */ +export function submitMiscReceipt(id: number) { + return requestClient.put(`/mes/wm/misc-receipt/submit?id=${id}`); +} + +/** 执行入库 */ +export function finishMiscReceipt(id: number) { + return requestClient.put(`/mes/wm/misc-receipt/finish?id=${id}`); +} + +/** 取消杂项入库单 */ +export function cancelMiscReceipt(id: number) { + return requestClient.put(`/mes/wm/misc-receipt/cancel?id=${id}`); +} + +/** 导出杂项入库单 */ +export function exportMiscReceipt(params: any) { + return requestClient.download('/mes/wm/misc-receipt/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/wm/miscreceipt/line/index.ts b/apps/web-antd/src/api/mes/wm/miscreceipt/line/index.ts new file mode 100644 index 000000000..4ff66e549 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/miscreceipt/line/index.ts @@ -0,0 +1,57 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscReceiptLineApi { + /** MES 杂项入库单行 */ + export interface MiscReceiptLine { + id?: number; // 编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 入库数量 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询杂项入库单行列表 */ +export function getMiscReceiptLineListByReceiptId(receiptId: number) { + return requestClient.get( + `/mes/wm/misc-receipt-line/list-by-receipt-id?receiptId=${receiptId}`, + ); +} + +/** 查询杂项入库单行详情 */ +export function getMiscReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/misc-receipt-line/get?id=${id}`, + ); +} + +/** 新增杂项入库单行 */ +export function createMiscReceiptLine( + data: MesWmMiscReceiptLineApi.MiscReceiptLine, +) { + return requestClient.post('/mes/wm/misc-receipt-line/create', data); +} + +/** 修改杂项入库单行 */ +export function updateMiscReceiptLine( + data: MesWmMiscReceiptLineApi.MiscReceiptLine, +) { + return requestClient.put('/mes/wm/misc-receipt-line/update', data); +} + +/** 删除杂项入库单行 */ +export function deleteMiscReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/misc-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/outsourceissue/detail/index.ts b/apps/web-antd/src/api/mes/wm/outsourceissue/detail/index.ts new file mode 100644 index 000000000..15b50b6a6 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/outsourceissue/detail/index.ts @@ -0,0 +1,60 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceIssueDetailApi { + /** MES 外协发料单明细 */ + export interface OutsourceIssueDetail { + id?: number; // 明细编号 + lineId?: number; // 行编号 + issueId?: number; // 发料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 数量 + materialStockId?: number; // 库存编号 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协发料单明细列表 */ +export function getOutsourceIssueDetailListByLineId(lineId: number) { + return requestClient.get< + MesWmOutsourceIssueDetailApi.OutsourceIssueDetail[] + >('/mes/wm/outsource-issue-detail/list-by-line', { params: { lineId } }); +} + +/** 查询外协发料单明细详情 */ +export function getOutsourceIssueDetail(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue-detail/get?id=${id}`, + ); +} + +/** 新增外协发料单明细 */ +export function createOutsourceIssueDetail( + data: MesWmOutsourceIssueDetailApi.OutsourceIssueDetail, +) { + return requestClient.post('/mes/wm/outsource-issue-detail/create', data); +} + +/** 修改外协发料单明细 */ +export function updateOutsourceIssueDetail( + data: MesWmOutsourceIssueDetailApi.OutsourceIssueDetail, +) { + return requestClient.put('/mes/wm/outsource-issue-detail/update', data); +} + +/** 删除外协发料单明细 */ +export function deleteOutsourceIssueDetail(id: number) { + return requestClient.delete(`/mes/wm/outsource-issue-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/outsourceissue/index.ts b/apps/web-antd/src/api/mes/wm/outsourceissue/index.ts new file mode 100644 index 000000000..8b3b94b75 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/outsourceissue/index.ts @@ -0,0 +1,90 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceIssueApi { + /** MES 外协发料单 */ + export interface OutsourceIssue { + id?: number; // 发料单编号 + code?: string; // 发料单编号 + name?: string; // 发料单名称 + vendorId?: number; // 供应商编号 + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + workOrderName?: string; // 生产工单名称 + issueDate?: number; // 发料日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协发料单分页 */ +export function getOutsourceIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/outsource-issue/page', + { params }, + ); +} + +/** 查询外协发料单详情 */ +export function getOutsourceIssue(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue/get?id=${id}`, + ); +} + +/** 新增外协发料单 */ +export function createOutsourceIssue( + data: MesWmOutsourceIssueApi.OutsourceIssue, +) { + return requestClient.post('/mes/wm/outsource-issue/create', data); +} + +/** 修改外协发料单 */ +export function updateOutsourceIssue( + data: MesWmOutsourceIssueApi.OutsourceIssue, +) { + return requestClient.put('/mes/wm/outsource-issue/update', data); +} + +/** 删除外协发料单 */ +export function deleteOutsourceIssue(id: number) { + return requestClient.delete(`/mes/wm/outsource-issue/delete?id=${id}`); +} + +/** 提交外协发料单 */ +export function submitOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/stock?id=${id}`); +} + +/** 执行领出 */ +export function finishOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/finish?id=${id}`); +} + +/** 取消外协发料单 */ +export function cancelOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/cancel?id=${id}`); +} + +/** 校验外协发料单拣货数量是否与发料数量一致 */ +export function checkOutsourceIssueQuantity(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue/check-quantity?id=${id}`, + ); +} + +/** 导出外协发料单 */ +export function exportOutsourceIssue(params: any) { + return requestClient.download('/mes/wm/outsource-issue/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/outsourceissue/line/index.ts b/apps/web-antd/src/api/mes/wm/outsourceissue/line/index.ts new file mode 100644 index 000000000..68fae8f95 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/outsourceissue/line/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceIssueLineApi { + /** MES 外协发料单行 */ + export interface OutsourceIssueLine { + id?: number; // 行编号 + issueId?: number; // 发料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 发料数量 + materialStockId?: number; // 库存编号 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协发料单行分页 */ +export function getOutsourceIssueLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/outsource-issue-line/page', { params }); +} + +/** 查询外协发料单行详情 */ +export function getOutsourceIssueLine(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue-line/get?id=${id}`, + ); +} + +/** 新增外协发料单行 */ +export function createOutsourceIssueLine( + data: MesWmOutsourceIssueLineApi.OutsourceIssueLine, +) { + return requestClient.post('/mes/wm/outsource-issue-line/create', data); +} + +/** 修改外协发料单行 */ +export function updateOutsourceIssueLine( + data: MesWmOutsourceIssueLineApi.OutsourceIssueLine, +) { + return requestClient.put('/mes/wm/outsource-issue-line/update', data); +} + +/** 删除外协发料单行 */ +export function deleteOutsourceIssueLine(id: number) { + return requestClient.delete(`/mes/wm/outsource-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/outsourcereceipt/detail/index.ts b/apps/web-antd/src/api/mes/wm/outsourcereceipt/detail/index.ts new file mode 100644 index 000000000..645fa7ad3 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/outsourcereceipt/detail/index.ts @@ -0,0 +1,61 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceReceiptDetailApi { + /** MES 外协入库单明细 */ + export interface OutsourceReceiptDetail { + id?: number; // 明细编号 + lineId?: number; // 行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 上架数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协入库单明细列表 */ +export function getOutsourceReceiptDetailListByLineId(lineId: number) { + return requestClient.get< + MesWmOutsourceReceiptDetailApi.OutsourceReceiptDetail[] + >('/mes/wm/outsource-receipt-detail/list-by-line', { params: { lineId } }); +} + +/** 查询外协入库单明细详情 */ +export function getOutsourceReceiptDetail(id: number) { + return requestClient.get( + `/mes/wm/outsource-receipt-detail/get?id=${id}`, + ); +} + +/** 新增外协入库单明细 */ +export function createOutsourceReceiptDetail( + data: MesWmOutsourceReceiptDetailApi.OutsourceReceiptDetail, +) { + return requestClient.post('/mes/wm/outsource-receipt-detail/create', data); +} + +/** 修改外协入库单明细 */ +export function updateOutsourceReceiptDetail( + data: MesWmOutsourceReceiptDetailApi.OutsourceReceiptDetail, +) { + return requestClient.put('/mes/wm/outsource-receipt-detail/update', data); +} + +/** 删除外协入库单明细 */ +export function deleteOutsourceReceiptDetail(id: number) { + return requestClient.delete( + `/mes/wm/outsource-receipt-detail/delete?id=${id}`, + ); +} diff --git a/apps/web-antd/src/api/mes/wm/outsourcereceipt/index.ts b/apps/web-antd/src/api/mes/wm/outsourcereceipt/index.ts new file mode 100644 index 000000000..730b2f8b9 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/outsourcereceipt/index.ts @@ -0,0 +1,81 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceReceiptApi { + /** MES 外协入库单 */ + export interface OutsourceReceipt { + id?: number; // 入库单编号 + code?: string; // 入库单编码 + name?: string; // 入库单名称 + workOrderId?: number; // 外协工单编号 + workOrderCode?: string; // 外协工单编码 + vendorId?: number; // 供应商编号 + vendorName?: string; // 供应商名称 + receiptDate?: number; // 入库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协入库单分页 */ +export function getOutsourceReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/outsource-receipt/page', + { params }, + ); +} + +/** 查询外协入库单详情 */ +export function getOutsourceReceipt(id: number) { + return requestClient.get( + `/mes/wm/outsource-receipt/get?id=${id}`, + ); +} + +/** 新增外协入库单 */ +export function createOutsourceReceipt( + data: MesWmOutsourceReceiptApi.OutsourceReceipt, +) { + return requestClient.post('/mes/wm/outsource-receipt/create', data); +} + +/** 修改外协入库单 */ +export function updateOutsourceReceipt( + data: MesWmOutsourceReceiptApi.OutsourceReceipt, +) { + return requestClient.put('/mes/wm/outsource-receipt/update', data); +} + +/** 删除外协入库单 */ +export function deleteOutsourceReceipt(id: number) { + return requestClient.delete(`/mes/wm/outsource-receipt/delete?id=${id}`); +} + +/** 提交外协入库单 */ +export function submitOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/submit?id=${id}`); +} + +/** 执行上架 */ +export function stockOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/stock?id=${id}`); +} + +/** 完成入库 */ +export function finishOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/finish?id=${id}`); +} + +/** 取消外协入库单 */ +export function cancelOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/cancel?id=${id}`); +} + +/** 导出外协入库单 */ +export function exportOutsourceReceipt(params: any) { + return requestClient.download('/mes/wm/outsource-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/outsourcereceipt/line/index.ts b/apps/web-antd/src/api/mes/wm/outsourcereceipt/line/index.ts new file mode 100644 index 000000000..d28412a5b --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/outsourcereceipt/line/index.ts @@ -0,0 +1,59 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceReceiptLineApi { + /** MES 外协入库单行 */ + export interface OutsourceReceiptLine { + id?: number; // 行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 入库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + productionDate?: number; // 生产日期 + expireDate?: number; // 有效期 + lotNumber?: string; // 生产批号 + iqcCheckFlag?: boolean; // 是否需要质检 + qualityStatus?: number; // 质量状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协入库单行分页 */ +export function getOutsourceReceiptLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/outsource-receipt-line/page', { params }); +} + +/** 查询外协入库单行详情 */ +export function getOutsourceReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/outsource-receipt-line/get?id=${id}`, + ); +} + +/** 新增外协入库单行 */ +export function createOutsourceReceiptLine( + data: MesWmOutsourceReceiptLineApi.OutsourceReceiptLine, +) { + return requestClient.post('/mes/wm/outsource-receipt-line/create', data); +} + +/** 修改外协入库单行 */ +export function updateOutsourceReceiptLine( + data: MesWmOutsourceReceiptLineApi.OutsourceReceiptLine, +) { + return requestClient.put('/mes/wm/outsource-receipt-line/update', data); +} + +/** 删除外协入库单行 */ +export function deleteOutsourceReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/outsource-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/packages/index.ts b/apps/web-antd/src/api/mes/wm/packages/index.ts new file mode 100644 index 000000000..cdbe51cf0 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/packages/index.ts @@ -0,0 +1,83 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmPackageApi { + /** 装箱单 */ + export interface Package { + id?: number; // 装箱单编号 + code?: string; // 装箱单编码 + parentId?: number; // 父箱编号 + packageDate?: number; // 装箱日期 + salesOrderCode?: string; // 销售订单编号 + invoiceCode?: string; // 发票编号 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + clientNickname?: string; // 客户简称 + length?: number; // 箱长度 + width?: number; // 箱宽度 + height?: number; // 箱高度 + sizeUnitId?: number; // 尺寸单位编号 + sizeUnitName?: string; // 尺寸单位名称 + netWeight?: number; // 净重 + grossWeight?: number; // 毛重 + weightUnitId?: number; // 重量单位编号 + weightUnitName?: string; // 重量单位名称 + inspectorUserId?: number; // 检查员用户编号 + inspectorName?: string; // 检查员名称 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: string; // 创建时间 + children?: Package[]; // 子箱列表 + } +} + +/** 查询装箱单分页 */ +export function getPackagePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/package/page', + { params }, + ); +} + +/** 查询装箱单详情 */ +export function getPackage(id: number) { + return requestClient.get( + `/mes/wm/package/get?id=${id}`, + ); +} + +/** 新增装箱单 */ +export function createPackage(data: MesWmPackageApi.Package) { + return requestClient.post('/mes/wm/package/create', data); +} + +/** 修改装箱单 */ +export function updatePackage(data: MesWmPackageApi.Package) { + return requestClient.put('/mes/wm/package/update', data); +} + +/** 删除装箱单 */ +export function deletePackage(id: number) { + return requestClient.delete(`/mes/wm/package/delete?id=${id}`); +} + +/** 完成装箱单 */ +export function finishPackage(id: number) { + return requestClient.put(`/mes/wm/package/finish?id=${id}`); +} + +/** 添加子箱 */ +export function addChildPackage(parentId: number, childId: number) { + return requestClient.put('/mes/wm/package/add-child-package', null, { + params: { childId, parentId }, + }); +} + +/** 移除子箱 */ +export function removeChildPackage(childId: number) { + return requestClient.put( + `/mes/wm/package/remove-child-package?childId=${childId}`, + ); +} diff --git a/apps/web-antd/src/api/mes/wm/packages/line/index.ts b/apps/web-antd/src/api/mes/wm/packages/line/index.ts new file mode 100644 index 000000000..0f8e77b4e --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/packages/line/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmPackageLineApi { + /** 装箱明细 */ + export interface PackageLine { + id?: number; // 装箱明细编号 + packageId?: number; // 装箱单编号 + materialStockId?: number; // 库存编号 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品物料编码 + itemName?: string; // 产品物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 装箱数量 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编号 + batchCode?: string; // 批次号 + expireDate?: number; // 有效期 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询装箱明细分页 */ +export function getPackageLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/package-line/page', + { params }, + ); +} + +/** 查询装箱明细详情 */ +export function getPackageLine(id: number) { + return requestClient.get( + `/mes/wm/package-line/get?id=${id}`, + ); +} + +/** 新增装箱明细 */ +export function createPackageLine(data: MesWmPackageLineApi.PackageLine) { + return requestClient.post('/mes/wm/package-line/create', data); +} + +/** 修改装箱明细 */ +export function updatePackageLine(data: MesWmPackageLineApi.PackageLine) { + return requestClient.put('/mes/wm/package-line/update', data); +} + +/** 删除装箱明细 */ +export function deletePackageLine(id: number) { + return requestClient.delete(`/mes/wm/package-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/productissue/detail/index.ts b/apps/web-antd/src/api/mes/wm/productissue/detail/index.ts new file mode 100644 index 000000000..96def9c44 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productissue/detail/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmProductIssueDetailApi { + /** MES 领料出库明细 */ + export interface ProductIssueDetail { + id?: number; // 明细编号 + issueId?: number; // 领料单编号 + lineId?: number; // 领料单行编号 + materialStockId?: number; // 库存记录编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询领料出库明细列表(按行编号) */ +export function getProductIssueDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/product-issue-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询领料出库明细详情 */ +export function getProductIssueDetail(id: number) { + return requestClient.get( + `/mes/wm/product-issue-detail/get?id=${id}`, + ); +} + +/** 新增领料出库明细 */ +export function createProductIssueDetail( + data: MesWmProductIssueDetailApi.ProductIssueDetail, +) { + return requestClient.post('/mes/wm/product-issue-detail/create', data); +} + +/** 修改领料出库明细 */ +export function updateProductIssueDetail( + data: MesWmProductIssueDetailApi.ProductIssueDetail, +) { + return requestClient.put('/mes/wm/product-issue-detail/update', data); +} + +/** 删除领料出库明细 */ +export function deleteProductIssueDetail(id: number) { + return requestClient.delete(`/mes/wm/product-issue-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/productissue/index.ts b/apps/web-antd/src/api/mes/wm/productissue/index.ts new file mode 100644 index 000000000..78e792289 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productissue/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductIssueApi { + /** MES 领料出库单 */ + export interface ProductIssue { + id?: number; // 领料单编号 + code?: string; // 领料单编号 + name?: string; // 领料单名称 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + requiredTime?: number; // 需求时间 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询领料出库单分页 */ +export function getProductIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-issue/page', + { params }, + ); +} + +/** 查询领料出库单详情 */ +export function getProductIssue(id: number) { + return requestClient.get( + `/mes/wm/product-issue/get?id=${id}`, + ); +} + +/** 新增领料出库单 */ +export function createProductIssue(data: MesWmProductIssueApi.ProductIssue) { + return requestClient.post('/mes/wm/product-issue/create', data); +} + +/** 修改领料出库单 */ +export function updateProductIssue(data: MesWmProductIssueApi.ProductIssue) { + return requestClient.put('/mes/wm/product-issue/update', data); +} + +/** 删除领料出库单 */ +export function deleteProductIssue(id: number) { + return requestClient.delete(`/mes/wm/product-issue/delete?id=${id}`); +} + +/** 提交领料出库单 */ +export function submitProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/stock?id=${id}`); +} + +/** 完成领料出库单 */ +export function finishProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/finish?id=${id}`); +} + +/** 取消领料出库单 */ +export function cancelProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/cancel?id=${id}`); +} + +/** 校验领料出库单拣货数量是否与领料数量一致 */ +export function checkProductIssueQuantity(id: number) { + return requestClient.get( + `/mes/wm/product-issue/check-quantity?id=${id}`, + ); +} + +/** 导出领料出库单 */ +export function exportProductIssue(params: any) { + return requestClient.download('/mes/wm/product-issue/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/productissue/line/index.ts b/apps/web-antd/src/api/mes/wm/productissue/line/index.ts new file mode 100644 index 000000000..65ae7a187 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productissue/line/index.ts @@ -0,0 +1,53 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductIssueLineApi { + /** MES 领料出库单行 */ + export interface ProductIssueLine { + id?: number; // 行编号 + issueId?: number; // 领料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 领料数量 + batchId?: number; // 批次编号 + remark?: string; // 备注 + } +} + +/** 查询领料出库单行分页 */ +export function getProductIssueLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-issue-line/page', + { params }, + ); +} + +/** 查询领料出库单行详情 */ +export function getProductIssueLine(id: number) { + return requestClient.get( + `/mes/wm/product-issue-line/get?id=${id}`, + ); +} + +/** 新增领料出库单行 */ +export function createProductIssueLine( + data: MesWmProductIssueLineApi.ProductIssueLine, +) { + return requestClient.post('/mes/wm/product-issue-line/create', data); +} + +/** 修改领料出库单行 */ +export function updateProductIssueLine( + data: MesWmProductIssueLineApi.ProductIssueLine, +) { + return requestClient.put('/mes/wm/product-issue-line/update', data); +} + +/** 删除领料出库单行 */ +export function deleteProductIssueLine(id: number) { + return requestClient.delete(`/mes/wm/product-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/productreceipt/detail/index.ts b/apps/web-antd/src/api/mes/wm/productreceipt/detail/index.ts new file mode 100644 index 000000000..8e371a4d9 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productreceipt/detail/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmProductReceiptDetailApi { + /** MES 产品入库明细 */ + export interface ProductReceiptDetail { + id?: number; // 明细编号 + lineId?: number; // 入库单行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询产品入库明细列表(按行编号) */ +export function getProductReceiptDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/product-receipt-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询产品入库明细详情 */ +export function getProductReceiptDetail(id: number) { + return requestClient.get( + `/mes/wm/product-receipt-detail/get?id=${id}`, + ); +} + +/** 新增产品入库明细 */ +export function createProductReceiptDetail( + data: MesWmProductReceiptDetailApi.ProductReceiptDetail, +) { + return requestClient.post( + '/mes/wm/product-receipt-detail/create', + data, + ); +} + +/** 修改产品入库明细 */ +export function updateProductReceiptDetail( + data: MesWmProductReceiptDetailApi.ProductReceiptDetail, +) { + return requestClient.put('/mes/wm/product-receipt-detail/update', data); +} + +/** 删除产品入库明细 */ +export function deleteProductReceiptDetail(id: number) { + return requestClient.delete(`/mes/wm/product-receipt-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/productreceipt/index.ts b/apps/web-antd/src/api/mes/wm/productreceipt/index.ts new file mode 100644 index 000000000..73e30a178 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productreceipt/index.ts @@ -0,0 +1,91 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductReceiptApi { + /** MES 产品入库单 */ + export interface ProductReceipt { + id?: number; // 入库单编号 + code?: string; // 入库单编码 + name?: string; // 入库单名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品物料编码 + itemName?: string; // 产品物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + receiptDate?: number; // 入库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询产品入库单分页 */ +export function getProductReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-receipt/page', + { params }, + ); +} + +/** 查询产品入库单详情 */ +export function getProductReceipt(id: number) { + return requestClient.get( + `/mes/wm/product-receipt/get?id=${id}`, + ); +} + +/** 新增产品入库单 */ +export function createProductReceipt( + data: MesWmProductReceiptApi.ProductReceipt, +) { + return requestClient.post('/mes/wm/product-receipt/create', data); +} + +/** 修改产品入库单 */ +export function updateProductReceipt( + data: MesWmProductReceiptApi.ProductReceipt, +) { + return requestClient.put('/mes/wm/product-receipt/update', data); +} + +/** 删除产品入库单 */ +export function deleteProductReceipt(id: number) { + return requestClient.delete(`/mes/wm/product-receipt/delete?id=${id}`); +} + +/** 提交产品入库单 */ +export function submitProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/submit?id=${id}`); +} + +/** 执行上架 */ +export function stockProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/stock?id=${id}`); +} + +/** 执行入库 */ +export function finishProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/finish?id=${id}`); +} + +/** 取消产品入库单 */ +export function cancelProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/cancel?id=${id}`); +} + +/** 校验产品入库单明细数量是否与行收货数量一致 */ +export function checkProductReceiptQuantity(id: number) { + return requestClient.get( + `/mes/wm/product-receipt/check-quantity?id=${id}`, + ); +} + +/** 导出产品入库单 */ +export function exportProductReceipt(params: any) { + return requestClient.download('/mes/wm/product-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/productreceipt/line/index.ts b/apps/web-antd/src/api/mes/wm/productreceipt/line/index.ts new file mode 100644 index 000000000..04e113b3b --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productreceipt/line/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductReceiptLineApi { + /** MES 产品入库单行 */ + export interface ProductReceiptLine { + id?: number; // 行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + materialStockId?: number; // 库存记录编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 入库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + remark?: string; // 备注 + } +} + +/** 查询产品入库单行分页 */ +export function getProductReceiptLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/product-receipt-line/page', { params }); +} + +/** 查询产品入库单行详情 */ +export function getProductReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/product-receipt-line/get?id=${id}`, + ); +} + +/** 新增产品入库单行 */ +export function createProductReceiptLine( + data: MesWmProductReceiptLineApi.ProductReceiptLine, +) { + return requestClient.post( + '/mes/wm/product-receipt-line/create', + data, + ); +} + +/** 修改产品入库单行 */ +export function updateProductReceiptLine( + data: MesWmProductReceiptLineApi.ProductReceiptLine, +) { + return requestClient.put('/mes/wm/product-receipt-line/update', data); +} + +/** 删除产品入库单行 */ +export function deleteProductReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/product-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/productsales/detail/index.ts b/apps/web-antd/src/api/mes/wm/productsales/detail/index.ts new file mode 100644 index 000000000..34aa22d5b --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/productsales/detail/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmProductSalesDetailApi { + /** MES 销售出库明细 */ + export interface ProductSalesDetail { + id?: number; // 明细编号 + lineId?: number; // 出库单行编号 + salesId?: number; // 出库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + quantity?: number; // 数量 + materialStockId?: number; // 库存记录编号 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询销售出库明细列表(按行编号) */ +export function getProductSalesDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/product-sales-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询销售出库明细详情 */ +export function getProductSalesDetail(id: number) { + return requestClient.get( + `/mes/wm/product-sales-detail/get?id=${id}`, + ); +} + +/** 新增销售出库明细 */ +export function createProductSalesDetail( + data: MesWmProductSalesDetailApi.ProductSalesDetail, +) { + return requestClient.post('/mes/wm/product-sales-detail/create', data); +} + +/** 修改销售出库明细 */ +export function updateProductSalesDetail( + data: MesWmProductSalesDetailApi.ProductSalesDetail, +) { + return requestClient.put('/mes/wm/product-sales-detail/update', data); +} + +/** 删除销售出库明细 */ +export function deleteProductSalesDetail(id: number) { + return requestClient.delete(`/mes/wm/product-sales-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/productsales/index.ts b/apps/web-antd/src/api/mes/wm/productsales/index.ts index aa00d4556..b0fddcfe4 100644 --- a/apps/web-antd/src/api/mes/wm/productsales/index.ts +++ b/apps/web-antd/src/api/mes/wm/productsales/index.ts @@ -5,12 +5,24 @@ import { requestClient } from '#/api/request'; export namespace MesWmProductSalesApi { /** MES 销售出库单 */ export interface ProductSales { - id?: number; // 销售出库单编号 + id?: number; // 出库单编号 code?: string; // 出库单编号 name?: string; // 出库单名称 + noticeId?: number; // 发货通知单编号 + noticeCode?: string; // 发货通知单编码 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 salesOrderCode?: string; // 销售订单编号 - salesDate?: Date; // 出库日期 + salesDate?: number; // 出库日期 + contactName?: string; // 收货人 + contactTelephone?: string; // 联系方式 + contactAddress?: string; // 收货地址 + carrier?: string; // 承运商 + shippingNumber?: string; // 运输单号 status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 } } @@ -21,3 +33,64 @@ export function getProductSalesPage(params: PageParam) { { params }, ); } + +/** 查询销售出库单详情 */ +export function getProductSales(id: number) { + return requestClient.get( + `/mes/wm/product-sales/get?id=${id}`, + ); +} + +/** 新增销售出库单 */ +export function createProductSales(data: MesWmProductSalesApi.ProductSales) { + return requestClient.post('/mes/wm/product-sales/create', data); +} + +/** 修改销售出库单 */ +export function updateProductSales(data: MesWmProductSalesApi.ProductSales) { + return requestClient.put('/mes/wm/product-sales/update', data); +} + +/** 删除销售出库单 */ +export function deleteProductSales(id: number) { + return requestClient.delete(`/mes/wm/product-sales/delete?id=${id}`); +} + +/** 提交销售出库单 */ +export function submitProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/stock?id=${id}`); +} + +/** 填写运单 */ +export function shippingProductSales(data: MesWmProductSalesApi.ProductSales) { + return requestClient.put('/mes/wm/product-sales/shipping', data); +} + +/** 执行出库 */ +export function finishProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/finish?id=${id}`); +} + +/** 取消销售出库单 */ +export function cancelProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/cancel?id=${id}`); +} + +/** 校验销售出库单拣货数量是否与出库数量一致 */ +export function checkProductSalesQuantity(id: number) { + return requestClient.get( + `/mes/wm/product-sales/check-quantity?id=${id}`, + ); +} + +/** 导出销售出库单 */ +export function exportProductSales(params: any) { + return requestClient.download('/mes/wm/product-sales/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/productsales/line/index.ts b/apps/web-antd/src/api/mes/wm/productsales/line/index.ts index b66ef6ba7..f1d4ff57b 100644 --- a/apps/web-antd/src/api/mes/wm/productsales/line/index.ts +++ b/apps/web-antd/src/api/mes/wm/productsales/line/index.ts @@ -6,13 +6,19 @@ export namespace MesWmProductSalesLineApi { /** MES 销售出库单行 */ export interface ProductSalesLine { id?: number; // 行编号 + salesId?: number; // 出库单编号 + noticeLineId?: number; // 发货通知单行编号 itemId?: number; // 物料编号 itemCode?: string; // 物料编码 itemName?: string; // 物料名称 specification?: string; // 规格型号 unitMeasureName?: string; // 单位 quantity?: number; // 出库数量 + pickedQuantity?: number; // 已拣货数量 + batchId?: number; // 批次编号 batchCode?: string; // 批次号 + oqcCheckFlag?: boolean; // 是否检验 + remark?: string; // 备注 } } @@ -22,3 +28,29 @@ export function getProductSalesLinePage(params: PageParam) { PageResult >('/mes/wm/product-sales-line/page', { params }); } + +/** 查询销售出库单行详情 */ +export function getProductSalesLine(id: number) { + return requestClient.get( + `/mes/wm/product-sales-line/get?id=${id}`, + ); +} + +/** 新增销售出库单行 */ +export function createProductSalesLine( + data: MesWmProductSalesLineApi.ProductSalesLine, +) { + return requestClient.post('/mes/wm/product-sales-line/create', data); +} + +/** 修改销售出库单行 */ +export function updateProductSalesLine( + data: MesWmProductSalesLineApi.ProductSalesLine, +) { + return requestClient.put('/mes/wm/product-sales-line/update', data); +} + +/** 删除销售出库单行 */ +export function deleteProductSalesLine(id: number) { + return requestClient.delete(`/mes/wm/product-sales-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/returnissue/detail/index.ts b/apps/web-antd/src/api/mes/wm/returnissue/detail/index.ts new file mode 100644 index 000000000..7c878bb15 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnissue/detail/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnIssueDetailApi { + /** MES 生产退料明细 */ + export interface ReturnIssueDetail { + id?: number; // 明细编号 + issueId?: number; // 退料单编号 + lineId?: number; // 退料单行编号 + materialStockId?: number; // 库存记录编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询生产退料明细列表(按行编号) */ +export function getReturnIssueDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/return-issue-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询生产退料明细详情 */ +export function getReturnIssueDetail(id: number) { + return requestClient.get( + `/mes/wm/return-issue-detail/get?id=${id}`, + ); +} + +/** 新增生产退料明细 */ +export function createReturnIssueDetail( + data: MesWmReturnIssueDetailApi.ReturnIssueDetail, +) { + return requestClient.post('/mes/wm/return-issue-detail/create', data); +} + +/** 修改生产退料明细 */ +export function updateReturnIssueDetail( + data: MesWmReturnIssueDetailApi.ReturnIssueDetail, +) { + return requestClient.put('/mes/wm/return-issue-detail/update', data); +} + +/** 删除生产退料明细 */ +export function deleteReturnIssueDetail(id: number) { + return requestClient.delete(`/mes/wm/return-issue-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/returnissue/index.ts b/apps/web-antd/src/api/mes/wm/returnissue/index.ts new file mode 100644 index 000000000..c2a10b099 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnissue/index.ts @@ -0,0 +1,78 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnIssueApi { + /** MES 生产退料单 */ + export interface ReturnIssue { + id?: number; // 退料单编号 + code?: string; // 退料单编号 + name?: string; // 退料单名称 + workstationId?: number; // 工作站编号 + workstationName?: string; // 工作站名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + type?: number; // 退料类型 + returnDate?: number; // 退料日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询生产退料单分页 */ +export function getReturnIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-issue/page', + { params }, + ); +} + +/** 查询生产退料单详情 */ +export function getReturnIssue(id: number) { + return requestClient.get( + `/mes/wm/return-issue/get?id=${id}`, + ); +} + +/** 新增生产退料单 */ +export function createReturnIssue(data: MesWmReturnIssueApi.ReturnIssue) { + return requestClient.post('/mes/wm/return-issue/create', data); +} + +/** 修改生产退料单 */ +export function updateReturnIssue(data: MesWmReturnIssueApi.ReturnIssue) { + return requestClient.put('/mes/wm/return-issue/update', data); +} + +/** 删除生产退料单 */ +export function deleteReturnIssue(id: number) { + return requestClient.delete(`/mes/wm/return-issue/delete?id=${id}`); +} + +/** 提交生产退料单 */ +export function submitReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/submit?id=${id}`); +} + +/** 入库上架 */ +export function stockReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/stock?id=${id}`); +} + +/** 完成生产退料单 */ +export function finishReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/finish?id=${id}`); +} + +/** 取消生产退料单 */ +export function cancelReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/cancel?id=${id}`); +} + +/** 导出生产退料单 */ +export function exportReturnIssue(params: any) { + return requestClient.download('/mes/wm/return-issue/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/returnissue/line/index.ts b/apps/web-antd/src/api/mes/wm/returnissue/line/index.ts new file mode 100644 index 000000000..05bef0792 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnissue/line/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnIssueLineApi { + /** MES 生产退料单行 */ + export interface ReturnIssueLine { + id?: number; // 行编号 + issueId?: number; // 退料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + materialStockId?: number; // 库存记录编号 + quantity?: number; // 退料数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + rqcCheckFlag?: boolean; // 是否检测 + qualityStatus?: number; // 质量状态 + rqcId?: number; // 退货检验单编号 + remark?: string; // 备注 + } +} + +/** 查询生产退料单行分页 */ +export function getReturnIssueLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-issue-line/page', + { params }, + ); +} + +/** 查询生产退料单行详情 */ +export function getReturnIssueLine(id: number) { + return requestClient.get( + `/mes/wm/return-issue-line/get?id=${id}`, + ); +} + +/** 新增生产退料单行 */ +export function createReturnIssueLine( + data: MesWmReturnIssueLineApi.ReturnIssueLine, +) { + return requestClient.post('/mes/wm/return-issue-line/create', data); +} + +/** 修改生产退料单行 */ +export function updateReturnIssueLine( + data: MesWmReturnIssueLineApi.ReturnIssueLine, +) { + return requestClient.put('/mes/wm/return-issue-line/update', data); +} + +/** 删除生产退料单行 */ +export function deleteReturnIssueLine(id: number) { + return requestClient.delete(`/mes/wm/return-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/returnsales/detail/index.ts b/apps/web-antd/src/api/mes/wm/returnsales/detail/index.ts new file mode 100644 index 000000000..dfba83fa7 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnsales/detail/index.ts @@ -0,0 +1,55 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnSalesDetailApi { + /** MES 销售退货明细 */ + export interface ReturnSalesDetail { + id?: number; // 明细编号 + returnId?: number; // 退货单编号 + lineId?: number; // 退货单行编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询销售退货明细列表(按行编号) */ +export function getReturnSalesDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/return-sales-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询销售退货明细详情 */ +export function getReturnSalesDetail(id: number) { + return requestClient.get( + `/mes/wm/return-sales-detail/get?id=${id}`, + ); +} + +/** 新增销售退货明细 */ +export function createReturnSalesDetail( + data: MesWmReturnSalesDetailApi.ReturnSalesDetail, +) { + return requestClient.post('/mes/wm/return-sales-detail/create', data); +} + +/** 修改销售退货明细 */ +export function updateReturnSalesDetail( + data: MesWmReturnSalesDetailApi.ReturnSalesDetail, +) { + return requestClient.put('/mes/wm/return-sales-detail/update', data); +} + +/** 删除销售退货明细 */ +export function deleteReturnSalesDetail(id: number) { + return requestClient.delete(`/mes/wm/return-sales-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/returnsales/index.ts b/apps/web-antd/src/api/mes/wm/returnsales/index.ts new file mode 100644 index 000000000..8ad32ce0e --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnsales/index.ts @@ -0,0 +1,78 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnSalesApi { + /** MES 销售退货单 */ + export interface ReturnSales { + id?: number; // 退货单编号 + code?: string; // 退货单编号 + name?: string; // 退货单名称 + salesOrderCode?: string; // 销售订单号 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + returnDate?: number; // 退货日期 + returnReason?: string; // 退货原因 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询销售退货单分页 */ +export function getReturnSalesPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-sales/page', + { params }, + ); +} + +/** 查询销售退货单详情 */ +export function getReturnSales(id: number) { + return requestClient.get( + `/mes/wm/return-sales/get?id=${id}`, + ); +} + +/** 新增销售退货单 */ +export function createReturnSales(data: MesWmReturnSalesApi.ReturnSales) { + return requestClient.post('/mes/wm/return-sales/create', data); +} + +/** 修改销售退货单 */ +export function updateReturnSales(data: MesWmReturnSalesApi.ReturnSales) { + return requestClient.put('/mes/wm/return-sales/update', data); +} + +/** 删除销售退货单 */ +export function deleteReturnSales(id: number) { + return requestClient.delete(`/mes/wm/return-sales/delete?id=${id}`); +} + +/** 提交销售退货单 */ +export function submitReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/submit?id=${id}`); +} + +/** 执行退货 */ +export function finishReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/finish?id=${id}`); +} + +/** 执行上架 */ +export function stockReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/stock?id=${id}`); +} + +/** 取消销售退货单 */ +export function cancelReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/cancel?id=${id}`); +} + +/** 导出销售退货单 */ +export function exportReturnSales(params: any) { + return requestClient.download('/mes/wm/return-sales/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/returnsales/line/index.ts b/apps/web-antd/src/api/mes/wm/returnsales/line/index.ts new file mode 100644 index 000000000..f08ce776b --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnsales/line/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnSalesLineApi { + /** MES 销售退货单行 */ + export interface ReturnSalesLine { + id?: number; // 行编号 + returnId?: number; // 退货单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 退货数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + rqcCheckFlag?: boolean; // 是否需要质检 + rqcId?: number; // 退货检验单编号 + qualityStatus?: number; // 质量状态 + remark?: string; // 备注 + } +} + +/** 查询销售退货单行分页 */ +export function getReturnSalesLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-sales-line/page', + { params }, + ); +} + +/** 查询销售退货单行详情 */ +export function getReturnSalesLine(id: number) { + return requestClient.get( + `/mes/wm/return-sales-line/get?id=${id}`, + ); +} + +/** 新增销售退货单行 */ +export function createReturnSalesLine( + data: MesWmReturnSalesLineApi.ReturnSalesLine, +) { + return requestClient.post('/mes/wm/return-sales-line/create', data); +} + +/** 修改销售退货单行 */ +export function updateReturnSalesLine( + data: MesWmReturnSalesLineApi.ReturnSalesLine, +) { + return requestClient.put('/mes/wm/return-sales-line/update', data); +} + +/** 删除销售退货单行 */ +export function deleteReturnSalesLine(id: number) { + return requestClient.delete(`/mes/wm/return-sales-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/returnvendor/detail/index.ts b/apps/web-antd/src/api/mes/wm/returnvendor/detail/index.ts new file mode 100644 index 000000000..92bb049f1 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnvendor/detail/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnVendorDetailApi { + /** MES 供应商退货明细 */ + export interface ReturnVendorDetail { + id?: number; // 明细编号 + returnId?: number; // 退货单编号 + lineId?: number; // 退货单行编号 + materialStockId?: number; // 库存记录编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询供应商退货明细列表(按行编号) */ +export function getReturnVendorDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/return-vendor-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询供应商退货明细详情 */ +export function getReturnVendorDetail(id: number) { + return requestClient.get( + `/mes/wm/return-vendor-detail/get?id=${id}`, + ); +} + +/** 新增供应商退货明细 */ +export function createReturnVendorDetail( + data: MesWmReturnVendorDetailApi.ReturnVendorDetail, +) { + return requestClient.post('/mes/wm/return-vendor-detail/create', data); +} + +/** 修改供应商退货明细 */ +export function updateReturnVendorDetail( + data: MesWmReturnVendorDetailApi.ReturnVendorDetail, +) { + return requestClient.put('/mes/wm/return-vendor-detail/update', data); +} + +/** 删除供应商退货明细 */ +export function deleteReturnVendorDetail(id: number) { + return requestClient.delete(`/mes/wm/return-vendor-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/returnvendor/index.ts b/apps/web-antd/src/api/mes/wm/returnvendor/index.ts new file mode 100644 index 000000000..fdb5bbe6d --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnvendor/index.ts @@ -0,0 +1,88 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnVendorApi { + /** MES 供应商退货单 */ + export interface ReturnVendor { + id?: number; // 退货单编号 + code?: string; // 退货单编号 + name?: string; // 退货单名称 + purchaseOrderCode?: string; // 采购订单号 + vendorId?: number; // 供应商编号 + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + vendorNickname?: string; // 供应商简称 + returnDate?: number; // 退货日期 + returnReason?: string; // 退货原因 + transportCode?: string; // 运单号 + transportTelephone?: string; // 联系电话 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询供应商退货单分页 */ +export function getReturnVendorPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-vendor/page', + { params }, + ); +} + +/** 查询供应商退货单详情 */ +export function getReturnVendor(id: number) { + return requestClient.get( + `/mes/wm/return-vendor/get?id=${id}`, + ); +} + +/** 新增供应商退货单 */ +export function createReturnVendor(data: MesWmReturnVendorApi.ReturnVendor) { + return requestClient.post('/mes/wm/return-vendor/create', data); +} + +/** 修改供应商退货单 */ +export function updateReturnVendor(data: MesWmReturnVendorApi.ReturnVendor) { + return requestClient.put('/mes/wm/return-vendor/update', data); +} + +/** 删除供应商退货单 */ +export function deleteReturnVendor(id: number) { + return requestClient.delete(`/mes/wm/return-vendor/delete?id=${id}`); +} + +/** 提交供应商退货单 */ +export function submitReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/stock?id=${id}`); +} + +/** 完成供应商退货单 */ +export function finishReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/finish?id=${id}`); +} + +/** 取消供应商退货单 */ +export function cancelReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/cancel?id=${id}`); +} + +/** 校验供应商退货单拣货数量是否与退货数量一致 */ +export function checkReturnVendorQuantity(id: number) { + return requestClient.get( + `/mes/wm/return-vendor/check-quantity?id=${id}`, + ); +} + +/** 导出供应商退货单 */ +export function exportReturnVendor(params: any) { + return requestClient.download('/mes/wm/return-vendor/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/returnvendor/line/index.ts b/apps/web-antd/src/api/mes/wm/returnvendor/line/index.ts new file mode 100644 index 000000000..c2ff06c62 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/returnvendor/line/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnVendorLineApi { + /** MES 供应商退货单行 */ + export interface ReturnVendorLine { + id?: number; // 行编号 + returnId?: number; // 退货单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 退货数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + remark?: string; // 备注 + } +} + +/** 查询供应商退货单行分页 */ +export function getReturnVendorLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-vendor-line/page', + { params }, + ); +} + +/** 查询供应商退货单行详情 */ +export function getReturnVendorLine(id: number) { + return requestClient.get( + `/mes/wm/return-vendor-line/get?id=${id}`, + ); +} + +/** 新增供应商退货单行 */ +export function createReturnVendorLine( + data: MesWmReturnVendorLineApi.ReturnVendorLine, +) { + return requestClient.post('/mes/wm/return-vendor-line/create', data); +} + +/** 修改供应商退货单行 */ +export function updateReturnVendorLine( + data: MesWmReturnVendorLineApi.ReturnVendorLine, +) { + return requestClient.put('/mes/wm/return-vendor-line/update', data); +} + +/** 删除供应商退货单行 */ +export function deleteReturnVendorLine(id: number) { + return requestClient.delete(`/mes/wm/return-vendor-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/salesnotice/index.ts b/apps/web-antd/src/api/mes/wm/salesnotice/index.ts new file mode 100644 index 000000000..c053f69c7 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/salesnotice/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmSalesNoticeApi { + /** MES 发货通知单 */ + export interface SalesNotice { + id?: number; // 通知单编号 + code?: string; // 通知单编号 + name?: string; // 通知单名称 + salesOrderCode?: string; // 销售订单编号 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + salesDate?: number; // 发货日期 + recipientName?: string; // 收货人 + recipientTelephone?: string; // 联系方式 + recipientAddress?: string; // 收货地址 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询发货通知单分页 */ +export function getSalesNoticePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/sales-notice/page', + { params }, + ); +} + +/** 查询发货通知单详情 */ +export function getSalesNotice(id: number) { + return requestClient.get( + `/mes/wm/sales-notice/get?id=${id}`, + ); +} + +/** 新增发货通知单 */ +export function createSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) { + return requestClient.post('/mes/wm/sales-notice/create', data); +} + +/** 修改发货通知单 */ +export function updateSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) { + return requestClient.put('/mes/wm/sales-notice/update', data); +} + +/** 删除发货通知单 */ +export function deleteSalesNotice(id: number) { + return requestClient.delete(`/mes/wm/sales-notice/delete?id=${id}`); +} + +/** 提交发货通知单 */ +export function submitSalesNotice(id: number) { + return requestClient.put(`/mes/wm/sales-notice/submit?id=${id}`); +} + +/** 导出发货通知单 */ +export function exportSalesNotice(params: any) { + return requestClient.download('/mes/wm/sales-notice/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/salesnotice/line/index.ts b/apps/web-antd/src/api/mes/wm/salesnotice/line/index.ts new file mode 100644 index 000000000..948d1bc63 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/salesnotice/line/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmSalesNoticeLineApi { + /** MES 发货通知单行 */ + export interface SalesNoticeLine { + id?: number; // 行编号 + noticeId?: number; // 发货通知单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + quantity?: number; // 发货数量 + oqcCheckFlag?: boolean; // 是否检验 + remark?: string; // 备注 + } +} + +/** 查询发货通知单行分页 */ +export function getSalesNoticeLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/sales-notice-line/page', + { params }, + ); +} + +/** 查询发货通知单行详情 */ +export function getSalesNoticeLine(id: number) { + return requestClient.get( + `/mes/wm/sales-notice-line/get?id=${id}`, + ); +} + +/** 新增发货通知单行 */ +export function createSalesNoticeLine( + data: MesWmSalesNoticeLineApi.SalesNoticeLine, +) { + return requestClient.post('/mes/wm/sales-notice-line/create', data); +} + +/** 修改发货通知单行 */ +export function updateSalesNoticeLine( + data: MesWmSalesNoticeLineApi.SalesNoticeLine, +) { + return requestClient.put('/mes/wm/sales-notice-line/update', data); +} + +/** 删除发货通知单行 */ +export function deleteSalesNoticeLine(id: number) { + return requestClient.delete(`/mes/wm/sales-notice-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/sn/index.ts b/apps/web-antd/src/api/mes/wm/sn/index.ts new file mode 100644 index 000000000..6970a796a --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/sn/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmSnApi { + /** MES SN 码分组 */ + export interface SnGroup { + uuid?: string; // 批次 UUID + count?: number; // SN 码数量 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitName?: string; // 单位名称 + batchCode?: string; // 批次号 + workOrderId?: number; // 生产工单编号 + createTime?: Date; // 生成时间 + } + + /** MES SN 码生成参数 */ + export interface SnGenerate { + itemId?: number; // 物料编号 + batchCode?: string; // 批次号 + workOrderId?: number; // 生产工单编号 + count?: number; // 生成数量 + } + + /** MES SN 码分组分页查询参数 */ + export interface PageParams extends PageParam { + uuid?: string; // 分组 UUID + code?: string; // SN 码 + itemId?: number; // 物料编号 + batchCode?: string; // 批次号 + createTime?: string[]; // 创建时间 + } +} + +/** 生成 SN 码 */ +export function generateSnCodes(data: MesWmSnApi.SnGenerate) { + return requestClient.post('/mes/wm/sn/generate', data); +} + +/** 查询 SN 码分组分页 */ +export function getSnGroupPage(params: MesWmSnApi.PageParams) { + return requestClient.get>( + '/mes/wm/sn/group-page', + { params }, + ); +} + +/** 批量删除 SN 码(按批次 UUID) */ +export function deleteSnBatch(uuid: string) { + return requestClient.delete('/mes/wm/sn/delete-batch', { + params: { uuid }, + }); +} + +/** 导出 SN 码分组 Excel */ +export function exportSnGroupExcel(params: MesWmSnApi.PageParams) { + return requestClient.download('/mes/wm/sn/group-export-excel', { params }); +} + +/** 导出批次 SN 码明细 Excel */ +export function exportSnDetailExcel(uuid: string) { + return requestClient.download('/mes/wm/sn/export-excel', { + params: { uuid }, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/stocktaking/plan/index.ts b/apps/web-antd/src/api/mes/wm/stocktaking/plan/index.ts new file mode 100644 index 000000000..c6f29f092 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/stocktaking/plan/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingPlanApi { + /** 盘点方案 */ + export interface StockTakingPlan { + id?: number; // 方案编号 + code?: string; // 方案编码 + name?: string; // 方案名称 + type?: number; // 盘点类型 + startTime?: number; // 开始时间 + endTime?: number; // 结束时间 + blindFlag?: boolean; // 是否盲盘 + frozen?: boolean; // 是否冻结库存 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询盘点方案分页 */ +export function getStockTakingPlanPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/stocktaking-plan/page', + { params }, + ); +} + +/** 查询盘点方案详情 */ +export function getStockTakingPlan(id: number) { + return requestClient.get( + `/mes/wm/stocktaking-plan/get?id=${id}`, + ); +} + +/** 新增盘点方案 */ +export function createStockTakingPlan( + data: MesWmStockTakingPlanApi.StockTakingPlan, +) { + return requestClient.post('/mes/wm/stocktaking-plan/create', data); +} + +/** 修改盘点方案 */ +export function updateStockTakingPlan( + data: MesWmStockTakingPlanApi.StockTakingPlan, +) { + return requestClient.put('/mes/wm/stocktaking-plan/update', data); +} + +/** 修改盘点方案状态 */ +export function updateStockTakingPlanStatus(id: number, status: number) { + return requestClient.put('/mes/wm/stocktaking-plan/update-status', null, { + params: { id, status }, + }); +} + +/** 删除盘点方案 */ +export function deleteStockTakingPlan(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-plan/delete?id=${id}`); +} + +/** 导出盘点方案 */ +export function exportStockTakingPlan(params: any) { + return requestClient.download('/mes/wm/stocktaking-plan/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/stocktaking/plan/param/index.ts b/apps/web-antd/src/api/mes/wm/stocktaking/plan/param/index.ts new file mode 100644 index 000000000..b6eb6e09e --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/stocktaking/plan/param/index.ts @@ -0,0 +1,49 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingPlanParamApi { + /** 盘点方案条件 */ + export interface StockTakingPlanParam { + id?: number; // 条件编号 + planId?: number; // 方案编号 + type?: number; // 条件类型 + valueId?: number; // 条件值编号 + valueCode?: string; // 条件值编码 + valueName?: string; // 条件值名称 + remark?: string; // 备注 + } +} + +/** 查询盘点方案条件分页 */ +export function getStockTakingPlanParamPage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/stocktaking-plan-param/page', { params }); +} + +/** 查询盘点方案条件详情 */ +export function getStockTakingPlanParam(id: number) { + return requestClient.get( + `/mes/wm/stocktaking-plan-param/get?id=${id}`, + ); +} + +/** 新增盘点方案条件 */ +export function createStockTakingPlanParam( + data: MesWmStockTakingPlanParamApi.StockTakingPlanParam, +) { + return requestClient.post('/mes/wm/stocktaking-plan-param/create', data); +} + +/** 修改盘点方案条件 */ +export function updateStockTakingPlanParam( + data: MesWmStockTakingPlanParamApi.StockTakingPlanParam, +) { + return requestClient.put('/mes/wm/stocktaking-plan-param/update', data); +} + +/** 删除盘点方案条件 */ +export function deleteStockTakingPlanParam(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-plan-param/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/stocktaking/task/index.ts b/apps/web-antd/src/api/mes/wm/stocktaking/task/index.ts new file mode 100644 index 000000000..77622f351 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/stocktaking/task/index.ts @@ -0,0 +1,86 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingTaskApi { + /** 盘点任务 */ + export interface StockTakingTask { + id?: number; // 任务编号 + code?: string; // 任务编码 + name?: string; // 任务名称 + takingDate?: string; // 盘点日期 + type?: number; // 盘点类型 + userId?: number; // 盘点人用户编号 + userNickname?: string; // 盘点人名称 + planId?: number; // 盘点方案编号 + planCode?: string; // 盘点方案编码 + planName?: string; // 盘点方案名称 + blindFlag?: boolean; // 是否盲盘 + frozen?: boolean; // 是否冻结库存 + startTime?: number; // 开始时间 + endTime?: number; // 结束时间 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询盘点任务分页 */ +export function getStockTakingPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/stocktaking-task/page', + { params }, + ); +} + +/** 查询盘点任务详情 */ +export function getStockTaking(id: number) { + return requestClient.get( + `/mes/wm/stocktaking-task/get?id=${id}`, + ); +} + +/** 新增盘点任务 */ +export function createStockTaking( + data: MesWmStockTakingTaskApi.StockTakingTask, +) { + return requestClient.post('/mes/wm/stocktaking-task/create', data); +} + +/** 修改盘点任务 */ +export function updateStockTaking( + data: MesWmStockTakingTaskApi.StockTakingTask, +) { + return requestClient.put('/mes/wm/stocktaking-task/update', data); +} + +/** 删除盘点任务 */ +export function deleteStockTaking(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-task/delete?id=${id}`); +} + +/** 提交盘点任务 */ +export function submitStockTaking(id: number) { + return requestClient.put('/mes/wm/stocktaking-task/submit', null, { + params: { id }, + }); +} + +/** 取消盘点任务 */ +export function cancelStockTaking(id: number) { + return requestClient.put('/mes/wm/stocktaking-task/cancel', null, { + params: { id }, + }); +} + +/** 执行盘点任务 */ +export function finishStockTaking(id: number) { + return requestClient.put('/mes/wm/stocktaking-task/finish', { id }); +} + +/** 导出盘点任务 */ +export function exportStockTaking(params: any) { + return requestClient.download('/mes/wm/stocktaking-task/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/mes/wm/stocktaking/task/line/index.ts b/apps/web-antd/src/api/mes/wm/stocktaking/task/line/index.ts new file mode 100644 index 000000000..804483ec7 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/stocktaking/task/line/index.ts @@ -0,0 +1,72 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingTaskLineApi { + /** 盘点任务行 */ + export interface StockTakingTaskLine { + 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 function getStockTakingTaskLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/stocktaking-task-line/page', { params }); +} + +/** 查询盘点任务行精简列表 */ +export function getStockTakingTaskLineSimpleList(taskId: number) { + return requestClient.get( + '/mes/wm/stocktaking-task-line/simple-list', + { params: { taskId } }, + ); +} + +/** 查询盘点任务行详情 */ +export function getStockTakingTaskLine(id: number) { + return requestClient.get( + '/mes/wm/stocktaking-task-line/get', + { params: { id } }, + ); +} + +/** 新增盘点任务行 */ +export function createStockTakingTaskLine( + data: MesWmStockTakingTaskLineApi.StockTakingTaskLine, +) { + return requestClient.post('/mes/wm/stocktaking-task-line/create', data); +} + +/** 修改盘点任务行 */ +export function updateStockTakingTaskLine( + data: MesWmStockTakingTaskLineApi.StockTakingTaskLine, +) { + return requestClient.put('/mes/wm/stocktaking-task-line/update', data); +} + +/** 删除盘点任务行 */ +export function deleteStockTakingTaskLine(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-task-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/stocktaking/task/result/index.ts b/apps/web-antd/src/api/mes/wm/stocktaking/task/result/index.ts new file mode 100644 index 000000000..acd9a5f64 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/stocktaking/task/result/index.ts @@ -0,0 +1,64 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingResultApi { + /** 盘点结果 */ + export interface StockTakingResult { + 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; // 在库数量 + takingQuantity?: number; // 盘点数量 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询盘点结果分页 */ +export function getStockTakingResultPage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/stocktaking-task-result/page', { params }); +} + +/** 查询盘点结果详情 */ +export function getStockTakingResult(id: number) { + return requestClient.get( + '/mes/wm/stocktaking-task-result/get', + { params: { id } }, + ); +} + +/** 新增盘点结果 */ +export function createStockTakingResult( + data: MesWmStockTakingResultApi.StockTakingResult, +) { + return requestClient.post('/mes/wm/stocktaking-task-result/create', data); +} + +/** 修改盘点结果 */ +export function updateStockTakingResult( + data: MesWmStockTakingResultApi.StockTakingResult, +) { + return requestClient.put('/mes/wm/stocktaking-task-result/update', data); +} + +/** 删除盘点结果 */ +export function deleteStockTakingResult(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-task-result/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/transfer/detail/index.ts b/apps/web-antd/src/api/mes/wm/transfer/detail/index.ts new file mode 100644 index 000000000..ff215d92c --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/transfer/detail/index.ts @@ -0,0 +1,59 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmTransferDetailApi { + /** MES 调拨明细 */ + export interface TransferDetail { + id?: number; // 编号 + lineId?: number; // 转移单行编号 + transferId?: number; // 转移单编号 + itemId?: number; // 物料产品编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + toWarehouseId?: number; // 移入仓库编号 + toWarehouseName?: string; // 移入仓库名称 + toLocationId?: number; // 移入库区编号 + toLocationName?: string; // 移入库区名称 + toAreaId?: number; // 移入库位编号 + toAreaName?: string; // 移入库位名称 + remark?: string; // 备注 + } +} + +/** 查询调拨明细列表(按行编号) */ +export function getTransferDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/transfer-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询调拨明细详情 */ +export function getTransferDetail(id: number) { + return requestClient.get( + `/mes/wm/transfer-detail/get?id=${id}`, + ); +} + +/** 新增调拨明细 */ +export function createTransferDetail( + data: MesWmTransferDetailApi.TransferDetail, +) { + return requestClient.post('/mes/wm/transfer-detail/create', data); +} + +/** 修改调拨明细 */ +export function updateTransferDetail( + data: MesWmTransferDetailApi.TransferDetail, +) { + return requestClient.put('/mes/wm/transfer-detail/update', data); +} + +/** 删除调拨明细 */ +export function deleteTransferDetail(id: number) { + return requestClient.delete(`/mes/wm/transfer-detail/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/mes/wm/transfer/index.ts b/apps/web-antd/src/api/mes/wm/transfer/index.ts new file mode 100644 index 000000000..14d9b860f --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/transfer/index.ts @@ -0,0 +1,92 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmTransferApi { + /** MES 转移单 */ + export interface Transfer { + id?: number; // 编号 + code?: string; // 转移单编号 + name?: string; // 转移单名称 + type?: number; // 转移单类型 + deliveryFlag?: boolean; // 是否配送 + recipientName?: string; // 收货人 + recipientTelephone?: string; // 联系电话 + destinationAddress?: string; // 目的地 + carrier?: string; // 承运商 + shippingNumber?: string; // 运输单号 + confirmFlag?: boolean; // 是否确认 + transferDate?: string; // 转移日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: number; // 创建时间 + } + + /** MES 转移单分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + name?: string; + type?: number; + status?: number; + } +} + +/** 查询转移单分页 */ +export function getTransferPage(params: MesWmTransferApi.PageParams) { + return requestClient.get>( + '/mes/wm/transfer/page', + { params }, + ); +} + +/** 查询转移单详情 */ +export function getTransfer(id: number) { + return requestClient.get( + `/mes/wm/transfer/get?id=${id}`, + ); +} + +/** 新增转移单 */ +export function createTransfer(data: MesWmTransferApi.Transfer) { + return requestClient.post('/mes/wm/transfer/create', data); +} + +/** 修改转移单 */ +export function updateTransfer(data: MesWmTransferApi.Transfer) { + return requestClient.put('/mes/wm/transfer/update', data); +} + +/** 删除转移单 */ +export function deleteTransfer(id: number) { + return requestClient.delete(`/mes/wm/transfer/delete?id=${id}`); +} + +/** 提交转移单 */ +export function submitTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/submit?id=${id}`); +} + +/** 到货确认 */ +export function confirmTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/confirm?id=${id}`); +} + +/** 执行上架 */ +export function stockTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/stock?id=${id}`); +} + +/** 完成转移 */ +export function finishTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/finish?id=${id}`); +} + +/** 取消转移单 */ +export function cancelTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/cancel?id=${id}`); +} + +/** 导出转移单 */ +export function exportTransfer(params: any) { + return requestClient.download('/mes/wm/transfer/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/mes/wm/transfer/line/index.ts b/apps/web-antd/src/api/mes/wm/transfer/line/index.ts new file mode 100644 index 000000000..9ec7b5ea9 --- /dev/null +++ b/apps/web-antd/src/api/mes/wm/transfer/line/index.ts @@ -0,0 +1,55 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmTransferLineApi { + /** MES 转移单行 */ + export interface TransferLine { + id?: number; // 编号 + transferId?: number; // 转移单编号 + materialStockId?: number; // 库存台账编号 + itemId?: number; // 物料产品编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 转移数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + fromWarehouseId?: number; // 移出仓库编号 + fromWarehouseName?: string; // 移出仓库名称 + fromLocationId?: number; // 移出库区编号 + fromLocationName?: string; // 移出库区名称 + fromAreaId?: number; // 移出库位编号 + fromAreaName?: string; // 移出库位名称 + remark?: string; // 备注 + } +} + +/** 查询转移单行列表 */ +export function getTransferLineList(transferId: number) { + return requestClient.get( + '/mes/wm/transfer-line/list', + { params: { transferId } }, + ); +} + +/** 查询转移单行详情 */ +export function getTransferLine(id: number) { + return requestClient.get( + `/mes/wm/transfer-line/get?id=${id}`, + ); +} + +/** 新增转移单行 */ +export function createTransferLine(data: MesWmTransferLineApi.TransferLine) { + return requestClient.post('/mes/wm/transfer-line/create', data); +} + +/** 修改转移单行 */ +export function updateTransferLine(data: MesWmTransferLineApi.TransferLine) { + return requestClient.put('/mes/wm/transfer-line/update', data); +} + +/** 删除转移单行 */ +export function deleteTransferLine(id: number) { + return requestClient.delete(`/mes/wm/transfer-line/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/system/mail/template/index.ts b/apps/web-antd/src/api/system/mail/template/index.ts index 57f722cf5..fffd5d62b 100644 --- a/apps/web-antd/src/api/system/mail/template/index.ts +++ b/apps/web-antd/src/api/system/mail/template/index.ts @@ -17,6 +17,13 @@ export namespace SystemMailTemplateApi { createTime: Date; } + /** 邮件模版精简信息 */ + export interface MailTemplateSimple { + id: number; + name: string; + code: string; + } + /** 邮件发送信息 */ export interface MailSendReqVO { toMails: string[]; @@ -35,6 +42,13 @@ export function getMailTemplatePage(params: PageParam) { ); } +/** 查询邮件模版精简列表 */ +export function getSimpleMailTemplateList() { + return requestClient.get( + '/system/mail-template/simple-list', + ); +} + /** 查询邮件模版详情 */ export function getMailTemplate(id: number) { return requestClient.get( diff --git a/apps/web-antd/src/api/system/notify/template/index.ts b/apps/web-antd/src/api/system/notify/template/index.ts index dd19f4b8f..92c7d7bcc 100644 --- a/apps/web-antd/src/api/system/notify/template/index.ts +++ b/apps/web-antd/src/api/system/notify/template/index.ts @@ -16,6 +16,13 @@ export namespace SystemNotifyTemplateApi { remark: string; } + /** 站内信模板精简信息 */ + export interface NotifyTemplateSimple { + id: number; + name: string; + code: string; + } + /** 发送站内信请求 */ export interface NotifySendReqVO { userId: number; @@ -33,6 +40,13 @@ export function getNotifyTemplatePage(params: PageParam) { ); } +/** 查询站内信模板精简列表 */ +export function getSimpleNotifyTemplateList() { + return requestClient.get( + '/system/notify-template/simple-list', + ); +} + /** 查询站内信模板详情 */ export function getNotifyTemplate(id: number) { return requestClient.get( diff --git a/apps/web-antd/src/api/system/sms/template/index.ts b/apps/web-antd/src/api/system/sms/template/index.ts index eccfb911e..5cfc5ca9b 100644 --- a/apps/web-antd/src/api/system/sms/template/index.ts +++ b/apps/web-antd/src/api/system/sms/template/index.ts @@ -19,6 +19,13 @@ export namespace SystemSmsTemplateApi { createTime?: Date; } + /** 短信模板精简信息 */ + export interface SmsTemplateSimple { + id: number; + name: string; + code: string; + } + /** 发送短信请求 */ export interface SmsSendReqVO { mobile: string; @@ -35,6 +42,13 @@ export function getSmsTemplatePage(params: PageParam) { ); } +/** 查询短信模板精简列表 */ +export function getSimpleSmsTemplateList() { + return requestClient.get( + '/system/sms-template/simple-list', + ); +} + /** 查询短信模板详情 */ export function getSmsTemplate(id: number) { return requestClient.get( diff --git a/apps/web-antd/src/components/form-create/rules/use-area-select-rule.ts b/apps/web-antd/src/components/form-create/rules/use-area-select-rule.ts index b118a1799..75c13a540 100644 --- a/apps/web-antd/src/components/form-create/rules/use-area-select-rule.ts +++ b/apps/web-antd/src/components/form-create/rules/use-area-select-rule.ts @@ -21,7 +21,7 @@ export function useAreaSelectRule() { title: label, info: '', $required: false, - modelField: 'value', // 特殊:ele 里是 model-value,antd 里是 value + modelField: 'value', // Ant Design Vue 组件使用 value;web-ele 自定义组件使用默认 modelValue }; }, props(_: any, { t }: any) { diff --git a/apps/web-antd/src/components/form-create/rules/use-dict-select.ts b/apps/web-antd/src/components/form-create/rules/use-dict-select.ts index 08171a24b..3b77092b7 100644 --- a/apps/web-antd/src/components/form-create/rules/use-dict-select.ts +++ b/apps/web-antd/src/components/form-create/rules/use-dict-select.ts @@ -39,7 +39,7 @@ export function useDictSelectRule() { title: label, info: '', $required: false, - modelField: 'value', // 特殊:ele 里是 model-value,antd 里是 value + modelField: 'value', // Ant Design Vue 组件使用 value;web-ele 自定义组件使用默认 modelValue }; }, props(_: any, { t }: any) { diff --git a/apps/web-antd/src/components/form-create/rules/use-iframe-rule.ts b/apps/web-antd/src/components/form-create/rules/use-iframe-rule.ts index 39d26d766..cb70c0720 100644 --- a/apps/web-antd/src/components/form-create/rules/use-iframe-rule.ts +++ b/apps/web-antd/src/components/form-create/rules/use-iframe-rule.ts @@ -21,7 +21,7 @@ export function useIframeRule() { title: label, info: '', $required: false, - modelField: 'value', // 特殊:ele 里是 model-value,antd 里是 value + modelField: 'value', // Ant Design Vue 组件使用 value;web-ele 自定义组件使用默认 modelValue }; }, props(_: any, { t }: any) { diff --git a/apps/web-antd/src/router/routes/modules/mes.ts b/apps/web-antd/src/router/routes/modules/mes.ts new file mode 100644 index 000000000..cf0d1c418 --- /dev/null +++ b/apps/web-antd/src/router/routes/modules/mes.ts @@ -0,0 +1,55 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/mes', + name: 'MesCenter', + meta: { + title: 'MES 制造执行', + icon: 'lucide:factory', + keepAlive: true, + hideInMenu: true, + }, + children: [ + { + path: 'wm/warehouse/location', + name: 'MesWmLocation', + meta: { + title: '库区设置', + activePath: '/mes/wm/warehouse', + }, + component: () => + import('#/views/mes/wm/warehouse/location/index.vue'), + }, + { + path: 'wm/warehouse/area', + name: 'MesWmArea', + meta: { + title: '库位设置', + activePath: '/mes/wm/warehouse', + }, + component: () => import('#/views/mes/wm/warehouse/area/index.vue'), + }, + { + path: 'wm/barcode/config', + name: 'MesWmBarcodeConfig', + meta: { + title: '条码配置', + activePath: '/mes/wm/barcode', + }, + component: () => import('#/views/mes/wm/barcode/config/index.vue'), + }, + { + path: 'pro/task/gantt-edit', + name: 'MesProTaskGanttEdit', + meta: { + title: '甘特图编辑', + activePath: '/mes/pro/task', + }, + component: () => import('#/views/mes/pro/task/edit/index.vue'), + }, + ], + }, +]; + +export default routes; diff --git a/apps/web-antd/src/views/_core/profile/modules/user-social.vue b/apps/web-antd/src/views/_core/profile/modules/user-social.vue index ddb806567..d0925bac7 100644 --- a/apps/web-antd/src/views/_core/profile/modules/user-social.vue +++ b/apps/web-antd/src/views/_core/profile/modules/user-social.vue @@ -105,9 +105,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ /** 解绑账号 */ function onUnbind(row: SystemSocialUserApi.SocialUser) { - confirm({ - content: `确定解绑[${getDictLabel(DICT_TYPE.SYSTEM_SOCIAL_TYPE, row.type)}]平台的[${row.openid}]账号吗?`, - }).then(async () => { + confirm(`确定解绑[${getDictLabel(DICT_TYPE.SYSTEM_SOCIAL_TYPE, row.type)}]平台的[${row.openid}]账号吗?`).then(async () => { await socialUnbind({ type: row.type, openid: row.openid }); // 提示成功 message.success($t('ui.actionMessage.operationSuccess')); diff --git a/apps/web-antd/src/views/ai/image/manager/index.vue b/apps/web-antd/src/views/ai/image/manager/index.vue index 04d048e80..08e602a68 100644 --- a/apps/web-antd/src/views/ai/image/manager/index.vue +++ b/apps/web-antd/src/views/ai/image/manager/index.vue @@ -39,9 +39,7 @@ async function handleUpdatePublicStatusChange( ): Promise { const text = newStatus ? '公开' : '私有'; try { - await confirm({ - content: `确认要将该图片切换为【${text}】吗?`, - }); + await confirm(`确认要将该图片切换为【${text}】吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/ai/knowledge/document/index.vue b/apps/web-antd/src/views/ai/knowledge/document/index.vue index 5d21febd3..21db8989a 100644 --- a/apps/web-antd/src/views/ai/knowledge/document/index.vue +++ b/apps/web-antd/src/views/ai/knowledge/document/index.vue @@ -77,9 +77,7 @@ async function handleStatusChange( row: AiKnowledgeDocumentApi.KnowledgeDocument, ): Promise { try { - await confirm({ - content: `你要将${row.name}的状态切换为【${getDictLabel(DICT_TYPE.COMMON_STATUS, newStatus)}】吗?`, - }); + await confirm(`你要将${row.name}的状态切换为【${getDictLabel(DICT_TYPE.COMMON_STATUS, newStatus)}】吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/ai/knowledge/segment/index.vue b/apps/web-antd/src/views/ai/knowledge/segment/index.vue index 2f9955e64..519c96eaa 100644 --- a/apps/web-antd/src/views/ai/knowledge/segment/index.vue +++ b/apps/web-antd/src/views/ai/knowledge/segment/index.vue @@ -65,9 +65,7 @@ async function handleStatusChange( row: AiKnowledgeSegmentApi.KnowledgeSegment, ): Promise { try { - await confirm({ - content: `你要将片段 ${row.id} 的状态切换为【${getDictLabel(DICT_TYPE.COMMON_STATUS, newStatus)}】吗?`, - }); + await confirm(`你要将片段 ${row.id} 的状态切换为【${getDictLabel(DICT_TYPE.COMMON_STATUS, newStatus)}】吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/ai/music/manager/index.vue b/apps/web-antd/src/views/ai/music/manager/index.vue index 6d03547cd..26735dece 100644 --- a/apps/web-antd/src/views/ai/music/manager/index.vue +++ b/apps/web-antd/src/views/ai/music/manager/index.vue @@ -39,9 +39,7 @@ async function handleUpdatePublicStatusChange( ): Promise { const text = newStatus ? '公开' : '私有'; try { - await confirm({ - content: `确认要将该音乐切换为【${text}】吗?`, - }); + await confirm(`确认要将该音乐切换为【${text}】吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/bpm/components/bpmn-process-designer/package/designer/ProcessViewer.vue b/apps/web-antd/src/views/bpm/components/bpmn-process-designer/package/designer/ProcessViewer.vue index eb0dd63cf..7236cfd05 100644 --- a/apps/web-antd/src/views/bpm/components/bpmn-process-designer/package/designer/ProcessViewer.vue +++ b/apps/web-antd/src/views/bpm/components/bpmn-process-designer/package/designer/ProcessViewer.vue @@ -1,5 +1,5 @@ diff --git a/apps/web-antd/src/views/mall/product/spu/index.vue b/apps/web-antd/src/views/mall/product/spu/index.vue index 205bc8174..2be71cae1 100644 --- a/apps/web-antd/src/views/mall/product/spu/index.vue +++ b/apps/web-antd/src/views/mall/product/spu/index.vue @@ -110,9 +110,7 @@ async function handleStatusChange( // 二次确认 const text = newStatus ? '上架' : '下架'; try { - await confirm({ - content: `确认要${text + row.name}吗?`, - }); + await confirm(`确认要${text + row.name}吗?`); } catch { return false; } @@ -132,9 +130,7 @@ async function handleStatus02Change(row: MallSpuApi.Spu, newStatus: number) { newStatus === ProductSpuStatusEnum.RECYCLE.status ? '加入到回收站' : '恢复到仓库'; - await confirm({ - content: `确认要"${row.name}"${text}吗?`, - }); + await confirm(`确认要"${row.name}"${text}吗?`); const hideLoading = message.loading({ content: `正在${text}中...`, duration: 0, diff --git a/apps/web-antd/src/views/mall/promotion/coupon/template/index.vue b/apps/web-antd/src/views/mall/promotion/coupon/template/index.vue index b6a01d3c7..1d009535c 100644 --- a/apps/web-antd/src/views/mall/promotion/coupon/template/index.vue +++ b/apps/web-antd/src/views/mall/promotion/coupon/template/index.vue @@ -61,9 +61,7 @@ async function handleStatusChange( row: MallCouponTemplateApi.CouponTemplate, ): Promise { try { - await confirm({ - content: `你要将${row.name}的状态切换为【${newStatus === CommonStatusEnum.ENABLE ? '启用' : '停用'}】吗?`, - }); + await confirm(`你要将${row.name}的状态切换为【${newStatus === CommonStatusEnum.ENABLE ? '启用' : '停用'}】吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/mall/promotion/discountActivity/modules/form.vue b/apps/web-antd/src/views/mall/promotion/discountActivity/modules/form.vue index a0eff3e1d..0f159017a 100644 --- a/apps/web-antd/src/views/mall/promotion/discountActivity/modules/form.vue +++ b/apps/web-antd/src/views/mall/promotion/discountActivity/modules/form.vue @@ -7,7 +7,7 @@ import type { SpuProperty, } from '#/views/mall/product/spu/components'; -import { computed, nextTick, ref } from 'vue'; +import { computed, ref } from 'vue'; import { useVbenForm, useVbenModal } from '@vben/common-ui'; import { PromotionDiscountTypeEnum } from '@vben/constants'; @@ -213,13 +213,11 @@ function handleSkuDiscountPercentChange(row: SkuExtension) { } /** 重置表单 */ -async function resetForm() { +function resetForm() { spuList.value = []; spuPropertyList.value = []; spuIdList.value = []; formData.value = {}; - await nextTick(); - await formApi.resetForm(); } // ================= 弹窗相关 ================= @@ -264,7 +262,7 @@ const [Modal, modalApi] = useVbenModal({ }, async onOpenChange(isOpen: boolean) { if (!isOpen) { - await resetForm(); + resetForm(); return; } // 加载数据 diff --git a/apps/web-antd/src/views/mall/promotion/kefu/index.vue b/apps/web-antd/src/views/mall/promotion/kefu/index.vue index 55e833784..6fb7d5d9f 100644 --- a/apps/web-antd/src/views/mall/promotion/kefu/index.vue +++ b/apps/web-antd/src/views/mall/promotion/kefu/index.vue @@ -4,6 +4,7 @@ import type { MallKefuConversationApi } from '#/api/mall/promotion/kefu/conversa import { onBeforeUnmount, onMounted, ref, watch } from 'vue'; import { Page } from '@vben/common-ui'; +import { WebSocketMessageTypeConstants } from '@vben/constants'; import { useAccessStore } from '@vben/stores'; import { useWebSocket } from '@vueuse/core'; @@ -14,7 +15,6 @@ import { useMallKefuStore } from '#/store/mall/kefu'; import ConversationList from './modules/conversation-list.vue'; import MemberInfo from './modules/member/member-info.vue'; import MessageList from './modules/message-list.vue'; -import { WebSocketMessageTypeConstants } from './modules/tools/constants'; const accessStore = useAccessStore(); const kefuStore = useMallKefuStore(); // 客服缓存 diff --git a/apps/web-antd/src/views/mall/promotion/kefu/modules/conversation-list.vue b/apps/web-antd/src/views/mall/promotion/kefu/modules/conversation-list.vue index 174d845a3..91921d15d 100644 --- a/apps/web-antd/src/views/mall/promotion/kefu/modules/conversation-list.vue +++ b/apps/web-antd/src/views/mall/promotion/kefu/modules/conversation-list.vue @@ -4,6 +4,7 @@ import type { MallKefuConversationApi } from '#/api/mall/promotion/kefu/conversa import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'; import { confirm } from '@vben/common-ui'; +import { KeFuMessageContentTypeEnum } from '@vben/constants'; import { IconifyIcon } from '@vben/icons'; import { formatPast, jsonParse } from '@vben/utils'; @@ -15,7 +16,6 @@ import { } from '#/api/mall/promotion/kefu/conversation'; import { useMallKefuStore } from '#/store/mall/kefu'; -import { KeFuMessageContentTypeEnum } from './tools/constants'; import { useEmoji } from './tools/emoji'; /** 打开右侧的消息列表 */ @@ -125,9 +125,7 @@ async function updateConversationPinnedFn(pinned: boolean) { /** 删除会话 */ async function deleteConversationFn() { // 1. 删除会话 - confirm({ - content: '您确定要删除该会话吗?', - }).then(async () => { + confirm('您确定要删除该会话吗?').then(async () => { await deleteConversation(rightClickConversation.value.id); // 2. 关闭右键菜单,更新会话列表 closeRightMenu(); diff --git a/apps/web-antd/src/views/mall/promotion/kefu/modules/message-list.vue b/apps/web-antd/src/views/mall/promotion/kefu/modules/message-list.vue index dcb34aaca..b888ee66d 100644 --- a/apps/web-antd/src/views/mall/promotion/kefu/modules/message-list.vue +++ b/apps/web-antd/src/views/mall/promotion/kefu/modules/message-list.vue @@ -4,7 +4,7 @@ import type { Emoji } from './tools/emoji'; import type { MallKefuConversationApi } from '#/api/mall/promotion/kefu/conversation'; import type { MallKefuMessageApi } from '#/api/mall/promotion/kefu/message'; -import { computed, reactive, ref, toRefs, unref, watch } from 'vue'; +import { computed, KeFuMessageContentTypeEnum, reactive, ref, toRefs, unref, watch } from 'vue'; import { UserTypeEnum } from '@vben/constants'; import { IconifyIcon } from '@vben/icons'; @@ -25,7 +25,6 @@ import { useMallKefuStore } from '#/store/mall/kefu'; import MessageItem from './message/message-item.vue'; import OrderItem from './message/order-item.vue'; import ProductItem from './message/product-item.vue'; -import { KeFuMessageContentTypeEnum } from './tools/constants'; import { useEmoji } from './tools/emoji'; import EmojiSelectPopover from './tools/emoji-select-popover.vue'; import PictureSelectUpload from './tools/picture-select-upload.vue'; diff --git a/apps/web-antd/src/views/mall/promotion/kefu/modules/tools/constants.ts b/apps/web-antd/src/views/mall/promotion/kefu/modules/tools/constants.ts deleted file mode 100644 index 266a6cf02..000000000 --- a/apps/web-antd/src/views/mall/promotion/kefu/modules/tools/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** 客服消息类型枚举类 */ -export const KeFuMessageContentTypeEnum = { - TEXT: 1, // 文本消息 - IMAGE: 2, // 图片消息 - VOICE: 3, // 语音消息 - VIDEO: 4, // 视频消息 - SYSTEM: 5, // 系统消息 - // ========== 商城特殊消息 ========== - PRODUCT: 10, // 商品消息 - ORDER: 11, // 订单消息" -}; - -/** Promotion 的 WebSocket 消息类型枚举类 */ -export const WebSocketMessageTypeConstants = { - KEFU_MESSAGE_TYPE: 'kefu_message_type', // 客服消息类型 - KEFU_MESSAGE_ADMIN_READ: 'kefu_message_read_status_change', // 客服消息管理员已读 -}; diff --git a/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue b/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue index 61dbd8319..dc3738f8e 100644 --- a/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue +++ b/apps/web-antd/src/views/mall/promotion/seckill/config/index.vue @@ -62,9 +62,7 @@ async function handleStatusChange( // 二次确认 const text = row.status === 0 ? '启用' : '停用'; try { - await confirm({ - content: `确认要${text + row.name}吗?`, - }); + await confirm(`确认要${text + row.name}吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/mall/statistics/product/modules/summary-card.vue b/apps/web-antd/src/views/mall/statistics/product/modules/summary-card.vue index b38b4517a..d0aa5aae6 100644 --- a/apps/web-antd/src/views/mall/statistics/product/modules/summary-card.vue +++ b/apps/web-antd/src/views/mall/statistics/product/modules/summary-card.vue @@ -104,9 +104,7 @@ async function loadProductStatisticsList() { async function handleExport() { try { // 导出的二次确认 - await confirm({ - content: '确认导出商品状况数据吗?', - }); + await confirm('确认导出商品状况数据吗?'); // 发起导出 exportLoading.value = true; const data = await exportProductStatisticsExcel({ diff --git a/apps/web-antd/src/views/mall/statistics/trade/modules/trend-card.vue b/apps/web-antd/src/views/mall/statistics/trade/modules/trend-card.vue index 3d300dfca..d93103565 100644 --- a/apps/web-antd/src/views/mall/statistics/trade/modules/trend-card.vue +++ b/apps/web-antd/src/views/mall/statistics/trade/modules/trend-card.vue @@ -107,9 +107,7 @@ async function loadTradeStatisticsList() { async function handleExport() { try { // 导出的二次确认 - await confirm({ - content: '确认导出交易状况数据吗?', - }); + await confirm('确认导出交易状况数据吗?'); // 发起导出 exportLoading.value = true; const data = await exportTradeStatisticsExcel({ diff --git a/apps/web-antd/src/views/mall/trade/brokerage/user/index.vue b/apps/web-antd/src/views/mall/trade/brokerage/user/index.vue index 26682725d..ddd69bf90 100644 --- a/apps/web-antd/src/views/mall/trade/brokerage/user/index.vue +++ b/apps/web-antd/src/views/mall/trade/brokerage/user/index.vue @@ -89,9 +89,7 @@ async function handleBrokerageEnabledChange( ): Promise { const text = newEnabled ? '开通' : '关闭'; try { - await confirm({ - content: `你要将${row.nickname}的推广资格切换为【${text}】吗?`, - }); + await confirm(`你要将${row.nickname}的推广资格切换为【${text}】吗?`); } catch { return false; } diff --git a/apps/web-antd/src/views/member/user/data.ts b/apps/web-antd/src/views/member/user/data.ts index d9a37cd45..414227f46 100644 --- a/apps/web-antd/src/views/member/user/data.ts +++ b/apps/web-antd/src/views/member/user/data.ts @@ -36,6 +36,17 @@ export function useFormSchema(): VbenFormSchema[] { }, rules: 'required', }, + { + fieldName: 'email', + label: '邮箱', + component: 'Input', + componentProps: { + allowClear: true, + maxlength: 50, + placeholder: '请输入邮箱', + }, + rules: z.string().email('邮箱格式不正确').or(z.literal('')).optional(), + }, { fieldName: 'status', label: '状态', @@ -153,6 +164,15 @@ export function useGridFormSchema(): VbenFormSchema[] { allowClear: true, }, }, + { + fieldName: 'email', + label: '邮箱', + component: 'Input', + componentProps: { + placeholder: '请输入邮箱', + allowClear: true, + }, + }, { fieldName: 'loginDate', label: '登录时间', @@ -236,6 +256,11 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { title: '手机号', minWidth: 120, }, + { + field: 'email', + title: '邮箱', + minWidth: 180, + }, { field: 'nickname', title: '昵称', diff --git a/apps/web-antd/src/views/member/user/detail/modules/basic-info.vue b/apps/web-antd/src/views/member/user/detail/modules/basic-info.vue index c3a8b4294..115ad683f 100644 --- a/apps/web-antd/src/views/member/user/detail/modules/basic-info.vue +++ b/apps/web-antd/src/views/member/user/detail/modules/basic-info.vue @@ -34,6 +34,10 @@ const [Descriptions] = useDescription({ field: 'mobile', label: '手机号', }, + { + field: 'email', + label: '邮箱', + }, { field: 'sex', label: '性别', diff --git a/apps/web-antd/src/views/mes/cal/calendar/components/calendar-date-cell.vue b/apps/web-antd/src/views/mes/cal/calendar/components/date-cell.vue similarity index 98% rename from apps/web-antd/src/views/mes/cal/calendar/components/calendar-date-cell.vue rename to apps/web-antd/src/views/mes/cal/calendar/components/date-cell.vue index e8d162119..1ea132565 100644 --- a/apps/web-antd/src/views/mes/cal/calendar/components/calendar-date-cell.vue +++ b/apps/web-antd/src/views/mes/cal/calendar/components/date-cell.vue @@ -3,12 +3,12 @@ import type { MesCalCalendarApi } from '#/api/mes/cal/calendar'; import { computed } from 'vue'; +import { MesCalShiftTypeEnum } from '@vben/constants'; + import { Tag } from 'ant-design-vue'; import dayjs from 'dayjs'; import { SolarDay } from 'tyme4ts'; -import { MesCalShiftTypeEnum } from '#/views/mes/utils/constants'; - const props = defineProps<{ calendarDayMap: Map; // 排班数据 day: string; // 日期,格式 yyyy-MM-dd diff --git a/apps/web-antd/src/views/mes/cal/calendar/components/index.ts b/apps/web-antd/src/views/mes/cal/calendar/components/index.ts new file mode 100644 index 000000000..e347f44b7 --- /dev/null +++ b/apps/web-antd/src/views/mes/cal/calendar/components/index.ts @@ -0,0 +1,4 @@ +export { default as CalendarDateCell } from './date-cell.vue'; +export { default as CalendarLegend } from './legend.vue'; +export { default as CalendarPanel } from './panel.vue'; +export { useCalendar } from './use-calendar'; diff --git a/apps/web-antd/src/views/mes/cal/calendar/components/calendar-legend.vue b/apps/web-antd/src/views/mes/cal/calendar/components/legend.vue similarity index 100% rename from apps/web-antd/src/views/mes/cal/calendar/components/calendar-legend.vue rename to apps/web-antd/src/views/mes/cal/calendar/components/legend.vue diff --git a/apps/web-antd/src/views/mes/cal/calendar/components/calendar-panel.vue b/apps/web-antd/src/views/mes/cal/calendar/components/panel.vue similarity index 96% rename from apps/web-antd/src/views/mes/cal/calendar/components/calendar-panel.vue rename to apps/web-antd/src/views/mes/cal/calendar/components/panel.vue index 55fd9049a..2794f40ef 100644 --- a/apps/web-antd/src/views/mes/cal/calendar/components/calendar-panel.vue +++ b/apps/web-antd/src/views/mes/cal/calendar/components/panel.vue @@ -6,8 +6,8 @@ import type { MesCalCalendarApi } from '#/api/mes/cal/calendar'; import { Button, Calendar, Spin } from 'ant-design-vue'; import dayjs from 'dayjs'; -import CalendarDateCell from './calendar-date-cell.vue'; -import CalendarLegend from './calendar-legend.vue'; +import CalendarDateCell from './date-cell.vue'; +import CalendarLegend from './legend.vue'; defineProps<{ calendarDayMap: Map; diff --git a/apps/web-antd/src/views/mes/cal/calendar/components/use-calendar.ts b/apps/web-antd/src/views/mes/cal/calendar/components/use-calendar.ts index 381e7f5bd..860c48a1b 100644 --- a/apps/web-antd/src/views/mes/cal/calendar/components/use-calendar.ts +++ b/apps/web-antd/src/views/mes/cal/calendar/components/use-calendar.ts @@ -4,11 +4,12 @@ import type { MesCalCalendarApi } from '#/api/mes/cal/calendar'; import { ref, watch } from 'vue'; +import { HolidayType } from '@vben/constants'; + import dayjs from 'dayjs'; import { getCalendarList } from '#/api/mes/cal/calendar'; import { getHolidayList } from '#/api/mes/cal/holiday'; -import { HolidayType } from '#/views/mes/utils/constants'; /** * 排班日历通用 composable diff --git a/apps/web-antd/src/views/mes/cal/calendar/modules/team-view.vue b/apps/web-antd/src/views/mes/cal/calendar/modules/team-view.vue index 7637c755b..5a0527a03 100644 --- a/apps/web-antd/src/views/mes/cal/calendar/modules/team-view.vue +++ b/apps/web-antd/src/views/mes/cal/calendar/modules/team-view.vue @@ -5,8 +5,7 @@ import { onMounted, ref } from 'vue'; import { getTeamList } from '#/api/mes/cal/team'; -import CalendarPanel from '../components/calendar-panel.vue'; -import { useCalendar } from '../components/use-calendar'; +import { CalendarPanel, useCalendar } from '../components'; const { calendarDayMap, diff --git a/apps/web-antd/src/views/mes/cal/calendar/modules/type-view.vue b/apps/web-antd/src/views/mes/cal/calendar/modules/type-view.vue index 2919e0755..74274f62c 100644 --- a/apps/web-antd/src/views/mes/cal/calendar/modules/type-view.vue +++ b/apps/web-antd/src/views/mes/cal/calendar/modules/type-view.vue @@ -6,8 +6,7 @@ import { onMounted, ref } from 'vue'; import { DICT_TYPE } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; -import CalendarPanel from '../components/calendar-panel.vue'; -import { useCalendar } from '../components/use-calendar'; +import { CalendarPanel, useCalendar } from '../components'; const { calendarDayMap, diff --git a/apps/web-antd/src/views/mes/cal/calendar/modules/user-view.vue b/apps/web-antd/src/views/mes/cal/calendar/modules/user-view.vue index e42bd2342..3177809fb 100644 --- a/apps/web-antd/src/views/mes/cal/calendar/modules/user-view.vue +++ b/apps/web-antd/src/views/mes/cal/calendar/modules/user-view.vue @@ -9,8 +9,7 @@ import { Button, Form, FormItem, Select } from 'ant-design-vue'; import { getSimpleUserList } from '#/api/system/user'; -import CalendarPanel from '../components/calendar-panel.vue'; -import { useCalendar } from '../components/use-calendar'; +import { CalendarPanel, useCalendar } from '../components'; const { calendarDayMap, diff --git a/apps/web-antd/src/views/mes/cal/holiday/data.ts b/apps/web-antd/src/views/mes/cal/holiday/data.ts index 891aa335a..a63e9d8aa 100644 --- a/apps/web-antd/src/views/mes/cal/holiday/data.ts +++ b/apps/web-antd/src/views/mes/cal/holiday/data.ts @@ -1,10 +1,9 @@ import type { VbenFormSchema } from '#/adapter/form'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, HolidayType } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { z } from '#/adapter/form'; -import { HolidayType } from '#/views/mes/utils/constants'; /** 假期设置表单 */ export function useHolidayFormSchema(): VbenFormSchema[] { diff --git a/apps/web-antd/src/views/mes/cal/holiday/index.vue b/apps/web-antd/src/views/mes/cal/holiday/index.vue index 73be66f52..a3d037394 100644 --- a/apps/web-antd/src/views/mes/cal/holiday/index.vue +++ b/apps/web-antd/src/views/mes/cal/holiday/index.vue @@ -5,13 +5,13 @@ import { onMounted, ref, watch } from 'vue'; import { useAccess } from '@vben/access'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; +import { HolidayType } from '@vben/constants'; import { Button, Calendar, message, Tag } from 'ant-design-vue'; import dayjs from 'dayjs'; import { SolarDay } from 'tyme4ts'; import { getHolidayList } from '#/api/mes/cal/holiday'; -import { HolidayType } from '#/views/mes/utils/constants'; import HolidayForm from './modules/form.vue'; diff --git a/apps/web-antd/src/views/mes/cal/holiday/modules/form.vue b/apps/web-antd/src/views/mes/cal/holiday/modules/form.vue index 166514c50..2fa745b7f 100644 --- a/apps/web-antd/src/views/mes/cal/holiday/modules/form.vue +++ b/apps/web-antd/src/views/mes/cal/holiday/modules/form.vue @@ -2,13 +2,13 @@ import type { MesCalHolidayApi } from '#/api/mes/cal/holiday'; import { useVbenModal } from '@vben/common-ui'; +import { HolidayType } from '@vben/constants'; import { message } from 'ant-design-vue'; import dayjs from 'dayjs'; import { useVbenForm } from '#/adapter/form'; import { getHolidayByDay, saveHoliday } from '#/api/mes/cal/holiday'; -import { HolidayType } from '#/views/mes/utils/constants'; import { useHolidayFormSchema } from '../data'; @@ -50,7 +50,6 @@ const [Modal, modalApi] = useVbenModal({ if (!isOpen) { return; } - await formApi.resetForm(); const data = modalApi.getData<{ day: string }>(); if (!data?.day) { return; diff --git a/apps/web-antd/src/views/mes/cal/plan/data.ts b/apps/web-antd/src/views/mes/cal/plan/data.ts index e1c001147..2fcb12099 100644 --- a/apps/web-antd/src/views/mes/cal/plan/data.ts +++ b/apps/web-antd/src/views/mes/cal/plan/data.ts @@ -4,25 +4,22 @@ import type { MesCalPlanApi } from '#/api/mes/cal/plan'; import { h } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesAutoCodeRuleCode, MesCalPlanStatusEnum, MesCalShiftMethodEnum, MesCalShiftTypeEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { Button } from 'ant-design-vue'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; import { getRangePickerDefaultProps } from '#/utils'; -import { - MesAutoCodeRuleCode, - MesCalPlanStatusEnum, - MesCalShiftMethodEnum, - MesCalShiftTypeEnum, -} from '#/views/mes/utils/constants'; /** 表单类型 */ export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改排班计划的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -49,22 +46,21 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入计划编码', }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - try { - const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_PLAN_CODE); - await formApi?.setFieldValue('code', code); - } catch (error) { - console.error(error); - } - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_PLAN_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/cal/plan/index.vue b/apps/web-antd/src/views/mes/cal/plan/index.vue index 94ae51603..3e6dc48d0 100644 --- a/apps/web-antd/src/views/mes/cal/plan/index.vue +++ b/apps/web-antd/src/views/mes/cal/plan/index.vue @@ -3,6 +3,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { MesCalPlanApi } from '#/api/mes/cal/plan'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; +import { MesCalPlanStatusEnum } from '@vben/constants'; import { downloadFileFromBlobPart } from '@vben/utils'; import { Button, message } from 'ant-design-vue'; @@ -10,7 +11,6 @@ import { Button, message } from 'ant-design-vue'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deletePlan, exportPlan, getPlanPage } from '#/api/mes/cal/plan'; import { $t } from '#/locales'; -import { MesCalPlanStatusEnum } from '#/views/mes/utils/constants'; import { useGridColumns, useGridFormSchema } from './data'; import Form from './modules/form.vue'; diff --git a/apps/web-antd/src/views/mes/cal/plan/modules/form.vue b/apps/web-antd/src/views/mes/cal/plan/modules/form.vue index bbfdac011..3ecbda54e 100644 --- a/apps/web-antd/src/views/mes/cal/plan/modules/form.vue +++ b/apps/web-antd/src/views/mes/cal/plan/modules/form.vue @@ -6,13 +6,13 @@ import type { MesCalPlanApi } from '#/api/mes/cal/plan'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; +import { MesCalPlanStatusEnum } from '@vben/constants'; import { Button, message, Popconfirm, Tabs } from 'ant-design-vue'; import { useVbenForm } from '#/adapter/form'; import { confirmPlan, createPlan, getPlan, updatePlan } from '#/api/mes/cal/plan'; import { $t } from '#/locales'; -import { MesCalPlanStatusEnum } from '#/views/mes/utils/constants'; import { useFormSchema } from '../data'; import ShiftList from './shift-list.vue'; @@ -49,9 +49,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -/** 表单 schema 需要 formApi 引用,所以通过 setState 设置 schema */ -formApi.setState({ schema: useFormSchema(formApi) }); - /** 确认排班计划 */ async function handleConfirmPlan() { const { valid } = await formApi.validate(); @@ -106,11 +103,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); subTabsName.value = 'shift'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); formApi.setDisabled(formType.value === 'detail'); modalApi.setState({ showConfirmButton: formType.value !== 'detail' }); if (!data?.id) { diff --git a/apps/web-antd/src/views/mes/cal/team/components/index.ts b/apps/web-antd/src/views/mes/cal/team/components/index.ts index 092b24a19..e40fc9490 100644 --- a/apps/web-antd/src/views/mes/cal/team/components/index.ts +++ b/apps/web-antd/src/views/mes/cal/team/components/index.ts @@ -1,2 +1,2 @@ -export { default as CalTeamSelectDialog } from './cal-team-select-dialog.vue'; -export { default as CalTeamSelect } from './cal-team-select.vue'; +export { default as CalTeamSelectDialog } from './select-dialog.vue'; +export { default as CalTeamSelect } from './select.vue'; diff --git a/apps/web-antd/src/views/mes/cal/team/components/cal-team-select-dialog.vue b/apps/web-antd/src/views/mes/cal/team/components/select-dialog.vue similarity index 100% rename from apps/web-antd/src/views/mes/cal/team/components/cal-team-select-dialog.vue rename to apps/web-antd/src/views/mes/cal/team/components/select-dialog.vue diff --git a/apps/web-antd/src/views/mes/cal/team/components/cal-team-select.vue b/apps/web-antd/src/views/mes/cal/team/components/select.vue similarity index 97% rename from apps/web-antd/src/views/mes/cal/team/components/cal-team-select.vue rename to apps/web-antd/src/views/mes/cal/team/components/select.vue index 73a276e69..a00fe96f2 100644 --- a/apps/web-antd/src/views/mes/cal/team/components/cal-team-select.vue +++ b/apps/web-antd/src/views/mes/cal/team/components/select.vue @@ -9,7 +9,7 @@ import { Button, Select } from 'ant-design-vue'; import { getTeamList } from '#/api/mes/cal/team'; -import CalTeamSelectDialog from './cal-team-select-dialog.vue'; +import CalTeamSelectDialog from './select-dialog.vue'; const props = withDefaults( defineProps<{ diff --git a/apps/web-antd/src/views/mes/cal/team/data.ts b/apps/web-antd/src/views/mes/cal/team/data.ts index 17df1d06a..fb28dd230 100644 --- a/apps/web-antd/src/views/mes/cal/team/data.ts +++ b/apps/web-antd/src/views/mes/cal/team/data.ts @@ -4,20 +4,22 @@ import type { MesCalTeamApi } from '#/api/mes/cal/team'; import { h } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesAutoCodeRuleCode } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { Button } from 'ant-design-vue'; import { z } from '#/adapter/form'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; -import { MesAutoCodeRuleCode } from '#/views/mes/utils/constants'; /** 表单类型 */ export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改班组的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -36,22 +38,21 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入班组编码', }, rules: z.string().min(1, '班组编码不能为空').max(64), - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - try { - const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_TEAM_CODE); - await formApi?.setFieldValue('code', code); - } catch (error) { - console.error(error); - } - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_TEAM_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/cal/team/modules/form.vue b/apps/web-antd/src/views/mes/cal/team/modules/form.vue index 4f4128b48..2406bcd43 100644 --- a/apps/web-antd/src/views/mes/cal/team/modules/form.vue +++ b/apps/web-antd/src/views/mes/cal/team/modules/form.vue @@ -45,9 +45,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -/** 表单 schema 需要 formApi 引用,所以通过 setState 设置 schema */ -formApi.setState({ schema: useFormSchema(formApi) }); - const [Modal, modalApi] = useVbenModal({ async onConfirm() { if (isDetail.value) { @@ -82,11 +79,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); subTabsName.value = 'member'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); formApi.setDisabled(formType.value === 'detail'); modalApi.setState({ showConfirmButton: formType.value !== 'detail' }); if (!data?.id) { diff --git a/apps/web-antd/src/views/mes/dv/checkplan/components/dv-check-plan-select.vue b/apps/web-antd/src/views/mes/dv/checkplan/components/dv-check-plan-select.vue deleted file mode 100644 index 1c3ab50e8..000000000 --- a/apps/web-antd/src/views/mes/dv/checkplan/components/dv-check-plan-select.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - diff --git a/apps/web-antd/src/views/mes/dv/checkplan/components/index.ts b/apps/web-antd/src/views/mes/dv/checkplan/components/index.ts index 379957e07..87010bda0 100644 --- a/apps/web-antd/src/views/mes/dv/checkplan/components/index.ts +++ b/apps/web-antd/src/views/mes/dv/checkplan/components/index.ts @@ -1 +1,2 @@ -export { default as DvCheckPlanSelect } from './dv-check-plan-select.vue'; +export { default as DvCheckPlanSelectDialog } from './select-dialog.vue'; +export { default as DvCheckPlanSelect } from './select.vue'; diff --git a/apps/web-antd/src/views/mes/dv/checkplan/components/select-dialog.vue b/apps/web-antd/src/views/mes/dv/checkplan/components/select-dialog.vue new file mode 100644 index 000000000..2a25af0a6 --- /dev/null +++ b/apps/web-antd/src/views/mes/dv/checkplan/components/select-dialog.vue @@ -0,0 +1,215 @@ + + + diff --git a/apps/web-antd/src/views/mes/dv/checkplan/components/select.vue b/apps/web-antd/src/views/mes/dv/checkplan/components/select.vue new file mode 100644 index 000000000..07e71de90 --- /dev/null +++ b/apps/web-antd/src/views/mes/dv/checkplan/components/select.vue @@ -0,0 +1,152 @@ + + + diff --git a/apps/web-antd/src/views/mes/dv/checkplan/data.ts b/apps/web-antd/src/views/mes/dv/checkplan/data.ts index 6c2b9ad0b..ef7e5d640 100644 --- a/apps/web-antd/src/views/mes/dv/checkplan/data.ts +++ b/apps/web-antd/src/views/mes/dv/checkplan/data.ts @@ -4,7 +4,7 @@ import type { MesDvCheckPlanApi } from '#/api/mes/dv/checkplan'; import { h } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesAutoCodeRuleCode, MesDvCheckPlanStatusEnum, MesDvSubjectTypeEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { Button } from 'ant-design-vue'; @@ -12,17 +12,15 @@ import { Button } from 'ant-design-vue'; import { z } from '#/adapter/form'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; import { getRangePickerDefaultProps } from '#/utils'; -import { - MesAutoCodeRuleCode, - MesDvCheckPlanStatusEnum, - MesDvSubjectTypeEnum, -} from '#/views/mes/utils/constants'; /** 表单类型 */ export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改点检保养方案的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -49,22 +47,21 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入方案编码', }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - try { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_CHECK_PLAN_CODE); - await formApi?.setFieldValue('code', code); - } catch (error) { - console.error(error); - } - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.DV_CHECK_PLAN_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', @@ -248,3 +245,68 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: multiple ? 'checkbox' : 'radio', width: 50 }, + { field: 'code', title: '计划编码', minWidth: 180 }, + { field: 'name', title: '计划名称', minWidth: 150 }, + { + field: 'type', + title: '计划类型', + width: 120, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.MES_DV_SUBJECT_TYPE }, + }, + }, + { field: 'startDate', title: '开始日期', width: 120, formatter: 'formatDate' }, + { field: 'endDate', title: '结束日期', width: 120, formatter: 'formatDate' }, + { field: 'cycleCount', title: '频率', width: 100 }, + { + field: 'cycleType', + title: '周期类型', + width: 120, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.MES_DV_CYCLE_TYPE }, + }, + }, + { + field: 'status', + title: '状态', + width: 100, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.MES_DV_CHECK_PLAN_STATUS }, + }, + }, + ]; +} diff --git a/apps/web-antd/src/views/mes/dv/checkplan/index.vue b/apps/web-antd/src/views/mes/dv/checkplan/index.vue index f20a5d5ac..51a29a5aa 100644 --- a/apps/web-antd/src/views/mes/dv/checkplan/index.vue +++ b/apps/web-antd/src/views/mes/dv/checkplan/index.vue @@ -4,6 +4,7 @@ import type { MesDvCheckPlanApi } from '#/api/mes/dv/checkplan'; import type { ActionItem } from '#/components/table-action/typing'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; +import { MesDvCheckPlanStatusEnum } from '@vben/constants'; import { downloadFileFromBlobPart } from '@vben/utils'; import { Button, message } from 'ant-design-vue'; @@ -17,7 +18,6 @@ import { getCheckPlanPage, } from '#/api/mes/dv/checkplan'; import { $t } from '#/locales'; -import { MesDvCheckPlanStatusEnum } from '#/views/mes/utils/constants'; import { useGridColumns, useGridFormSchema } from './data'; import Form from './modules/form.vue'; diff --git a/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue b/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue index 3277e9f77..391ab971d 100644 --- a/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue @@ -6,13 +6,13 @@ import type { MesDvCheckPlanApi } from '#/api/mes/dv/checkplan'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; +import { MesDvCheckPlanStatusEnum } from '@vben/constants'; import { message, Tabs } from 'ant-design-vue'; import { useVbenForm } from '#/adapter/form'; import { createCheckPlan, getCheckPlan, updateCheckPlan } from '#/api/mes/dv/checkplan'; import { $t } from '#/locales'; -import { MesDvCheckPlanStatusEnum } from '#/views/mes/utils/constants'; import { useFormSchema } from '../data'; import MachineryList from './machinery-list.vue'; @@ -44,9 +44,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -/** 表单 schema 需要 formApi 引用,所以通过 setState 设置 schema */ -formApi.setState({ schema: useFormSchema(formApi) }); - const [Modal, modalApi] = useVbenModal({ async onConfirm() { if (isDetail.value) { @@ -81,11 +78,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); subTabsName.value = 'machinery'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); formApi.setDisabled(formType.value === 'detail'); modalApi.setState({ showConfirmButton: formType.value !== 'detail' }); if (!data?.id) { diff --git a/apps/web-antd/src/views/mes/dv/checkrecord/data.ts b/apps/web-antd/src/views/mes/dv/checkrecord/data.ts index fce03470a..abb9ac626 100644 --- a/apps/web-antd/src/views/mes/dv/checkrecord/data.ts +++ b/apps/web-antd/src/views/mes/dv/checkrecord/data.ts @@ -4,18 +4,13 @@ import type { MesDvCheckRecordApi } from '#/api/mes/dv/checkrecord'; import { markRaw } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesDvCheckPlanStatusEnum, MesDvCheckRecordStatusEnum, MesDvSubjectTypeEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { getSimpleUserList } from '#/api/system/user'; import { getRangePickerDefaultProps } from '#/utils'; import { DvCheckPlanSelect } from '#/views/mes/dv/checkplan/components'; import { DvMachinerySelect } from '#/views/mes/dv/machinery/components'; -import { - MesDvCheckPlanStatusEnum, - MesDvCheckRecordStatusEnum, - MesDvSubjectTypeEnum, -} from '#/views/mes/utils/constants'; /** 表单类型 */ export type FormType = 'create' | 'detail' | 'update'; @@ -58,7 +53,6 @@ export function useFormSchema(): VbenFormSchema[] { type: MesDvSubjectTypeEnum.CHECK, placeholder: '请选择计划', }, - rules: 'selectRequired', }, { fieldName: 'userId', @@ -71,7 +65,6 @@ export function useFormSchema(): VbenFormSchema[] { placeholder: '请选择点检人', valueField: 'id', }, - rules: 'selectRequired', }, { fieldName: 'checkTime', diff --git a/apps/web-antd/src/views/mes/dv/checkrecord/index.vue b/apps/web-antd/src/views/mes/dv/checkrecord/index.vue index 0e5346ac7..1bc821568 100644 --- a/apps/web-antd/src/views/mes/dv/checkrecord/index.vue +++ b/apps/web-antd/src/views/mes/dv/checkrecord/index.vue @@ -3,6 +3,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { MesDvCheckRecordApi } from '#/api/mes/dv/checkrecord'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; +import { MesDvCheckRecordStatusEnum } from '@vben/constants'; import { downloadFileFromBlobPart } from '@vben/utils'; import { Button, message } from 'ant-design-vue'; @@ -10,7 +11,6 @@ import { Button, message } from 'ant-design-vue'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteCheckRecord, exportCheckRecord, getCheckRecordPage } from '#/api/mes/dv/checkrecord'; import { $t } from '#/locales'; -import { MesDvCheckRecordStatusEnum } from '#/views/mes/utils/constants'; import { useGridColumns, useGridFormSchema } from './data'; import Form from './modules/form.vue'; diff --git a/apps/web-antd/src/views/mes/dv/checkrecord/modules/form.vue b/apps/web-antd/src/views/mes/dv/checkrecord/modules/form.vue index 95c7aa8de..1e60dead1 100644 --- a/apps/web-antd/src/views/mes/dv/checkrecord/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/checkrecord/modules/form.vue @@ -6,6 +6,7 @@ import type { MesDvCheckRecordApi } from '#/api/mes/dv/checkrecord'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; +import { MesDvCheckRecordStatusEnum } from '@vben/constants'; import { Button, message, Popconfirm } from 'ant-design-vue'; @@ -17,7 +18,6 @@ import { updateCheckRecord, } from '#/api/mes/dv/checkrecord'; import { $t } from '#/locales'; -import { MesDvCheckRecordStatusEnum } from '#/views/mes/utils/constants'; import { useFormSchema } from '../data'; import LineList from './line-list.vue'; @@ -103,7 +103,6 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; diff --git a/apps/web-antd/src/views/mes/dv/checkrecord/modules/line-list.vue b/apps/web-antd/src/views/mes/dv/checkrecord/modules/line-list.vue index 467077d99..3b77b79fd 100644 --- a/apps/web-antd/src/views/mes/dv/checkrecord/modules/line-list.vue +++ b/apps/web-antd/src/views/mes/dv/checkrecord/modules/line-list.vue @@ -4,7 +4,7 @@ import type { MesDvCheckRecordLineApi } from '#/api/mes/dv/checkrecord/line'; import { computed, ref, watch } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesDvCheckResultEnum, MesDvSubjectTypeEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { message, Modal } from 'ant-design-vue'; @@ -20,7 +20,6 @@ import { } from '#/api/mes/dv/checkrecord/line'; import { $t } from '#/locales'; import { DvSubjectSelect } from '#/views/mes/dv/subject/components'; -import { MesDvCheckResultEnum, MesDvSubjectTypeEnum } from '#/views/mes/utils/constants'; const props = defineProps<{ disabled?: boolean; recordId: number }>(); const formOpen = ref(false); diff --git a/apps/web-antd/src/views/mes/dv/machinery/components/dv-machinery-select.vue b/apps/web-antd/src/views/mes/dv/machinery/components/dv-machinery-select.vue deleted file mode 100644 index ea9b543c8..000000000 --- a/apps/web-antd/src/views/mes/dv/machinery/components/dv-machinery-select.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - diff --git a/apps/web-antd/src/views/mes/dv/machinery/components/index.ts b/apps/web-antd/src/views/mes/dv/machinery/components/index.ts index cbe225de1..b3d061fac 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/components/index.ts +++ b/apps/web-antd/src/views/mes/dv/machinery/components/index.ts @@ -1 +1,2 @@ -export { default as DvMachinerySelect } from './dv-machinery-select.vue'; +export { default as DvMachinerySelectDialog } from './select-dialog.vue'; +export { default as DvMachinerySelect } from './select.vue'; diff --git a/apps/web-antd/src/views/mes/dv/machinery/components/select-dialog.vue b/apps/web-antd/src/views/mes/dv/machinery/components/select-dialog.vue new file mode 100644 index 000000000..86d0f34a2 --- /dev/null +++ b/apps/web-antd/src/views/mes/dv/machinery/components/select-dialog.vue @@ -0,0 +1,225 @@ + + + diff --git a/apps/web-antd/src/views/mes/dv/machinery/components/select.vue b/apps/web-antd/src/views/mes/dv/machinery/components/select.vue new file mode 100644 index 000000000..5104e9771 --- /dev/null +++ b/apps/web-antd/src/views/mes/dv/machinery/components/select.vue @@ -0,0 +1,138 @@ + + + diff --git a/apps/web-antd/src/views/mes/dv/machinery/data.ts b/apps/web-antd/src/views/mes/dv/machinery/data.ts index 27cfbe5dc..a0e08b633 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/data.ts +++ b/apps/web-antd/src/views/mes/dv/machinery/data.ts @@ -4,7 +4,7 @@ import type { MesDvMachineryApi } from '#/api/mes/dv/machinery'; import { h, markRaw } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesAutoCodeRuleCode, MesDvMachineryStatusEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { Button } from 'ant-design-vue'; @@ -12,7 +12,6 @@ import { Button } from 'ant-design-vue'; import { z } from '#/adapter/form'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; import { MdWorkshopSelect } from '#/views/mes/md/workstation/components'; -import { MesAutoCodeRuleCode, MesDvMachineryStatusEnum } from '#/views/mes/utils/constants'; import { DvMachineryTypeSelect } from './type/components'; @@ -42,22 +41,21 @@ export function useFormSchema(formType: FormType, formApi?: VbenFormApi): VbenFo componentProps: (values) => ({ disabled: !!values.id }), }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - try { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_MACHINERY_CODE); - await formApi?.setFieldValue('code', code); - } catch (error) { - console.error(error); - } - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.DV_MACHINERY_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', @@ -278,3 +276,65 @@ export function useImportFormSchema(): VbenFormSchema[] { }, ]; } + +/** 设备选择弹窗的搜索表单 */ +export function useMachinerySelectGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'code', + label: '设备编码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入设备编码', + }, + }, + { + fieldName: 'name', + label: '设备名称', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入设备名称', + }, + }, + { + fieldName: 'workshopId', + label: '所属车间', + component: markRaw(MdWorkshopSelect), + componentProps: { + allowClear: true, + placeholder: '请选择所属车间', + }, + }, + ]; +} + +/** 设备选择弹窗的字段 */ +export function useMachinerySelectGridColumns( + multiple = false, +): VxeTableGridOptions['columns'] { + return [ + { type: multiple ? 'checkbox' : 'radio', width: 50 }, + { field: 'code', title: '设备编码', width: 120 }, + { field: 'name', title: '设备名称', minWidth: 120 }, + { field: 'brand', title: '品牌', minWidth: 120 }, + { field: 'specification', title: '规格型号', minWidth: 120 }, + { field: 'workshopName', title: '所属车间', width: 120 }, + { + field: 'status', + title: '设备状态', + width: 100, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.MES_DV_MACHINERY_STATUS }, + }, + }, + { + field: 'createTime', + title: '创建时间', + width: 160, + formatter: 'formatDateTime', + }, + ]; +} diff --git a/apps/web-antd/src/views/mes/dv/machinery/modules/form.vue b/apps/web-antd/src/views/mes/dv/machinery/modules/form.vue index b148583a8..3e8d68f1f 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/machinery/modules/form.vue @@ -6,13 +6,13 @@ import type { MesDvMachineryApi } from '#/api/mes/dv/machinery'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; +import { BarcodeBizTypeEnum } from '@vben/constants'; import { Button, message, Tabs } from 'ant-design-vue'; import { useVbenForm } from '#/adapter/form'; import { createMachinery, getMachinery, updateMachinery } from '#/api/mes/dv/machinery'; import { $t } from '#/locales'; -import { BarcodeBizTypeEnum } from '#/views/mes/utils/constants'; import { BarcodeDetail } from '#/views/mes/wm/barcode/components'; import { useFormSchema } from '../data'; @@ -47,9 +47,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -/** 表单 schema 需要 formApi 引用,所以通过 setState 设置 schema */ -formApi.setState({ schema: useFormSchema(formType.value, formApi) }); - /** 查看设备条码 */ function handleBarcode() { if (!formData.value?.id) { @@ -91,7 +88,6 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); subTabsName.value = 'check'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/components/index.ts b/apps/web-antd/src/views/mes/dv/machinery/type/components/index.ts index c4cff7c14..eab3ca005 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/type/components/index.ts +++ b/apps/web-antd/src/views/mes/dv/machinery/type/components/index.ts @@ -1,2 +1,2 @@ -export { default as DvMachineryTypeSelect } from './dv-machinery-type-select.vue'; -export { default as MachineryTypeTree } from './machinery-type-tree.vue'; +export { default as DvMachineryTypeSelect } from './select.vue'; +export { default as MachineryTypeTree } from './tree.vue'; diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/components/dv-machinery-type-select.vue b/apps/web-antd/src/views/mes/dv/machinery/type/components/select.vue similarity index 100% rename from apps/web-antd/src/views/mes/dv/machinery/type/components/dv-machinery-type-select.vue rename to apps/web-antd/src/views/mes/dv/machinery/type/components/select.vue diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/components/machinery-type-tree.vue b/apps/web-antd/src/views/mes/dv/machinery/type/components/tree.vue similarity index 100% rename from apps/web-antd/src/views/mes/dv/machinery/type/components/machinery-type-tree.vue rename to apps/web-antd/src/views/mes/dv/machinery/type/components/tree.vue diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/data.ts b/apps/web-antd/src/views/mes/dv/machinery/type/data.ts index c7342e875..5bdf07bf6 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/type/data.ts +++ b/apps/web-antd/src/views/mes/dv/machinery/type/data.ts @@ -4,7 +4,7 @@ import type { MesDvMachineryTypeApi } from '#/api/mes/dv/machinery/type'; import { h } from 'vue'; -import { CommonStatusEnum, DICT_TYPE } from '@vben/constants'; +import { CommonStatusEnum, DICT_TYPE, MesAutoCodeRuleCode } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { handleTree } from '@vben/utils'; @@ -13,10 +13,15 @@ import { Button } from 'ant-design-vue'; import { z } from '#/adapter/form'; import { getMachineryTypeList } from '#/api/mes/dv/machinery/type'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; -import { MesAutoCodeRuleCode } from '#/views/mes/utils/constants'; + +/** 表单类型 */ +export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改设备类型的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -53,22 +58,23 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入类型编码', }, rules: z.string().min(1, '类型编码不能为空').max(64), - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - try { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_MACHINERY_TYPE_CODE); - await formApi?.setFieldValue('code', code); - } catch (error) { - console.error(error); - } - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode( + MesAutoCodeRuleCode.DV_MACHINERY_TYPE_CODE, + ); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue b/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue index bf17aed85..f88cb4c0f 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue @@ -38,9 +38,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -/** 表单 schema 需要 formApi 引用,所以通过 setState 设置 schema */ -formApi.setState({ schema: useFormSchema(formApi) }); - const [Modal, modalApi] = useVbenModal({ async onConfirm() { const { valid } = await formApi.validate(); @@ -67,9 +64,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); // 加载数据 const data = modalApi.getData(); + formApi.setState({ + schema: useFormSchema(data?.id ? 'update' : 'create', formApi), + }); if (!data || !data.id) { formData.value = data || undefined; if (data) { diff --git a/apps/web-antd/src/views/mes/dv/maintenrecord/data.ts b/apps/web-antd/src/views/mes/dv/maintenrecord/data.ts index 4a7b0e2d4..4a9fbeb42 100644 --- a/apps/web-antd/src/views/mes/dv/maintenrecord/data.ts +++ b/apps/web-antd/src/views/mes/dv/maintenrecord/data.ts @@ -4,18 +4,13 @@ import type { MesDvMaintenRecordApi } from '#/api/mes/dv/maintenrecord'; import { markRaw } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesDvCheckPlanStatusEnum, MesDvMaintenRecordStatusEnum, MesDvSubjectTypeEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { getSimpleUserList } from '#/api/system/user'; import { getRangePickerDefaultProps } from '#/utils'; import { DvCheckPlanSelect } from '#/views/mes/dv/checkplan/components'; import { DvMachinerySelect } from '#/views/mes/dv/machinery/components'; -import { - MesDvCheckPlanStatusEnum, - MesDvMaintenRecordStatusEnum, - MesDvSubjectTypeEnum, -} from '#/views/mes/utils/constants'; /** 表单类型 */ export type FormType = 'create' | 'detail' | 'update'; @@ -58,7 +53,6 @@ export function useFormSchema(): VbenFormSchema[] { type: MesDvSubjectTypeEnum.MAINTENANCE, placeholder: '请选择计划', }, - rules: 'selectRequired', }, { fieldName: 'userId', @@ -71,7 +65,6 @@ export function useFormSchema(): VbenFormSchema[] { placeholder: '请选择保养人', valueField: 'id', }, - rules: 'selectRequired', }, { fieldName: 'maintenTime', diff --git a/apps/web-antd/src/views/mes/dv/maintenrecord/index.vue b/apps/web-antd/src/views/mes/dv/maintenrecord/index.vue index c7940f347..b96762895 100644 --- a/apps/web-antd/src/views/mes/dv/maintenrecord/index.vue +++ b/apps/web-antd/src/views/mes/dv/maintenrecord/index.vue @@ -3,6 +3,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { MesDvMaintenRecordApi } from '#/api/mes/dv/maintenrecord'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; +import { MesDvMaintenRecordStatusEnum } from '@vben/constants'; import { downloadFileFromBlobPart } from '@vben/utils'; import { Button, message } from 'ant-design-vue'; @@ -14,7 +15,6 @@ import { getMaintenRecordPage, } from '#/api/mes/dv/maintenrecord'; import { $t } from '#/locales'; -import { MesDvMaintenRecordStatusEnum } from '#/views/mes/utils/constants'; import { useGridColumns, useGridFormSchema } from './data'; import Form from './modules/form.vue'; diff --git a/apps/web-antd/src/views/mes/dv/maintenrecord/modules/form.vue b/apps/web-antd/src/views/mes/dv/maintenrecord/modules/form.vue index 837f1ef62..172c8814f 100644 --- a/apps/web-antd/src/views/mes/dv/maintenrecord/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/maintenrecord/modules/form.vue @@ -6,6 +6,7 @@ import type { MesDvMaintenRecordApi } from '#/api/mes/dv/maintenrecord'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; +import { MesDvMaintenRecordStatusEnum } from '@vben/constants'; import { useUserStore } from '@vben/stores'; import { Button, message, Popconfirm } from 'ant-design-vue'; @@ -18,7 +19,6 @@ import { updateMaintenRecord, } from '#/api/mes/dv/maintenrecord'; import { $t } from '#/locales'; -import { MesDvMaintenRecordStatusEnum } from '#/views/mes/utils/constants'; import { useFormSchema } from '../data'; import LineList from './line-list.vue'; @@ -110,7 +110,6 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; diff --git a/apps/web-antd/src/views/mes/dv/maintenrecord/modules/line-list.vue b/apps/web-antd/src/views/mes/dv/maintenrecord/modules/line-list.vue index c8969bcb9..9c16b9c74 100644 --- a/apps/web-antd/src/views/mes/dv/maintenrecord/modules/line-list.vue +++ b/apps/web-antd/src/views/mes/dv/maintenrecord/modules/line-list.vue @@ -4,7 +4,7 @@ import type { MesDvMaintenRecordLineApi } from '#/api/mes/dv/maintenrecord/line' import { computed, ref, watch } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesDvMaintenStatusEnum, MesDvSubjectTypeEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { message, Modal } from 'ant-design-vue'; @@ -20,7 +20,6 @@ import { } from '#/api/mes/dv/maintenrecord/line'; import { $t } from '#/locales'; import { DvSubjectSelect } from '#/views/mes/dv/subject/components'; -import { MesDvMaintenStatusEnum, MesDvSubjectTypeEnum } from '#/views/mes/utils/constants'; const props = defineProps<{ disabled?: boolean; recordId: number }>(); const formOpen = ref(false); diff --git a/apps/web-antd/src/views/mes/dv/repair/data.ts b/apps/web-antd/src/views/mes/dv/repair/data.ts index 4bc44e428..a2eaaae1f 100644 --- a/apps/web-antd/src/views/mes/dv/repair/data.ts +++ b/apps/web-antd/src/views/mes/dv/repair/data.ts @@ -4,7 +4,7 @@ import type { MesDvRepairApi } from '#/api/mes/dv/repair'; import { h, markRaw } from 'vue'; -import { DICT_TYPE } from '@vben/constants'; +import { DICT_TYPE, MesAutoCodeRuleCode, MesDvRepairStatusEnum } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { Button } from 'ant-design-vue'; @@ -13,12 +13,20 @@ import { generateAutoCode } from '#/api/mes/md/autocode/record'; import { getSimpleUserList } from '#/api/system/user'; import { getRangePickerDefaultProps } from '#/utils'; import { DvMachinerySelect } from '#/views/mes/dv/machinery/components'; -import { MesAutoCodeRuleCode, MesDvRepairStatusEnum } from '#/views/mes/utils/constants'; /** 表单类型 */ export type FormType = 'confirm' | 'create' | 'detail' | 'finish' | 'update'; +/** 表头是否只读(完成维修、验收、详情态;finishDate 在 confirm 单独放开) */ +function isHeaderReadonly(formType: FormType): boolean { + return ['confirm', 'detail', 'finish'].includes(formType); +} + /** 新增/修改维修工单的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { + const headerReadonly = isHeaderReadonly(formType); return [ { fieldName: 'id', @@ -46,31 +54,30 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { }, dependencies: { triggerFields: ['id'], - componentProps: (values) => ({ disabled: !!values.id }), + componentProps: (values) => ({ disabled: headerReadonly || !!values.id }), }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - try { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_REPAIR_CODE); - await formApi?.setFieldValue('code', code); - } catch (error) { - console.error(error); - } - }, - }, - { default: () => '生成' }, - ), + suffix: headerReadonly + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.DV_REPAIR_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', label: '维修单名称', component: 'Input', componentProps: { + disabled: headerReadonly, placeholder: '请输入维修单名称', }, rules: 'required', @@ -80,6 +87,7 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { label: '设备', component: markRaw(DvMachinerySelect), componentProps: { + disabled: headerReadonly, placeholder: '请选择设备', }, rules: 'selectRequired', @@ -89,6 +97,7 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { label: '报修日期', component: 'DatePicker', componentProps: { + disabled: headerReadonly, format: 'YYYY-MM-DD HH:mm:ss', placeholder: '请选择报修日期', showTime: true, @@ -103,10 +112,18 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { componentProps: { allowClear: true, api: getSimpleUserList, + disabled: true, labelField: 'nickname', placeholder: '请选择维修人', valueField: 'id', }, + // 维修人为待验收(≥APPROVING)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.APPROVING, + }, }, { fieldName: 'finishDate', @@ -118,6 +135,15 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { showTime: true, valueFormat: 'x', }, + // 维修中(≥CONFIRMED)态展示;仅"完成维修"弹窗可编辑并必填,其余态只读回显 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.CONFIRMED, + disabled: formType !== 'confirm', + rules: () => (formType === 'confirm' ? 'required' : null), + }, }, { fieldName: 'confirmUserId', @@ -126,21 +152,37 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { componentProps: { allowClear: true, api: getSimpleUserList, + disabled: true, labelField: 'nickname', placeholder: '请选择验收人', valueField: 'id', }, + // 验收信息为已确认(≥FINISHED)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.FINISHED, + }, }, { fieldName: 'confirmDate', label: '验收日期', component: 'DatePicker', componentProps: { + disabled: true, format: 'YYYY-MM-DD HH:mm:ss', placeholder: '请选择验收日期', showTime: true, valueFormat: 'x', }, + // 验收信息为已确认(≥FINISHED)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.FINISHED, + }, }, { fieldName: 'result', @@ -148,9 +190,17 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { component: 'RadioGroup', componentProps: { buttonStyle: 'solid', + disabled: true, optionType: 'button', options: getDictOptions(DICT_TYPE.MES_DV_REPAIR_RESULT, 'number'), }, + // 验收信息为已确认(≥FINISHED)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.FINISHED, + }, }, { fieldName: 'remark', @@ -158,6 +208,7 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { component: 'Textarea', formItemClass: 'col-span-3', componentProps: { + disabled: headerReadonly, placeholder: '请输入备注', rows: 3, }, diff --git a/apps/web-antd/src/views/mes/dv/repair/index.vue b/apps/web-antd/src/views/mes/dv/repair/index.vue index c66bf2f73..7dbc37d28 100644 --- a/apps/web-antd/src/views/mes/dv/repair/index.vue +++ b/apps/web-antd/src/views/mes/dv/repair/index.vue @@ -3,6 +3,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { MesDvRepairApi } from '#/api/mes/dv/repair'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; +import { MesDvRepairStatusEnum } from '@vben/constants'; import { downloadFileFromBlobPart } from '@vben/utils'; import { Button, message } from 'ant-design-vue'; @@ -10,7 +11,6 @@ import { Button, message } from 'ant-design-vue'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteRepair, exportRepair, getRepairPage } from '#/api/mes/dv/repair'; import { $t } from '#/locales'; -import { MesDvRepairStatusEnum } from '#/views/mes/utils/constants'; import { useGridColumns, useGridFormSchema } from './data'; import Form from './modules/form.vue'; diff --git a/apps/web-antd/src/views/mes/dv/repair/modules/form.vue b/apps/web-antd/src/views/mes/dv/repair/modules/form.vue index ded9ae757..efbe2058b 100644 --- a/apps/web-antd/src/views/mes/dv/repair/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/repair/modules/form.vue @@ -6,6 +6,7 @@ import type { MesDvRepairApi } from '#/api/mes/dv/repair'; import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; +import { MesDvRepairResultEnum, MesDvRepairStatusEnum } from '@vben/constants'; import { Button, message, Popconfirm } from 'ant-design-vue'; @@ -19,7 +20,6 @@ import { updateRepair, } from '#/api/mes/dv/repair'; import { $t } from '#/locales'; -import { MesDvRepairResultEnum, MesDvRepairStatusEnum } from '#/views/mes/utils/constants'; import { useFormSchema } from '../data'; import LineList from './line-list.vue'; @@ -28,20 +28,29 @@ const emit = defineEmits(['success']); const formType = ref('create'); const formData = ref(); const isDetail = computed(() => formType.value === 'detail'); -const isReadonly = computed(() => ['confirm', 'detail', 'finish'].includes(formType.value)); +const isLineReadonly = computed(() => + // 明细只读:完成维修/验收/详情态明细均不可编辑 + ['confirm', 'detail', 'finish'].includes(formType.value), +); +const isFormDisabled = computed(() => + // 整表禁用:仅详情/验收态;完成维修态需放开 finishDate,故单头只读改由 schema 逐字段控制 + ['detail', 'finish'].includes(formType.value), +); const canSubmit = computed( () => formType.value === 'update' && formData.value?.status === MesDvRepairStatusEnum.PREPARE, ); -const getTitle = computed( - () => - ({ - create: '新增维修工单', - update: '修改维修工单', - confirm: '完成维修', - finish: '验收维修', - detail: '查看维修工单', - })[formType.value], -); +const getTitle = computed(() => { + if (formType.value === 'detail') { + return '查看维修工单'; + } + if (formType.value === 'confirm') { + return '完成维修'; + } + if (formType.value === 'finish') { + return '验收维修'; + } + return formType.value === 'update' ? '修改维修工单' : '新增维修工单'; +}); const [Form, formApi] = useVbenForm({ commonConfig: { @@ -57,9 +66,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -/** 表单 schema 需要 formApi 引用,所以通过 setState 设置 schema */ -formApi.setState({ schema: useFormSchema(formApi) }); - /** 提交维修工单 */ async function handleSubmit() { const { valid } = await formApi.validate(); @@ -164,11 +170,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - await formApi.resetForm(); // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; - formApi.setDisabled(isReadonly.value); + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); + formApi.setDisabled(isFormDisabled.value); modalApi.setState({ showConfirmButton: ['create', 'update'].includes(formType.value) }); if (!data?.id) { return; @@ -187,7 +193,7 @@ const [Modal, modalApi] = useVbenModal({