diff --git a/src/api/dms/dmsBillsLubeInstance/types.ts b/src/api/dms/dmsBillsLubeInstance/types.ts index 8edf270..d7a441d 100644 --- a/src/api/dms/dmsBillsLubeInstance/types.ts +++ b/src/api/dms/dmsBillsLubeInstance/types.ts @@ -68,6 +68,12 @@ export interface DmsBillsLubeInstanceVO { * 润滑工单编号 */ planLubeCode: string; + + /** + * 流程定义ID + */ + wfDefinitionId: string | number; + } export interface DmsBillsLubeInstanceForm extends BaseEntity { @@ -150,6 +156,10 @@ export interface DmsBillsLubeInstanceForm extends BaseEntity { createTime?: string; + /** + * 流程定义ID + */ + wfDefinitionId?: string | number; } @@ -228,6 +238,12 @@ export interface DmsBillsLubeInstanceQuery extends PageQuery { createBy?: string; createTime?: string; + + /** + * 流程定义ID + */ + wfDefinitionId?: string | number; + } diff --git a/src/api/mes/baseProcessInfo/types.ts b/src/api/mes/baseProcessInfo/types.ts index 31f7586..f9c6635 100644 --- a/src/api/mes/baseProcessInfo/types.ts +++ b/src/api/mes/baseProcessInfo/types.ts @@ -1,14 +1,11 @@ +import { BaseProcessResourceVO } from "../baseProcessResource/types"; + export interface BaseProcessInfoVO { /** * 主键标识 */ processId: string | number; - /** - * 租户编号 - */ - tenantId: string | number; - /** * 工序编号 */ @@ -25,7 +22,7 @@ export interface BaseProcessInfoVO { processType: string; /** - * 工序顺序 + * 工序顺序(弃用) */ processQueue: number; @@ -34,6 +31,71 @@ export interface BaseProcessInfoVO { */ productionTime: number; + /** + * 车间ID + */ + workshopId: string | number; + + /** + * 委外标识(1自制 2委外) + */ + outsourcingFlag: string; + + /** + * 工序生产类型(1投料 2加工 3装配) + */ + processProductionType: string; + + /** + * 默认产出率(%),公式:合格数/投入数 + */ + defaultYieldRate: number; + + /** + * 损耗率(%),公式:废品/不可修复不良品占比 + */ + lossRate: number; + + /** + * 返修率(%),公式:返修品/投入数 + */ + reworkRate: number; + + /** + * 领料方式(1领料单 2申请领料 3生产叫料) + */ + materialMethod: string; + + /** + * 委外提前期(秒) + */ + leadTime: number; + + /** + * 准备时间(秒) + */ + setupTime: number; + + /** + * 加工时间(秒) + */ + processingTime: number; + + /** + * 拆卸时间(秒) + */ + disassemblyTime: number; + + /** + * 理论生产节拍(秒/件) + */ + theoreticalCycleTime: number; + + /** + * 质检方式(1免检 2自检 3质量检验) + */ + inspectionMethod: string; + /** * 激活标识(1是 0否) */ @@ -98,7 +160,7 @@ export interface BaseProcessInfoForm extends BaseEntity { processType?: string; /** - * 工序顺序 + * 工序顺序(弃用) */ processQueue?: number; @@ -107,6 +169,71 @@ export interface BaseProcessInfoForm extends BaseEntity { */ productionTime?: number; + /** + * 车间ID + */ + workshopId?: string | number; + + /** + * 委外标识(1自制 2委外) + */ + outsourcingFlag?: string; + + /** + * 工序生产类型(1投料 2加工 3装配) + */ + processProductionType?: string; + + /** + * 默认产出率(%),公式:合格数/投入数 + */ + defaultYieldRate?: number; + + /** + * 损耗率(%),公式:废品/不可修复不良品占比 + */ + lossRate?: number; + + /** + * 返修率(%),公式:返修品/投入数 + */ + reworkRate?: number; + + /** + * 领料方式(1领料单 2申请领料 3生产叫料) + */ + materialMethod?: string; + + /** + * 委外提前期(秒) + */ + leadTime?: number; + + /** + * 准备时间(秒) + */ + setupTime?: number; + + /** + * 加工时间(秒) + */ + processingTime?: number; + + /** + * 拆卸时间(秒) + */ + disassemblyTime?: number; + + /** + * 理论生产节拍(秒/件) + */ + theoreticalCycleTime?: number; + + /** + * 质检方式(1免检 2自检 3质量检验) + */ + inspectionMethod?: string; + /** * 激活标识(1是 0否) */ @@ -126,6 +253,7 @@ export interface BaseProcessInfoForm extends BaseEntity { prodBaseProcessUserVoList?: ProdBaseProcessUser[]; prodBaseProcessProdlineBoList?: ProdBaseProcessProdLine[]; prodBaseProcessUserBoList?: ProdBaseProcessUser[]; + prodBaseProcessResourceList?: BaseProcessResourceVO[]; } export interface BaseProcessInfoQuery extends PageQuery { @@ -151,7 +279,7 @@ export interface BaseProcessInfoQuery extends PageQuery { processType?: string; /** - * 工序顺序 + * 工序顺序(弃用) */ processQueue?: number; @@ -160,15 +288,80 @@ export interface BaseProcessInfoQuery extends PageQuery { */ productionTime?: number; + /** + * 车间ID + */ + workshopId?: string | number; + + /** + * 委外标识(1自制 2委外) + */ + outsourcingFlag?: string; + + /** + * 工序生产类型(1投料 2加工 3装配) + */ + processProductionType?: string; + + /** + * 默认产出率(%),公式:合格数/投入数 + */ + defaultYieldRate?: number; + + /** + * 损耗率(%),公式:废品/不可修复不良品占比 + */ + lossRate?: number; + + /** + * 返修率(%),公式:返修品/投入数 + */ + reworkRate?: number; + + /** + * 领料方式(1领料单 2申请领料 3生产叫料) + */ + materialMethod?: string; + + /** + * 委外提前期(秒) + */ + leadTime?: number; + + /** + * 准备时间(秒) + */ + setupTime?: number; + + /** + * 加工时间(秒) + */ + processingTime?: number; + + /** + * 拆卸时间(秒) + */ + disassemblyTime?: number; + + /** + * 理论生产节拍(秒/件) + */ + theoreticalCycleTime?: number; + + /** + * 质检方式(1免检 2自检 3质量检验) + */ + inspectionMethod?: string; + /** * 激活标识(1是 0否) */ activeFlag?: string; - /** - * 日期范围参数 - */ - params?: any; + /** + * 日期范围参数 + */ + params?: any; prodBaseProcessProdlineV0List?: ProdBaseProcessProdLine[]; prodBaseProcessUserV0List?: ProdBaseProcessUser[]; @@ -205,8 +398,6 @@ export interface ProdBaseProcessProdLine { } - - export interface ProdBaseProcessUser { /** * 工序ID diff --git a/src/api/mes/baseProcessResource/types.ts b/src/api/mes/baseProcessResource/types.ts new file mode 100644 index 0000000..e627a89 --- /dev/null +++ b/src/api/mes/baseProcessResource/types.ts @@ -0,0 +1,134 @@ +export interface BaseProcessResourceVO { + /** + * 主键标识 + */ + processResourceId: string | number; + + /** + * 工序ID + */ + processId: string | number; + + /** + * 指派类型(1人员 2班组 3机台 4工位) + */ + assignmentType: string; + + /** + * 载具工装类型 + */ + toolingTypeCode: string; + + /** + * 必选标识(0可选 1必选) + */ + requiredFlag: string; + + /** + * 选择模式(0单选 1多选) + */ + selectionMode: string; + + /** + * 是否需要校验(0否 1是) + */ + requiresValidation: string | number; + + /** + * 是否需要准备任务(0否 1是) + */ + requiresPreparation: string; + + /** + * 备注 + */ + remark: string; +} + +export interface BaseProcessResourceForm extends BaseEntity { + /** + * 主键标识 + */ + processResourceId?: string | number; + + /** + * 指派类型(1人员 2班组 3机台 4工位) + */ + assignmentType?: string; + + /** + * 载具工装类型 + */ + toolingTypeCode?: string; + + /** + * 必选标识(0可选 1必选) + */ + requiredFlag?: string; + + /** + * 选择模式(0单选 1多选) + */ + selectionMode?: string; + + /** + * 是否需要校验(0否 1是) + */ + requiresValidation?: string | number; + + /** + * 是否需要准备任务(0否 1是) + */ + requiresPreparation?: string; + + /** + * 备注 + */ + remark?: string; +} + +export interface BaseProcessResourceQuery extends PageQuery { + + /** + * 主键标识 + */ + processResourceId?: string | number; + + /** + * 指派类型(1人员 2班组 3机台 4工位) + */ + assignmentType?: string; + + /** + * 载具工装类型 + */ + toolingTypeCode?: string; + + /** + * 必选标识(0可选 1必选) + */ + requiredFlag?: string; + + /** + * 选择模式(0单选 1多选) + */ + selectionMode?: string; + + /** + * 是否需要校验(0否 1是) + */ + requiresValidation?: string | number; + + /** + * 是否需要准备任务(0否 1是) + */ + requiresPreparation?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/mes/baseRoute/types.ts b/src/api/mes/baseRoute/types.ts index 0fb39cd..d89841d 100644 --- a/src/api/mes/baseRoute/types.ts +++ b/src/api/mes/baseRoute/types.ts @@ -18,6 +18,28 @@ export interface ProdBaseRouteProcess { index?: number; } +// 定义工艺路线关联物料的接口 +export interface ProdBaseRouteMaterial { + /** 物料ID */ + materialId: string | number; + /** 物料名称 */ + materialName?: string; + /** 激活标识(0否 1是) */ + activeFlag: string; + /** 备注 */ + remark?: string; + /** 创建人 */ + createBy?: number; + /** 创建时间 */ + createTime?: string; + /** 更新人 */ + updateBy?: number; + /** 更新时间 */ + updateTime?: string; + /** 序号(前端使用) */ + index?: number; +} + export interface BaseRouteVO { /** * 工艺路线ID @@ -40,7 +62,7 @@ export interface BaseRouteVO { routeDesc: string; /** - * 激活标识(1是 0否) + * 状态(1待审核 2审核通过 3审核不通过 4发布 5作废) */ activeFlag: string; @@ -81,6 +103,55 @@ export interface BaseRouteVO { routeProcessVoList?: ProdBaseRouteProcess[]; + /** + * 工艺路线关联物料列表 + */ + prodBaseRouteMaterialList?: ProdBaseRouteMaterial[]; + + /** + * 工艺路线版本 + */ + routeVersion: string; + + /** + * 生产类型(1正式 2试制 3返修) + */ + productionType: string; + + /** + * 路线类型(1生产 2装配) + */ + routeType: string; + + /** + * 审核原因 + */ + auditReason: string; + + /** + * 审核人 + */ + approveBy: number; + + /** + * 审核时间 + */ + approveTime: string; + + /** + * 是否需要首件检验(0否 1是) + */ + needFirstInspect: string; + + /** + * 是否打印流转卡(0继承 1是 2否) + */ + printFlowCard: string; + + /** + * 批次量(0=不拆分) + */ + batchSize: number; } export interface BaseRouteForm extends BaseEntity { @@ -100,7 +171,7 @@ export interface BaseRouteForm extends BaseEntity { routeDesc?: string; /** - * 激活标识(1是 0否) + * 状态(1待审核 2审核通过 3审核不通过 4发布 5作废) */ activeFlag?: string; @@ -115,10 +186,59 @@ export interface BaseRouteForm extends BaseEntity { routeProcessBoList?: ProdBaseRouteProcess[]; routeProcessVoList?: ProdBaseRouteProcess[]; + + /** + * 工艺路线关联物料列表 + */ + prodBaseRouteMaterialList?: ProdBaseRouteMaterial[]; + + /** + * 工艺路线版本 + */ + routeVersion?: string; + + /** + * 生产类型(1正式 2试制 3返修) + */ + productionType?: string; + + /** + * 路线类型(1生产 2装配) + */ + routeType?: string; + + /** + * 审核原因 + */ + auditReason?: string; + + /** + * 审核人 + */ + approveBy?: number; + + /** + * 审核时间 + */ + approveTime?: string; + + /** + * 是否需要首件检验(0否 1是) + */ + needFirstInspect?: string; + + /** + * 是否打印流转卡(0继承 1是 2否) + */ + printFlowCard?: string; + + /** + * 批次量(0=不拆分) + */ + batchSize?: number; } export interface BaseRouteQuery extends PageQuery { - /** * 工艺路线ID */ @@ -135,10 +255,55 @@ export interface BaseRouteQuery extends PageQuery { routeDesc?: string; /** - * 激活标识(1是 0否) + * 状态(1待审核 2审核通过 3审核不通过 4发布 5作废) */ activeFlag?: string; + /** + * 工艺路线版本 + */ + routeVersion?: string; + + /** + * 生产类型(1正式 2试制 3返修) + */ + productionType?: string; + + /** + * 路线类型(1生产 2装配) + */ + routeType?: string; + + /** + * 审核原因 + */ + auditReason?: string; + + /** + * 审核人 + */ + approveBy?: number; + + /** + * 审核时间 + */ + approveTime?: string; + + /** + * 是否需要首件检验(0否 1是) + */ + needFirstInspect?: string; + + /** + * 是否打印流转卡(0继承 1是 2否) + */ + printFlowCard?: string; + + /** + * 批次量(0=不拆分) + */ + batchSize?: number; + /** * 日期范围参数 */ diff --git a/src/api/mes/baseRouteMaterial/types.ts b/src/api/mes/baseRouteMaterial/types.ts new file mode 100644 index 0000000..67bb318 --- /dev/null +++ b/src/api/mes/baseRouteMaterial/types.ts @@ -0,0 +1,86 @@ +export interface BaseRouteMaterialVO { + /** + * 关联物料ID + */ + routeMaterialId: string | number; + + /** + * 工艺路线ID + */ + routeId: string | number; + + /** + * 物料ID + */ + materialId: string | number; + + /** + * 激活标识(1是 0否) + */ + activeFlag: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface BaseRouteMaterialForm extends BaseEntity { + /** + * 关联物料ID + */ + routeMaterialId?: string | number; + + /** + * 工艺路线ID + */ + routeId?: string | number; + + /** + * 物料ID + */ + materialId?: string | number; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface BaseRouteMaterialQuery extends PageQuery { + + /** + * 关联物料ID + */ + routeMaterialId?: string | number; + + /** + * 工艺路线ID + */ + routeId?: string | number; + + /** + * 物料ID + */ + materialId?: string | number; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/router/index.ts b/src/router/index.ts index de4867a..104b265 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -346,7 +346,7 @@ export const dynamicRoutes: RouteRecordRaw[] = [ permissions: ['dms:dmsBillsLubeInstance:add'], children: [ { - path: 'index/:lubeInstanceId', + path: 'index', component: () => import('@/views/dms/dmsBillsLubeInstanceActivity/index.vue'), name: 'dmsBillsLubeInstanceActivity', meta: { title: '润滑工单明细', activeMenu: '/dms/dmsBillsLubeInstance', icon: '' } @@ -424,7 +424,38 @@ export const dynamicRoutes: RouteRecordRaw[] = [ meta: { title: '保养工单申请', activeMenu: '/dms/maint/maintEdit', noCache: true } } ] - } + }, + + // { + // path: '/dms/dmsMaintInstanceActivity', + // component: Layout, + // hidden: true, + // permissions: ['dms:dmsBillsMaintInstance:add'], + // children: [ + // { + // path: 'index/:maintInstanceId', + // component: () => import('@/views/dms/dmsMaintInstanceActivity/index.vue'), + // name: 'dmsMaintInstanceActivity', + // meta: { title: '保养工单明细', activeMenu: '/dms/dmsMaintInstanceActivity', icon: '' } + // } + // ] + // }, + // + // { + // path: '/dms/dmsBillsInspectInstanceActivity', + // component: Layout, + // hidden: true, + // permissions: ['dms:dmsBillsInspectInstanceActivity:add'], + // children: [ + // { + // path: 'index/:inspctInstanceId', + // component: () => import('@/views/dms/dmsBillsInspectInstanceActivity/index.vue'), + // name: 'dmsBillsInspectInstanceActivity', + // meta: { title: '点巡检工单明细', activeMenu: '/dms/dmsBillsInspectInstanceActivity', icon: '' } + // } + // ] + // }, + ]; diff --git a/src/views/dms/dmsBillsLubeInstance/index.vue b/src/views/dms/dmsBillsLubeInstance/index.vue index 8884c47..53d1e9e 100644 --- a/src/views/dms/dmsBillsLubeInstance/index.vue +++ b/src/views/dms/dmsBillsLubeInstance/index.vue @@ -139,21 +139,36 @@ + + + + @@ -251,6 +266,8 @@ import { listDmsBillsLubeInstance, getDmsBillsLubeInstance, delDmsBillsLubeInstance, addDmsBillsLubeInstance, updateDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance'; import { DmsBillsLubeInstanceVO, DmsBillsLubeInstanceQuery, DmsBillsLubeInstanceForm } from '@/api/dms/dmsBillsLubeInstance/types'; import { useRouter } from 'vue-router'; +import { startWorkFlow } from '@/api/workflow/task' +import SubmitVerify from '@/components/Process/submitVerify.vue' const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { active_flag, lube_level, lube_status } = toRefs(proxy?.useDict('active_flag', 'lube_level', 'lube_status')); @@ -430,11 +447,92 @@ const handleExport = () => { }, `dmsBillsLubeInstance_${new Date().getTime()}.xlsx`) } +/** 详情按钮 */ const router = useRouter(); const handleShowDetail = (row: DmsBillsLubeInstanceVO) => { router.push('/dms/dmsBillsLubeInstanceActivity/index/' + row.lubeInstanceId) } +// 启动工单工作流 +const handleStartWorkflow = async (row: DmsBillsLubeInstanceVO) => { + try { + const confirmResult = await proxy?.$modal.confirm( + `确认启动润滑工单"${row.billsLubeCode}"的工作流?` + ); + + if (confirmResult) { + buttonLoading.value = true; + + // 启动工作流 + const workflowData = { + businessId: row.lubeInstanceId, + flowCode: 'Lube01', + variables: { + lubeInstanceId: row.lubeInstanceId, + billsLubeCode: row.billsLubeCode, + lubeLevel: row.lubeLevel + } + }; + + const workflowRes = await startWorkFlow(workflowData); + + // 更新工单的工作流定义ID + await updateDmsBillsLubeInstance({ + ...row, + wfDefinitionId: workflowRes.data.taskId, + status: 'waiting' + }); + + // 准备第一个节点的任务变量 + taskVariables.value = { + entity: { + lubeInstanceId: row.lubeInstanceId, + lubeLevel: row.lubeLevel, + lubeGroup: row.lubeGroup, + lubeSupervisor: row.lubeSupervisor, + processStepOrder: 1 + } + }; + + proxy?.$modal.msgSuccess('工单工作流启动成功'); + + // 立即打开审批组件处理第一个节点(工单创建) + if (submitVerifyRef.value && workflowRes.data.taskId) { + submitVerifyRef.value.openDialog(workflowRes.data.taskId); + } + } + } catch (error) { + console.error('启动工作流失败:', error); + proxy?.$modal.msgError('启动工作流失败'); + } finally { + buttonLoading.value = false; + } +}; + +// 查看工单进度 +const handleWorkflowProgress = (row: DmsBillsLubeInstanceVO) => { + // 跳转到审批记录查看页面 + router.push({ + path: '/workflow/process/record', + query: { businessId: row.lubeInstanceId } + }); +}; + +const submitVerifyRef = ref>(); +const taskVariables = ref({}); + +// 提交回调 - 处理工作流节点完成后的逻辑 +const submitCallback = async () => { + try { + // 工作流节点处理完成,刷新列表 + await getList(); + proxy?.$modal.msgSuccess('工单创建节点处理完成,工作流已流转到下一步'); + } catch (error) { + console.error('刷新列表失败:', error); + proxy?.$modal.msgError('刷新列表失败'); + } +}; + onMounted(() => { getList(); }); diff --git a/src/views/dms/dmsBillsLubeInstanceActivity/index.vue b/src/views/dms/dmsBillsLubeInstanceActivity/index.vue index 760111e..97989af 100644 --- a/src/views/dms/dmsBillsLubeInstanceActivity/index.vue +++ b/src/views/dms/dmsBillsLubeInstanceActivity/index.vue @@ -1,796 +1,369 @@ - - - - + \ No newline at end of file diff --git a/src/views/mes/baseProcessInfo/index.vue b/src/views/mes/baseProcessInfo/index.vue index 98bc257..6903fd3 100644 --- a/src/views/mes/baseProcessInfo/index.vue +++ b/src/views/mes/baseProcessInfo/index.vue @@ -1,270 +1,539 @@