Merge remote-tracking branch 'origin/master'

master
夜笙歌 12 months ago
commit 34fed01699

@ -1,77 +1,77 @@
// import request from '@/utils/request';
// import { AxiosPromise } from 'axios';
// import { BaseDeviceCategoryVO, BaseDeviceCategoryForm, BaseDeviceCategoryQuery } from '@/api/dms/baseDeviceCategory/types';
//
// /**
// * 查询设备大类信息列表
// * @param query
// * @returns {*}
// */
//
// export const listBaseDeviceCategoryInDMS = (query?: BaseDeviceCategoryQuery): AxiosPromise<BaseDeviceCategoryVO[]> => {
// return request({
// url: '/dms/baseDeviceCategory/list',
// method: 'get',
// params: query
// });
// };
//
// /**
// * 查询设备大类信息详细
// * @param deviceCategoryId
// */
// export const getBaseDeviceCategoryInDMS = (deviceCategoryId: string | number): AxiosPromise<BaseDeviceCategoryVO> => {
// return request({
// url: '/dms/baseDeviceCategory/' + deviceCategoryId,
// method: 'get'
// });
// };
//
// /**
// * 新增设备大类信息
// * @param data
// */
// export const addBaseDeviceCategoryInDMS = (data: BaseDeviceCategoryForm) => {
// return request({
// url: '/dms/baseDeviceCategory',
// method: 'post',
// data: data
// });
// };
//
// /**
// * 修改设备大类信息
// * @param data
// */
// export const updateBaseDeviceCategoryInDMS = (data: BaseDeviceCategoryForm) => {
// return request({
// url: '/dms/baseDeviceCategory',
// method: 'put',
// data: data
// });
// };
//
// /**
// * 删除设备大类信息
// * @param deviceCategoryId
// */
// export const delBaseDeviceCategoryInDMS = (deviceCategoryId: string | number | Array<string | number>) => {
// return request({
// url: '/dms/baseDeviceCategory/' + deviceCategoryId,
// method: 'delete'
// });
// };
//
//
// /**
// * 下拉框查询设备大类信息列表
// * @param query
// * @returns {*}
// */
// export function getBaseDeviceCategoryListInDMS (query) {
// return request({
// url: '/dms/baseDeviceCategory/getBaseDeviceCategoryList',
// method: 'get',
// params: query
// });
// };
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { BaseDeviceCategoryVO, BaseDeviceCategoryForm, BaseDeviceCategoryQuery } from '@/api/dms/baseDeviceCategory/types';
/**
*
* @param query
* @returns {*}
*/
export const listBaseDeviceCategory = (query?: BaseDeviceCategoryQuery): AxiosPromise<BaseDeviceCategoryVO[]> => {
return request({
url: '/dms/baseDeviceCategory/list',
method: 'get',
params: query
});
};
/**
*
* @param deviceCategoryId
*/
export const getBaseDeviceCategory = (deviceCategoryId: string | number): AxiosPromise<BaseDeviceCategoryVO> => {
return request({
url: '/dms/baseDeviceCategory/' + deviceCategoryId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addBaseDeviceCategory = (data: BaseDeviceCategoryForm) => {
return request({
url: '/dms/baseDeviceCategory',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateBaseDeviceCategory = (data: BaseDeviceCategoryForm) => {
return request({
url: '/dms/baseDeviceCategory',
method: 'put',
data: data
});
};
/**
*
* @param deviceCategoryId
*/
export const delBaseDeviceCategory = (deviceCategoryId: string | number | Array<string | number>) => {
return request({
url: '/dms/baseDeviceCategory/' + deviceCategoryId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getBaseDeviceCategoryList (query) {
return request({
url: '/dms/baseDeviceCategory/getBaseDeviceCategoryList',
method: 'get',
params: query
});
};

@ -1,87 +1,87 @@
// import request from '@/utils/request';
// import { AxiosPromise } from 'axios';
// import { BaseDeviceTypeVO, BaseDeviceTypeForm, BaseDeviceTypeQuery } from '@/api/dms/baseDeviceType/types';
//
// /**
// * 查询设备类型信息列表
// * @param query
// * @returns {*}
// */
//
// export const listBaseDeviceTypeInDMS = (query?: BaseDeviceTypeQuery): AxiosPromise<BaseDeviceTypeVO[]> => {
// return request({
// url: '/dms/baseDeviceType/list',
// method: 'get',
// params: query
// });
// };
//
// /**
// * 查询设备类型信息详细
// * @param deviceTypeId
// */
// export const getBaseDeviceTypeInDMS = (deviceTypeId: string | number): AxiosPromise<BaseDeviceTypeVO> => {
// return request({
// url: '/dms/baseDeviceType/' + deviceTypeId,
// method: 'get'
// });
// };
//
// /**
// * 新增设备类型信息
// * @param data
// */
// export const addBaseDeviceTypeInDMS = (data: BaseDeviceTypeForm) => {
// return request({
// url: '/dms/baseDeviceType',
// method: 'post',
// data: data
// });
// };
//
// /**
// * 修改设备类型信息
// * @param data
// */
// export const updateBaseDeviceTypeInDMS = (data: BaseDeviceTypeForm) => {
// return request({
// url: '/dms/baseDeviceType',
// method: 'put',
// data: data
// });
// };
//
// /**
// * 删除设备类型信息
// * @param deviceTypeId
// */
// export const delBaseDeviceTypeInDMS = (deviceTypeId: string | number | Array<string | number>) => {
// return request({
// url: '/dms/baseDeviceType/' + deviceTypeId,
// method: 'delete'
// });
// };
//
//
// /**
// * 下拉框查询设备类型信息列表
// * @param query
// * @returns {*}
// */
// export function getBaseDeviceTypeListInDMS (query) {
// return request({
// url: '/dms/baseDeviceType/getBaseDeviceTypeList',
// method: 'get',
// params: query
// });
// };
//
//
// //根据设备id查询设备类型信息
// export function selectDevicetypeByDeviceId(query) {
// return request({
// url: '/dms/baseDeviceType/selectDevicetypeByDeviceId',
// method: 'get',
// params: query
// })
// };
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { BaseDeviceTypeVO, BaseDeviceTypeForm, BaseDeviceTypeQuery } from '@/api/dms/baseDeviceType/types';
/**
*
* @param query
* @returns {*}
*/
export const listBaseDeviceType = (query?: BaseDeviceTypeQuery): AxiosPromise<BaseDeviceTypeVO[]> => {
return request({
url: '/dms/baseDeviceType/list',
method: 'get',
params: query
});
};
/**
*
* @param deviceTypeId
*/
export const getBaseDeviceType = (deviceTypeId: string | number): AxiosPromise<BaseDeviceTypeVO> => {
return request({
url: '/dms/baseDeviceType/' + deviceTypeId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addBaseDeviceType = (data: BaseDeviceTypeForm) => {
return request({
url: '/dms/baseDeviceType',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateBaseDeviceType = (data: BaseDeviceTypeForm) => {
return request({
url: '/dms/baseDeviceType',
method: 'put',
data: data
});
};
/**
*
* @param deviceTypeId
*/
export const delBaseDeviceType = (deviceTypeId: string | number | Array<string | number>) => {
return request({
url: '/dms/baseDeviceType/' + deviceTypeId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getBaseDeviceTypeList (query) {
return request({
url: '/dms/baseDeviceType/getBaseDeviceTypeList',
method: 'get',
params: query
});
};
//根据设备id查询设备类型信息
export function selectDevicetypeByDeviceId(query) {
return request({
url: '/dms/baseDeviceType/selectDevicetypeByDeviceId',
method: 'get',
params: query
})
};

@ -1,9 +1,63 @@
// 定义工艺路线步骤的接口
export interface ProdBaseRouteProcess {
/** 工艺路线步骤ID */
routeProcessId?: number;
/** 工艺路线ID */
routeId?: number;
/** 工序ID */
processId: string | number;
/** 工序名称 */
processName?: string;
/** 工序类型 */
processType?: string;
/** 工序顺序 */
processOrder: string | number;
/** 委外标识 */
outsourcingFlag?: string;
/** 工序类型 */
operationType?: string;
/** 是否需要上料 */
needFeeding?: string;
/** 设备点检 */
needEquipmentCheck?: string;
/** 实际产出率 */
actualYieldRate?: number;
/** 领料方式 */
materialIssuance?: string;
/** 委外提前期 */
outsourcingLeadTime?: number;
/** 准备时间 */
setupTime?: number;
/** 加工时间 */
processingTime?: number;
/** 拆卸时间 */
teardownTime?: number;
/** 生产节拍 */
productionTakt?: number;
/** 质检方式 */
inspectionMethod?: string;
/** 质量检验规则ID */
qualityRuleId?: string;
/** 关键工序 */
isKeyOperation?: string;
/** 下工序要求 */
nextStepRequirement?: string;
/** 最后工序 */
isFinalStep?: string;
/** 生成流转卡任务 */
generatePrepareTask?: string;
/** 瓶颈工序 */
bottleneckFlag?: string;
/** 瓶颈设置 */
bottleneckSetting?: string;
/** 接续关系 */
successorRelation?: string;
/** 偏置时间 */
offsetTime?: number;
/** 技术附件 */
techAttachments?: string;
/** 质检员 */
inspectors?: string;
/** 备注 */
remark?: string;
/** 创建人 */

@ -4,11 +4,6 @@ export interface BaseShiftInfoVO {
*/
shiftId: string | number;
/**
*
*/
tenantId: string | number;
/**
*
*/
@ -50,29 +45,9 @@ export interface BaseShiftInfoVO {
activeFlag: string;
/**
*
* (2 3)
*/
createDept: number;
/**
*
*/
createBy: number;
/**
*
*/
createTime: string;
/**
*
*/
updateBy: number;
/**
*
*/
updateTime: string;
classType: string;
}
@ -82,11 +57,6 @@ export interface BaseShiftInfoForm extends BaseEntity {
*/
shiftId?: string | number;
/**
*
*/
tenantId?: string | number;
/**
*
*/
@ -128,35 +98,9 @@ export interface BaseShiftInfoForm extends BaseEntity {
activeFlag?: string;
/**
*
* (2 3)
*/
createDept?: number;
/**
*
*/
createBy?: number;
/**
*
*/
createTime?: string;
/**
*
*/
updateBy?: number;
/**
*
*/
updateTime?: string;
productionTimeDays?: number;
productionTimeHours?: number;
productionTimeMinutes?: number;
classType?: string;
}
@ -167,11 +111,6 @@ export interface BaseShiftInfoQuery extends PageQuery {
*/
shiftId?: string | number;
/**
*
*/
tenantId?: string | number;
/**
*
*/
@ -213,34 +152,14 @@ export interface BaseShiftInfoQuery extends PageQuery {
activeFlag?: string;
/**
*
* (2 3)
*/
createDept?: number;
classType?: string;
/**
*
*
*/
createBy?: number;
/**
*
*/
createTime?: string;
/**
*
*/
updateBy?: number;
/**
*
*/
updateTime?: string;
/**
*
*/
params?: any;
params?: any;
}

@ -132,6 +132,7 @@ export interface BaseToolingInfoForm extends BaseEntity {
*/
weight?: number;
/**
*
*/
@ -142,6 +143,7 @@ export interface BaseToolingInfoForm extends BaseEntity {
*/
activeFlag?: string;
toolingTypeId?: number;
}
export interface BaseToolingInfoQuery extends PageQuery {

@ -335,15 +335,6 @@ export interface PlanInfoForm extends BaseEntity {
materialBoMName?: string | number;
materialIdL?: string | number;
materialNameL?: string | number;
materialIdR?: string | number;
materialNameR?: string | number;
materialBoMIdL?: string | number;
materialBoMNameL?: string | number;
materialBoMIdR?: string | number;
materialBoMNameR?: string | number;
/**
* id
*/
@ -356,6 +347,24 @@ export interface PlanInfoForm extends BaseEntity {
materialName?: string;
// 业务临时字段补充,便于 index.vue 类型推断
planAmount1?: number;
planAmount2?: number;
planAmount3?: number;
planAmount4?: number;
planAmount5?: number;
planAmount6?: number;
materialIdL?: string | number;
materialNameL?: string;
materialIdR?: string | number;
materialNameR?: string;
materialBomVersion?: string;
materialBomVersionL?: string;
materialBomVersionR?: string;
materialBoMNameL?: string;
materialBoMNameR?: string;
materialBoMIdL?: string | number;
materialBoMIdR?: string | number;
}
export interface PlanInfoQuery extends PageQuery {
@ -520,6 +529,7 @@ export interface PlanInfoQuery extends PageQuery {
*/
params?: any;
planRangeTime?: [string, string];
/**
*

@ -4,11 +4,6 @@ export interface ProdBaseMachineInfoVO {
*/
machineId: string | number;
/**
*
*/
tenantId: string | number;
/**
*
*/
@ -55,29 +50,64 @@ export interface ProdBaseMachineInfoVO {
remark: string;
/**
*
* ID
*/
createDept: number;
workshopId: string | number;
/**
*
* dms_device_mode
*/
createBy: number;
deviceModeId: string | number;
/**
*
* IP
*/
createTime: string;
machineIp: string;
/**
*
*
*/
updateBy: number;
machinePort: number;
/**
*
*
*/
updateTime: string;
accessProtocol: string;
/**
*
*/
registerAddress: string;
/**
* 1bool2short3int4long5float6byte7ushort8uint9ulong10double11
*/
dataType: string;
/**
*
*/
dataLength: number;
/**
* 1ASCII,2Unicode,3Unicode-big,4UTF-8,5UTF-32,6ANSI,7GB2312
*/
dataEncoding: string;
/**
*
*/
requestInterval: number;
/**
* 1 2
*/
instockType: string;
/**
* (2 3)
*/
classType: string;
}
@ -132,7 +162,65 @@ export interface ProdBaseMachineInfoForm extends BaseEntity {
*/
remark?: string;
baseMachineProcessList?: [];
/**
* ID
*/
workshopId?: string | number;
/**
* dms_device_mode
*/
deviceModeId?: string | number;
/**
* IP
*/
machineIp?: string;
/**
*
*/
machinePort?: number;
/**
*
*/
accessProtocol?: string;
/**
*
*/
registerAddress?: string;
/**
* 1bool2short3int4long5float6byte7ushort8uint9ulong10double11
*/
dataType?: string;
/**
*
*/
dataLength?: number;
/**
* 1ASCII,2Unicode,3Unicode-big,4UTF-8,5UTF-32,6ANSI,7GB2312
*/
dataEncoding?: string;
/**
*
*/
requestInterval?: number;
/**
* 1 2
*/
instockType?: string;
/**
* (2 3)
*/
classType?: string;
}
@ -183,10 +271,70 @@ export interface ProdBaseMachineInfoQuery extends PageQuery {
*/
machineStatus?: string;
/**
*
*/
params?: any;
/**
* ID
*/
workshopId?: string | number;
/**
* dms_device_mode
*/
deviceModeId?: string | number;
/**
* IP
*/
machineIp?: string;
/**
*
*/
machinePort?: number;
/**
*
*/
accessProtocol?: string;
/**
*
*/
registerAddress?: string;
/**
* 1bool2short3int4long5float6byte7ushort8uint9ulong10double11
*/
dataType?: string;
/**
*
*/
dataLength?: number;
/**
* 1ASCII,2Unicode,3Unicode-big,4UTF-8,5UTF-32,6ANSI,7GB2312
*/
dataEncoding?: string;
/**
*
*/
requestInterval?: number;
/**
* 1 2
*/
instockType?: string;
/**
* (2 3)
*/
classType?: string;
/**
*
*/
params?: any;
}

@ -0,0 +1,77 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ToolingTypeVO, ToolingTypeForm, ToolingTypeQuery } from '@/api/mes/toolingType/types';
/**
*
* @param query
* @returns {*}
*/
export const listToolingType = (query?: ToolingTypeQuery): AxiosPromise<ToolingTypeVO[]> => {
return request({
url: '/mes/toolingType/list',
method: 'get',
params: query
});
};
/**
*
* @param toolingTypeId
*/
export const getToolingType = (toolingTypeId: string | number): AxiosPromise<ToolingTypeVO> => {
return request({
url: '/mes/toolingType/' + toolingTypeId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addToolingType = (data: ToolingTypeForm) => {
return request({
url: '/mes/toolingType',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateToolingType = (data: ToolingTypeForm) => {
return request({
url: '/mes/toolingType',
method: 'put',
data: data
});
};
/**
*
* @param toolingTypeId
*/
export const delToolingType = (toolingTypeId: string | number | Array<string | number>) => {
return request({
url: '/mes/toolingType/' + toolingTypeId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getBaseToolingTypeList (query) {
return request({
url: '/mes/toolingType/getBaseToolingTypeList',
method: 'get',
params: query
});
};

@ -0,0 +1,129 @@
export interface ToolingTypeVO {
/**
*
*/
toolingTypeId: string | number;
/**
*
*/
toolingTypeCode: string;
/**
*
*/
toolingTypeName: string;
/**
*
*/
toolingSpecCode: string;
/**
* 使/
*/
standardLife: number;
/**
* (kg)
*/
standardWeight: number;
/**
*
*/
remark: string;
/**
*
*/
typeRelationList?: any[];
}
export interface ToolingTypeForm extends BaseEntity {
/**
*
*/
toolingTypeId?: string | number;
/**
*
*/
toolingTypeCode?: string;
/**
*
*/
toolingTypeName?: string;
/**
*
*/
toolingSpecCode?: string;
/**
* 使/
*/
standardLife?: number;
/**
* (kg)
*/
standardWeight?: number;
/**
*
*/
remark?: string;
/**
*
*/
typeRelationList?: any[];
/**
*
*/
processList?: any[];
}
export interface ToolingTypeQuery extends PageQuery {
/**
*
*/
toolingTypeId?: string | number;
/**
*
*/
toolingTypeCode?: string;
/**
*
*/
toolingTypeName?: string;
/**
*
*/
toolingSpecCode?: string;
/**
* 使/
*/
standardLife?: number;
/**
* (kg)
*/
standardWeight?: number;
/**
*
*/
params?: any;
}

@ -0,0 +1,77 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ToolingTypeRelationVO, ToolingTypeRelationForm, ToolingTypeRelationQuery } from '@/api/mes/toolingTypeRelation/types';
/**
*
* @param query
* @returns {*}
*/
export const listToolingTypeRelation = (query?: ToolingTypeRelationQuery): AxiosPromise<ToolingTypeRelationVO[]> => {
return request({
url: '/mes/toolingTypeRelation/list',
method: 'get',
params: query
});
};
/**
*
* @param relationId
*/
export const getToolingTypeRelation = (relationId: string | number): AxiosPromise<ToolingTypeRelationVO> => {
return request({
url: '/mes/toolingTypeRelation/' + relationId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addToolingTypeRelation = (data: ToolingTypeRelationForm) => {
return request({
url: '/mes/toolingTypeRelation',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateToolingTypeRelation = (data: ToolingTypeRelationForm) => {
return request({
url: '/mes/toolingTypeRelation',
method: 'put',
data: data
});
};
/**
*
* @param relationId
*/
export const delToolingTypeRelation = (relationId: string | number | Array<string | number>) => {
return request({
url: '/mes/toolingTypeRelation/' + relationId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getBaseToolingTypeRelationList (query) {
return request({
url: '/mes/toolingTypeRelation/getBaseToolingTypeRelationList',
method: 'get',
params: query
});
};

@ -0,0 +1,76 @@
export interface ToolingTypeRelationVO {
/**
*
*/
relationId: string | number;
/**
* ID
*/
toolingTypeId: string | number;
/**
* (1 2)
*/
relationInfoType: string;
/**
* ID
*/
relationInfoId: string | number;
}
export interface ToolingTypeRelationForm extends BaseEntity {
/**
*
*/
relationId?: string | number;
/**
* ID
*/
toolingTypeId?: string | number;
/**
* (1 2)
*/
relationInfoType?: string;
/**
* ID
*/
relationInfoId?: string | number;
}
export interface ToolingTypeRelationQuery extends PageQuery {
/**
*
*/
relationId?: string | number;
/**
* ID
*/
toolingTypeId?: string | number;
/**
* (1 2)
*/
relationInfoType?: string;
/**
* ID
*/
relationInfoId?: string | number;
/**
*
*/
params?: any;
}

@ -1,283 +1,284 @@
<!--<template>-->
<!-- <div class="p-2">-->
<!-- <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">-->
<!-- <div v-show="showSearch" class="mb-[10px]">-->
<!-- <el-card shadow="hover">-->
<!-- <el-form ref="queryFormRef" :model="queryParams" :inline="true">-->
<!-- &lt;!&ndash; <el-form-item label="大类ID" prop="deviceCategoryId">-->
<!-- <el-input v-model="queryParams.deviceCategoryId" placeholder="请输入大类ID" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-form-item label="大类编号" prop="deviceCategoryCode">-->
<!-- <el-input v-model="queryParams.deviceCategoryCode" placeholder="请输入大类编号" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="大类名称" prop="deviceCategoryName">-->
<!-- <el-input v-model="queryParams.deviceCategoryName" placeholder="请输入大类名称" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- &lt;!&ndash; <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-input v-model="queryParams.activeFlag" placeholder="请输入激活标识" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-select v-model="queryParams.activeFlag" placeholder="请选择激活标识" clearable >-->
<!-- <el-option v-for="dict in active_flag" :key="dict.value" :label="dict.label" :value="dict.value"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" icon="Search" @click="handleQuery"></el-button>-->
<!-- <el-button icon="Refresh" @click="resetQuery"></el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-card>-->
<!-- </div>-->
<!-- </transition>-->
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<!-- <el-form-item label="大类ID" prop="deviceCategoryId">
<el-input v-model="queryParams.deviceCategoryId" placeholder="请输入大类ID" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<!-- <el-form-item label="大类编号" prop="deviceCategoryCode">
<el-input v-model="queryParams.deviceCategoryCode" placeholder="请输入大类编号" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<el-form-item label="大类名称" prop="deviceCategoryName">
<el-input v-model="queryParams.deviceCategoryName" placeholder="请输入大类名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="queryParams.activeFlag" placeholder="请输入激活标识" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<el-form-item label="激活标识" prop="activeFlag">
<el-select v-model="queryParams.activeFlag" placeholder="请选择激活标识" clearable >
<el-option v-for="dict in active_flag" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<!-- <el-card shadow="never">-->
<!-- <template #header>-->
<!-- <el-row :gutter="10" class="mb8">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dms:baseDeviceCategory:add']"></el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['dms:baseDeviceCategory:edit']"></el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:baseDeviceCategory:remove']"></el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:baseDeviceCategory:export']"></el-button>-->
<!-- </el-col>-->
<!-- <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>-->
<!-- </el-row>-->
<!-- </template>-->
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dms:baseDeviceCategory:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['dms:baseDeviceCategory:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:baseDeviceCategory:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:baseDeviceCategory:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<!-- <el-table v-loading="loading" :data="baseDeviceCategoryList" @selection-change="handleSelectionChange">-->
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="大类ID" align="center" prop="deviceCategoryId" v-if="columns[0].visible"/>-->
<!-- <el-table-column label="大类编号" align="center" prop="deviceCategoryCode" v-if="columns[2].visible"/>-->
<!-- <el-table-column label="大类名称" align="center" prop="deviceCategoryName" v-if="columns[3].visible"/>-->
<!-- &lt;!&ndash; <el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[4].visible"/>&ndash;&gt;-->
<!-- <el-table-column label="激活标识" align="center" prop="activeFlag">-->
<!-- <template #default="scope">-->
<!-- <dict-tag :options="active_flag" :value="scope.row.activeFlag"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="备注" align="center" prop="remark" v-if="columns[5].visible"/>-->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template #default="scope">-->
<!-- <el-tooltip content="修改" placement="top">-->
<!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:baseDeviceCategory:edit']"></el-button>-->
<!-- </el-tooltip>-->
<!-- <el-tooltip content="删除" placement="top">-->
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:baseDeviceCategory:remove']"></el-button>-->
<!-- </el-tooltip>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<el-table v-loading="loading" :data="baseDeviceCategoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="大类ID" align="center" prop="deviceCategoryId" v-if="columns[0].visible"/>
<el-table-column label="大类编号" align="center" prop="deviceCategoryCode" v-if="columns[2].visible"/>
<el-table-column label="大类名称" align="center" prop="deviceCategoryName" v-if="columns[3].visible"/>
<!-- <el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[4].visible"/>-->
<el-table-column label="激活标识" align="center" prop="activeFlag">
<template #default="scope">
<dict-tag :options="active_flag" :value="scope.row.activeFlag"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[5].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:baseDeviceCategory:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:baseDeviceCategory:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />-->
<!-- </el-card>-->
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- &lt;!&ndash; 添加或修改设备大类信息对话框 &ndash;&gt;-->
<!-- <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>-->
<!-- <el-form ref="baseDeviceCategoryFormRef" :model="form" :rules="rules" label-width="80px">-->
<!-- <el-form-item label="大类编号" prop="deviceCategoryCode">-->
<!-- <el-input v-model="form.deviceCategoryCode" placeholder="请输入大类编号" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="大类名称" prop="deviceCategoryName">-->
<!-- <el-input v-model="form.deviceCategoryName" placeholder="请输入大类名称" />-->
<!-- </el-form-item>-->
<!-- &lt;!&ndash; <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-input v-model="form.activeFlag" placeholder="请输入激活标识" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-radio-group v-model="form.activeFlag">-->
<!-- <el-radio-->
<!-- v-for="dict in active_flag"-->
<!-- :key="dict.value"-->
<!-- :value="dict.value"-->
<!-- >{{dict.label}}</el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="备注" prop="remark">-->
<!-- <el-input v-model="form.remark" placeholder="请输入备注" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
<!-- <el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>-->
<!-- <el-button @click="cancel"> </el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-dialog>-->
<!-- </div>-->
<!--</template>-->
<!-- 添加或修改设备大类信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="baseDeviceCategoryFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="大类编号" prop="deviceCategoryCode">
<el-input v-model="form.deviceCategoryCode" placeholder="请输入大类编号" />
</el-form-item>
<el-form-item label="大类名称" prop="deviceCategoryName">
<el-input v-model="form.deviceCategoryName" placeholder="请输入大类名称" />
</el-form-item>
<!-- <el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="form.activeFlag" placeholder="请输入激活标识" />
</el-form-item>-->
<el-form-item label="激活标识" prop="activeFlag">
<el-radio-group v-model="form.activeFlag">
<el-radio
v-for="dict in active_flag"
:key="dict.value"
:value="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<!--<script setup name="BaseDeviceCategory" lang="ts">-->
<!--import { listBaseDeviceCategory, getBaseDeviceCategory, delBaseDeviceCategory, addBaseDeviceCategory, updateBaseDeviceCategory } from '@/api/dms/baseDeviceCategory';-->
<!--import { BaseDeviceCategoryVO, BaseDeviceCategoryQuery, BaseDeviceCategoryForm } from '@/api/dms/baseDeviceCategory/types';-->
<script setup name="BaseDeviceCategory" lang="ts">
import { listBaseDeviceCategory, getBaseDeviceCategory, delBaseDeviceCategory, addBaseDeviceCategory, updateBaseDeviceCategory }
from '@/api/dms/baseDeviceCategory/index';
import { BaseDeviceCategoryVO, BaseDeviceCategoryQuery, BaseDeviceCategoryForm } from '@/api/dms/baseDeviceCategory/types';
<!--const { proxy } = getCurrentInstance() as ComponentInternalInstance;-->
<!--const { active_flag } = toRefs<any>(proxy?.useDict('active_flag'));-->
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { active_flag } = toRefs<any>(proxy?.useDict('active_flag'));
<!--const baseDeviceCategoryList = ref<BaseDeviceCategoryVO[]>([]);-->
<!--const buttonLoading = ref(false);-->
<!--const loading = ref(true);-->
<!--const showSearch = ref(true);-->
<!--const ids = ref<Array<string | number>>([]);-->
<!--const single = ref(true);-->
<!--const multiple = ref(true);-->
<!--const total = ref(0);-->
const baseDeviceCategoryList = ref<BaseDeviceCategoryVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
<!--const queryFormRef = ref<ElFormInstance>();-->
<!--const baseDeviceCategoryFormRef = ref<ElFormInstance>();-->
const queryFormRef = ref<ElFormInstance>();
const baseDeviceCategoryFormRef = ref<ElFormInstance>();
<!--const dialog = reactive<DialogOption>({-->
<!-- visible: false,-->
<!-- title: ''-->
<!--});-->
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
<!--// -->
<!--const columns = ref<FieldOption[]>([-->
<!-- { key: 0, label: `大类ID`, visible: false },-->
<!-- { key: 1, label: `租户编号`, visible: false },-->
<!-- { key: 2, label: `大类编号`, visible: true },-->
<!-- { key: 3, label: `大类名称`, visible: true },-->
<!-- { key: 4, label: `激活标识`, visible: true },-->
<!-- { key: 5, label: `备注`, visible: true },-->
<!-- { key: 6, label: `创建部门`, visible: false },-->
<!-- { key: 7, label: `创建人`, visible: false },-->
<!-- { key: 8, label: `创建时间`, visible: false },-->
<!-- { key: 9, label: `更新人`, visible: false },-->
<!-- { key: 10, label: `更新时间`, visible: false },-->
<!--]);-->
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `大类ID`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `大类编号`, visible: true },
{ key: 3, label: `大类名称`, visible: true },
{ key: 4, label: `激活标识`, visible: true },
{ key: 5, label: `备注`, visible: true },
{ key: 6, label: `创建部门`, visible: false },
{ key: 7, label: `创建人`, visible: false },
{ key: 8, label: `创建时间`, visible: false },
{ key: 9, label: `更新人`, visible: false },
{ key: 10, label: `更新时间`, visible: false },
]);
<!--const initFormData: BaseDeviceCategoryForm = {-->
<!-- deviceCategoryId: undefined,-->
<!-- deviceCategoryCode: undefined,-->
<!-- deviceCategoryName: undefined,-->
<!-- activeFlag: '1',-->
<!-- remark: undefined,-->
<!--}-->
<!--const data = reactive<PageData<BaseDeviceCategoryForm, BaseDeviceCategoryQuery>>({-->
<!-- form: {...initFormData},-->
<!-- queryParams: {-->
<!-- pageNum: 1,-->
<!-- pageSize: 10,-->
<!-- deviceCategoryId: undefined,-->
<!-- deviceCategoryCode: undefined,-->
<!-- deviceCategoryName: undefined,-->
<!-- activeFlag: undefined,-->
<!-- params: {-->
<!-- }-->
<!-- },-->
<!-- rules: {-->
<!-- deviceCategoryId: [-->
<!-- { required: true, message: "大类ID不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- deviceCategoryCode: [-->
<!-- { required: true, message: "大类编号不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- deviceCategoryName: [-->
<!-- { required: true, message: "大类名称不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- activeFlag: [-->
<!-- { required: true, message: "激活标识不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- }-->
<!--});-->
const initFormData: BaseDeviceCategoryForm = {
deviceCategoryId: undefined,
deviceCategoryCode: undefined,
deviceCategoryName: undefined,
activeFlag: '1',
remark: undefined,
}
const data = reactive<PageData<BaseDeviceCategoryForm, BaseDeviceCategoryQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
deviceCategoryId: undefined,
deviceCategoryCode: undefined,
deviceCategoryName: undefined,
activeFlag: undefined,
params: {
}
},
rules: {
deviceCategoryId: [
{ required: true, message: "大类ID不能为空", trigger: "blur" }
],
deviceCategoryCode: [
{ required: true, message: "大类编号不能为空", trigger: "blur" }
],
deviceCategoryName: [
{ required: true, message: "大类名称不能为空", trigger: "blur" }
],
activeFlag: [
{ required: true, message: "激活标识不能为空", trigger: "blur" }
],
}
});
<!--const { queryParams, form, rules } = toRefs(data);-->
const { queryParams, form, rules } = toRefs(data);
<!--/** 查询设备大类信息列表 */-->
<!--const getList = async () => {-->
<!-- loading.value = true;-->
<!-- const res = await listBaseDeviceCategory(queryParams.value);-->
<!-- baseDeviceCategoryList.value = res.rows;-->
<!-- total.value = res.total;-->
<!-- loading.value = false;-->
<!--}-->
/** 查询设备大类信息列表 */
const getList = async () => {
loading.value = true;
const res = await listBaseDeviceCategory(queryParams.value);
baseDeviceCategoryList.value = res.rows;
total.value = res.total;
loading.value = false;
}
<!--/** 取消按钮 */-->
<!--const cancel = () => {-->
<!-- reset();-->
<!-- dialog.visible = false;-->
<!--}-->
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
<!--/** 表单重置 */-->
<!--const reset = () => {-->
<!-- form.value = {...initFormData};-->
<!-- baseDeviceCategoryFormRef.value?.resetFields();-->
<!--}-->
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
baseDeviceCategoryFormRef.value?.resetFields();
}
<!--/** 搜索按钮操作 */-->
<!--const handleQuery = () => {-->
<!-- queryParams.value.pageNum = 1;-->
<!-- getList();-->
<!--}-->
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
<!--/** 重置按钮操作 */-->
<!--const resetQuery = () => {-->
<!-- queryFormRef.value?.resetFields();-->
<!-- handleQuery();-->
<!--}-->
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
<!--/** 多选框选中数据 */-->
<!--const handleSelectionChange = (selection: BaseDeviceCategoryVO[]) => {-->
<!-- ids.value = selection.map(item => item.deviceCategoryId);-->
<!-- single.value = selection.length != 1;-->
<!-- multiple.value = !selection.length;-->
<!--}-->
/** 多选框选中数据 */
const handleSelectionChange = (selection: BaseDeviceCategoryVO[]) => {
ids.value = selection.map(item => item.deviceCategoryId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
<!--/** 新增按钮操作 */-->
<!--const handleAdd = () => {-->
<!-- reset();-->
<!-- dialog.visible = true;-->
<!-- dialog.title = "添加设备大类信息";-->
<!--}-->
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加设备大类信息";
}
<!--/** 修改按钮操作 */-->
<!--const handleUpdate = async (row?: BaseDeviceCategoryVO) => {-->
<!-- reset();-->
<!-- const _deviceCategoryId = row?.deviceCategoryId || ids.value[0]-->
<!-- const res = await getBaseDeviceCategory(_deviceCategoryId);-->
<!-- Object.assign(form.value, res.data);-->
<!-- dialog.visible = true;-->
<!-- dialog.title = "修改设备大类信息";-->
<!--}-->
/** 修改按钮操作 */
const handleUpdate = async (row?: BaseDeviceCategoryVO) => {
reset();
const _deviceCategoryId = row?.deviceCategoryId || ids.value[0]
const res = await getBaseDeviceCategory(_deviceCategoryId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改设备大类信息";
}
<!--/** 提交按钮 */-->
<!--const submitForm = () => {-->
<!-- baseDeviceCategoryFormRef.value?.validate(async (valid: boolean) => {-->
<!-- if (valid) {-->
<!-- buttonLoading.value = true;-->
<!-- if (form.value.deviceCategoryId) {-->
<!-- await updateBaseDeviceCategory(form.value).finally(() => buttonLoading.value = false);-->
<!-- } else {-->
<!-- await addBaseDeviceCategory(form.value).finally(() => buttonLoading.value = false);-->
<!-- }-->
<!-- proxy?.$modal.msgSuccess("操作成功");-->
<!-- dialog.visible = false;-->
<!-- await getList();-->
<!-- }-->
<!-- });-->
<!--}-->
/** 提交按钮 */
const submitForm = () => {
baseDeviceCategoryFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.deviceCategoryId) {
await updateBaseDeviceCategory(form.value).finally(() => buttonLoading.value = false);
} else {
await addBaseDeviceCategory(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
<!--/** 删除按钮操作 */-->
<!--const handleDelete = async (row?: BaseDeviceCategoryVO) => {-->
<!-- const _deviceCategoryIds = row?.deviceCategoryId || ids.value;-->
<!-- await proxy?.$modal.confirm('是否确认删除设备大类信息编号为"' + _deviceCategoryIds + '"的数据项?').finally(() => loading.value = false);-->
<!-- await delBaseDeviceCategory(_deviceCategoryIds);-->
<!-- proxy?.$modal.msgSuccess("删除成功");-->
<!-- await getList();-->
<!--}-->
/** 删除按钮操作 */
const handleDelete = async (row?: BaseDeviceCategoryVO) => {
const _deviceCategoryIds = row?.deviceCategoryId || ids.value;
await proxy?.$modal.confirm('是否确认删除设备大类信息编号为"' + _deviceCategoryIds + '"的数据项?').finally(() => loading.value = false);
await delBaseDeviceCategory(_deviceCategoryIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
<!--/** 导出按钮操作 */-->
<!--const handleExport = () => {-->
<!-- proxy?.download('dms/baseDeviceCategory/export', {-->
<!-- ...queryParams.value-->
<!-- }, `baseDeviceCategory_${new Date().getTime()}.xlsx`)-->
<!--}-->
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('dms/baseDeviceCategory/export', {
...queryParams.value
}, `baseDeviceCategory_${new Date().getTime()}.xlsx`)
}
<!--onMounted(() => {-->
<!-- getList();-->
<!--});-->
<!--</script>-->
onMounted(() => {
getList();
});
</script>

@ -1,377 +1,377 @@
<!--<template>-->
<!-- <div class="p-2">-->
<!-- <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">-->
<!-- <div v-show="showSearch" class="mb-[10px]">-->
<!-- <el-card shadow="hover">-->
<!-- <el-form ref="queryFormRef" :model="queryParams" :inline="true">-->
<!--&lt;!&ndash; <el-form-item label="物料类型ID" prop="deviceTypeId">-->
<!-- <el-input v-model="queryParams.deviceTypeId" placeholder="请输入物料类型ID" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!--&lt;!&ndash; <el-form-item label="父级标识" prop="parentId">-->
<!-- <el-input v-model="queryParams.parentId" placeholder="请输入父级标识" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!--&lt;!&ndash; <el-form-item label="设备类型编号" prop="deviceTypeCode">-->
<!-- <el-input v-model="queryParams.deviceTypeCode" placeholder="请输入设备类型编号" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="设备类型名称" prop="deviceTypeName" label-width="100px">-->
<!-- <el-input v-model="queryParams.deviceTypeName" placeholder="请输入设备类型名称" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!--&lt;!&ndash; <el-form-item label="祖级列表" prop="ancestors">-->
<!-- <el-input v-model="queryParams.ancestors" placeholder="请输入祖级列表" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="设备大类ID" prop="categoryId">-->
<!-- <el-input v-model="queryParams.categoryId" placeholder="请输入设备大类ID" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!--&lt;!&ndash; <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-input v-model="queryParams.activeFlag" placeholder="请输入激活标识" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" icon="Search" @click="handleQuery"></el-button>-->
<!-- <el-button icon="Refresh" @click="resetQuery"></el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </el-card>-->
<!-- </div>-->
<!-- </transition>-->
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<!-- <el-form-item label="物料类型ID" prop="deviceTypeId">
<el-input v-model="queryParams.deviceTypeId" placeholder="请输入物料类型ID" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<!-- <el-form-item label="父级标识" prop="parentId">
<el-input v-model="queryParams.parentId" placeholder="请输入父级标识" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<!-- <el-form-item label="设备类型编号" prop="deviceTypeCode">
<el-input v-model="queryParams.deviceTypeCode" placeholder="请输入设备类型编号" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<el-form-item label="设备类型名称" prop="deviceTypeName" label-width="100px">
<el-input v-model="queryParams.deviceTypeName" placeholder="请输入设备类型名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="祖级列表" prop="ancestors">
<el-input v-model="queryParams.ancestors" placeholder="请输入祖级列表" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备大类ID" prop="categoryId">
<el-input v-model="queryParams.categoryId" placeholder="请输入设备大类ID" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<!-- <el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="queryParams.activeFlag" placeholder="请输入激活标识" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<!-- <el-card shadow="never">-->
<!-- <template #header>-->
<!-- <el-row :gutter="10" class="mb8">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dms:baseDeviceType:add']"></el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['dms:baseDeviceType:edit']"></el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:baseDeviceType:remove']"></el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:baseDeviceType:export']"></el-button>-->
<!-- </el-col>-->
<!-- <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>-->
<!-- </el-row>-->
<!-- </template>-->
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dms:baseDeviceType:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['dms:baseDeviceType:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:baseDeviceType:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:baseDeviceType:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<!-- <el-table v-loading="loading" :data="baseDeviceTypeList" @selection-change="handleSelectionChange">-->
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="设备类型" align="center" prop="deviceTypeId" v-if="columns[0].visible"/>-->
<!-- <el-table-column label="父级标识" align="center" prop="parentId" v-if="columns[2].visible"/>-->
<!-- <el-table-column label="设备类型编号" align="center" prop="deviceTypeCode" v-if="columns[3].visible"/>-->
<!-- <el-table-column label="设备类型名称" align="center" prop="deviceTypeName" v-if="columns[4].visible"/>-->
<!-- <el-table-column label="祖级列表" align="center" prop="ancestors" v-if="columns[5].visible"/>-->
<!-- <el-table-column label="设备大类" align="center" prop="deviceCategoryName" v-if="columns[6].visible"/>-->
<!-- <el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[7].visible">-->
<!-- <template #default='scope'>-->
<!-- <dict-tag :options='active_flag' :value='scope.row.activeFlag' />-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="备注" align="center" prop="remark" v-if="columns[8].visible"/>-->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template #default="scope">-->
<!-- <el-tooltip content="修改" placement="top">-->
<!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:baseDeviceType:edit']"></el-button>-->
<!-- </el-tooltip>-->
<!-- <el-tooltip content="删除" placement="top">-->
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:baseDeviceType:remove']"></el-button>-->
<!-- </el-tooltip>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<el-table v-loading="loading" :data="baseDeviceTypeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="设备类型" align="center" prop="deviceTypeId" v-if="columns[0].visible"/>
<el-table-column label="父级标识" align="center" prop="parentId" v-if="columns[2].visible"/>
<el-table-column label="设备类型编号" align="center" prop="deviceTypeCode" v-if="columns[3].visible"/>
<el-table-column label="设备类型名称" align="center" prop="deviceTypeName" v-if="columns[4].visible"/>
<el-table-column label="祖级列表" align="center" prop="ancestors" v-if="columns[5].visible"/>
<el-table-column label="设备大类" align="center" prop="deviceCategoryName" v-if="columns[6].visible"/>
<el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[7].visible">
<template #default='scope'>
<dict-tag :options='active_flag' :value='scope.row.activeFlag' />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[8].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:baseDeviceType:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:baseDeviceType:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />-->
<!-- </el-card>-->
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- &lt;!&ndash; 添加或修改设备类型信息对话框 &ndash;&gt;-->
<!-- <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>-->
<!-- <el-form ref="baseDeviceTypeFormRef" :model="form" :rules="rules" label-width="120px">-->
<!--&lt;!&ndash; <el-form-item label="设备类型" prop="deviceTypeId">-->
<!-- <el-input v-model="form.deviceTypeId" placeholder="请输入设备类型ID" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!--&lt;!&ndash; <el-form-item label="父级标识" prop="parentId">-->
<!-- <el-tree-select-->
<!-- v-model="form.parentId"-->
<!-- :data="baseOptions"-->
<!-- :props="{ value: 'deviceTypeId', label: 'deviceTypeName', children: 'children' }"-->
<!-- value-key="deviceTypeId"-->
<!-- placeholder="请选择父级标识"-->
<!-- check-strictly-->
<!-- />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="设备类型编号" prop="deviceTypeCode">-->
<!-- <el-input v-model="form.deviceTypeCode" placeholder="请输入设备类型编号" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="设备类型名称" prop="deviceTypeName">-->
<!-- <el-input v-model="form.deviceTypeName" placeholder="请输入设备类型名称" />-->
<!-- </el-form-item>-->
<!--&lt;!&ndash; <el-form-item label="祖级列表" prop="ancestors">-->
<!-- <el-input v-model="form.ancestors" placeholder="请输入祖级列表" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="设备大类" prop="deviceCategoryId">-->
<!--&lt;!&ndash; <el-input v-model="form.categoryId" placeholder="请输入设备大类ID" />&ndash;&gt;-->
<!-- <el-select v-model="form.deviceCategoryId" placeholder="请选择设备大类" filterable>-->
<!-- <el-option v-for="item in categoryOptions"-->
<!-- :key="item.deviceCategoryId"-->
<!-- :label="item.deviceCategoryName"-->
<!-- :value="item.deviceCategoryId">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!--&lt;!&ndash; <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-input v-model="form.activeFlag" placeholder="请输入激活标识" />-->
<!-- </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="激活标识" prop="activeFlag">-->
<!-- <el-radio-group v-model="form.activeFlag">-->
<!-- <el-radio-->
<!-- v-for="dict in active_flag"-->
<!-- :key="dict.value"-->
<!-- :value="dict.value"-->
<!-- >{{dict.label}}</el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="备注" prop="remark">-->
<!-- <el-input v-model="form.remark" placeholder="请输入备注" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
<!-- <el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>-->
<!-- <el-button @click="cancel"> </el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-dialog>-->
<!-- 添加或修改设备类型信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="baseDeviceTypeFormRef" :model="form" :rules="rules" label-width="120px">
<!-- <el-form-item label="设备类型" prop="deviceTypeId">
<el-input v-model="form.deviceTypeId" placeholder="请输入设备类型ID" />
</el-form-item>-->
<!-- <el-form-item label="父级标识" prop="parentId">
<el-tree-select
v-model="form.parentId"
:data="baseOptions"
:props="{ value: 'deviceTypeId', label: 'deviceTypeName', children: 'children' }"
value-key="deviceTypeId"
placeholder="请选择父级标识"
check-strictly
/>
</el-form-item>-->
<el-form-item label="设备类型编号" prop="deviceTypeCode">
<el-input v-model="form.deviceTypeCode" placeholder="请输入设备类型编号" />
</el-form-item>
<el-form-item label="设备类型名称" prop="deviceTypeName">
<el-input v-model="form.deviceTypeName" placeholder="请输入设备类型名称" />
</el-form-item>
<!-- <el-form-item label="祖级列表" prop="ancestors">
<el-input v-model="form.ancestors" placeholder="请输入祖级列表" />
</el-form-item>-->
<el-form-item label="设备大类" prop="deviceCategoryId">
<!-- <el-input v-model="form.categoryId" placeholder="请输入设备大类ID" />-->
<el-select v-model="form.deviceCategoryId" placeholder="请选择设备大类" filterable>
<el-option v-for="item in categoryOptions"
:key="item.deviceCategoryId"
:label="item.deviceCategoryName"
:value="item.deviceCategoryId">
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="form.activeFlag" placeholder="请输入激活标识" />
</el-form-item>-->
<el-form-item label="激活标识" prop="activeFlag">
<el-radio-group v-model="form.activeFlag">
<el-radio
v-for="dict in active_flag"
:key="dict.value"
:value="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<!-- </div>-->
<!--</template>-->
</div>
</template>
<!--<script setup name="BaseDeviceType" lang="ts">-->
<!--import {-->
<!-- listBaseDeviceType,-->
<!-- getBaseDeviceType,-->
<!-- delBaseDeviceType,-->
<!-- addBaseDeviceType,-->
<!-- updateBaseDeviceType,-->
<!-- getBaseDeviceTypeList-->
<!--} from '@/api/dms/baseDeviceType';-->
<!--import { BaseDeviceTypeVO, BaseDeviceTypeQuery, BaseDeviceTypeForm } from '@/api/dms/baseDeviceType/types';-->
<!--import {getBaseDeviceCategoryList} from "@/api/dms/baseDeviceCategory";-->
<script setup name="BaseDeviceType" lang="ts">
import {
listBaseDeviceType,
getBaseDeviceType,
delBaseDeviceType,
addBaseDeviceType,
updateBaseDeviceType,
getBaseDeviceTypeList
} from '@/api/dms/baseDeviceType/';
import { BaseDeviceTypeVO, BaseDeviceTypeQuery, BaseDeviceTypeForm } from '@/api/dms/baseDeviceType/types';
import { getBaseDeviceCategoryList } from "@/api/dms/baseDeviceCategory/index";
<!--const { proxy } = getCurrentInstance() as ComponentInternalInstance;-->
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
<!--const { active_flag } = toRefs<any>(proxy?.useDict( 'active_flag'));-->
const { active_flag } = toRefs<any>(proxy?.useDict( 'active_flag'));
<!--const baseDeviceTypeList = ref<BaseDeviceTypeVO[]>([]);-->
<!--const buttonLoading = ref(false);-->
<!--const loading = ref(true);-->
<!--const showSearch = ref(true);-->
<!--const ids = ref<Array<string | number>>([]);-->
<!--const single = ref(true);-->
<!--const multiple = ref(true);-->
<!--const total = ref(0);-->
const baseDeviceTypeList = ref<BaseDeviceTypeVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
<!--const queryFormRef = ref<ElFormInstance>();-->
<!--const baseDeviceTypeFormRef = ref<ElFormInstance>();-->
const queryFormRef = ref<ElFormInstance>();
const baseDeviceTypeFormRef = ref<ElFormInstance>();
<!--const dialog = reactive<DialogOption>({-->
<!-- visible: false,-->
<!-- title: ''-->
<!--});-->
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
<!--// -->
<!--const columns = ref<FieldOption[]>([-->
<!-- { key: 0, label: `设备类型ID`, visible: false },-->
<!-- { key: 1, label: `租户编号`, visible: false },-->
<!-- { key: 2, label: `父级标识`, visible: false },-->
<!-- { key: 3, label: `设备类型编号`, visible: true },-->
<!-- { key: 4, label: `设备类型名称`, visible: true },-->
<!-- { key: 5, label: `祖级列表`, visible: false },-->
<!-- { key: 6, label: `设备大类ID`, visible: true },-->
<!-- { key: 7, label: `激活标识`, visible: true },-->
<!-- { key: 8, label: `备注`, visible: true },-->
<!-- { key: 9, label: `创建部门`, visible: false },-->
<!-- { key: 10, label: `创建人`, visible: false },-->
<!-- { key: 11, label: `创建时间`, visible: false },-->
<!-- { key: 12, label: `更新人`, visible: false },-->
<!-- { key: 13, label: `更新时间`, visible: false },-->
<!--]);-->
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `设备类型ID`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `父级标识`, visible: false },
{ key: 3, label: `设备类型编号`, visible: true },
{ key: 4, label: `设备类型名称`, visible: true },
{ key: 5, label: `祖级列表`, visible: false },
{ key: 6, label: `设备大类ID`, visible: true },
{ key: 7, label: `激活标识`, visible: true },
{ key: 8, label: `备注`, visible: true },
{ key: 9, label: `创建部门`, visible: false },
{ key: 10, label: `创建人`, visible: false },
{ key: 11, label: `创建时间`, visible: false },
{ key: 12, label: `更新人`, visible: false },
{ key: 13, label: `更新时间`, visible: false },
]);
<!--const initFormData: BaseDeviceTypeForm = {-->
<!-- deviceTypeId: undefined,-->
<!-- parentId: undefined,-->
<!-- deviceTypeCode: undefined,-->
<!-- deviceTypeName: undefined,-->
<!-- ancestors: undefined,-->
<!-- deviceCategoryId: undefined,-->
<!-- deviceCategoryName: undefined,-->
<!-- activeFlag: '1',-->
<!-- remark: undefined,-->
<!--}-->
<!--const data = reactive<PageData<BaseDeviceTypeForm, BaseDeviceTypeQuery>>({-->
<!-- form: {...initFormData},-->
<!-- queryParams: {-->
<!-- pageNum: 1,-->
<!-- pageSize: 10,-->
<!-- deviceTypeId: undefined,-->
<!-- parentId: undefined,-->
<!-- deviceTypeCode: undefined,-->
<!-- deviceTypeName: undefined,-->
<!-- ancestors: undefined,-->
<!-- deviceCategoryId: undefined,-->
<!-- deviceCategoryName: undefined,-->
<!-- activeFlag: undefined,-->
<!-- params: {-->
<!-- }-->
<!-- },-->
<!-- rules: {-->
<!--/* deviceTypeId: [-->
<!-- { required: true, message: "设备类型不能为空", trigger: "blur" }-->
<!-- ],*/-->
<!-- parentId: [-->
<!-- { required: true, message: "父级标识不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- deviceTypeCode: [-->
<!-- { required: true, message: "设备类型编号不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- deviceTypeName: [-->
<!-- { required: true, message: "设备类型名称不能为空", trigger: "blur" }-->
<!-- ],-->
<!--/* ancestors: [-->
<!-- { required: true, message: "祖级列表不能为空", trigger: "blur" }-->
<!-- ],*/-->
<!-- // categoryId: [-->
<!-- // { required: true, message: "", trigger: "blur" }-->
<!-- // ],-->
<!-- deviceCategoryId:[-->
<!-- { required: true, message: "设备大类不能为空", trigger: "blur" }-->
<!-- ],-->
<!-- activeFlag: [-->
<!-- { required: true, message: "激活标识不能为空", trigger: "blur" }-->
<!-- ],-->
<!--/* remark: [-->
<!-- { required: true, message: "备注不能为空", trigger: "blur" }-->
<!-- ],*/-->
<!-- }-->
<!--});-->
const initFormData: BaseDeviceTypeForm = {
deviceTypeId: undefined,
parentId: undefined,
deviceTypeCode: undefined,
deviceTypeName: undefined,
ancestors: undefined,
deviceCategoryId: undefined,
deviceCategoryName: undefined,
activeFlag: '1',
remark: undefined,
}
const data = reactive<PageData<BaseDeviceTypeForm, BaseDeviceTypeQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
deviceTypeId: undefined,
parentId: undefined,
deviceTypeCode: undefined,
deviceTypeName: undefined,
ancestors: undefined,
deviceCategoryId: undefined,
deviceCategoryName: undefined,
activeFlag: undefined,
params: {
}
},
rules: {
/* deviceTypeId: [
{ required: true, message: "设备类型不能为空", trigger: "blur" }
],*/
parentId: [
{ required: true, message: "父级标识不能为空", trigger: "blur" }
],
deviceTypeCode: [
{ required: true, message: "设备类型编号不能为空", trigger: "blur" }
],
deviceTypeName: [
{ required: true, message: "设备类型名称不能为空", trigger: "blur" }
],
/* ancestors: [
{ required: true, message: "祖级列表不能为空", trigger: "blur" }
],*/
// categoryId: [
// { required: true, message: "", trigger: "blur" }
// ],
deviceCategoryId:[
{ required: true, message: "设备大类不能为空", trigger: "blur" }
],
activeFlag: [
{ required: true, message: "激活标识不能为空", trigger: "blur" }
],
/* remark: [
{ required: true, message: "备注不能为空", trigger: "blur" }
],*/
}
});
<!--const { queryParams, form, rules } = toRefs(data);-->
const { queryParams, form, rules } = toRefs(data);
<!--/** 查询设备类型信息列表 */-->
<!--const getList = async () => {-->
<!-- loading.value = true;-->
<!-- const res = await listBaseDeviceType(queryParams.value);-->
<!-- baseDeviceTypeList.value = res.rows;-->
<!-- total.value = res.total;-->
<!-- loading.value = false;-->
<!--}-->
/** 查询设备类型信息列表 */
const getList = async () => {
loading.value = true;
const res = await listBaseDeviceType(queryParams.value);
baseDeviceTypeList.value = res.rows;
total.value = res.total;
loading.value = false;
}
<!--/** 取消按钮 */-->
<!--const cancel = () => {-->
<!-- reset();-->
<!-- dialog.visible = false;-->
<!--}-->
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
<!--/** 表单重置 */-->
<!--const reset = () => {-->
<!-- form.value = {...initFormData};-->
<!-- baseDeviceTypeFormRef.value?.resetFields();-->
<!--}-->
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
baseDeviceTypeFormRef.value?.resetFields();
}
<!--/** 搜索按钮操作 */-->
<!--const handleQuery = () => {-->
<!-- queryParams.value.pageNum = 1;-->
<!-- getList();-->
<!--}-->
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
<!--/** 重置按钮操作 */-->
<!--const resetQuery = () => {-->
<!-- queryFormRef.value?.resetFields();-->
<!-- handleQuery();-->
<!--}-->
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
<!--/** 多选框选中数据 */-->
<!--const handleSelectionChange = (selection: BaseDeviceTypeVO[]) => {-->
<!-- ids.value = selection.map(item => item.deviceTypeId);-->
<!-- single.value = selection.length != 1;-->
<!-- multiple.value = !selection.length;-->
<!--}-->
/** 多选框选中数据 */
const handleSelectionChange = (selection: BaseDeviceTypeVO[]) => {
ids.value = selection.map(item => item.deviceTypeId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
<!--/** 新增按钮操作 */-->
<!--const handleAdd = async() => {-->
<!-- reset();-->
<!-- await getTreeselect();-->
<!-- dialog.visible = true;-->
<!-- dialog.title = "添加设备类型信息";-->
<!--}-->
/** 新增按钮操作 */
const handleAdd = async() => {
reset();
await getTreeselect();
dialog.visible = true;
dialog.title = "添加设备类型信息";
}
<!--/** 修改按钮操作 */-->
<!--const handleUpdate = async (row?: BaseDeviceTypeVO) => {-->
<!-- reset();-->
<!-- await getTreeselect();-->
<!-- const _deviceTypeId = row?.deviceTypeId || ids.value[0]-->
<!-- const res = await getBaseDeviceType(_deviceTypeId);-->
<!-- Object.assign(form.value, res.data);-->
<!-- dialog.visible = true;-->
<!-- dialog.title = "修改设备类型信息";-->
<!--}-->
/** 修改按钮操作 */
const handleUpdate = async (row?: BaseDeviceTypeVO) => {
reset();
await getTreeselect();
const _deviceTypeId = row?.deviceTypeId || ids.value[0]
const res = await getBaseDeviceType(_deviceTypeId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改设备类型信息";
}
<!--/** 提交按钮 */-->
<!--const submitForm = () => {-->
<!-- baseDeviceTypeFormRef.value?.validate(async (valid: boolean) => {-->
<!-- if (valid) {-->
<!-- buttonLoading.value = true;-->
<!-- if (form.value.deviceTypeId) {-->
<!-- await updateBaseDeviceType(form.value).finally(() => buttonLoading.value = false);-->
<!-- } else {-->
<!-- await addBaseDeviceType(form.value).finally(() => buttonLoading.value = false);-->
<!-- }-->
<!-- proxy?.$modal.msgSuccess("操作成功");-->
<!-- dialog.visible = false;-->
<!-- await getList();-->
<!-- }-->
<!-- });-->
<!--}-->
/** 提交按钮 */
const submitForm = () => {
baseDeviceTypeFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.deviceTypeId) {
await updateBaseDeviceType(form.value).finally(() => buttonLoading.value = false);
} else {
await addBaseDeviceType(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
<!--/** 删除按钮操作 */-->
<!--const handleDelete = async (row?: BaseDeviceTypeVO) => {-->
<!-- const _deviceTypeIds = row?.deviceTypeId || ids.value;-->
<!-- await proxy?.$modal.confirm('是否确认删除设备类型信息编号为"' + _deviceTypeIds + '"的数据项?').finally(() => loading.value = false);-->
<!-- await delBaseDeviceType(_deviceTypeIds);-->
<!-- proxy?.$modal.msgSuccess("删除成功");-->
<!-- await getList();-->
<!--}-->
/** 删除按钮操作 */
const handleDelete = async (row?: BaseDeviceTypeVO) => {
const _deviceTypeIds = row?.deviceTypeId || ids.value;
await proxy?.$modal.confirm('是否确认删除设备类型信息编号为"' + _deviceTypeIds + '"的数据项?').finally(() => loading.value = false);
await delBaseDeviceType(_deviceTypeIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
<!--/** 导出按钮操作 */-->
<!--const handleExport = () => {-->
<!-- proxy?.download('dms/baseDeviceType/export', {-->
<!-- ...queryParams.value-->
<!-- }, `baseDeviceType_${new Date().getTime()}.xlsx`)-->
<!--}-->
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('dms/baseDeviceType/export', {
...queryParams.value
}, `baseDeviceType_${new Date().getTime()}.xlsx`)
}
<!--let categoryOptions = ref([]);-->
<!--const getCategorySelect = async () => {-->
<!-- const res = await getBaseDeviceCategoryList(null);-->
<!-- categoryOptions.value = res.data;-->
<!--}-->
let categoryOptions = ref([]);
const getCategorySelect = async () => {
const res = await getBaseDeviceCategoryList(null);
categoryOptions.value = res.data;
}
<!--/** 查询计量单位信息下拉树结构 */-->
<!--type BaseOption = {-->
<!-- deviceTypeId: number;-->
<!-- deviceTypeName: string;-->
<!-- children?: BaseOption[];-->
<!--}-->
/** 查询计量单位信息下拉树结构 */
type BaseOption = {
deviceTypeId: number;
deviceTypeName: string;
children?: BaseOption[];
}
<!--const baseOptions = ref<BaseDeviceTypeVO[]>([]);-->
<!--const getTreeselect = async () => {-->
<!-- const res = await getBaseDeviceTypeList(null);-->
<!-- baseOptions.value = [];-->
<!-- const data: BaseOption = { deviceTypeId: 0, deviceTypeName: '顶级节点', children: [] };-->
<!-- data.children = proxy?.handleTree<BaseOption>(res.data, "deviceTypeId", "parentId");-->
<!-- baseOptions.value.push(data);-->
<!--}-->
const baseOptions = ref([]);
const getTreeselect = async () => {
const res = await getBaseDeviceTypeList(null);
baseOptions.value = [];
const data: BaseOption = { deviceTypeId: 0, deviceTypeName: '顶级节点', children: [] };
data.children = proxy?.handleTree<BaseOption>(res.data, "deviceTypeId", "parentId");
baseOptions.value.push(data);
}
<!--onMounted(() => {-->
<!-- getCategorySelect();-->
<!-- getList();-->
<!--});-->
<!--</script>-->
onMounted(() => {
getCategorySelect();
getList();
});
</script>

@ -0,0 +1,280 @@
<template>
<div class="container">
<el-dialog v-model="visible" draggable title="审批记录" :width="props.width" :height="props.height" :close-on-click-modal="false">
<el-tabs v-model="tabActiveName" class="demo-tabs">
<el-tab-pane v-loading="loading" label="流程图" name="image" style="height: 68vh">
<div
ref="imageWrapperRef"
class="image-wrapper"
@wheel="handleMouseWheel"
@mousedown="handleMouseDown"
@mousemove="handleMouseMove"
@mouseup="handleMouseUp"
@mouseleave="handleMouseLeave"
@dblclick="resetTransform"
:style="transformStyle"
>
<el-card class="box-card">
<el-image :src="imgUrl" class="scalable-image" />
</el-card>
</div>
</el-tab-pane>
<el-tab-pane v-loading="loading" label="审批信息" name="info">
<div>
<el-table :data="historyList" style="width: 100%" border fit>
<el-table-column type="index" label="序号" align="center" width="60"></el-table-column>
<el-table-column prop="nodeName" label="任务名称" sortable align="center"></el-table-column>
<el-table-column prop="approveName" :show-overflow-tooltip="true" label="办理人" sortable align="center">
<template #default="scope">
<template v-if="scope.row.approveName">
<el-tag v-for="(item, index) in scope.row.approveName.split(',')" :key="index" type="success">{{ item }}</el-tag>
</template>
<template v-else> <el-tag type="success"></el-tag></template>
</template>
</el-table-column>
<el-table-column prop="flowStatus" label="状态" width="80" sortable align="center">
<template #default="scope">
<dict-tag :options="wf_task_status" :value="scope.row.flowStatus"></dict-tag>
</template>
</el-table-column>
<el-table-column prop="message" label="审批意见" :show-overflow-tooltip="true" sortable align="center"></el-table-column>
<el-table-column prop="createTime" label="开始时间" width="160" :show-overflow-tooltip="true" sortable align="center"></el-table-column>
<el-table-column prop="updateTime" label="结束时间" width="160" :show-overflow-tooltip="true" sortable align="center"></el-table-column>
<el-table-column
prop="runDuration"
label="运行时长"
width="140"
:show-overflow-tooltip="true"
sortable
align="center"
></el-table-column>
<el-table-column prop="attachmentList" width="120" label="附件" align="center">
<template #default="scope">
<el-popover v-if="scope.row.attachmentList && scope.row.attachmentList.length > 0" placement="right" :width="310" trigger="click">
<template #reference>
<el-button type="primary" style="margin-right: 16px">附件</el-button>
</template>
<el-table border :data="scope.row.attachmentList">
<el-table-column prop="originalName" width="202" :show-overflow-tooltip="true" label="附件名称"></el-table-column>
<el-table-column prop="name" width="80" align="center" :show-overflow-tooltip="true" label="操作">
<template #default="tool">
<el-button type="text" @click="handleDownload(tool.row.ossId)"></el-button>
</template>
</el-table-column>
</el-table>
</el-popover>
</template>
</el-table-column>
</el-table>
</div>
</el-tab-pane>
</el-tabs>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { flowImage } from '@/api/workflow/instance';
import { propTypes } from '@/utils/propTypes';
import { listByIds } from '@/api/system/oss';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wf_task_status } = toRefs<any>(proxy?.useDict('wf_task_status'));
const props = defineProps({
width: propTypes.string.def('80%'),
height: propTypes.string.def('100%')
});
const loading = ref(false);
const visible = ref(false);
const historyList = ref<Array<any>>([]);
const tabActiveName = ref('image');
const imgUrl = ref('');
//
const init = async (businessId: string | number) => {
visible.value = true;
loading.value = true;
tabActiveName.value = 'image';
historyList.value = [];
flowImage(businessId).then((resp) => {
if (resp.data) {
historyList.value = resp.data.list;
imgUrl.value = 'data:image/gif;base64,' + resp.data.image;
if (historyList.value.length > 0) {
historyList.value.forEach((item) => {
if (item.ext) {
getIds(item.ext).then((res) => {
item.attachmentList = res.data;
});
} else {
item.attachmentList = [];
}
});
}
loading.value = false;
}
});
};
const getIds = async (ids: string | number) => {
const res = await listByIds(ids);
return res;
};
/** 下载按钮操作 */
const handleDownload = (ossId: string) => {
proxy?.$download.oss(ossId);
};
const imageWrapperRef = ref<HTMLElement | null>(null);
const scale = ref(1); //
const maxScale = 3; //
const minScale = 0.5; //
let isDragging = false;
let startX = 0;
let startY = 0;
let currentTranslateX = 0;
let currentTranslateY = 0;
const handleMouseWheel = (event: WheelEvent) => {
event.preventDefault();
let newScale = scale.value - event.deltaY / 1000;
newScale = Math.max(minScale, Math.min(newScale, maxScale));
if (newScale !== scale.value) {
scale.value = newScale;
resetDragPosition(); // 使
}
};
const handleMouseDown = (event: MouseEvent) => {
if (scale.value > 1) {
event.preventDefault(); //
isDragging = true;
startX = event.clientX;
startY = event.clientY;
}
};
const handleMouseMove = (event: MouseEvent) => {
if (!isDragging || !imageWrapperRef.value) return;
const deltaX = event.clientX - startX;
const deltaY = event.clientY - startY;
startX = event.clientX;
startY = event.clientY;
currentTranslateX += deltaX;
currentTranslateY += deltaY;
//
const bounds = getBounds();
if (currentTranslateX > bounds.maxTranslateX) {
currentTranslateX = bounds.maxTranslateX;
} else if (currentTranslateX < bounds.minTranslateX) {
currentTranslateX = bounds.minTranslateX;
}
if (currentTranslateY > bounds.maxTranslateY) {
currentTranslateY = bounds.maxTranslateY;
} else if (currentTranslateY < bounds.minTranslateY) {
currentTranslateY = bounds.minTranslateY;
}
applyTransform();
};
const handleMouseUp = () => {
isDragging = false;
};
const handleMouseLeave = () => {
isDragging = false;
};
const resetTransform = () => {
scale.value = 1;
currentTranslateX = 0;
currentTranslateY = 0;
applyTransform();
};
const resetDragPosition = () => {
currentTranslateX = 0;
currentTranslateY = 0;
applyTransform();
};
const applyTransform = () => {
if (imageWrapperRef.value) {
imageWrapperRef.value.style.transform = `translate(${currentTranslateX}px, ${currentTranslateY}px) scale(${scale.value})`;
}
};
const getBounds = () => {
if (!imageWrapperRef.value) return { minTranslateX: 0, maxTranslateX: 0, minTranslateY: 0, maxTranslateY: 0 };
const imgRect = imageWrapperRef.value.getBoundingClientRect();
const containerRect = imageWrapperRef.value.parentElement?.getBoundingClientRect() ?? imgRect;
const minTranslateX = (containerRect.width - imgRect.width * scale.value) / 2;
const maxTranslateX = -(containerRect.width - imgRect.width * scale.value) / 2;
const minTranslateY = (containerRect.height - imgRect.height * scale.value) / 2;
const maxTranslateY = -(containerRect.height - imgRect.height * scale.value) / 2;
return { minTranslateX, maxTranslateX, minTranslateY, maxTranslateY };
};
const transformStyle = computed(() => ({
transition: isDragging ? 'none' : 'transform 0.2s ease'
}));
/**
* 对外暴露子组件方法
*/
defineExpose({
init
});
</script>
<style lang="scss" scoped>
.triangle {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
border-radius: 6px;
}
.triangle::after {
content: ' ';
position: absolute;
top: 8em;
right: 215px;
border: 15px solid;
border-color: transparent #fff transparent transparent;
}
.container {
:deep(.el-dialog .el-dialog__body) {
max-height: calc(100vh - 170px) !important;
min-height: calc(100vh - 170px) !important;
}
}
.image-wrapper {
width: 100%;
overflow: hidden;
position: relative;
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
user-select: none; /* 禁用文本选择 */
cursor: grab; /* 设置初始鼠标指针为可拖动 */
}
.image-wrapper:active {
cursor: grabbing; /* 当正在拖动时改变鼠标指针 */
}
.scalable-image {
object-fit: contain;
width: 100%;
padding: 15px;
}
</style>

@ -0,0 +1,775 @@
<template>
<div class="p-2">
<!-- 操作按钮区域 -->
<el-card shadow="never">
<div style="display: flex; justify-content: space-between">
<div>
<el-button
v-if="submitButtonShow"
:loading="buttonLoading"
type="info"
@click="submitForm('draft')">
暂存
</el-button>
<el-button
v-if="submitButtonShow"
:loading="buttonLoading"
type="primary"
@click="submitForm('submit')">
提交
</el-button>
<el-button
v-if="approvalButtonShow"
:loading="buttonLoading"
type="primary"
@click="approvalVerifyOpen">
{{ currentStepName }}
</el-button>
<el-button
v-if="confirmButtonShow"
:loading="buttonLoading"
type="success"
@click="handleConfirm">
主管确认
</el-button>
<el-button
v-if="workOrder?.wfDefinitionId"
type="primary"
@click="handleApprovalRecord">
流程进度
</el-button>
</div>
<div>
<el-button @click="goBack()"></el-button>
</div>
</div>
</el-card>
<!-- 工单基本信息区域 -->
<el-card shadow="never" class="mb-[10px]">
<h4 class="form-header">工单基本信息</h4>
<el-form label-width="120px">
<el-row>
<el-col :span="8">
<el-form-item label="工单编号">
<el-input v-model="workOrder.billsFaultCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工单状态">
<el-input v-model="workOrderStatusText" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请人">
<el-input v-model="workOrder.applyUser" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="设备编号">
<el-input v-model="workOrder.machineCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="设备名称">
<el-input v-model="workOrder.machineName" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请时间">
<el-input v-model="workOrder.applyTime" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 当前步骤处理区域 -->
<el-card shadow="never">
<h4 class="form-header">{{ currentStepTitle }}</h4>
<el-form
ref="processFormRef"
v-loading="loading"
:disabled="routeParams.type === 'view'"
:model="form"
:rules="rules"
label-width="120px">
<el-row>
<!-- 第一步故障报修信息 -->
<template v-if="currentStepOrder === 1">
<el-col :span="8">
<el-form-item label="故障类型" prop="faultType">
<el-select v-model="form.faultType" placeholder="请选择故障类型">
<el-option
v-for="dict in activity_fault_type"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修类型" prop="repairType">
<el-select
v-model="form.repairType"
placeholder="请选择维修类型"
@change="updateOutsourcingValidation">
<el-option
v-for="dict in fault_repair_type"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="外协单位" prop="outsourcingId">
<el-input v-model="form.outsourcingId" placeholder="请输入外协单位" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="故障描述" prop="faultDescription">
<el-input
v-model="form.faultDescription"
type="textarea"
:rows="3"
placeholder="请输入故障描述" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="涉及操作" prop="designOperations">
<el-input
v-model="form.designOperations"
type="textarea"
:rows="2"
placeholder="请输入涉及操作" />
</el-form-item>
</el-col>
</template>
<!-- 第二步维修处理 -->
<template v-if="currentStepOrder === 2">
<el-col :span="8">
<el-form-item label="故障类型">
<el-input v-model="form.faultType" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修类型">
<el-input v-model="form.repairType" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修人" prop="repairer">
<el-input v-model="form.repairer" placeholder="请输入维修人" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="检查后的故障判断" prop="checkedFault">
<el-input
v-model="form.checkedFault"
type="textarea"
:rows="3"
placeholder="请输入检查后的故障判断" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修措施" prop="protectedMethod">
<el-input
v-model="form.protectedMethod"
type="textarea"
:rows="3"
placeholder="请输入维修措施" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修内容" prop="repairContent">
<el-input
v-model="form.repairContent"
type="textarea"
:rows="4"
placeholder="请输入维修内容" />
</el-form-item>
</el-col>
</template>
<!-- 第三步维修确认 -->
<template v-if="currentStepOrder === 3">
<el-col :span="8">
<el-form-item label="维修人">
<el-input v-model="form.repairer" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修结果" prop="repairConfirm">
<el-select v-model="form.repairConfirm" placeholder="请选择维修结果">
<el-option
v-for="dict in fault_repair_confirm"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="关联更换零部件" prop="componentsPartsId">
<el-input v-model="form.componentsPartsId" placeholder="请输入关联更换零部件内容" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修内容">
<el-input v-model="form.repairContent" type="textarea" :rows="3" disabled />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修措施">
<el-input v-model="form.protectedMethod" type="textarea" :rows="3" disabled />
</el-form-item>
</el-col>
</template>
<!-- 审批状态选择仅在审批阶段显示 -->
<el-col :span="8" v-if="isApprovalStage">
<el-form-item label="审批状态" prop="approveStatus">
<el-select v-model="form.approveStatus" placeholder="请选择审批状态">
<el-option
v-for="dict in dms_approve_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
:disabled="dict.value === '1'">
</el-option>
</el-select>
</el-form-item>
</el-col>
<!-- 处理意见除第一步外都需要 -->
<el-col :span="24" v-if="needProcessResolution">
<el-form-item label="处理意见" prop="processHandleResolution">
<el-input
v-model="form.processHandleResolution"
type="textarea"
:rows="3"
placeholder="请输入处理意见" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 审批组件 -->
<submitVerify
ref="submitVerifyRef"
:task-variables="taskVariables"
@submit-callback="submitCallback" />
<!-- 审批记录组件 -->
<approvalRecord ref="approvalRecordRef" />
</div>
</template>
<script setup name="FaultWorkOrderProcess" lang="ts">
//
import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs, watch } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { getDmsBillsFaultInstance, approveWorkOrder, confirmRepairResult } from '@/api/dms/dmsBillsFaultInstance';
import { addDmsFaultInstanceActivity } from '@/api/dms/dmsFaultInstanceActivity';
import { pageByTaskWait } from '@/api/workflow/task';
import { getCurrentDateTime } from '@/utils/dateUtils';
import { getDmsBaseOutsourcingInfoList } from '@/api/dms/dmsBaseOutsourcingInfo';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { fault_repair_type, activity_fault_type, fault_repair_confirm, dms_approve_status } = toRefs<any>(proxy?.useDict('fault_repair_type', 'activity_fault_type', 'fault_repair_confirm', 'dms_approve_status'));
const route = useRoute();
const router = useRouter();
//
const loading = ref(true);
const buttonLoading = ref(false);
const routeParams = ref<Record<string, any>>({});
const workOrder = ref<any>({});
const workOrderStatusText = ref('');
const outsourceList = ref<any[]>([]);
//
const processFormRef = ref<ElFormInstance>();
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
//
const currentTask = ref<any>(null);
const currentStepOrder = ref(1);
const taskVariables = ref<any>({});
//
const initFormData = {
repairInstanceId: undefined,
faultType: undefined,
faultDescription: undefined,
designOperations: undefined,
repairType: undefined,
outsourcingId: undefined,
checkedFault: undefined,
repairContent: undefined,
protectedMethod: undefined,
repairer: undefined,
repairConfirm: undefined,
componentsPartsId: undefined,
processHandleResolution: undefined,
processStepOrder: undefined,
approveStatus: undefined
};
const form = reactive({ ...initFormData });
//
const rules = reactive({
faultType: [{ required: true, message: '故障类型不能为空', trigger: 'change' }],
faultDescription: [{ required: true, message: '故障描述不能为空', trigger: 'blur' }],
repairType: [{ required: true, message: '维修类型不能为空', trigger: 'change' }],
outsourcingId: [{ required: false, message: '外协单位不能为空', trigger: 'change' }],
repairer: [{ required: false, message: '维修人不能为空', trigger: 'blur' }],
checkedFault: [{ required: false, message: '检查后的故障判断不能为空', trigger: 'blur' }],
protectedMethod: [{ required: false, message: '维修措施不能为空', trigger: 'blur' }],
repairContent: [{ required: false, message: '维修内容不能为空', trigger: 'blur' }],
repairConfirm: [{ required: false, message: '维修结果不能为空', trigger: 'change' }],
processHandleResolution: [{ required: false, message: '处理意见不能为空', trigger: 'blur' }],
approveStatus: [{ required: false, message: '审批状态不能为空', trigger: 'change' }]
});
//
const needProcessResolution = computed(() => currentStepOrder.value > 1);
const currentStepName = computed(() => {
const stepNames = {
1: '故障报修',
2: '维修处理',
3: '维修确认'
};
return stepNames[currentStepOrder.value] || '处理工单';
});
const currentStepTitle = computed(() => {
const stepTitles = {
1: '步骤1故障报修要求参数',
2: '步骤2维修处理实际参数',
3: '步骤3维修确认'
};
return stepTitles[currentStepOrder.value] || '工单处理';
});
const approvalButtonShow = computed(() => {
return routeParams.value.type === 'approval' && currentTask.value;
});
const confirmButtonShow = computed(() => {
//
// 1. confirm
// 2. (2)(0)
// 3. (2) -
return routeParams.value.type === 'confirm' ||
(workOrder.value.billsStatus === '2' &&
workOrder.value.repairConfirm === '0' &&
workOrder.value.approveStatus === '2');
});
//
const isApprovalStage = computed(() => {
return routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1';
});
//
const submitButtonShow = computed(() => {
return (
routeParams.value.type === 'add' ||
(routeParams.value.type === 'update' &&
workOrder.value.billsStatus &&
(workOrder.value.billsStatus === 'draft' || workOrder.value.billsStatus === 'cancel' || workOrder.value.billsStatus === 'back'))
);
});
//
onMounted(async () => {
routeParams.value = route.query;
loading.value = true;
try {
//
await loadWorkOrderInfo();
//
await getOutsourceList();
//
if (routeParams.value.type === 'approval') {
await loadCurrentTask();
}
//
initializeFormData();
//
if (routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1') {
rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }];
}
//
updateOutsourcingValidation();
} catch (error) {
console.error('初始化失败:', error);
proxy?.$modal.msgError('加载数据失败');
} finally {
loading.value = false;
}
});
//
watch(() => form.repairType, (newValue) => {
updateOutsourcingValidation();
//
if (newValue !== '2') {
form.outsourcingId = undefined;
}
});
//
const loadWorkOrderInfo = async () => {
// querybusinessId
const businessId = routeParams.value.id;
if (!businessId) {
proxy?.$modal.msgError('缺少工单ID参数');
return;
}
const res = await getDmsBillsFaultInstance(businessId);
workOrder.value = res.data;
//
workOrderStatusText.value = getStatusText(workOrder.value.billsStatus);
};
//
const loadCurrentTask = async () => {
// querybusinessIdtaskId
const businessId = routeParams.value.id;
const taskId = routeParams.value.taskId;
// taskIdbusinessId
const taskRes = await pageByTaskWait({
pageNum: 1,
pageSize: 10,
flowCode: 'Fault01' //
});
const tasks = taskRes.rows.filter(task =>
task.businessId === businessId || task.id === taskId
);
if (tasks.length > 0) {
currentTask.value = tasks[0];
//
const nodeName = currentTask.value.nodeName;
if (nodeName === '故障报修') {
currentStepOrder.value = 1;
} else if (nodeName === '维修处理') {
currentStepOrder.value = 2;
} else if (nodeName === '维修确认') {
currentStepOrder.value = 3;
}
//
if (needProcessResolution.value) {
rules.processHandleResolution = [
{ required: true, message: '处理意见不能为空', trigger: 'blur' }
];
}
}
};
//
const initializeFormData = () => {
//
form.repairInstanceId = workOrder.value.repairInstanceId;
form.processStepOrder = currentStepOrder.value;
if (currentStepOrder.value === 1) {
//
form.faultType = workOrder.value.faultType;
form.faultDescription = workOrder.value.faultDescription;
form.designOperations = workOrder.value.designOperations;
form.repairType = workOrder.value.repairType;
form.outsourcingId = workOrder.value.outsourcingId;
} else {
//
form.faultType = workOrder.value.faultType;
form.faultDescription = workOrder.value.faultDescription;
form.designOperations = workOrder.value.designOperations;
form.repairType = workOrder.value.repairType;
form.outsourcingId = workOrder.value.outsourcingId;
form.checkedFault = workOrder.value.checkedFault;
form.repairContent = workOrder.value.repairContent;
form.protectedMethod = workOrder.value.protectedMethod;
form.repairer = workOrder.value.repairer;
form.repairConfirm = workOrder.value.repairConfirm;
form.componentsPartsId = workOrder.value.componentsPartsId;
}
};
//
const submitForm = async (status: string) => {
if (!processFormRef.value) return;
try {
const valid = await processFormRef.value.validate();
if (valid) {
buttonLoading.value = true;
if (status === 'draft') {
//
await addDmsFaultInstanceActivity({
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder,
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess('暂存成功');
goBack();
} else {
//
//
taskVariables.value = {
entity: {
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder
}
};
//
if (routeParams.value.taskId) {
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
} else {
//
proxy?.$modal.msgSuccess('提交成功');
goBack();
}
}
}
} catch (error) {
console.error('提交失败:', error);
proxy?.$modal.msgError('提交失败');
} finally {
buttonLoading.value = false;
}
};
//
const approvalVerifyOpen = async () => {
if (!processFormRef.value) return;
try {
const valid = await processFormRef.value.validate();
if (valid) {
//
if (routeParams.value.type === 'approval' && !form.approveStatus) {
proxy?.$modal.msgError('请选择审批状态');
return;
}
// - SubmitVerifyWarm-Flow
taskVariables.value = {
//
entity: {
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder
}
};
//
if (routeParams.value.type === 'approval' && form.approveStatus) {
// taskVariablesapproveStatus - SubmitVerify
taskVariables.value.approveStatus = form.approveStatus;
console.log('设置审批状态变量:', form.approveStatus);
}
//
if (routeParams.value.type === 'confirm' && form.repairConfirm) {
// 01
const repairConfirmValue = form.repairConfirm === '1' ? '0' : '1';
taskVariables.value.repairConfirm = repairConfirmValue;
console.log('设置确认结果变量:', repairConfirmValue);
}
console.log('完整的工作流变量:', taskVariables.value);
// 使taskId
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
}
} catch (error) {
proxy?.$modal.msgError('表单验证失败,请检查输入项');
}
};
//
const submitCallback = async (approvalResult?: any) => {
try {
//
if (routeParams.value.type === 'approval') {
// 使
const approveStatus = form.approveStatus; // 使
const message = approvalResult?.message || form.processHandleResolution || '';
await approveWorkOrder(form.repairInstanceId, approveStatus, message);
const statusText = approveStatus === '2' ? '通过' : '拒绝';
proxy?.$modal.msgSuccess(`审批${statusText}成功`);
} else if (routeParams.value.type === 'confirm') {
//
const confirmResult = form.repairConfirm || '1'; //
await confirmRepairResult(form.repairInstanceId, confirmResult);
proxy?.$modal.msgSuccess('确认完成');
} else {
//
await addDmsFaultInstanceActivity({
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder,
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess(`${currentStepName.value}完成`);
}
//
goBack();
} catch (error: any) {
console.error('操作失败:', error);
proxy?.$modal.msgError('操作失败:' + (error.message || '未知错误'));
}
};
//
const handleConfirm = async () => {
try {
//
form.repairConfirm = '1'; // 1
//
await approvalVerifyOpen();
} catch (error: any) {
if (error !== 'cancel' && error !== 'close') {
console.error('确认失败:', error);
proxy?.$modal.msgError('确认失败:' + (error.message || '未知错误'));
}
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value?.init(routeParams.value.id);
};
//
const goBack = () => {
proxy?.$tab.closePage(proxy?.$route);
router.go(-1);
};
//
const getOutsourceList = async () => {
try {
const res = await getDmsBaseOutsourcingInfoList(null);
outsourceList.value = res.data;
} catch (error) {
console.error('获取外协单位列表失败:', error);
}
};
//
const updateOutsourcingValidation = () => {
if (form.repairType === '2') {
//
rules.outsourcingId = [{ required: true, message: '外协单位不能为空', trigger: 'change' }];
} else {
//
rules.outsourcingId = [{ required: false, message: '外协单位不能为空', trigger: 'change' }];
}
};
//
const getStatusText = (status: string) => {
const statusMap = {
'0': '待维修',
'1': '维修中',
'2': '维修完成',
'draft': '草稿',
'cancel': '已取消'
};
return statusMap[status] || '未知状态';
};
</script>
<style scoped>
.form-header {
margin-bottom: 16px;
color: #303133;
font-weight: 600;
}
</style>

@ -4,37 +4,37 @@
<el-card shadow="never">
<div style="display: flex; justify-content: space-between">
<div>
<el-button
v-if="submitButtonShow"
:loading="buttonLoading"
type="info"
<el-button
v-if="submitButtonShow"
:loading="buttonLoading"
type="info"
@click="submitForm('draft')">
暂存
</el-button>
<el-button
v-if="submitButtonShow"
:loading="buttonLoading"
type="primary"
<el-button
v-if="submitButtonShow"
:loading="buttonLoading"
type="primary"
@click="submitForm('submit')">
提交
</el-button>
<el-button
v-if="approvalButtonShow"
:loading="buttonLoading"
type="primary"
<el-button
v-if="approvalButtonShow"
:loading="buttonLoading"
type="primary"
@click="approvalVerifyOpen">
{{ currentStepName }}
</el-button>
<el-button
v-if="confirmButtonShow"
:loading="buttonLoading"
type="success"
<el-button
v-if="confirmButtonShow"
:loading="buttonLoading"
type="success"
@click="handleConfirm">
主管确认
</el-button>
<el-button
v-if="workOrder?.wfDefinitionId"
type="primary"
<el-button
v-if="workOrder?.wfDefinitionId"
type="primary"
@click="handleApprovalRecord">
流程进度
</el-button>
@ -52,7 +52,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="工单编号">
<el-input v-model="workOrder.billsFaultCode" disabled />
<el-input :value="workOrder?.billsFaultCode || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
@ -62,24 +62,24 @@
</el-col>
<el-col :span="8">
<el-form-item label="申请人">
<el-input v-model="workOrder.applyUser" disabled />
<el-input :value="workOrder?.applyUser || ''" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="设备编号">
<el-input v-model="workOrder.machineCode" disabled />
<el-input :value="workOrder?.machineCode || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="设备名称">
<el-input v-model="workOrder.machineName" disabled />
<el-input :value="workOrder?.machineName || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请时间">
<el-input v-model="workOrder.applyTime" disabled />
<el-input :value="workOrder?.applyTime || ''" disabled />
</el-form-item>
</el-col>
</el-row>
@ -89,66 +89,66 @@
<!-- 当前步骤处理区域 -->
<el-card shadow="never">
<h4 class="form-header">{{ currentStepTitle }}</h4>
<el-form
ref="processFormRef"
v-loading="loading"
:disabled="routeParams.type === 'view'"
:model="form"
:rules="rules"
<el-form
ref="processFormRef"
v-loading="loading"
:disabled="routeParams.type === 'view'"
:model="form"
:rules="rules"
label-width="120px">
<el-row>
<!-- 第一步故障报修信息 -->
<template v-if="currentStepOrder === 1">
<el-col :span="8">
<el-form-item label="故障类型" prop="faultType">
<el-select v-model="form.faultType" placeholder="请选择故障类型">
<el-option
v-for="dict in activity_fault_type"
:key="dict.value"
:label="dict.label"
<el-form-item label="故障类型" prop="faultType">
<el-select v-model="form.faultType" placeholder="请选择故障类型">
<el-option
v-for="dict in activity_fault_type"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修类型" prop="repairType">
<el-select
v-model="form.repairType"
placeholder="请选择维修类型"
@change="updateOutsourcingValidation">
<el-option
v-for="dict in fault_repair_type"
:key="dict.value"
:label="dict.label"
<el-form-item label="维修类型" prop="repairType">
<el-select
v-model="form.repairType"
placeholder="请选择维修类型"
@change="updateOutsourcingValidation">
<el-option
v-for="dict in fault_repair_type"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="外协单位" prop="outsourcingId">
<el-input v-model="form.outsourcingId" placeholder="请输入外协单位" />
</el-form-item>
<el-form-item label="外协单位" prop="outsourcingId">
<el-input v-model="form.outsourcingId" placeholder="请输入外协单位" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="故障描述" prop="faultDescription">
<el-input
v-model="form.faultDescription"
type="textarea"
:rows="3"
<el-input
v-model="form.faultDescription"
type="textarea"
:rows="3"
placeholder="请输入故障描述" />
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="涉及操作" prop="designOperations">
<el-input
v-model="form.designOperations"
type="textarea"
:rows="2"
<el-input
v-model="form.designOperations"
type="textarea"
:rows="2"
placeholder="请输入涉及操作" />
</el-form-item>
</el-form-item>
</el-col>
</template>
@ -157,42 +157,42 @@
<el-col :span="8">
<el-form-item label="故障类型">
<el-input v-model="form.faultType" disabled />
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修类型">
<el-input v-model="form.repairType" disabled />
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修人" prop="repairer">
<el-input v-model="form.repairer" placeholder="请输入维修人" />
</el-form-item>
<el-form-item label="维修人" prop="repairer">
<el-input v-model="form.repairer" placeholder="请输入维修人" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="检查后的故障判断" prop="checkedFault">
<el-input
v-model="form.checkedFault"
type="textarea"
:rows="3"
<el-input
v-model="form.checkedFault"
type="textarea"
:rows="3"
placeholder="请输入检查后的故障判断" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修措施" prop="protectedMethod">
<el-input
v-model="form.protectedMethod"
type="textarea"
:rows="3"
<el-input
v-model="form.protectedMethod"
type="textarea"
:rows="3"
placeholder="请输入维修措施" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修内容" prop="repairContent">
<el-input
v-model="form.repairContent"
type="textarea"
:rows="4"
<el-input
v-model="form.repairContent"
type="textarea"
:rows="4"
placeholder="请输入维修内容" />
</el-form-item>
</el-col>
@ -206,21 +206,21 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修结果" prop="repairConfirm">
<el-select v-model="form.repairConfirm" placeholder="请选择维修结果">
<el-option
v-for="dict in fault_repair_confirm"
:key="dict.value"
:label="dict.label"
<el-form-item label="维修结果" prop="repairConfirm">
<el-select v-model="form.repairConfirm" placeholder="请选择维修结果">
<el-option
v-for="dict in fault_repair_confirm"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="关联更换零部件" prop="componentsPartsId">
<el-input v-model="form.componentsPartsId" placeholder="请输入关联更换零部件内容" />
</el-form-item>
<el-input v-model="form.componentsPartsId" placeholder="请输入关联更换零部件内容" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="维修内容">
@ -233,8 +233,8 @@
</el-form-item>
</el-col>
</template>
<!-- 审批状态选择仅在审批阶段显示 -->
<!-- 审批状态选择仅在审批阶段显示 -->
<el-col :span="8" v-if="isApprovalStage">
<el-form-item label="审批状态" prop="approveStatus">
<el-select v-model="form.approveStatus" placeholder="请选择审批状态">
@ -264,11 +264,11 @@
</el-card>
<!-- 审批组件 -->
<submitVerify
ref="submitVerifyRef"
:task-variables="taskVariables"
<submitVerify
ref="submitVerifyRef"
:task-variables="taskVariables"
@submit-callback="submitCallback" />
<!-- 审批记录组件 -->
<approvalRecord ref="approvalRecordRef" />
@ -284,7 +284,7 @@ import { addDmsFaultInstanceActivity } from '@/api/dms/dmsFaultInstanceActivity'
import { pageByTaskWait } from '@/api/workflow/task';
import { getCurrentDateTime } from '@/utils/dateUtils';
import { getDmsBaseOutsourcingInfoList } from '@/api/dms/dmsBaseOutsourcingInfo';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import SubmitVerify from '@/views/dms/dmsFaultInstanceActivity/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -333,9 +333,9 @@ const form = reactive({ ...initFormData });
//
const rules = reactive({
faultType: [{ required: true, message: '故障类型不能为空', trigger: 'change' }],
faultDescription: [{ required: true, message: '故障描述不能为空', trigger: 'blur' }],
repairType: [{ required: true, message: '维修类型不能为空', trigger: 'change' }],
faultType: [{ required: false, message: '故障类型不能为空', trigger: 'change' }],
faultDescription: [{ required: false, message: '故障描述不能为空', trigger: 'blur' }],
repairType: [{ required: false, message: '维修类型不能为空', trigger: 'change' }],
outsourcingId: [{ required: false, message: '外协单位不能为空', trigger: 'change' }],
repairer: [{ required: false, message: '维修人不能为空', trigger: 'blur' }],
checkedFault: [{ required: false, message: '检查后的故障判断不能为空', trigger: 'blur' }],
@ -352,7 +352,7 @@ const needProcessResolution = computed(() => currentStepOrder.value > 1);
const currentStepName = computed(() => {
const stepNames = {
1: '故障报修',
2: '维修处理',
2: '维修处理',
3: '维修确认'
};
return stepNames[currentStepOrder.value] || '处理工单';
@ -377,14 +377,14 @@ const confirmButtonShow = computed(() => {
// 2. (2)(0)
// 3. (2) -
return routeParams.value.type === 'confirm' ||
(workOrder.value.billsStatus === '2' &&
workOrder.value.repairConfirm === '0' &&
workOrder.value.approveStatus === '2');
(workOrder.value?.billsStatus === '2' &&
workOrder.value?.repairConfirm === '0' &&
workOrder.value?.approveStatus === '2');
});
//
const isApprovalStage = computed(() => {
return routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1';
return routeParams.value.type === 'approval' && workOrder.value?.approveStatus === '1';
});
//
@ -392,7 +392,7 @@ const submitButtonShow = computed(() => {
return (
routeParams.value.type === 'add' ||
(routeParams.value.type === 'update' &&
workOrder.value.billsStatus &&
workOrder.value?.billsStatus &&
(workOrder.value.billsStatus === 'draft' || workOrder.value.billsStatus === 'cancel' || workOrder.value.billsStatus === 'back'))
);
});
@ -414,16 +414,11 @@ onMounted(async () => {
await loadCurrentTask();
}
//
initializeFormData();
//
initializeFormData();
//
if (routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1') {
rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }];
}
//
updateOutsourcingValidation();
//
setDynamicValidationRules();
} catch (error) {
console.error('初始化失败:', error);
@ -446,17 +441,17 @@ watch(() => form.repairType, (newValue) => {
const loadWorkOrderInfo = async () => {
// querybusinessId
const businessId = routeParams.value.id;
if (!businessId) {
proxy?.$modal.msgError('缺少工单ID参数');
return;
}
const res = await getDmsBillsFaultInstance(businessId);
workOrder.value = res.data;
//
workOrderStatusText.value = getStatusText(workOrder.value.billsStatus);
workOrder.value = res.data || {}; // null
// -
workOrderStatusText.value = getStatusText(workOrder.value.billsStatus || '');
};
//
@ -464,21 +459,21 @@ const loadCurrentTask = async () => {
// querybusinessIdtaskId
const businessId = routeParams.value.id;
const taskId = routeParams.value.taskId;
// taskIdbusinessId
const taskRes = await pageByTaskWait({
pageNum: 1,
pageSize: 10,
flowCode: 'Fault01' //
});
const tasks = taskRes.rows.filter(task =>
const tasks = taskRes.rows.filter(task =>
task.businessId === businessId || task.id === taskId
);
if (tasks.length > 0) {
currentTask.value = tasks[0];
//
const nodeName = currentTask.value.nodeName;
if (nodeName === '故障报修') {
@ -488,7 +483,7 @@ const loadCurrentTask = async () => {
} else if (nodeName === '维修确认') {
currentStepOrder.value = 3;
}
//
if (needProcessResolution.value) {
rules.processHandleResolution = [
@ -501,41 +496,37 @@ const loadCurrentTask = async () => {
//
const initializeFormData = () => {
//
form.repairInstanceId = workOrder.value.repairInstanceId;
form.repairInstanceId = workOrder.value?.repairInstanceId;
form.processStepOrder = currentStepOrder.value;
// undefined
form.faultType = workOrder.value?.faultType || '';
form.faultDescription = workOrder.value?.faultDescription || '';
form.designOperations = workOrder.value?.designOperations || '';
form.repairType = workOrder.value?.repairType || '';
form.outsourcingId = workOrder.value?.outsourcingId || '';
form.checkedFault = workOrder.value?.checkedFault || '';
form.repairContent = workOrder.value?.repairContent || '';
form.protectedMethod = workOrder.value?.protectedMethod || '';
form.repairer = workOrder.value?.repairer || '';
form.repairConfirm = workOrder.value?.repairConfirm || '';
form.componentsPartsId = workOrder.value?.componentsPartsId || '';
if (currentStepOrder.value === 1) {
//
form.faultType = workOrder.value.faultType;
form.faultDescription = workOrder.value.faultDescription;
form.designOperations = workOrder.value.designOperations;
form.repairType = workOrder.value.repairType;
form.outsourcingId = workOrder.value.outsourcingId;
} else {
//
form.faultType = workOrder.value.faultType;
form.faultDescription = workOrder.value.faultDescription;
form.designOperations = workOrder.value.designOperations;
form.repairType = workOrder.value.repairType;
form.outsourcingId = workOrder.value.outsourcingId;
form.checkedFault = workOrder.value.checkedFault;
form.repairContent = workOrder.value.repairContent;
form.protectedMethod = workOrder.value.protectedMethod;
form.repairer = workOrder.value.repairer;
form.repairConfirm = workOrder.value.repairConfirm;
form.componentsPartsId = workOrder.value.componentsPartsId;
//
if (routeParams.value.type === 'approval' && !form.approveStatus) {
form.approveStatus = undefined; //
}
};
//
const submitForm = async (status: string) => {
if (!processFormRef.value) return;
try {
const valid = await processFormRef.value.validate();
if (valid) {
buttonLoading.value = true;
if (status === 'draft') {
//
await addDmsFaultInstanceActivity({
@ -555,7 +546,7 @@ const submitForm = async (status: string) => {
processStepOrder: form.processStepOrder,
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess('暂存成功');
goBack();
} else {
@ -579,7 +570,7 @@ const submitForm = async (status: string) => {
processStepOrder: form.processStepOrder
}
};
//
if (routeParams.value.taskId) {
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
@ -601,108 +592,73 @@ const submitForm = async (status: string) => {
//
const approvalVerifyOpen = async () => {
if (!processFormRef.value) return;
try {
const valid = await processFormRef.value.validate();
if (valid) {
//
if (routeParams.value.type === 'approval' && !form.approveStatus) {
proxy?.$modal.msgError('请选择审批状态');
return;
}
await proxy?.$modal.confirm('是否确认提交审批?');
// - SubmitVerifyWarm-Flow
taskVariables.value = {
//
entity: {
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder
}
};
buttonLoading.value = true;
//
if (routeParams.value.type === 'approval' && form.approveStatus) {
// taskVariablesapproveStatus - SubmitVerify
taskVariables.value.approveStatus = form.approveStatus;
console.log('设置审批状态变量:', form.approveStatus);
}
//
const approveStatus = form.approveStatus;
const message = form.processHandleResolution || '';
await approveWorkOrder(form.repairInstanceId, approveStatus, message);
//
if (routeParams.value.type === 'confirm' && form.repairConfirm) {
// 01
const repairConfirmValue = form.repairConfirm === '1' ? '0' : '1';
taskVariables.value.repairConfirm = repairConfirmValue;
console.log('设置确认结果变量:', repairConfirmValue);
}
const statusText = approveStatus === '2' ? '通过' : '拒绝';
proxy?.$modal.msgSuccess(`审批${statusText}成功`);
console.log('完整的工作流变量:', taskVariables.value);
// 使taskId
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
//
goBack();
}
} catch (error) {
proxy?.$modal.msgError('表单验证失败,请检查输入项');
} catch (error: any) {
if (error !== 'cancel' && error !== 'close') {
console.error('审批失败:', error);
proxy?.$modal.msgError('审批失败:' + (error.message || '未知错误'));
}
} finally {
buttonLoading.value = false;
}
};
//
const submitCallback = async (approvalResult?: any) => {
try {
//
if (routeParams.value.type === 'approval') {
// 使
const approveStatus = form.approveStatus; // 使
const message = approvalResult?.message || form.processHandleResolution || '';
await approveWorkOrder(form.repairInstanceId, approveStatus, message);
const statusText = approveStatus === '2' ? '通过' : '拒绝';
proxy?.$modal.msgSuccess(`审批${statusText}成功`);
} else if (routeParams.value.type === 'confirm') {
if (routeParams.value.type === 'confirm') {
//
const confirmResult = form.repairConfirm || '1'; //
await confirmRepairResult(form.repairInstanceId, confirmResult);
proxy?.$modal.msgSuccess('确认完成');
} else {
//
await addDmsFaultInstanceActivity({
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder,
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess(`${currentStepName.value}完成`);
//
await addDmsFaultInstanceActivity({
repairInstanceId: form.repairInstanceId,
faultType: form.faultType,
faultDescription: form.faultDescription,
designOperations: form.designOperations,
repairType: form.repairType,
outsourcingId: form.outsourcingId,
checkedFault: form.checkedFault || '',
repairContent: form.repairContent || '',
protectedMethod: form.protectedMethod || '',
repairer: form.repairer || '',
repairConfirm: form.repairConfirm,
componentsPartsId: form.componentsPartsId,
processHandleResolution: form.processHandleResolution || '',
processStepOrder: form.processStepOrder,
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess(`${currentStepName.value}完成`);
}
//
goBack();
} catch (error: any) {
console.error('操作失败:', error);
proxy?.$modal.msgError('操作失败:' + (error.message || '未知错误'));
}
} catch (error: any) {
console.error('操作失败:', error);
proxy?.$modal.msgError('操作失败:' + (error.message || '未知错误'));
}
};
//
@ -710,7 +666,7 @@ const handleConfirm = async () => {
try {
//
form.repairConfirm = '1'; // 1
//
await approvalVerifyOpen();
} catch (error: any) {
@ -744,15 +700,61 @@ const getOutsourceList = async () => {
//
const updateOutsourcingValidation = () => {
if (form.repairType === '2') {
//
//
if (routeParams.value.type !== 'approval' && form.repairType === '2') {
rules.outsourcingId = [{ required: true, message: '外协单位不能为空', trigger: 'change' }];
} else {
//
rules.outsourcingId = [{ required: false, message: '外协单位不能为空', trigger: 'change' }];
}
};
//
const setDynamicValidationRules = () => {
//
Object.keys(rules).forEach(key => {
rules[key] = [{ required: false, message: rules[key][0].message, trigger: rules[key][0].trigger }];
});
//
if (routeParams.value.type === 'approval') {
//
rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }];
if (needProcessResolution.value) {
rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }];
}
} else if (routeParams.value.type === 'confirm') {
//
rules.repairConfirm = [{ required: true, message: '维修结果不能为空', trigger: 'change' }];
rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }];
} else {
//
if (currentStepOrder.value === 1) {
//
rules.faultType = [{ required: true, message: '故障类型不能为空', trigger: 'change' }];
rules.faultDescription = [{ required: true, message: '故障描述不能为空', trigger: 'blur' }];
rules.repairType = [{ required: true, message: '维修类型不能为空', trigger: 'change' }];
} else if (currentStepOrder.value === 2) {
//
rules.repairer = [{ required: true, message: '维修人不能为空', trigger: 'blur' }];
rules.checkedFault = [{ required: true, message: '检查后的故障判断不能为空', trigger: 'blur' }];
rules.protectedMethod = [{ required: true, message: '维修措施不能为空', trigger: 'blur' }];
rules.repairContent = [{ required: true, message: '维修内容不能为空', trigger: 'blur' }];
if (needProcessResolution.value) {
rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }];
}
} else if (currentStepOrder.value === 3) {
//
rules.repairConfirm = [{ required: true, message: '维修结果不能为空', trigger: 'change' }];
if (needProcessResolution.value) {
rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }];
}
}
}
//
updateOutsourcingValidation();
};
//
const getStatusText = (status: string) => {
const statusMap = {
@ -772,4 +774,4 @@ const getStatusText = (status: string) => {
color: #303133;
font-weight: 600;
}
</style>
</style>

@ -0,0 +1,557 @@
<template>
<el-dialog v-model="dialog.visible" :title="dialog.title" width="50%" draggable :before-close="cancel" center :close-on-click-modal="false">
<el-form v-loading="loading" :model="form" label-width="120px">
<el-form-item label="消息提醒">
<el-checkbox-group v-model="form.messageType">
<el-checkbox value="1" name="type" disabled>站内信</el-checkbox>
<el-checkbox value="2" name="type">邮件</el-checkbox>
<el-checkbox value="3" name="type">短信</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item v-if="task.flowStatus === 'waiting'" label="附件">
<fileUpload v-model="form.fileId" :file-type="['png', 'jpg', 'jpeg', 'doc', 'docx', 'xlsx', 'xls', 'ppt', 'txt', 'pdf']" :file-size="20" />
</el-form-item>
<el-form-item label="抄送" v-if="task.flowStatus === 'waiting' && buttonObj.copy">
<el-button type="primary" icon="Plus" circle @click="openUserSelectCopy" />
<el-tag v-for="user in selectCopyUserList" :key="user.userId" closable style="margin: 2px" @close="handleCopyCloseTag(user)">
{{ user.nickName }}
</el-tag>
</el-form-item>
<el-form-item v-if="buttonObj.pop && nestNodeList && nestNodeList.length > 0" label="下一步审批人" prop="assigneeMap">
<div v-for="(item, index) in nestNodeList" :key="index" style="margin-bottom: 5px; width: 500px">
<span>{{ item.nodeName }}</span>
<el-input v-if="false" v-model="form.assigneeMap[item.nodeCode]" />
<el-input placeholder="请选择审批人" readonly v-model="nickName[item.nodeCode]">
<template v-slot:append>
<el-button @click="choosePeople(item)" icon="search">选择</el-button>
</template>
</el-input>
</div>
</el-form-item>
<el-form-item v-if="task.flowStatus === 'waiting'" label="审批意见">
<el-input v-model="form.message" type="textarea" resize="none" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button :disabled="buttonDisabled" type="primary" @click="handleCompleteTask"> </el-button>
<el-button v-if="task.flowStatus === 'waiting' && buttonObj.trust" :disabled="buttonDisabled" type="primary" @click="openDelegateTask">
委托
</el-button>
<el-button v-if="task.flowStatus === 'waiting' && buttonObj.transfer" :disabled="buttonDisabled" type="primary" @click="openTransferTask">
转办
</el-button>
<el-button
v-if="task.flowStatus === 'waiting' && Number(task.nodeRatio) > 0 && buttonObj.addSign"
:disabled="buttonDisabled"
type="primary"
@click="openMultiInstanceUser"
>
加签
</el-button>
<el-button
v-if="task.flowStatus === 'waiting' && Number(task.nodeRatio) > 0 && buttonObj.subSign"
:disabled="buttonDisabled"
type="primary"
@click="handleTaskUser"
>
减签
</el-button>
<el-button
v-if="task.flowStatus === 'waiting' && buttonObj.termination"
:disabled="buttonDisabled"
type="danger"
@click="handleTerminationTask"
>
终止
</el-button>
<el-button v-if="task.flowStatus === 'waiting' && buttonObj.back" :disabled="buttonDisabled" type="danger" @click="handleBackProcessOpen">
退回
</el-button>
<el-button :disabled="buttonDisabled" @click="cancel"></el-button>
</span>
</template>
<!-- 抄送 -->
<UserSelect ref="userSelectCopyRef" :multiple="true" :data="selectCopyUserIds" @confirm-call-back="userSelectCopyCallBack"></UserSelect>
<!-- 转办 -->
<UserSelect ref="transferTaskRef" :multiple="false" @confirm-call-back="handleTransferTask"></UserSelect>
<!-- 委托 -->
<UserSelect ref="delegateTaskRef" :multiple="false" @confirm-call-back="handleDelegateTask"></UserSelect>
<!-- 加签组件 -->
<UserSelect ref="multiInstanceUserRef" :multiple="true" @confirm-call-back="addMultiInstanceUser"></UserSelect>
<!-- 弹窗选人 -->
<UserSelect ref="porUserRef" :multiple="true" :userIds="popUserIds" @confirm-call-back="handlePopUser"></UserSelect>
<!-- 驳回开始 -->
<el-dialog v-model="backVisible" draggable title="驳回" width="40%" :close-on-click-modal="false">
<el-form v-if="task.flowStatus === 'waiting'" v-loading="backLoading" :model="backForm" label-width="120px">
<el-form-item label="驳回节点">
<el-select v-model="backForm.nodeCode" clearable placeholder="请选择" style="width: 300px">
<el-option v-for="item in taskNodeList" :key="item.nodeCode" :label="item.nodeName" :value="item.nodeCode" />
</el-select>
</el-form-item>
<el-form-item label="消息提醒">
<el-checkbox-group v-model="backForm.messageType">
<el-checkbox label="1" name="type" disabled>站内信</el-checkbox>
<el-checkbox label="2" name="type">邮件</el-checkbox>
<el-checkbox label="3" name="type">短信</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item v-if="task.flowStatus === 'waiting'" label="附件">
<fileUpload
v-model="backForm.fileId"
:file-type="['png', 'jpg', 'jpeg', 'doc', 'docx', 'xlsx', 'xls', 'ppt', 'txt', 'pdf']"
:file-size="20"
/>
</el-form-item>
<el-form-item label="审批意见">
<el-input v-model="backForm.message" type="textarea" resize="none" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer" style="float: right; padding-bottom: 20px">
<el-button :disabled="backButtonDisabled" type="primary" @click="handleBackProcess"></el-button>
<el-button :disabled="backButtonDisabled" @click="backVisible = false">取消</el-button>
</div>
</template>
</el-dialog>
<!-- 驳回结束 -->
<el-dialog v-model="deleteSignatureVisible" draggable title="减签人员" width="700px" height="400px" append-to-body :close-on-click-modal="false">
<div>
<el-table :data="deleteUserList" border>
<el-table-column prop="nodeName" label="任务名称" />
<el-table-column prop="nickName" label="办理人" />
<el-table-column label="操作" align="center" width="160">
<template #default="scope">
<el-button type="danger" size="small" icon="Delete" @click="deleteMultiInstanceUser(scope.row)"> </el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ComponentInternalInstance } from 'vue';
import { ElForm } from 'element-plus';
import {
completeTask,
backProcess,
getTask,
taskOperation,
terminationTask,
getBackTaskNode,
currentTaskAllUser,
getNextNodeList
} from '@/api/workflow/task';
import UserSelect from '@/components/UserSelect/index.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
import { UserVO } from '@/api/system/user/types';
import { FlowTaskVO, TaskOperationBo } from '@/api/workflow/task/types';
const userSelectCopyRef = ref<InstanceType<typeof UserSelect>>();
const transferTaskRef = ref<InstanceType<typeof UserSelect>>();
const delegateTaskRef = ref<InstanceType<typeof UserSelect>>();
const multiInstanceUserRef = ref<InstanceType<typeof UserSelect>>();
const porUserRef = ref<InstanceType<typeof UserSelect>>();
const props = defineProps({
taskVariables: {
type: Object as () => Record<string, any>,
default: () => {}
}
});
//
const loading = ref(true);
//
const buttonDisabled = ref(true);
//id
const taskId = ref<string>('');
//
const selectCopyUserList = ref<UserVO[]>([]);
//id
const selectCopyUserIds = ref<string>(undefined);
//
const deleteUserList = ref<any>([]);
//id
const popUserIds = ref<any>([]);
//
const backVisible = ref(false);
const backLoading = ref(true);
const backButtonDisabled = ref(true);
//
const taskNodeList = ref([]);
const nickName = ref({});
//
const nodeCode = ref<string>('');
const buttonObj = ref<any>({
pop: false,
trust: false,
transfer: false,
addSign: false,
subSign: false,
termination: false,
back: false
});
//
const nestNodeList = ref([]);
//
const task = ref<FlowTaskVO>({
id: undefined,
createTime: undefined,
updateTime: undefined,
tenantId: undefined,
definitionId: undefined,
instanceId: undefined,
flowName: undefined,
businessId: undefined,
nodeCode: undefined,
nodeName: undefined,
flowCode: undefined,
flowStatus: undefined,
formCustom: undefined,
formPath: undefined,
nodeType: undefined,
nodeRatio: undefined,
applyNode: false,
buttonList: []
});
const dialog = reactive<DialogOption>({
visible: false,
title: '提示'
});
//
const deleteSignatureVisible = ref(false);
const form = ref<Record<string, any>>({
taskId: undefined,
message: undefined,
assigneeMap: {},
variables: {},
messageType: ['1'],
flowCopyList: []
});
const backForm = ref<Record<string, any>>({
taskId: undefined,
nodeCode: undefined,
message: undefined,
variables: {},
messageType: ['1']
});
//
const openDialog = async (id?: string) => {
selectCopyUserIds.value = undefined;
selectCopyUserList.value = [];
form.value.fileId = undefined;
taskId.value = id;
form.value.message = undefined;
dialog.visible = true;
loading.value = true;
buttonDisabled.value = true;
const response = await getTask(taskId.value);
task.value = response.data;
buttonObj.value = {};
task.value.buttonList.forEach((e) => {
buttonObj.value[e.code] = e.show;
});
buttonDisabled.value = false;
const data = {
taskId: taskId.value,
variables: props.taskVariables
};
const nextData = await getNextNodeList(data);
nestNodeList.value = nextData.data;
loading.value = false;
};
onMounted(() => {});
const emits = defineEmits(['submitCallback', 'cancelCallback']);
/** 办理流程 */
const handleCompleteTask = async () => {
form.value.taskId = taskId.value;
form.value.taskVariables = props.taskVariables;
let verify = false;
if (buttonObj.value.pop && nestNodeList.value && nestNodeList.value.length > 0) {
nestNodeList.value.forEach((e) => {
if (
Object.keys(form.value.assigneeMap).length === 0 ||
form.value.assigneeMap[e.nodeCode] === '' ||
form.value.assigneeMap[e.nodeCode] === null ||
form.value.assigneeMap[e.nodeCode] === undefined
) {
verify = true;
}
});
if (verify) {
proxy?.$modal.msgWarning('请选择审批人!');
return false;
}
} else {
form.value.assigneeMap = {};
}
if (selectCopyUserList.value && selectCopyUserList.value.length > 0) {
const flowCopyList = [];
selectCopyUserList.value.forEach((e) => {
const copyUser = {
userId: e.userId,
userName: e.nickName
};
flowCopyList.push(copyUser);
});
form.value.flowCopyList = flowCopyList;
}
//
if (props.taskVariables && typeof props.taskVariables === 'object') {
const taskVars = props.taskVariables as any;
// 1.
if (taskVars.entity) {
form.value.entity = taskVars.entity;
}
// 2. -
if (taskVars.variables) {
form.value.variables = taskVars.variables;
console.log('设置工作流变量:', form.value.variables);
}
// 3.
if (taskVars.approveStatus) {
form.value.approveStatus = taskVars.approveStatus;
}
// 4.
if (taskVars.repairConfirm !== undefined) {
form.value.repairConfirm = taskVars.repairConfirm;
}
}
await proxy?.$modal.confirm('是否确认提交?');
loading.value = true;
buttonDisabled.value = true;
try {
await completeTask(form.value);
dialog.visible = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
} finally {
loading.value = false;
buttonDisabled.value = false;
}
};
/** 驳回弹窗打开 */
const handleBackProcessOpen = async () => {
backForm.value = {};
backForm.value.messageType = ['1'];
backVisible.value = true;
backLoading.value = true;
backButtonDisabled.value = true;
const data = await getBackTaskNode(task.value.definitionId, task.value.nodeCode);
taskNodeList.value = data.data;
backLoading.value = false;
backButtonDisabled.value = false;
backForm.value.nodeCode = taskNodeList.value[0].nodeCode;
};
/** 驳回流程 */
const handleBackProcess = async () => {
backForm.value.taskId = taskId.value;
await proxy?.$modal.confirm('是否确认驳回到申请人?');
loading.value = true;
backLoading.value = true;
backButtonDisabled.value = true;
await backProcess(backForm.value).finally(() => {
loading.value = false;
buttonDisabled.value = false;
});
dialog.visible = false;
backLoading.value = false;
backButtonDisabled.value = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
};
//
const cancel = async () => {
dialog.visible = false;
buttonDisabled.value = false;
nickName.value = {};
form.value.assigneeMap = {};
emits('cancelCallback');
};
//
const openUserSelectCopy = () => {
userSelectCopyRef.value.open();
};
//
const userSelectCopyCallBack = (data: UserVO[]) => {
if (data && data.length > 0) {
selectCopyUserList.value = data;
selectCopyUserIds.value = selectCopyUserList.value.map((item) => item.userId).join(',');
}
};
//
const handleCopyCloseTag = (user: UserVO) => {
const userId = user.userId;
// 使split
const index = selectCopyUserList.value.findIndex((item) => item.userId === userId);
selectCopyUserList.value.splice(index, 1);
selectCopyUserIds.value = selectCopyUserList.value.map((item) => item.userId).join(',');
};
//
const openMultiInstanceUser = async () => {
multiInstanceUserRef.value.open();
};
//
const addMultiInstanceUser = async (data) => {
if (data && data.length > 0) {
const taskOperationBo = reactive<TaskOperationBo>({
userIds: data.map((e) => e.userId),
taskId: taskId.value,
message: form.value.message
});
await proxy?.$modal.confirm('是否确认提交?');
loading.value = true;
buttonDisabled.value = true;
await taskOperation(taskOperationBo, 'addSignature').finally(() => {
loading.value = false;
buttonDisabled.value = false;
});
dialog.visible = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
} else {
proxy?.$modal.msgWarning('请选择用户!');
}
};
//
const deleteMultiInstanceUser = async (row) => {
await proxy?.$modal.confirm('是否确认提交?');
loading.value = true;
buttonDisabled.value = true;
const taskOperationBo = reactive<TaskOperationBo>({
userIds: [row.userId],
taskId: taskId.value,
message: form.value.message
});
await taskOperation(taskOperationBo, 'reductionSignature').finally(() => {
loading.value = false;
buttonDisabled.value = false;
});
dialog.visible = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
};
//
const openTransferTask = () => {
transferTaskRef.value.open();
};
//
const handleTransferTask = async (data) => {
if (data && data.length > 0) {
const taskOperationBo = reactive<TaskOperationBo>({
userId: data[0].userId,
taskId: taskId.value,
message: form.value.message
});
await proxy?.$modal.confirm('是否确认提交?');
loading.value = true;
buttonDisabled.value = true;
await taskOperation(taskOperationBo, 'transferTask').finally(() => {
loading.value = false;
buttonDisabled.value = false;
});
dialog.visible = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
} else {
proxy?.$modal.msgWarning('请选择用户!');
}
};
//
const openDelegateTask = () => {
delegateTaskRef.value.open();
};
//
const handleDelegateTask = async (data) => {
if (data && data.length > 0) {
const taskOperationBo = reactive<TaskOperationBo>({
userId: data[0].userId,
taskId: taskId.value,
message: form.value.message
});
await proxy?.$modal.confirm('是否确认提交?');
loading.value = true;
buttonDisabled.value = true;
await taskOperation(taskOperationBo, 'delegateTask').finally(() => {
loading.value = false;
buttonDisabled.value = false;
});
dialog.visible = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
} else {
proxy?.$modal.msgWarning('请选择用户!');
}
};
//
const handleTerminationTask = async () => {
const params = {
taskId: taskId.value,
comment: form.value.message
};
await proxy?.$modal.confirm('是否确认终止?');
loading.value = true;
buttonDisabled.value = true;
await terminationTask(params).finally(() => {
loading.value = false;
buttonDisabled.value = false;
});
dialog.visible = false;
emits('submitCallback');
proxy?.$modal.msgSuccess('操作成功');
};
const handleTaskUser = async () => {
const data = await currentTaskAllUser(taskId.value);
deleteUserList.value = data.data;
if (deleteUserList.value && deleteUserList.value.length > 0) {
deleteUserList.value.forEach((e) => {
e.nodeName = task.value.nodeName;
});
}
deleteSignatureVisible.value = true;
};
//
const choosePeople = async (data) => {
if (!data.permissionFlag) {
proxy?.$modal.msgError('没有可选择的人员,请联系管理员!');
}
popUserIds.value = data.permissionFlag;
nodeCode.value = data.nodeCode;
porUserRef.value.open();
};
//
const handlePopUser = async (userList) => {
const userIds = userList.map((item) => {
return item.userId;
});
const nickNames = userList.map((item) => {
return item.nickName;
});
form.value.assigneeMap[nodeCode.value] = userIds.join(',');
nickName.value[nodeCode.value] = nickNames.join(',');
};
/**
* 对外暴露子组件方法
*/
defineExpose({
openDialog
});
</script>

@ -134,7 +134,7 @@
</el-card>
<!-- 添加或修改班组信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="baseClassTeamInfoFormRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="baseClassTeamInfoFormRef" :model="form" :rules="rules" label-width="100px">
<!-- <el-form-item label="主键标识" prop="classTeamId">
<el-input v-model="form.classTeamId" placeholder="请输入主键标识" />
</el-form-item>-->
@ -292,10 +292,10 @@ const columns = ref<FieldOption[]>([
{ key: 0, label: `班组编号`, visible: true },
{ key: 1, label: `班组名称`, visible: true },
{ key: 2, label: `班组负责人`, visible: true },
{ key: 3, label: `班次`, visible: true },
{ key: 4, label: `工序`, visible: true },
{ key: 5, label: `工位`, visible: true },
{ key: 6, label: `设备`, visible: true },
{ key: 3, label: `班次`, visible: false },
{ key: 4, label: `工序`, visible: false },
{ key: 5, label: `工位`, visible: false },
{ key: 6, label: `设备`, visible: false },
{ key: 7, label: `激活标识`, visible: true },
/* { key: 10, label: ``, visible: true },
{ key: 11, label: `创建人`, visible: true },

@ -13,11 +13,11 @@
<el-option v-for='dict in mes_route_active_flag' :key='dict.value' :label='dict.label' :value='dict.value'/>
</el-select>
</el-form-item>
<!-- <el-form-item label='首件检验' prop='needFirstInspect'>-->
<!-- <el-select v-model='queryParams.needFirstInspect' placeholder='请选择首件检验' clearable>-->
<!-- <el-option v-for='dict in mes_need_first_inspect' :key='dict.value' :label='dict.label' :value='dict.value'/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label='首件检验' prop='needFirstInspect'>-->
<!-- <el-select v-model='queryParams.needFirstInspect' placeholder='请选择首件检验' clearable>-->
<!-- <el-option v-for='dict in mes_need_first_inspect' :key='dict.value' :label='dict.label' :value='dict.value'/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type='primary' icon='Search' @click='handleQuery'>搜索</el-button>
<el-button icon='Refresh' @click='resetQuery'>重置</el-button>
@ -110,23 +110,14 @@
</el-table-column>
<el-table-column label='操作' align='center' class-name='small-padding fixed-width'>
<template #default='scope'>
<!-- <el-tooltip content='修改' placement='top'>
<el-button link type='primary' icon='Edit' @click='handleUpdate(scope.row)'
v-hasPermi="['mes:baseRoute:edit']"></el-button>
</el-tooltip>
<el-tooltip content='删除' placement='top'>
<el-button link type='primary' icon='Delete' @click='handleDelete(scope.row)'
v-hasPermi="['mes:baseRoute:remove']"></el-button>
</el-tooltip>-->
<el-button
size="small"
type="text"
icon="el-icon-edit"
@click="routeProcessUpdate(scope.row)"
v-hasPermi="['mes:baseRoute:edit']"
>工艺步骤
</el-button>
<!-- <el-tooltip content='修改' placement='top'>
<el-button link type='primary' icon='Edit' @click='handleUpdate(scope.row)'
v-hasPermi="['mes:baseRoute:edit']"></el-button>
</el-tooltip>
<el-tooltip content='删除' placement='top'>
<el-button link type='primary' icon='Delete' @click='handleDelete(scope.row)'
v-hasPermi="['mes:baseRoute:remove']"></el-button>
</el-tooltip>-->
<el-button
size="small"
@ -137,6 +128,15 @@
>关联物料
</el-button>
<el-button
size="small"
type="text"
icon="el-icon-edit"
@click="routeProcessUpdate(scope.row)"
v-hasPermi="['mes:baseRoute:edit']"
>关联工艺步骤
</el-button>
</template>
</el-table-column>
</el-table>
@ -176,20 +176,20 @@
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label='审核原因' prop='auditReason'>-->
<!-- <el-input v-model='form.auditReason' placeholder='请输入审核原因' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='审核人' prop='approveBy'>-->
<!-- <el-input v-model='form.approveBy' placeholder='请输入审核人' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='审核时间' prop='approveTime'>-->
<!-- <el-date-picker clearable-->
<!-- v-model='form.approveTime'-->
<!-- type='datetime'-->
<!-- value-format='YYYY-MM-DD HH:mm:ss'-->
<!-- placeholder='请选择审核时间'>-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label='审核原因' prop='auditReason'>-->
<!-- <el-input v-model='form.auditReason' placeholder='请输入审核原因' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='审核人' prop='approveBy'>-->
<!-- <el-input v-model='form.approveBy' placeholder='请输入审核人' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='审核时间' prop='approveTime'>-->
<!-- <el-date-picker clearable-->
<!-- v-model='form.approveTime'-->
<!-- type='datetime'-->
<!-- value-format='YYYY-MM-DD HH:mm:ss'-->
<!-- placeholder='请选择审核时间'>-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label='首件检验' prop='needFirstInspect'>
<el-radio-group v-model='form.needFirstInspect'>
<el-radio
@ -211,16 +211,16 @@
<el-form-item label='批次量' prop='batchSize'>
<el-input-number v-model='form.batchSize' placeholder='请输入批次量' />
</el-form-item>
<!-- <el-form-item label='状态' prop='activeFlag'>-->
<!-- <el-radio-group v-model='form.activeFlag'>-->
<!-- <el-radio-->
<!-- v-for='dict in mes_route_active_flag'-->
<!-- :key='dict.value'-->
<!-- :value='dict.value'-->
<!-- >{{ dict.label }}-->
<!-- </el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item label='状态' prop='activeFlag'>-->
<!-- <el-radio-group v-model='form.activeFlag'>-->
<!-- <el-radio-->
<!-- v-for='dict in mes_route_active_flag'-->
<!-- :key='dict.value'-->
<!-- :value='dict.value'-->
<!-- >{{ dict.label }}-->
<!-- </el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<el-form-item label='备注' prop='remark'>
<el-input v-model='form.remark' placeholder='请输入备注' />
</el-form-item>
@ -233,64 +233,7 @@
</template>
</el-dialog>
<!--维护工艺路线步骤对话框-->
<el-dialog :title='dialog.title' v-model='ifOpen' width='500px' append-to-body>
<el-form ref='baseRouteFormRef' :model='form' :rules='rules' label-width='110px'>
<el-form-item label='工艺路线名称' prop='routeName'>
<el-input v-model='form.routeName' placeholder='请输入工艺路线名称' disabled />
</el-form-item>
<el-divider content-position='center'>工艺路线组成信息</el-divider>
<el-row :gutter='10' class='mb8'>
<el-col :span='1.5'>
<el-button type='primary' icon='Plus' size='small' @click='handleAddProdBaseRouteProcess'>添加</el-button>
</el-col>
<el-col :span='1.5'>
<el-button type='danger' icon='Delete' size='small' @click='handleDeleteProdBaseRouteProcess'>删除</el-button>
</el-col>
<!-- <el-col :span='1.5'>
<span v-show='tagShow'>提示:该工艺路线已关联生产工单无法修改</span>
</el-col> -->
</el-row>
<!-- <el-table :data='routeProcessBoList' :row-class-name='rowProdBaseRouteProcessIndex'
@selection-change='handleProdBaseRouteProcessSelectionChange' ref='mesBaseRouteProcess'>-->
<el-table
:data="routeProcessBoList"
:row-class-name="rowProdBaseRouteProcessIndex"
@selection-change="handleProdBaseRouteProcessSelectionChange"
ref="mesBaseRouteProcess"
>
<el-table-column type='selection' width='50' align='center' />
<el-table-column label='序号' align='center' prop='index' v-if='false' />
<el-table-column label='工艺路线顺序' prop='processOrder' width='100'>
<template #default='scope'>
<el-input v-model='scope.row.processOrder' />
</template>
</el-table-column>
<el-table-column label='工序' prop='processId'>
<template #default='scope'>
<el-select v-model='scope.row.processId' filterable placeholder='请选择工序' clearable>
<el-option
v-for='item in processList'
:key='item.processId'
:label='item.processName'
:value='item.processId'
:disabled='routeProcessBoList.some(i => i.processId === item.processId)'
/>
</el-select>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button type='primary' @click='submitForm' v-show='submitShow'> </el-button>
<el-button @click='cancel'> </el-button>
</div>
</template>
</el-dialog>
<!--维护工艺路线关联物料对话框-->
<!--维护工艺路线关联物料对话框-->
<el-dialog :title='dialog.title' v-model='materialOpen' width='700px' append-to-body>
<el-form ref='baseRouteFormRef' :model='form' :rules='rules' label-width='110px'>
<el-form-item label='工艺路线名称' prop='routeName'>
@ -338,7 +281,7 @@
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button type='primary' @click='submitForm' v-show='submitShow'> </el-button>
<el-button type='primary' @click='submitForm' > </el-button>
<el-button @click='cancel'> </el-button>
</div>
</template>
@ -353,20 +296,344 @@
</template>
</el-dialog>
<!-- 关联工艺步骤对话框 -->
<el-dialog :title='dialog.title' v-model='processOpen' width='1200px' append-to-body>
<el-form ref='baseRouteFormRef' :model='form' label-width='100px'>
<el-form-item label='工艺路线名称' prop='routeName'>
<el-input v-model='form.routeName' placeholder='请输入工艺路线名称' disabled />
</el-form-item>
<el-divider content-position='center'>工艺路线关联工艺步骤信息</el-divider>
<el-row :gutter='10' class='mb8'>
<el-col :span='1.5'>
<el-button type='primary' icon='Plus' size='small' @click='handleAddRouteProcess'>添加工艺步骤</el-button>
</el-col>
</el-row>
<el-table
:data="routeProcessList"
:row-class-name="rowRouteProcessIndex"
ref="mesBaseRouteProcess"
>
<el-table-column type='selection' width='50' align='center' />
<el-table-column label='序号' align='center' prop='index' v-if='false' />
<el-table-column label='关联工序' prop='processId' align='center' width='180'>
<template #default='scope'>
<span>{{ getProcessName(scope.row.processId) }}</span>
</template>
</el-table-column>
<el-table-column label='工艺路线顺序' prop='processOrder' align='center' width='120' />
<el-table-column label='委外标识' prop='outsourcingFlag' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_outsourcing_flag' :value='scope.row.outsourcingFlag'/>
</template>
</el-table-column>
<el-table-column label='工序类型' prop='operationType' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='process_type' :value='scope.row.operationType'/>
</template>
</el-table-column>
<el-table-column label='是否需要上料' prop='needFeeding' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_need_feeding' :value='scope.row.needFeeding'/>
</template>
</el-table-column>
<el-table-column label='设备点检' prop='needEquipmentCheck' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_need_equipment_check' :value='scope.row.needEquipmentCheck'/>
</template>
</el-table-column>
<el-table-column label='实际产出率(%)' prop='actualYieldRate' align='center' width='120' />
<el-table-column label='领料方式' prop='materialIssuance' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_material_method' :value='scope.row.materialIssuance'/>
</template>
</el-table-column>
<el-table-column label='委外提前期(秒)' prop='outsourcingLeadTime' align='center' width='120' />
<el-table-column label='准备时间(秒)' prop='setupTime' align='center' width='120' />
<el-table-column label='加工时间(秒)' prop='processingTime' align='center' width='120' />
<el-table-column label='拆卸时间(秒)' prop='teardownTime' align='center' width='120' />
<el-table-column label='生产节拍(秒/件)' prop='productionTakt' align='center' width='120' />
<el-table-column label='质检方式' prop='inspectionMethod' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_inspection_method' :value='scope.row.inspectionMethod'/>
</template>
</el-table-column>
<el-table-column label='质量检验规则ID' prop='qualityRuleId' align='center' width='120' />
<el-table-column label='关键工序' prop='isKeyOperation' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_is_key_operation' :value='scope.row.isKeyOperation'/>
</template>
</el-table-column>
<el-table-column label='下工序要求' prop='nextStepRequirement' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_next_step_requirement' :value='scope.row.nextStepRequirement'/>
</template>
</el-table-column>
<el-table-column label='最后工序' prop='isFinalStep' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_is_final_step' :value='scope.row.isFinalStep'/>
</template>
</el-table-column>
<el-table-column label='生成流转卡任务' prop='generatePrepareTask' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='generate_prepare_task' :value='scope.row.generatePrepareTask'/>
</template>
</el-table-column>
<el-table-column label='瓶颈工序' prop='bottleneckFlag' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_bottleneck_flag' :value='scope.row.bottleneckFlag'/>
</template>
</el-table-column>
<el-table-column label='瓶颈设置' prop='bottleneckSetting' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_bottleneck_setting' :value='scope.row.bottleneckSetting'/>
</template>
</el-table-column>
<el-table-column label='接续关系' prop='successorRelation' align='center' width='120'>
<template #default='scope'>
<dict-tag :options='mes_successor_relation' :value='scope.row.successorRelation'/>
</template>
</el-table-column>
<el-table-column label='偏置时间(秒)' prop='offsetTime' align='center' width='120' />
<el-table-column label='技术附件' prop='techAttachments' align='center' width='120' />
<el-table-column label='质检员' prop='inspectors' align='center' width='120' />
<el-table-column label='备注' prop='remark' align='center' width='120' />
<el-table-column label='操作' align='center' width='120'>
<template #default='scope'>
<el-button
size="small"
type="text"
icon="Edit"
@click="handleEditRouteProcess(scope.row)"
>修改</el-button>
<el-button
size="small"
type="text"
icon="Delete"
@click="handleDeleteRouteProcess(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button type='primary' @click='submitForm'> </el-button>
<el-button @click='cancel'> </el-button>
</div>
</template>
</el-dialog>
<!-- 工艺步骤编辑弹窗 -->
<el-dialog :title='processDialog.title' v-model='processDialog.visible' width='800px' append-to-body>
<el-form ref='processFormRef' :model='processForm' :rules='processRules' label-width='120px'>
<el-form-item label='关联工序' prop='processId'>
<el-select v-model='processForm.processId' placeholder='请选择关联工序' clearable>
<el-option
v-for='item in processList'
:key='item.processId'
:label='item.processName'
:value='item.processId'
:disabled='routeProcessList.some(i => i.processId === item.processId && i !== processForm)'
></el-option>
</el-select>
</el-form-item>
<el-form-item label='工艺路线顺序' prop='processOrder'>
<el-input-number v-model='processForm.processOrder' :min='1' :controls='false' />
</el-form-item>
<el-form-item label='委外标识' prop='outsourcingFlag'>
<el-radio-group v-model='processForm.outsourcingFlag'>
<el-radio
v-for='dict in mes_outsourcing_flag'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='工序类型' prop='operationType'>
<el-select v-model='processForm.operationType' placeholder='请选择工序类型'>
<el-option
v-for='dict in process_type'
:key='dict.value'
:label='dict.label'
:value='dict.value'
></el-option>
</el-select>
</el-form-item>
<el-form-item label='是否需要上料' prop='needFeeding'>
<el-radio-group v-model='processForm.needFeeding'>
<el-radio
v-for='dict in mes_need_feeding'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='设备点检' prop='needEquipmentCheck'>
<el-radio-group v-model='processForm.needEquipmentCheck'>
<el-radio
v-for='dict in mes_need_equipment_check'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='实际产出率(%)' prop='actualYieldRate'>
<el-input-number v-model='processForm.actualYieldRate' :min='0' :max='100' :controls='false' />
</el-form-item>
<el-form-item label='领料方式' prop='materialIssuance'>
<el-select v-model='processForm.materialIssuance' placeholder='请选择领料方式'>
<el-option
v-for='dict in mes_material_method'
:key='dict.value'
:label='dict.label'
:value='dict.value'
></el-option>
</el-select>
</el-form-item>
<el-form-item label='委外提前期(秒)' prop='outsourcingLeadTime'>
<el-input-number v-model='processForm.outsourcingLeadTime' :min='0' :controls='false' />
</el-form-item>
<el-form-item label='准备时间(秒)' prop='setupTime'>
<el-input-number v-model='processForm.setupTime' :min='0' :controls='false' />
</el-form-item>
<el-form-item label='加工时间(秒)' prop='processingTime'>
<el-input-number v-model='processForm.processingTime' :min='0' :controls='false' />
</el-form-item>
<el-form-item label='拆卸时间(秒)' prop='teardownTime'>
<el-input-number v-model='processForm.teardownTime' :min='0' :controls='false' />
</el-form-item>
<el-form-item label='生产节拍(秒/件)' prop='productionTakt'>
<el-input-number v-model='processForm.productionTakt' :min='0' :controls='false' />
</el-form-item>
<el-form-item label='质检方式' prop='inspectionMethod'>
<el-select v-model='processForm.inspectionMethod' placeholder='请选择质检方式'>
<el-option
v-for='dict in mes_inspection_method'
:key='dict.value'
:label='dict.label'
:value='dict.value'
></el-option>
</el-select>
</el-form-item>
<el-form-item label='质量检验规则ID' prop='qualityRuleId'>
<el-input v-model='processForm.qualityRuleId' placeholder='请输入质量检验规则ID' />
</el-form-item>
<el-form-item label='关键工序' prop='isKeyOperation'>
<el-radio-group v-model='processForm.isKeyOperation'>
<el-radio
v-for='dict in mes_is_key_operation'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='下工序要求' prop='nextStepRequirement'>
<el-radio-group v-model='processForm.nextStepRequirement'>
<el-radio
v-for='dict in mes_next_step_requirement'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='最后工序' prop='isFinalStep'>
<el-radio-group v-model='processForm.isFinalStep'>
<el-radio
v-for='dict in mes_is_final_step'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='生成流转卡任务' prop='generatePrepareTask'>
<el-radio-group v-model='processForm.generatePrepareTask'>
<el-radio
v-for='dict in generate_prepare_task'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='瓶颈工序' prop='bottleneckFlag'>
<el-radio-group v-model='processForm.bottleneckFlag'>
<el-radio
v-for='dict in mes_bottleneck_flag'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='瓶颈设置' prop='bottleneckSetting'>
<el-radio-group v-model='processForm.bottleneckSetting'>
<el-radio
v-for='dict in mes_bottleneck_setting'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='接续关系' prop='successorRelation'>
<el-radio-group v-model='processForm.successorRelation'>
<el-radio
v-for='dict in mes_successor_relation'
:key='dict.value'
:value='dict.value'
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='偏置时间(秒)' prop='offsetTime'>
<el-input-number v-model='processForm.offsetTime' :min='0' :controls='false' />
</el-form-item>
<el-form-item label='技术附件' prop='techAttachments'>
<el-input v-model='processForm.techAttachments' placeholder='请输入技术附件' />
</el-form-item>
<el-form-item label='质检员' prop='inspectors'>
<el-input v-model='processForm.inspectors' placeholder='请输入质检员' />
</el-form-item>
<el-form-item label='备注' prop='remark'>
<el-input v-model='processForm.remark' placeholder='请输入备注' />
</el-form-item>
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button type='primary' @click='submitProcessDialog'> </el-button>
<el-button @click='cancelProcessDialog'> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name='BaseRoute' lang='ts'>
import { listBaseRoute, getBaseRoute, delBaseRoute, addBaseRoute, updateBaseRoute } from '@/api/mes/baseRoute';
import { BaseRouteVO, BaseRouteQuery, BaseRouteForm, ProdBaseRouteProcess, ProdBaseRouteMaterial } from '@/api/mes/baseRoute/types';
import {getProcessInfoList} from "@/api/mes/baseProcessInfo";
import { getMaterialList } from '@/api/wms/linkage';
import MaterialSelect from '@/views/mes/baseMaterialInfo/addMaterial.vue';
/*import type { ProdBaseRouteProcess } from '@/api/mes/baseRoute/types';*/
import { listBaseProcessInfo } from '@/api/mes/baseProcessInfo';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { mes_route_active_flag, mes_process_production_type, mes_need_first_inspect, mes_route_type, mes_print_flow_card, active_flag } = toRefs<any>(proxy?.useDict('mes_route_active_flag', 'mes_process_production_type', 'mes_need_first_inspect', 'mes_route_type', 'mes_print_flow_card', 'active_flag'));
const { mes_route_active_flag, mes_process_production_type, mes_need_first_inspect, mes_route_type, mes_print_flow_card, active_flag, mes_outsourcing_flag, process_type, mes_need_feeding, mes_need_equipment_check, mes_material_method, mes_inspection_method, mes_is_key_operation, mes_next_step_requirement, mes_is_final_step, generate_prepare_task, mes_bottleneck_flag, mes_bottleneck_setting, mes_successor_relation } = toRefs<any>(proxy?.useDict(
'mes_route_active_flag',
'mes_process_production_type',
'mes_need_first_inspect',
'mes_route_type',
'mes_print_flow_card',
'active_flag',
'mes_outsourcing_flag',
'process_type',
'mes_need_feeding',
'mes_need_equipment_check',
'mes_material_method',
'mes_inspection_method',
'mes_is_key_operation',
'mes_next_step_requirement',
'mes_is_final_step',
'generate_prepare_task',
'mes_bottleneck_flag',
'mes_bottleneck_setting',
'mes_successor_relation'
));
const baseRouteList = ref<BaseRouteVO[]>([]);
const buttonLoading = ref(false);
@ -380,24 +647,17 @@ const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const baseRouteFormRef = ref<ElFormInstance>();
// data
const routeProcessOpen = ref(false);
const submitShow = ref(true);
const tagShow = ref(false);
const routeProcessBoList = ref<any[]>([]);
const checkedProdBaseRouteProcess = ref<any[]>([]);
const processList = ref<any[]>([]);
//
const materialOpen = ref(false);
const prodBaseRouteMaterialList = ref<ProdBaseRouteMaterial[]>([]);
const checkedRouteMaterial = ref<ProdBaseRouteMaterial[]>([]);
const materialList = ref<any[]>([]);
//线false
const ifOpen = ref(false); // 使 ref
//
const processOpen = ref(false);
const routeProcessList = ref<ProdBaseRouteProcess[]>([]);
const checkedRouteProcess = ref<ProdBaseRouteProcess[]>([]);
const processList = ref<any[]>([]);
const dialog = reactive<DialogOption>({
visible: false,
@ -491,14 +751,15 @@ const cancel = () => {
reset();
dialog.visible = false;
materialOpen.value = false;
ifOpen.value = false;
processOpen.value = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
baseRouteFormRef.value?.resetFields();
routeProcessBoList.value = [];
prodBaseRouteMaterialList.value = [];
routeProcessList.value = [];
};
/** 搜索按钮操作 */
@ -549,8 +810,8 @@ const submitForm = () => {
}
buttonLoading.value = true;
form.value.routeProcessBoList = routeProcessBoList.value;
form.value.prodBaseRouteMaterialList = prodBaseRouteMaterialList.value;
form.value.routeProcessList = routeProcessList.value;
if (form.value.routeId) {
await updateBaseRoute(form.value).finally(() => buttonLoading.value = false);
} else {
@ -558,13 +819,10 @@ const submitForm = () => {
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
ifOpen.value = false;
materialOpen.value = false;
routeProcessBoList.value = [];
prodBaseRouteMaterialList.value = [];
form.value.routeProcessBoList = [];
processOpen.value = false;
routeProcessList.value = [];
form.value.prodBaseRouteMaterialList = [];
form.value.routeProcessVoList = [];
await getList();
}
});
@ -586,105 +844,6 @@ const handleExport = () => {
}, `baseRoute_${new Date().getTime()}.xlsx`);
};
// methods
/** 维护工艺路线步骤 */
const routeProcessUpdate = async (row: BaseRouteVO) => {
reset();
const _routeId = row?.routeId || ids.value[0];
submitShow.value = true;
// 线
ifOpen.value = true;
/* tagShow.value = false;*/
/* // 检查是否关联生产工单
const res = await listProductOrder({ dispatchId: _routeId });
if (res.rows.length > 0) {
submitShow.value = false;
tagShow.value = true;
}*/
//
const routeRes = await getBaseRoute(_routeId);
form.value = routeRes.data;
routeProcessBoList.value = routeRes.data.routeProcessVoList || [];
routeProcessOpen.value = true;
dialog.title = '维护工艺路线步骤';
};
/** 修改rowProdBaseRouteProcessIndex方法返回类名字符串 */
const rowProdBaseRouteProcessIndex = ({ row, rowIndex }: {
row: ProdBaseRouteProcess;
rowIndex: number
}): string => {
// processOrder
if (!row.processOrder) {
// index1
row.index = rowIndex + 1;
// processOrder(1)10
row.processOrder = (rowIndex + 1) * 10;
}
//
return '';
};
/** 工艺路线组成信息添加按钮操作 */
const handleAddProdBaseRouteProcess = () => {
// routeProcessBoList processOrder
const maxProcessOrder = routeProcessBoList.value.reduce((max, item) => {
return Math.max(max, item.processOrder || 0);
}, 0);
// processOrder maxProcessOrder + 10
const newProcessOrder = maxProcessOrder + 10;
routeProcessBoList.value.push({
processId: '', // ID
processOrder: newProcessOrder,
remark: '',
createBy: '',
createTime: '',
updateBy: '',
updateTime: ''
});
};
/** 工艺路线组成信息删除按钮操作 */
const handleDeleteProdBaseRouteProcess = () => {
// 线
if (checkedProdBaseRouteProcess.value.length === 0) {
proxy?.$modal.msgError('请先选择要删除的工艺路线组成信息数据');
} else {
// 线
routeProcessBoList.value = routeProcessBoList.value.filter(
item => !checkedProdBaseRouteProcess.value.includes(item.processId)
);
// processOrder
routeProcessBoList.value.forEach((item, index) => {
item.processOrder = (index + 1) * 10;
});
//
checkedProdBaseRouteProcess.value = [];
}
};
/** 复选框选中数据 */
const handleProdBaseRouteProcessSelectionChange = (selection: any[]) => {
// processId checkedProdBaseRouteProcess.value
checkedProdBaseRouteProcess.value = selection.map(item => item.processId);
};
const getProcessList = async () => {
const processRes = await getProcessInfoList(null);
processList.value = processRes.data;
};
/** 维护工艺路线关联物料 */
const routeMaterialUpdate = async (row: BaseRouteVO) => {
reset();
@ -692,7 +851,6 @@ const routeMaterialUpdate = async (row: BaseRouteVO) => {
const routeRes = await getBaseRoute(_routeId);
form.value = routeRes.data;
prodBaseRouteMaterialList.value = routeRes.data.prodBaseRouteMaterialList || [];
submitShow.value = true;
materialOpen.value = true;
dialog.title = '维护工艺路线关联物料';
};
@ -729,11 +887,6 @@ const handleRouteMaterialSelectionChange = (selection: ProdBaseRouteMaterial[])
checkedRouteMaterial.value = selection;
};
const getMaterialListOptions = async () => {
const res = await getMaterialList({});
materialList.value = res.data || [];
};
const materialSelectRef = ref();
const materialDialogOpen = ref(false);
const currentMaterialRowIndex = ref(-1);
@ -742,18 +895,170 @@ const openMaterialDialog = (rowIndex) => {
currentMaterialRowIndex.value = rowIndex;
materialDialogOpen.value = true;
};
const handleMaterialSelection = () => {
const selectedRow = materialSelectRef.value.tableRef.store.states.currentRow.value;
if (selectedRow && currentMaterialRowIndex.value !== -1) {
console.log(selectedRow);
prodBaseRouteMaterialList.value[currentMaterialRowIndex.value].materialId = selectedRow.materialId;
prodBaseRouteMaterialList.value[currentMaterialRowIndex.value].materialName = selectedRow.materialName;
}
materialDialogOpen.value = false;
};
//
const getProcessList = async () => {
const res = await listBaseProcessInfo(null);
processList.value = res.rows;
};
//
const routeProcessUpdate = async (row: BaseRouteVO) => {
reset();
const _routeId = row?.routeId || ids.value[0];
const routeRes = await getBaseRoute(_routeId);
form.value = routeRes.data;
// null
routeProcessList.value = routeRes.data.routeProcessList || [];
processOpen.value = true;
dialog.title = '维护工艺路线关联工艺步骤';
};
// rowRouteProcessIndex
const rowRouteProcessIndex = ({ row, rowIndex }: { row: any; rowIndex: number }): string => {
row.index = rowIndex + 1;
return '';
};
// script setup
const processDialog = reactive({
visible: false,
title: '',
isEdit: false
});
const processFormRef = ref<ElFormInstance>();
const processForm = ref<any>({
processId: '',
processOrder: 1,
outsourcingFlag: '0',
operationType: '1',
needFeeding: '0',
needEquipmentCheck: '0',
actualYieldRate: 100,
materialIssuance: '1',
outsourcingLeadTime: 0,
setupTime: 0,
processingTime: 0,
teardownTime: 0,
productionTakt: 0,
inspectionMethod: '1',
qualityRuleId: '',
isKeyOperation: '0',
nextStepRequirement: '0',
isFinalStep: '0',
generatePrepareTask: '0',
bottleneckFlag: '0',
bottleneckSetting: '0',
successorRelation: '0',
offsetTime: 0,
techAttachments: '',
inspectors: '',
remark: ''
});
const processRules = {
processId: [
{ required: true, message: '请选择关联工序', trigger: 'change' }
],
processOrder: [
{ required: true, message: '请输入工艺路线顺序', trigger: 'blur' }
]
};
//
const getProcessName = (processId: string) => {
const process = processList.value.find(item => item.processId === processId);
return process ? process.processName : '';
};
//
const handleAddRouteProcess = () => {
processDialog.isEdit = false;
processDialog.title = '添加工艺步骤';
processForm.value = {
processId: '',
processOrder: routeProcessList.value.length + 1,
outsourcingFlag: '0',
operationType: '1',
needFeeding: '0',
needEquipmentCheck: '0',
actualYieldRate: 100,
materialIssuance: '1',
outsourcingLeadTime: 0,
setupTime: 0,
processingTime: 0,
teardownTime: 0,
productionTakt: 0,
inspectionMethod: '1',
qualityRuleId: '',
isKeyOperation: '0',
nextStepRequirement: '0',
isFinalStep: '0',
generatePrepareTask: '0',
bottleneckFlag: '0',
bottleneckSetting: '0',
successorRelation: '0',
offsetTime: 0,
techAttachments: '',
inspectors: '',
remark: ''
};
processDialog.visible = true;
};
//
const handleEditRouteProcess = (row: any) => {
processDialog.isEdit = true;
processDialog.title = '修改工艺步骤';
processForm.value = { ...row };
processDialog.visible = true;
};
//
const handleDeleteRouteProcess = (row: any) => {
proxy?.$modal.confirm('是否确认删除该工艺步骤?').then(() => {
const index = routeProcessList.value.findIndex(item => item === row);
if (index !== -1) {
routeProcessList.value.splice(index, 1);
}
});
};
//
const submitProcessDialog = () => {
processFormRef.value?.validate((valid: boolean) => {
if (valid) {
if (processDialog.isEdit) {
const index = routeProcessList.value.findIndex(item => item === processForm.value);
if (index !== -1) {
routeProcessList.value[index] = { ...processForm.value };
}
} else {
routeProcessList.value.push({ ...processForm.value });
}
processDialog.visible = false;
}
});
};
//
const cancelProcessDialog = () => {
processDialog.visible = false;
processFormRef.value?.resetFields();
};
onMounted(() => {
getProcessList();
getList();
getProcessList();
});
</script>

@ -13,6 +13,11 @@
<el-form-item label="班次编号" prop="shiftCode">
<el-input v-model="queryParams.shiftCode" placeholder="请输入班次编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="班制类型" prop="classType">
<el-select v-model="queryParams.classType" placeholder="请选择班制类型" clearable >
<el-option v-for="dict in mes_class_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="班次名称" prop="shiftName">
<el-input v-model="queryParams.shiftName" placeholder="请输入班次名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
@ -99,6 +104,11 @@
<el-table-column label="租户编号" align="center" prop="tenantId" v-if="columns[1].visible"/>-->
<el-table-column label="班次编号" align="center" prop="shiftCode" v-if="columns[0].visible"/>
<el-table-column label="班次名称" align="center" prop="shiftName" v-if="columns[1].visible"/>
<el-table-column label="班制类型" align="center" prop="classType" v-if="columns[8].visible">
<template #default="scope">
<dict-tag :options="mes_class_type" :value="scope.row.classType"/>
</template>
</el-table-column>
<el-table-column label="开始时间" align="center" prop="startTime" v-if="columns[2].visible"/>
<el-table-column label="开始跨天标识" align="center" prop="startCrossFlag" v-if="columns[3].visible">
<template #default="scope">
@ -164,6 +174,15 @@
<el-form-item label="班次名称" prop="shiftName">
<el-input v-model="form.shiftName" placeholder="请输入班次名称" />
</el-form-item>
<el-form-item label="班制类型" prop="classType">
<el-radio-group v-model="form.classType">
<el-radio
v-for="dict in mes_class_type"
:key="dict.value"
:value="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<!-- <el-input v-model="form.startTime" placeholder="请输入开始时间" />-->
<el-time-picker
@ -271,7 +290,8 @@ import { BaseShiftInfoVO, BaseShiftInfoQuery, BaseShiftInfoForm } from '@/api/me
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { active_flag, mes_start_cross_flag, mes_end_cross_flag } = toRefs<any>(proxy?.useDict('active_flag', 'mes_start_cross_flag', 'mes_end_cross_flag'));
const { active_flag, mes_start_cross_flag, mes_end_cross_flag, mes_class_type } = toRefs<any>(proxy?.useDict('active_flag', 'mes_start_cross_flag', 'mes_end_cross_flag', 'mes_class_type'));
const baseShiftInfoList = ref<BaseShiftInfoVO[]>([]);
const buttonLoading = ref(false);
@ -307,6 +327,7 @@ const columns = ref<FieldOption[]>([
{ key: 12, label: `创建时间`, visible: true },
{ key: 13, label: `更新人`, visible: true },
{ key: 14, label: `更新时间`, visible: true },*/
{ key: 8, label: `班制类型`, visible: true },
]);
const initFormData: BaseShiftInfoForm = {
@ -380,6 +401,9 @@ const data = reactive<PageData<BaseShiftInfoForm, BaseShiftInfoQuery>>({
activeFlag: [
{ required: true, message: "激活标识不能为空", trigger: "change" }
],
classType: [
{ required: true, message: "班制类型不能为空", trigger: "change" }
]
}
});

@ -13,11 +13,11 @@
<el-form-item label="工装名称" prop="toolingName">
<el-input v-model="queryParams.toolingName" placeholder="请输入工装名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工装类型" prop="toolingTypeCode">
<el-select v-model="queryParams.toolingTypeCode" placeholder="请选择工装类型" clearable >
<el-option v-for="dict in tooling_type_code" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="工装类型" prop="toolingTypeCode">-->
<!-- <el-select v-model="queryParams.toolingTypeCode" placeholder="请选择工装类型" clearable >-->
<!-- <el-option v-for="dict in tooling_type_code" :key="dict.value" :label="dict.label" :value="dict.value"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="工装规格" prop="toolingSpecCode">
<el-select v-model="queryParams.toolingSpecCode" placeholder="请选择工装规格" clearable >
<el-option v-for="dict in tooling_spec_code" :key="dict.value" :label="dict.label" :value="dict.value"/>
@ -74,11 +74,7 @@
<el-table-column label="租户编号" align="center" prop="tenantId" v-if="columns[1].visible"/>
<el-table-column label="工装编号" align="center" prop="toolingCode" v-if="columns[2].visible"/>
<el-table-column label="工装名称" align="center" prop="toolingName" v-if="columns[3].visible"/>
<el-table-column label="工装类型" align="center" prop="toolingTypeCode" v-if="columns[4].visible">
<template #default="scope">
<dict-tag :options="tooling_type_code" :value="scope.row.toolingTypeCode"/>
</template>
</el-table-column>
<el-table-column label="工装类型" align="center" prop="toolingTypeName" v-if="columns[4].visible"/>
<el-table-column label="工装规格" align="center" prop="toolingSpecCode" v-if="columns[5].visible">
<template #default="scope">
<dict-tag :options="tooling_spec_code" :value="scope.row.toolingSpecCode"/>
@ -134,13 +130,13 @@
<el-input v-model="form.toolingName" placeholder="请输入工装名称" />
</el-form-item>
<el-form-item label="工装类型" prop="toolingTypeCode">
<el-select v-model="form.toolingTypeCode" placeholder="请选择工装类型">
<el-select v-model="form.toolingTypeId" placeholder="请选择工装类型">
<el-option
v-for="dict in tooling_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
v-for="item in toolingTypeList"
:key="item.toolingTypeId"
:label="item.toolingTypeName"
:value="item.toolingTypeId"
/>
</el-select>
</el-form-item>
<el-form-item label="工装规格" prop="toolingSpecCode">
@ -189,8 +185,17 @@
</template>
<script setup name="BaseToolingInfo" lang="ts">
import { listBaseToolingInfo, getBaseToolingInfo, delBaseToolingInfo, addBaseToolingInfo, updateBaseToolingInfo } from '@/api/mes/baseToolingInfo';
import {
listBaseToolingInfo,
getBaseToolingInfo,
delBaseToolingInfo,
addBaseToolingInfo,
updateBaseToolingInfo,
getBaseToolingInfoList
} from '@/api/mes/baseToolingInfo';
import { BaseToolingInfoVO, BaseToolingInfoQuery, BaseToolingInfoForm } from '@/api/mes/baseToolingInfo/types';
import { getFactoryList } from '@/api/mes/baseFactoryInfo';
import { getBaseToolingTypeList } from '@/api/mes/toolingType';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { active_flag, tooling_spec_code, tooling_type_code } = toRefs<any>(proxy?.useDict('active_flag', 'tooling_spec_code', 'tooling_type_code'));
@ -212,6 +217,13 @@ const dialog = reactive<DialogOption>({
title: ''
});
/** 查询工装类型下拉树结构 */
const toolingTypeList = ref([]);
const getToolingTypeListSelect = async () => {
let res = await getBaseToolingTypeList(null);
toolingTypeList.value = res.data;
};
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `主键标识`, visible: false },
@ -362,5 +374,6 @@ const handleExport = () => {
onMounted(() => {
getList();
getToolingTypeListSelect();
});
</script>

@ -148,6 +148,7 @@
<el-table-column label='计划数量' align='center' prop='planAmount' v-if='columns[16].visible' />
<el-table-column label='派工数量' align='center' prop='dispatchAmount' v-if='columns[17].visible' />
<el-table-column label='完成数量' align='center' prop='completeAmount' v-if='columns[18].visible' />
<el-table-column label='计量单位' align='center' prop='unitName' v-if='columns[37].visible' />
<el-table-column label='计划时间' align='center' prop='planBeginTime' width='180' v-if='columns[19].visible'>
<template #default='scope'>
<span>{{ parseTime(scope.row.planBeginTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
@ -238,17 +239,7 @@
</template>
</el-input>
</el-form-item>
<!-- <el-form-item label="归属部门" prop="deptId">-->
<!-- <el-tree-select-->
<!-- v-model="form.materialBomVersion"-->
<!-- :data="materialBomVersionOptions"-->
<!-- :props="{ value: 'id', label: 'label', children: 'children' }"-->
<!-- value-key="id"-->
<!-- placeholder="请选择归属部门"-->
<!-- check-strictly-->
<!-- @change="handleMaterialBomChange"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label='BOM版本' prop='materialBomVersion'>
<el-select v-model='form.materialBomVersion' placeholder='请选择BOM版本'>
<el-option
@ -378,14 +369,14 @@
</el-dialog>
<!-- 添加物料BOM信息对话框 -->
<el-dialog title='选择物料BOM信息' v-model='materialBomOpen' append-to-body>
<BomSelect @selection='handleSelection' ref='bomSelectRef' v-if='materialBomOpen'
:materialIdForm='materialIdForm'></BomSelect>
<div slot='footer' class='dialog-footer'>
<el-button type='primary' @click='submitMaterialBomForm'> </el-button>
<el-button @click='materialBomOpen = false'> </el-button>
</div>
</el-dialog>
<!-- <el-dialog title='选择物料BOM信息' v-model='materialBomOpen' append-to-body>-->
<!-- <BomSelect @selection='handleSelection' ref='bomSelectRef' v-if='materialBomOpen'-->
<!-- :materialIdForm='materialIdForm'></BomSelect>-->
<!-- <div slot='footer' class='dialog-footer'>-->
<!-- <el-button type='primary' @click='submitMaterialBomForm'> </el-button>-->
<!-- <el-button @click='materialBomOpen = false'> </el-button>-->
<!-- </div>-->
<!-- </el-dialog>-->
<!-- 添加物料信息对话框 -->
<el-dialog title='选择物料信息' v-model='materialOpen' width='1200px' append-to-body>
@ -956,7 +947,7 @@ const columns = ref<FieldOption[]>([
{ key: 24, label: `计划状态`, visible: true },
{ key: 25, label: `导入类型`, visible: false },
{ key: 26, label: `完成标识`, visible: true },
{ key: 27, label: `优先级`, visible: true },
{ key: 27, label: `优先级`, visible: false },
{ key: 28, label: `班次`, visible: true },
{ key: 29, label: `班组`, visible: true },
{ key: 30, label: `模号`, visible: true },
@ -965,7 +956,8 @@ const columns = ref<FieldOption[]>([
{ key: 33, label: `创建人`, visible: false },
{ key: 34, label: `创建时间`, visible: false },
{ key: 35, label: `更新人`, visible: false },
{ key: 36, label: `更新时间`, visible: false }
{ key: 36, label: `更新时间`, visible: false },
{ key: 37, label: `计量单位`, visible: true },
]);
const initFormData: PlanInfoForm = {
@ -1001,7 +993,26 @@ const initFormData: PlanInfoForm = {
modelCode: undefined,
remark: undefined,
materialBoMName: undefined,
workshopId: undefined
workshopId: undefined,
//
planAmount1: undefined,
planAmount2: undefined,
planAmount3: undefined,
planAmount4: undefined,
planAmount5: undefined,
planAmount6: undefined,
materialIdL: undefined,
materialNameL: undefined,
materialIdR: undefined,
materialNameR: undefined,
materialBomVersion: undefined,
materialBomVersionL: undefined,
materialBomVersionR: undefined,
materialBoMNameL: undefined,
materialBoMNameR: undefined,
materialBoMIdL: undefined,
materialBoMIdR: undefined,
shiftName: '',
};
const data = reactive<PageData<PlanInfoForm, PlanInfoQuery>>({
form: { ...initFormData },
@ -1039,7 +1050,11 @@ const data = reactive<PageData<PlanInfoForm, PlanInfoQuery>>({
classTeamId: undefined,
modelCode: undefined,
workshopId: undefined,
params: {}
params: {},
planRangeTime: undefined,
materialName: undefined,
shiftName: '',
shifitId: undefined,
},
rules: {
materialId: [
@ -1060,15 +1075,15 @@ const data = reactive<PageData<PlanInfoForm, PlanInfoQuery>>({
planBeginTime: [
{ required: true, message: '计划日期不能为空', trigger: 'blur' }
],
planAmount1: [
{ required: true, message: '早班数量不能为空', trigger: 'blur' }
],
planAmount2: [
{ required: true, message: '中班数量不能为空', trigger: 'blur' }
],
planAmount3: [
{ required: true, message: '晚班数量不能为空', trigger: 'blur' }
]
// planAmount1: [
// { required: true, message: '', trigger: 'blur' }
// ],
// planAmount2: [
// { required: true, message: '', trigger: 'blur' }
// ],
// planAmount3: [
// { required: true, message: '', trigger: 'blur' }
// ]
}
});
@ -1186,7 +1201,14 @@ const handleUpdate = async (row?: PlanInfoVO) => {
const _planId = row?.planId || ids.value[0];
const res = await getPlanInfo(_planId);
Object.assign(form.value, res.data);
form.value.finishFlag = form.value.finishFlag.split(',');
// finishFlag
if (Array.isArray(form.value.finishFlag)) {
// do nothing
} else if (typeof form.value.finishFlag === 'string') {
form.value.finishFlag = form.value.finishFlag.split(',').filter(Boolean).join(',');
} else {
form.value.finishFlag = [];
}
dialog.visible = true;
dialog.title = '修改生产计划信息';
};
@ -1209,12 +1231,14 @@ const submitForm = () => {
planInfoFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
form.value.finishFlag = form.value.finishFlag !== null ? form.value.finishFlag.join(',') : null;
// if (form.value.planId) {
// await updatePlanInfo(form.value).finally(() => buttonLoading.value = false);
// } else {
// await addPlanInfo(form.value).finally(() => buttonLoading.value = false);
// }
// finishFlag
if (Array.isArray(form.value.finishFlag)) {
form.value.finishFlag = form.value.finishFlag.join(',');
} else if (typeof form.value.finishFlag === 'string') {
// do nothing
} else {
form.value.finishFlag = '';
}
//
let assemblyData = batchesAddAssemblyData();
if (machineIds.value.length == 0) {
@ -1239,60 +1263,61 @@ const submitForm = () => {
/** 批量新增组装数据 */
const batchesAddAssemblyData = () => {
const formData = form.value;
formData.workshopId = workshopId.value;//
// workshopId
const workshopIdStr = formData.workshopId != null ? String(formData.workshopId) : '';
let list = [];
if (formData.planAmount1 > 0) {
if (typeof formData.planAmount1 === 'number' && formData.planAmount1 > 0) {
let data = { ...formData };
data.modelCode = formData.workshopId === '4' ? 'L' : null;
data.materialId = formData.workshopId === '4' ? formData.materialIdL : formData.materialId;
data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionL : formData.materialBomVersion;
data.modelCode = workshopIdStr === '4' ? 'L' : null;
data.materialId = workshopIdStr === '4' ? formData.materialIdL : formData.materialId;
data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionL : formData.materialBomVersion;
data.shiftId = '1';
data.planAmount = formData.planAmount1;
list.push(data);
}
if (formData.planAmount2 > 0) {
if (typeof formData.planAmount2 === 'number' && formData.planAmount2 > 0) {
let data = { ...formData };
data.modelCode = formData.workshopId === '4' ? 'L' : null;
data.modelCode = workshopIdStr === '4' ? 'L' : null;
data.shiftId = '2';
data.planAmount = formData.planAmount2;
data.materialId = formData.workshopId === '4' ? formData.materialIdL : formData.materialId;
data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionL : formData.materialBomVersion;
data.materialId = workshopIdStr === '4' ? formData.materialIdL : formData.materialId;
data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionL : formData.materialBomVersion;
list.push(data);
}
if (formData.planAmount3 > 0) {
if (typeof formData.planAmount3 === 'number' && formData.planAmount3 > 0) {
let data = { ...formData };
data.modelCode = formData.workshopId === '4' ? 'L' : null;
data.modelCode = workshopIdStr === '4' ? 'L' : null;
data.shiftId = '3';
data.planAmount = formData.planAmount3;
data.materialId = formData.workshopId === '4' ? formData.materialIdL : formData.materialId;
data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionL : formData.materialBomVersion;
data.materialId = workshopIdStr === '4' ? formData.materialIdL : formData.materialId;
data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionL : formData.materialBomVersion;
list.push(data);
}
if (formData.planAmount4 > 0) {
if (typeof formData.planAmount4 === 'number' && formData.planAmount4 > 0) {
let data = { ...formData };
data.modelCode = 'R';
data.shiftId = '1';
data.planAmount = formData.planAmount4;
data.materialId = formData.workshopId === '4' ? formData.materialIdR : formData.materialId;
data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionR : formData.materialBomVersion;
data.materialId = workshopIdStr === '4' ? formData.materialIdR : formData.materialId;
data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionR : formData.materialBomVersion;
list.push(data);
}
if (formData.planAmount5 > 0) {
if (typeof formData.planAmount5 === 'number' && formData.planAmount5 > 0) {
let data = { ...formData };
data.modelCode = 'R';
data.shiftId = '2';
data.planAmount = formData.planAmount5;
data.materialId = formData.workshopId === '4' ? formData.materialIdR : formData.materialId;
data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionR : formData.materialBomVersion;
data.materialId = workshopIdStr === '4' ? formData.materialIdR : formData.materialId;
data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionR : formData.materialBomVersion;
list.push(data);
}
if (formData.planAmount6 > 0) {
if (typeof formData.planAmount6 === 'number' && formData.planAmount6 > 0) {
let data = { ...formData };
data.modelCode = 'R';
data.shiftId = '3';
data.planAmount = formData.planAmount6;
data.materialId = formData.workshopId === '4' ? formData.materialIdR : formData.materialId;
data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionR : formData.materialBomVersion;
data.materialId = workshopIdStr === '4' ? formData.materialIdR : formData.materialId;
data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionR : formData.materialBomVersion;
list.push(data);
}
return list;
@ -1351,15 +1376,15 @@ const submitMaterialForm = () => {
};
/** 新增物料BOM按钮操作 */
const handleMaterialBomAdd = (modelCode) => {
if (form.value.materialId == null && form.value.materialIdL == null
&& form.value.materialIdR == null) {
proxy?.$modal.msgWarning('请先选择物料!');
return;
}
modelCodeRef.value = modelCode;
materialBomOpen.value = true;
};
// const handleMaterialBomAdd = (modelCode) => {
// if (form.value.materialId == null && form.value.materialIdL == null
// && form.value.materialIdR == null) {
// proxy?.$modal.msgWarning('');
// return;
// }
// modelCodeRef.value = modelCode;
// materialBomOpen.value = true;
// };
/** 提交物料BOM信息按钮 */
const submitMaterialBomForm = () => {
@ -1425,12 +1450,6 @@ const getTreeSelect = async () => {
materialBomVersionOptions.value = res.data;
};
async function handleMaterialBomChange(value: number | string) {
const response = await optionselect(value);
postOptions.value = response.data;
form.value.postIds = [];
}
onMounted(() => {
getWorkshopId();

@ -44,6 +44,11 @@
<el-option v-for='dict in machine_status' :key='dict.value' :label='dict.label' :value='dict.value' />
</el-select>
</el-form-item>
<el-form-item label="班制类型" prop="classType">
<el-select v-model="queryParams.classType" placeholder="请选择班制类型" clearable >
<el-option v-for="dict in mes_class_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type='primary' icon='Search' @click='handleQuery'>搜索</el-button>
<el-button icon='Refresh' @click='resetQuery'>重置</el-button>
@ -87,6 +92,11 @@
<el-table-column label='租户编号' align='center' prop='tenantId' v-if='columns[1].visible' />
<el-table-column label='机台编号' align='center' prop='machineCode' v-if='columns[2].visible' />
<el-table-column label='机台名称' align='center' prop='machineName' v-if='columns[3].visible' />
<el-table-column label="班制类型" align="center" prop="classType" v-if="columns[27].visible">
<template #default="scope">
<dict-tag :options="mes_class_type" :value="scope.row.classType"/>
</template>
</el-table-column>
<el-table-column label='资产编号' align='center' prop='assetNumber' v-if='columns[4].visible' />
<el-table-column label='机台位置' align='center' prop='machineLocation' v-if='columns[5].visible' />
<el-table-column label='机台类型' align='center' prop='machineType' v-if='columns[6].visible' />
@ -157,6 +167,15 @@
<el-form-item label='机台名称' prop='machineName'>
<el-input v-model='form.machineName' placeholder='请输入机台名称' />
</el-form-item>
<el-form-item label="班制类型" prop="classType">
<el-radio-group v-model="form.classType">
<el-radio
v-for="dict in mes_class_type"
:key="dict.value"
:value="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='资产编号' prop='assetNumber'>
<el-input v-model='form.assetNumber' placeholder='请输入资产编号' />
</el-form-item>
@ -346,8 +365,9 @@ const {
machine_status,
machine_data_type,
machine_data_encoding,
mes_class_type,
mes_instock_type
} = toRefs<any>(proxy?.useDict('machine_status', 'machine_data_type', 'machine_data_encoding', 'mes_instock_type'));
} = toRefs<any>(proxy?.useDict('machine_status', 'machine_data_type', 'machine_data_encoding', 'mes_class_type', 'mes_instock_type'));
const prodBaseMachineInfoList = ref<ProdBaseMachineInfoVO[]>([]);
const buttonLoading = ref(false);
@ -420,6 +440,7 @@ const columns = ref<FieldOption[]>([
{ key: 24, label: `数据编码格式`, visible: true },
{ key: 25, label: `请求间隔`, visible: true },
{ key: 26, label: `入库类型`, visible: true },
{ key: 27, label: `班制类型`, visible: true },
]);
const initFormData: ProdBaseMachineInfoForm = {
@ -458,6 +479,9 @@ const data = reactive<PageData<ProdBaseMachineInfoForm, ProdBaseMachineInfoQuery
],
machineName: [
{ required: true, message: '机台名称不能为空', trigger: 'blur' }
],
classType: [
{ required: true, message: '班制类型不能为空', trigger: 'blur' }
]
}
});

@ -0,0 +1,510 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width='120'>
<el-form-item label="工装类型编号" prop="toolingTypeCode">
<el-input v-model="queryParams.toolingTypeCode" placeholder="请输入工装类型编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工装类型名称" prop="toolingTypeName">
<el-input v-model="queryParams.toolingTypeName" placeholder="请输入工装类型名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['mes:toolingType:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['mes:toolingType:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['mes:toolingType:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['mes:toolingType:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="toolingTypeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键标识" align="center" prop="toolingTypeId" v-if="columns[0].visible"/>
<el-table-column label="工装类型编号" align="center" prop="toolingTypeCode" v-if="columns[2].visible"/>
<el-table-column label="工装类型名称" align="center" prop="toolingTypeName" v-if="columns[3].visible"/>
<el-table-column label="工装类型规格" align="center" prop="toolingSpecCode" v-if="columns[4].visible"/>
<el-table-column label="标准使用次数/秒" align="center" prop="standardLife" v-if="columns[5].visible"/>
<el-table-column label="标准重量(kg)" align="center" prop="standardWeight" v-if="columns[6].visible"/>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[7].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button size="small" type="text" icon="el-icon-edit" @click="handleRelationMaterial(scope.row)"></el-button>
<el-button size="small" type="text" icon="el-icon-edit" @click="handleRelationProcess(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改载具工装类型对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="toolingTypeFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="工装类型编号" prop="toolingTypeCode">
<el-input v-model="form.toolingTypeCode" placeholder="请输入工装类型编号" />
</el-form-item>
<el-form-item label="工装类型名称" prop="toolingTypeName">
<el-input v-model="form.toolingTypeName" placeholder="请输入工装类型名称" />
</el-form-item>
<el-form-item label="工装类型规格" prop="toolingSpecCode">
<el-input v-model="form.toolingSpecCode" placeholder="请输入工装类型规格" />
</el-form-item>
<el-form-item label="标准使用次数/秒" prop="standardLife">
<el-input-number v-model="form.standardLife" placeholder="请输入标准使用次数/秒" />
</el-form-item>
<el-form-item label="标准重量(kg)" prop="standardWeight">
<el-input-number v-model="form.standardWeight" placeholder="请输入标准重量(kg)" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog :title="'维护工装类型关联物料'" v-model="materialDialogOpen" width="700px" append-to-body>
<el-form label-width="120px" class="mb8">
<el-form-item label="工装类型编号">
<el-input v-model="currentToolingTypeCode" readonly />
</el-form-item>
<el-form-item label="工装类型名称">
<el-input v-model="currentToolingTypeName" readonly />
</el-form-item>
</el-form>
<el-divider content-position="center">工装类型关联物料信息</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="Plus" size="small" @click="handleAddRelationMaterial"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="Delete" size="small" @click="handleDeleteRelationMaterial"></el-button>
</el-col>
</el-row>
<el-table
:data="form.typeRelationList"
:row-class-name="rowRelationMaterialIndex"
@selection-change="handleRelationMaterialSelectionChange"
ref="relationMaterialTableRef"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="关联物料" prop="relationInfoId" align="center">
<template #default="scope">
<el-input
v-model="scope.row.materialName"
:placeholder="scope.row.materialName ? '': '请点击选择物料'"
readonly
@click="openMaterialDialog(scope.$index)"
/>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitMaterialForm"> </el-button>
<el-button @click="materialDialogOpen = false"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog title="选择物料信息" v-model="materialSelectDialogOpen" width="1200px" append-to-body>
<MaterialSelect ref="materialSelectRef" v-if="materialSelectDialogOpen"></MaterialSelect>
<template #footer>
<el-button type="primary" @click="handleMaterialSelection"> </el-button>
<el-button @click="materialSelectDialogOpen = false"> </el-button>
</template>
</el-dialog>
<el-dialog :title="'维护工装类型关联工序'" v-model="processDialogOpen" width="700px" append-to-body>
<el-form label-width="120px" class="mb8">
<el-form-item label="工装类型编号">
<el-input v-model="currentToolingTypeCode" readonly />
</el-form-item>
<el-form-item label="工装类型名称">
<el-input v-model="currentToolingTypeName" readonly />
</el-form-item>
</el-form>
<el-divider content-position="center">工装类型关联工序信息</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="Plus" size="small" @click="handleAddRelationProcess"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="Delete" size="small" @click="handleDeleteRelationProcess"></el-button>
</el-col>
</el-row>
<el-table
:data="form.processList"
:row-class-name="rowRelationProcessIndex"
@selection-change="handleRelationProcessSelectionChange"
ref="relationProcessTableRef"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="关联工序" prop="relationInfoId" align="center">
<template #default="scope">
<el-select
v-model="scope.row.relationInfoId"
placeholder="请选择工序名称"
@change="handleProcessChange(scope.$index)"
>
<el-option
v-for="item in processInfoList"
:key="item.processId"
:label="item.processName"
:value="item.processId"
:disabled="form.processList.some((row, idx) => row.relationInfoId === item.processId && idx !== scope.$index)"
/>
</el-select>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitProcessForm"> </el-button>
<el-button @click="processDialogOpen = false"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="ToolingType" lang="ts">
import { listToolingType, getToolingType, delToolingType, addToolingType, updateToolingType } from '@/api/mes/toolingType';
import { ToolingTypeVO, ToolingTypeQuery, ToolingTypeForm } from '@/api/mes/toolingType/types';
import MaterialSelect from '@/views/mes/baseMaterialInfo/addMaterial.vue';
import { getProcessInfoList } from '@/api/mes/baseProcessInfo';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const toolingTypeList = ref<ToolingTypeVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const toolingTypeFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const materialDialogOpen = ref(false);
const materialSelectDialogOpen = ref(false);
const materialSelectRef = ref();
const relationMaterialTableRef = ref();
let currentToolingTypeId = ref<string | number | undefined>(undefined);
let currentToolingTypeCode = ref<string>('');
let currentToolingTypeName = ref<string>('');
const checkedRelationMaterial = ref<any[]>([]);
const currentMaterialRowIndex = ref(-1);
const processDialogOpen = ref(false);
const relationProcessTableRef = ref();
const checkedRelationProcess = ref<any[]>([]);
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `主键标识`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `工装类型编号`, visible: true },
{ key: 3, label: `工装类型名称`, visible: true },
{ key: 4, label: `工装类型规格`, visible: true },
{ key: 5, label: `标准使用次数/秒`, visible: true },
{ key: 6, label: `标准重量(kg)`, visible: true },
{ key: 7, label: `备注`, visible: false },
{ key: 8, label: `创建部门`, visible: false },
{ key: 9, label: `创建人`, visible: false },
{ key: 10, label: `创建时间`, visible: false },
{ key: 11, label: `更新人`, visible: false },
{ key: 12, label: `更新时间`, visible: false },
{ key: 13, label: `删除标志`, visible: false },
]);
const initFormData: ToolingTypeForm = {
toolingTypeId: undefined,
toolingTypeCode: undefined,
toolingTypeName: undefined,
toolingSpecCode: undefined,
standardLife: undefined,
standardWeight: undefined,
remark: undefined,
}
const data = reactive<PageData<ToolingTypeForm, ToolingTypeQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
toolingTypeId: undefined,
toolingTypeCode: undefined,
toolingTypeName: undefined,
toolingSpecCode: undefined,
standardLife: undefined,
standardWeight: undefined,
params: {
}
},
rules: {
toolingTypeCode: [
{ required: true, message: "工装类型编号不能为空", trigger: "blur" }
],
toolingTypeName: [
{ required: true, message: "工装类型名称不能为空", trigger: "blur" }
],
}
});
const { queryParams, form, rules } = toRefs(data);
const processInfoList = ref([]);
/** 查询工序下拉树结构 */
const getProcessInfoListSelect = async () => {
let res = await getProcessInfoList(null);
processInfoList.value = res.data;
};
/** 查询载具工装类型列表 */
const getList = async () => {
loading.value = true;
const res = await listToolingType(queryParams.value);
toolingTypeList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
toolingTypeFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: ToolingTypeVO[]) => {
ids.value = selection.map(item => item.toolingTypeId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加载具工装类型";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: ToolingTypeVO) => {
reset();
const _toolingTypeId = row?.toolingTypeId || ids.value[0]
const res = await getToolingType(_toolingTypeId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改载具工装类型";
}
/** 提交按钮 */
const submitForm = () => {
toolingTypeFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.toolingTypeId) {
await updateToolingType(form.value).finally(() => buttonLoading.value = false);
} else {
await addToolingType(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
const submitMaterialForm =async () => {
buttonLoading.value = true;
await updateToolingType(form.value).finally(() => buttonLoading.value = false);
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
materialDialogOpen.value = false;
}
/** 删除按钮操作 */
const handleDelete = async (row?: ToolingTypeVO) => {
const _toolingTypeIds = row?.toolingTypeId || ids.value;
await proxy?.$modal.confirm('是否确认删除载具工装类型编号为"' + _toolingTypeIds + '"的数据项?').finally(() => loading.value = false);
await delToolingType(_toolingTypeIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('mes/toolingType/export', {
...queryParams.value
}, `toolingType_${new Date().getTime()}.xlsx`)
}
const handleRelationMaterial = async (formData: any) => {
currentToolingTypeId.value = formData.toolingTypeId;
currentToolingTypeCode.value = formData.toolingTypeCode;
currentToolingTypeName.value = formData.toolingTypeName;
const res = await getToolingType(formData.toolingTypeId);
Object.assign(form.value, res.data);
materialDialogOpen.value = true;
};
const handleAddRelationMaterial = () => {
form.value.typeRelationList = form.value.typeRelationList || [];
form.value.typeRelationList.push({
relationInfoId: '',
materialName: '',
relationInfoType: '1',
relationId: undefined
});
};
const handleDeleteRelationMaterial = () => {
if (checkedRelationMaterial.value.length === 0) {
proxy?.$modal.msgError('请先选择要删除的关联物料数据');
} else {
form.value.typeRelationList = form.value.typeRelationList.filter(
item => !checkedRelationMaterial.value.includes(item)
);
checkedRelationMaterial.value = [];
}
};
const handleRelationMaterialSelectionChange = (selection: any[]) => {
checkedRelationMaterial.value = selection;
};
const rowRelationMaterialIndex = ({ row, rowIndex }: { row: any; rowIndex: number }): string => {
row.index = rowIndex + 1;
return '';
};
const openMaterialDialog = (rowIndex: number) => {
currentMaterialRowIndex.value = rowIndex;
materialSelectDialogOpen.value = true;
};
const handleMaterialSelection = () => {
const selectedRow = materialSelectRef.value.tableRef.store.states.currentRow.value;
if (selectedRow && currentMaterialRowIndex.value !== -1) {
form.value.typeRelationList[currentMaterialRowIndex.value].relationInfoId = selectedRow.materialId;
form.value.typeRelationList[currentMaterialRowIndex.value].materialName = selectedRow.materialName;
form.value.typeRelationList[currentMaterialRowIndex.value].relationInfoType = '1';
}
materialSelectDialogOpen.value = false;
};
const handleRelationProcess = async (formData: any) => {
currentToolingTypeId.value = formData.toolingTypeId;
currentToolingTypeCode.value = formData.toolingTypeCode;
currentToolingTypeName.value = formData.toolingTypeName;
const res = await getToolingType(formData.toolingTypeId);
Object.assign(form.value, res.data);
processDialogOpen.value = true;
};
const handleAddRelationProcess = () => {
form.value.processList = form.value.processList || [];
form.value.processList.push({
relationInfoId: '',
relationInfoType: '2',
processName: '',
relationId: undefined
});
};
const handleDeleteRelationProcess = () => {
if (checkedRelationProcess.value.length === 0) {
proxy?.$modal.msgError('请先选择要删除的关联工序数据');
} else {
form.value.processList = form.value.processList.filter(
item => !checkedRelationProcess.value.includes(item)
);
checkedRelationProcess.value = [];
}
};
const handleRelationProcessSelectionChange = (selection: any[]) => {
checkedRelationProcess.value = selection;
};
const rowRelationProcessIndex = ({ row, rowIndex }: { row: any; rowIndex: number }): string => {
row.index = rowIndex + 1;
return '';
};
const handleProcessChange = (rowIndex: number) => {
const processId = form.value.processList[rowIndex].relationInfoId;
const process = processInfoList.value.find(item => item.processId === processId);
if (process) {
form.value.processList[rowIndex].processName = process.processName;
form.value.processList[rowIndex].relationInfoId = process.processId;
form.value.processList[rowIndex].toolingTypeId = currentToolingTypeId.value;
form.value.processList[rowIndex].relationInfoType = '2';
}
};
const submitProcessForm = async () => {
buttonLoading.value = true;
await updateToolingType(form.value).finally(() => buttonLoading.value = false);
proxy?.$modal.msgSuccess('操作成功');
processDialogOpen.value = false;
await getList();
};
onMounted(() => {
getList();
getProcessInfoListSelect();
});
</script>
Loading…
Cancel
Save