featms(d): 新增检修计划明细页面并优化相关功能

- 新增检修计划明细页面,包括搜索、新增、修改、删除等功能
- 优化点巡检工单、润滑实例、保养工单等页面的详情展示
- 添加工作流定义ID更新相关API和功能
- 修复部分页面的样式和交互问题
master
zch 2 weeks ago
parent 6cba344e00
commit f6fbc9cb45

@ -75,3 +75,21 @@ export function getDmsBillsInspectInstanceList (query) {
params: query
});
};
/**
* ID
* @param inspectInstanceId ID
* @param wfDefinitionId ID
* @return truefalse
*/
export function updateWfDefinitionIdById (inspectInstanceId: string | number, wfDefinitionId: string | number) {
return request({
url: '/dms/dmsBillsInspectInstance/updateWfDefinitionIdById',
method: 'post',
params: {
inspectInstanceId,
wfDefinitionId
}
});
};

@ -10,7 +10,7 @@ export interface DmsBillsInspectInstanceVO {
planInspectId: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId: string | number;
@ -73,7 +73,7 @@ export interface DmsBillsInspectInstanceForm extends BaseEntity {
planInspectId?: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId?: string | number;
@ -142,7 +142,7 @@ export interface DmsBillsInspectInstanceQuery extends PageQuery {
planInspectId?: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId?: string | number;

@ -0,0 +1,76 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { DmsBillsInspectInstanceActivityVO, DmsBillsInspectInstanceActivityForm, DmsBillsInspectInstanceActivityQuery } from '@/api/dms/dmsBillsInspectInstanceActivity/types';
/**
* ;
* @param query
* @returns {*}
*/
export const listDmsBillsInspectInstanceActivity = (query?: DmsBillsInspectInstanceActivityQuery): AxiosPromise<DmsBillsInspectInstanceActivityVO[]> => {
return request({
url: '/dms/dmsBillsInspectInstanceActivity/list',
method: 'get',
params: query
});
};
/**
* ;
* @param instanceActivityId
*/
export const getDmsBillsInspectInstanceActivity = (instanceActivityId: string | number): AxiosPromise<DmsBillsInspectInstanceActivityVO> => {
return request({
url: '/dms/dmsBillsInspectInstanceActivity/' + instanceActivityId,
method: 'get'
});
};
/**
* ;
* @param data
*/
export const addDmsBillsInspectInstanceActivity = (data: DmsBillsInspectInstanceActivityForm) => {
return request({
url: '/dms/dmsBillsInspectInstanceActivity',
method: 'post',
data: data
});
};
/**
* ;
* @param data
*/
export const updateDmsBillsInspectInstanceActivity = (data: DmsBillsInspectInstanceActivityForm) => {
return request({
url: '/dms/dmsBillsInspectInstanceActivity',
method: 'put',
data: data
});
};
/**
* ;
* @param instanceActivityId
*/
export const delDmsBillsInspectInstanceActivity = (instanceActivityId: string | number | Array<string | number>) => {
return request({
url: '/dms/dmsBillsInspectInstanceActivity/' + instanceActivityId,
method: 'delete'
});
};
/**
* ;
* @param query
* @returns {*}
*/
export function getDmsBillsInspectInstanceActivityList (query) {
return request({
url: '/dms/dmsBillsInspectInstanceActivity/getDmsBillsInspectInstanceActivityList',
method: 'get',
params: query
});
};

@ -0,0 +1,281 @@
export interface DmsBillsInspectInstanceActivityVO {
/**
* ID
*/
instanceActivityId: string | number;
/**
* IDdms_bills_inspect_instanceinspect_instance_id
*/
inspectInstanceId: string | number;
/**
* ID
*/
wfDefinitionId: string | number;
/**
* ID
*/
wfNodeId: string | number;
/**
* 线dms_base_inspect_routeinspect_route_id;12212
*/
inspectRouteId: string | number;
/**
* ;12212
*/
deviceAmount: number;
/**
* ;12212
*/
performer: string;
/**
* ;2
*/
processHandleResolution: string;
/**
* (0 1 2 3
*/
processHandleStatus: string;
/**
*
*/
processStepOrder: number;
/**
*
*/
startTime: string;
/**
*
*/
endTime: string;
/**
* IDsys_useruser_id)
*/
handleUserId: string | number;
/**
*
*/
handleBy: string;
/**
*
*/
handleTime: string;
/**
* idid
*/
transferUserId: string | number;
/**
* 1
*/
attr1: string;
/**
*
*/
remark: string;
}
export interface DmsBillsInspectInstanceActivityForm extends BaseEntity {
/**
* ID
*/
instanceActivityId?: string | number;
/**
* IDdms_bills_inspect_instanceinspect_instance_id
*/
inspectInstanceId?: string | number;
/**
* ID
*/
wfDefinitionId?: string | number;
/**
* IDwf_task_back_nodeid
*/
wfNodeId?: string | number;
/**
* 线dms_base_inspect_routeinspect_route_id;12212
*/
inspectRouteId?: string | number;
/**
* ;12212
*/
deviceAmount?: number;
/**
* ;12212
*/
performer?: string;
/**
* ;2
*/
processHandleResolution?: string;
/**
* (0 1 2 3
*/
processHandleStatus?: string;
/**
*
*/
processStepOrder?: number;
/**
*
*/
startTime?: string;
/**
*
*/
endTime?: string;
/**
* IDsys_useruser_id)
*/
handleUserId?: string | number;
/**
*
*/
handleBy?: string;
/**
*
*/
handleTime?: string;
/**
* idid
*/
transferUserId?: string | number;
/**
* 1
*/
attr1?: string;
/**
*
*/
remark?: string;
}
export interface DmsBillsInspectInstanceActivityQuery extends PageQuery {
/**
* ID
*/
instanceActivityId?: string | number;
/**
* IDdms_bills_inspect_instanceinspect_instance_id
*/
inspectInstanceId?: string | number;
/**
* ID
*/
wfDefinitionId?: string | number;
/**
* IDwf_task_back_nodeid
*/
wfNodeId?: string | number;
/**
* 线dms_base_inspect_routeinspect_route_id;12212
*/
inspectRouteId?: string | number;
/**
* ;12212
*/
deviceAmount?: number;
/**
* ;12212
*/
performer?: string;
/**
* ;2
*/
processHandleResolution?: string;
/**
* (0 1 2 3
*/
processHandleStatus?: string;
/**
*
*/
processStepOrder?: number;
/**
*
*/
startTime?: string;
/**
*
*/
endTime?: string;
/**
* IDsys_useruser_id)
*/
handleUserId?: string | number;
/**
*
*/
handleBy?: string;
/**
*
*/
handleTime?: string;
/**
* idid
*/
transferUserId?: string | number;
/**
* 1
*/
attr1?: string;
/**
*
*/
params?: any;
}

@ -75,3 +75,20 @@ export function getDmsBillsLubeInstanceList (query) {
params: query
});
};
/**
* ID
* @param lubeInstanceId ID
* @param wfDefinitionId ID
* @return truefalse
*/
export function updateWfDefinitionIdById (lubeInstanceId: string | number, wfDefinitionId: string | number) {
return request({
url: '/dms/dmsBillsLubeInstance/updateWfDefinitionIdById',
method: 'post',
params: {
lubeInstanceId,
wfDefinitionId
}
});
};

@ -0,0 +1,94 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { DmsMaintInstanceActivityVO, DmsMaintInstanceActivityForm, DmsMaintInstanceActivityQuery } from '@/api/dms/dmsMaintInstanceActivity/types';
/**
* ;
* @param query
* @returns {*}
*/
export const listDmsMaintInstanceActivity = (query?: DmsMaintInstanceActivityQuery): AxiosPromise<DmsMaintInstanceActivityVO[]> => {
return request({
url: '/dms/dmsMaintInstanceActivity/list',
method: 'get',
params: query
});
};
/**
* ;
* @param instanceActivityId
*/
export const getDmsMaintInstanceActivity = (instanceActivityId: string | number): AxiosPromise<DmsMaintInstanceActivityVO> => {
return request({
url: '/dms/dmsMaintInstanceActivity/' + instanceActivityId,
method: 'get'
});
};
/**
* ;
* @param data
*/
export const addDmsMaintInstanceActivity = (data: DmsMaintInstanceActivityForm) => {
return request({
url: '/dms/dmsMaintInstanceActivity',
method: 'post',
data: data
});
};
/**
* ;
* @param data
*/
export const updateDmsMaintInstanceActivity = (data: DmsMaintInstanceActivityForm) => {
return request({
url: '/dms/dmsMaintInstanceActivity',
method: 'put',
data: data
});
};
/**
* ;
* @param instanceActivityId
*/
export const delDmsMaintInstanceActivity = (instanceActivityId: string | number | Array<string | number>) => {
return request({
url: '/dms/dmsMaintInstanceActivity/' + instanceActivityId,
method: 'delete'
});
};
/**
* ;
* @param query
* @returns {*}
*/
export function getDmsMaintInstanceActivityList (query) {
return request({
url: '/dms/dmsMaintInstanceActivity/getDmsMaintInstanceActivityList',
method: 'get',
params: query
});
};
/**
* ID
* @param maintInstanceId ID
* @param wfDefinitionId ID
* @return truefalse
*/
export function updateWfDefinitionIdById (maintInstanceId: string | number, wfDefinitionId: string | number) {
return request({
url: '/dms/dmsMaintInstanceActivity/updateWfDefinitionIdById',
method: 'post',
params: {
maintInstanceId,
wfDefinitionId
}
});
};

@ -0,0 +1,281 @@
export interface DmsMaintInstanceActivityVO {
/**
* ID
*/
instanceActivityId: string | number;
/**
* IDdms_bills_maint_instancemaint_instance_id
*/
maintInstanceId: string | number;
/**
* ID
*/
wfDefinitionId: string | number;
/**
* ID
*/
wfNodeId: string | number;
/**
* 1 2 3;12212
*/
maintLevel: string;
/**
* ;12212
*/
maintGroup: string;
/**
* ;12212
*/
maintSupervisor: string;
/**
* ;
*/
processHandleResolution: string;
/**
* (0 1 2 3
*/
processHandleStatus: string;
/**
*
*/
processStepOrder: number;
/**
*
*/
startTime: string;
/**
*
*/
endTime: string;
/**
* IDsys_useruser_id)
*/
handleUserId: string | number;
/**
*
*/
handleBy: string;
/**
*
*/
handleTime: string;
/**
* idid
*/
transferUserId: string | number;
/**
* 1
*/
attr1: string;
/**
*
*/
remark: string;
}
export interface DmsMaintInstanceActivityForm extends BaseEntity {
/**
* ID
*/
instanceActivityId?: string | number;
/**
* IDdms_bills_maint_instancemaint_instance_id
*/
maintInstanceId?: string | number;
/**
* ID
*/
wfDefinitionId?: string | number;
/**
* ID
*/
wfNodeId?: string | number;
/**
* 1 2 3;12212
*/
maintLevel?: string;
/**
* ;12212
*/
maintGroup?: string;
/**
* ;12212
*/
maintSupervisor?: string;
/**
* ;
*/
processHandleResolution?: string;
/**
* (0 1 2 3
*/
processHandleStatus?: string;
/**
*
*/
processStepOrder?: number;
/**
*
*/
startTime?: string;
/**
*
*/
endTime?: string;
/**
* IDsys_useruser_id)
*/
handleUserId?: string | number;
/**
*
*/
handleBy?: string;
/**
*
*/
handleTime?: string;
/**
* idid
*/
transferUserId?: string | number;
/**
* 1
*/
attr1?: string;
/**
*
*/
remark?: string;
}
export interface DmsMaintInstanceActivityQuery extends PageQuery {
/**
* ID
*/
instanceActivityId?: string | number;
/**
* IDdms_bills_maint_instancemaint_instance_id
*/
maintInstanceId?: string | number;
/**
* ID
*/
wfDefinitionId?: string | number;
/**
* ID
*/
wfNodeId?: string | number;
/**
* 1 2 3;12212
*/
maintLevel?: string;
/**
* ;12212
*/
maintGroup?: string;
/**
* ;12212
*/
maintSupervisor?: string;
/**
* ;
*/
processHandleResolution?: string;
/**
* (0 1 2 3
*/
processHandleStatus?: string;
/**
*
*/
processStepOrder?: number;
/**
*
*/
startTime?: string;
/**
*
*/
endTime?: string;
/**
* IDsys_useruser_id)
*/
handleUserId?: string | number;
/**
*
*/
handleBy?: string;
/**
*
*/
handleTime?: string;
/**
* idid
*/
transferUserId?: string | number;
/**
* 1
*/
attr1?: string;
/**
*
*/
params?: any;
}

@ -75,3 +75,21 @@ export function getDmsRepairInstanceList (query) {
params: query
});
};
/**
* ID
* @param repairInstanceId ID
* @param wfDefinitionId ID
* @return truefalse
*/
export function updateWfDefinitionIdById (repairInstanceId: string | number, wfDefinitionId: string | number) {
return request({
url: '/dms/dmsRepairInstance/updateWfDefinitionIdById',
method: 'post',
params: {
repairInstanceId,
wfDefinitionId
}
});
};

@ -10,7 +10,7 @@ export interface DmsRepairInstanceVO {
planRepairId: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId: string | number;
@ -78,7 +78,7 @@ export interface DmsRepairInstanceForm extends BaseEntity {
planRepairId?: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId?: string | number;
@ -147,7 +147,7 @@ export interface DmsRepairInstanceQuery extends PageQuery {
planRepairId?: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId?: string | number;

@ -10,12 +10,12 @@ export interface DmsRepairInstanceActivityVO {
repairInstanceId: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId: string | number;
/**
* IDwf_task_back_nodeid
* ID
*/
wfNodeId: string | number;
@ -103,12 +103,12 @@ export interface DmsRepairInstanceActivityForm extends BaseEntity {
repairInstanceId?: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId?: string | number;
/**
* IDwf_task_back_nodeid
* ID
*/
wfNodeId?: string | number;
@ -197,12 +197,12 @@ export interface DmsRepairInstanceActivityQuery extends PageQuery {
repairInstanceId?: string | number;
/**
* IDwf_definition_configid
* ID
*/
wfDefinitionId?: string | number;
/**
* IDwf_task_back_nodeid
* ID
*/
wfNodeId?: string | number;

@ -433,10 +433,10 @@ export const dynamicRoutes: RouteRecordRaw[] = [
// permissions: ['dms:dmsBillsMaintInstance:add'],
// children: [
// {
// path: 'index/:maintInstanceId',
// path: 'index',
// component: () => import('@/views/dms/dmsMaintInstanceActivity/index.vue'),
// name: 'dmsMaintInstanceActivity',
// meta: { title: '保养工单明细', activeMenu: '/dms/dmsMaintInstanceActivity', icon: '' }
// meta: { title: '保养工单明细', activeMenu: '/dms/dmsBillsMaintInstance', icon: '' }
// }
// ]
// },
@ -448,7 +448,7 @@ export const dynamicRoutes: RouteRecordRaw[] = [
// permissions: ['dms:dmsBillsInspectInstanceActivity:add'],
// children: [
// {
// path: 'index/:inspctInstanceId',
// path: 'index',
// component: () => import('@/views/dms/dmsBillsInspectInstanceActivity/index.vue'),
// name: 'dmsBillsInspectInstanceActivity',
// meta: { title: '点巡检工单明细', activeMenu: '/dms/dmsBillsInspectInstanceActivity', icon: '' }

@ -129,11 +129,14 @@
<el-table-column label="备注" align="center" prop="remark" v-if="columns[12].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:dmsBillsInspectInstance:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:dmsBillsInspectInstance:remove']"></el-button>
<!-- <el-tooltip content="修改" placement="top">-->
<!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:dmsBillsInspectInstance:edit']"></el-button>-->
<!-- </el-tooltip>-->
<!-- <el-tooltip content="删除" placement="top">-->
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:dmsBillsInspectInstance:remove']"></el-button>-->
<!-- </el-tooltip>-->
<el-tooltip content="详情" placement="top">
<el-button link type="primary" icon="View" @click="handleShowDetail(scope.row)" v-hasPermi="['dms:dmsBillsLubeInstance:edit']"></el-button>
</el-tooltip>
</template>
</el-table-column>
@ -400,6 +403,11 @@ const handleExport = () => {
}, `dmsBillsInspectInstance_${new Date().getTime()}.xlsx`)
}
const router = useRouter();
const handleShowDetail = (row: DmsBillsInspectInstanceVO) => {
router.push('/dms/dmsBillsInspectInstanceActivity/index/' + row.inspectInstanceId)
}
onMounted(() => {
getList();
});

@ -0,0 +1,326 @@
<template>
<div class="p-2">
<!-- 操作按钮区域 -->
<el-card shadow="never">
<div style="display: flex; justify-content: space-between">
<div>
<el-button
v-if="approvalButtonShow"
:loading="buttonLoading"
type="primary"
@click="approvalVerifyOpen">
{{ currentStepName }}
</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.billsInspectCode" 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.createBy" 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>
<el-col :span="8">
<el-form-item label="巡检线路" prop="inspectRouteId">
<el-input v-model="form.inspectRouteId" placeholder="请输入巡检线路" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="设备总数" prop="deviceAmount">
<el-input-number v-model="form.deviceAmount" placeholder="设备总数" :min="0" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="执行人员" prop="performer">
<el-input v-model="form.performer" placeholder="请输入执行人员" />
</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="DmsBillsInspectInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus';
import {
addDmsBillsInspectInstanceActivity
} from '@/api/dms/dmsBillsInspectInstanceActivity';
import {
DmsBillsInspectInstanceActivityForm
} from '@/api/dms/dmsBillsInspectInstanceActivity/types';
import { getDmsBillsInspectInstance } from '@/api/dms/dmsBillsInspectInstance';
import { getCurrentTask } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { inspect_status } = toRefs<any>(proxy?.useDict('inspect_status'));
const route = useRoute();
const router = useRouter();
//
const processFormRef = ref<FormInstance>();
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
//
const loading = ref(false);
const buttonLoading = ref(false);
const workOrder = ref<any>({});
const workOrderStatusText = ref('');
const currentTask = ref<any>(null);
const taskVariables = ref<any>({});
//
const routeParams = computed(() => route.query);
//
const form = reactive<Partial<DmsBillsInspectInstanceActivityForm>>({
inspectInstanceId: routeParams.value.id,
inspectRouteId: undefined,
deviceAmount: undefined,
performer: undefined,
processHandleResolution: undefined
});
//
const rules = reactive<FormRules>({
inspectRouteId: [{ required: true, message: "巡检线路不能为空", trigger: "blur" }],
deviceAmount: [{ required: true, message: "设备总数不能为空", trigger: "blur" }],
performer: [{ required: true, message: "执行人员不能为空", trigger: "blur" }],
processHandleResolution: [{ required: false, message: "处理意见不能为空", trigger: "blur" }]
});
//
const approvalButtonShow = computed(() => {
return routeParams.value.type === 'approval' && currentTask.value;
});
const currentStepName = computed(() => {
if (!currentTask.value) return '处理';
return currentTask.value.nodeName || '处理';
});
const currentStepTitle = computed(() => {
if (!currentTask.value) return '工单处理';
return `当前节点:${currentTask.value.nodeName || '工单处理'}`;
});
const needProcessResolution = computed(() => {
return routeParams.value.type === 'approval';
});
//
onMounted(async () => {
loading.value = true;
try {
//
await loadWorkOrderInfo();
//
if (routeParams.value.type === 'approval') {
await loadCurrentTask();
}
//
initializeFormData();
} catch (error) {
console.error('初始化失败:', error);
proxy?.$modal.msgError('加载数据失败');
} finally {
loading.value = false;
}
});
//
const loadWorkOrderInfo = async () => {
const businessId = routeParams.value.id;
if (!businessId) {
proxy?.$modal.msgError('缺少工单ID参数');
return;
}
const res = await getDmsBillsInspectInstance(businessId);
workOrder.value = res.data;
//
if (inspect_status.value && workOrder.value.inspectStatus !== undefined) {
const statusItem = inspect_status.value.find((item: any) => String(item.value) === String(workOrder.value.inspectStatus));
workOrderStatusText.value = statusItem ? statusItem.label : '未知状态';
} else {
workOrderStatusText.value = '未知状态';
}
};
//
const loadCurrentTask = async () => {
try {
const taskId = routeParams.value.taskId;
if (taskId) {
const res = await getCurrentTask(taskId);
currentTask.value = res.data;
}
} catch (error) {
console.error('获取任务信息失败:', error);
}
};
//
const initializeFormData = () => {
//
form.inspectInstanceId = workOrder.value.inspectInstanceId;
form.inspectRouteId = workOrder.value.inspectRouteId;
form.deviceAmount = workOrder.value.deviceAmount;
form.performer = workOrder.value.performer;
//
if (routeParams.value.type === 'approval') {
rules.processHandleResolution = [{ required: true, message: "处理意见不能为空", trigger: "blur" }];
}
};
//
const approvalVerifyOpen = async () => {
if (!processFormRef.value) return;
try {
const valid = await processFormRef.value.validate();
if (valid) {
//
taskVariables.value = {
entity: {
inspectInstanceId: form.inspectInstanceId,
inspectRouteId: form.inspectRouteId,
deviceAmount: form.deviceAmount,
performer: form.performer,
processHandleResolution: form.processHandleResolution || ''
}
};
// 使taskId
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
}
} catch (error) {
proxy?.$modal.msgError('表单验证失败');
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value?.init(routeParams.value.id);
};
//
const submitCallback = async () => {
try {
//
const getCurrentDateTime = () => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const seconds = now.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
await addDmsBillsInspectInstanceActivity({
inspectInstanceId: form.inspectInstanceId,
inspectRouteId: form.inspectRouteId,
deviceAmount: form.deviceAmount,
performer: form.performer,
processHandleResolution: form.processHandleResolution || '',
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess(`${currentStepName.value}完成`);
//
goBack();
} catch (error) {
console.error('保存业务数据失败:', error);
proxy?.$modal.msgError('保存业务数据失败');
}
};
//
const goBack = () => {
proxy?.$tab.closePage(proxy?.$route);
proxy?.$router.go(-1);
};
</script>
<style scoped>
.form-header {
font-size: 15px;
color: #409eff;
border-bottom: 1px solid #ddd;
margin: 8px 0 15px;
padding-bottom: 10px;
}
</style>

@ -86,9 +86,6 @@
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:dmsBillsLubeInstance:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:dmsBillsLubeInstance:export']"></el-button>
</el-col>-->
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
@ -263,7 +260,14 @@
</template>
<script setup name="DmsBillsLubeInstance" lang="ts">
import { listDmsBillsLubeInstance, getDmsBillsLubeInstance, delDmsBillsLubeInstance, addDmsBillsLubeInstance, updateDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
import {
listDmsBillsLubeInstance,
getDmsBillsLubeInstance,
delDmsBillsLubeInstance,
addDmsBillsLubeInstance,
updateDmsBillsLubeInstance,
updateWfDefinitionIdById
} from '@/api/dms/dmsBillsLubeInstance';
import { DmsBillsLubeInstanceVO, DmsBillsLubeInstanceQuery, DmsBillsLubeInstanceForm } from '@/api/dms/dmsBillsLubeInstance/types';
import { useRouter } from 'vue-router';
import { startWorkFlow } from '@/api/workflow/task'
@ -476,12 +480,11 @@ const handleStartWorkflow = async (row: DmsBillsLubeInstanceVO) => {
const workflowRes = await startWorkFlow(workflowData);
// ID
await updateDmsBillsLubeInstance({
...row,
wfDefinitionId: workflowRes.data.taskId,
status: 'waiting'
});
//
if (!workflowRes || !workflowRes.data || !workflowRes.data.taskId) {
throw new Error('工作流启动失败未获取到有效的taskId');
}
await updateWfDefinitionIdById(row.lubeInstanceId,workflowRes.data.taskId);
//
taskVariables.value = {
@ -503,7 +506,7 @@ const handleStartWorkflow = async (row: DmsBillsLubeInstanceVO) => {
}
} catch (error) {
console.error('启动工作流失败:', error);
proxy?.$modal.msgError('启动工作流失败');
proxy?.$modal.msgError('启动工作流失败: ' + (error.message || '未知错误'));
} finally {
buttonLoading.value = false;
}

@ -137,11 +137,14 @@
<el-table-column label="备注" align="center" prop="remark" v-if="columns[14].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<!-- <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:dmsBillsMaintInstance:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:dmsBillsMaintInstance:remove']"></el-button>
</el-tooltip>-->
<el-tooltip content="详情" placement="top">
<el-button link type="primary" icon="View" @click="handleShowDetail(scope.row)" v-hasPermi="['dms:dmsBillsLubeInstance:edit']"></el-button>
</el-tooltip>
</template>
</el-table-column>
@ -242,6 +245,8 @@
<script setup name="DmsBillsMaintInstance" lang="ts">
import { listDmsBillsMaintInstance, getDmsBillsMaintInstance, delDmsBillsMaintInstance, addDmsBillsMaintInstance, updateDmsBillsMaintInstance } from '@/api/dms/dmsBillsMaintInstance';
import { DmsBillsMaintInstanceVO, DmsBillsMaintInstanceQuery, DmsBillsMaintInstanceForm } from '@/api/dms/dmsBillsMaintInstance/types';
import {useRouter} from "vue-router";
import {DmsBillsLubeInstanceVO} from "@/api/dms/dmsBillsLubeInstance/types";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { maint_status, maint_level } = toRefs<any>(proxy?.useDict('maint_status', 'maint_level'));
@ -455,6 +460,11 @@ const handleView = (row?: DmsBillsMaintInstanceVO) => {
});
};
const router = useRouter();
const handleShowDetail = (row: DmsBillsMaintInstanceVO) => {
router.push('/dms/dmsMaintInstanceActivity/index/' + row.maintInstanceId);
}
onMounted(() => {
getList();
});

@ -7,8 +7,8 @@
<el-form-item label="维修工单实例节点ID" prop="instanceActivityId">
<el-input v-model="queryParams.instanceActivityId" placeholder="请输入维修工单实例节点ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="故障报修工单ID关联故障报修工单主键" prop="repairInstanceId">
<el-input v-model="queryParams.repairInstanceId" placeholder="请输入故障报修工单ID关联故障报修工单主键" clearable @keyup.enter="handleQuery" />
<el-form-item label="故障报修工单" prop="repairInstanceId">
<el-input v-model="queryParams.repairInstanceId" placeholder="请输入故障报修工单" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="流程定义ID,关联wf_definition_config的id" prop="wfDefinitionId">
<el-input v-model="queryParams.wfDefinitionId" placeholder="请输入流程定义ID,关联wf_definition_config的id" clearable @keyup.enter="handleQuery" />

@ -89,11 +89,12 @@
<!-- <el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<el-input v-model="form.targetId" placeholder="请输入关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" />
</el-form-item>-->
<el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<!-- <el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<el-input v-model="form.targetId" placeholder="请输入关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" />
</el-form-item>
<el-form-item label="故障文件地址,一般是图片" prop="filePath">
<el-input v-model="form.filePath" placeholder="请输入故障文件地址,一般是图片" />
</el-form-item>-->
<el-form-item label="故障文件地址" prop="filePath">
<!-- <el-input v-model="form.filePath" placeholder="请输入故障文件地址,一般是图片" />-->
<file-upload v-model="form.filePath"/>
</el-form-item>
</el-form>
<template #footer>
@ -233,7 +234,15 @@ const submitForm = () => {
if (form.value.instanceFileId) {
await updateDmsInstanceFile(form.value).finally(() => buttonLoading.value = false);
} else {
await addDmsInstanceFile(form.value).finally(() => buttonLoading.value = false);
if (form.value.filePath === null || form.value.filePath.length === 0) {
proxy?.$modal.warning('请上传!');
return;
}
for (let e of form.value.filePath){
form.value.filePath = e.url;
await addDmsInstanceFile(form.value).finally(() => buttonLoading.value = false);
}
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;

@ -0,0 +1,334 @@
<template>
<div class="p-2">
<!-- 操作按钮区域 -->
<el-card shadow="never">
<div style="display: flex; justify-content: space-between">
<div>
<el-button
v-if="approvalButtonShow"
:loading="buttonLoading"
type="primary"
@click="approvalVerifyOpen">
{{ currentStepName }}
</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.billsMaintCode" 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.createBy" 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>
<el-col :span="8">
<el-form-item label="保养级别" prop="maintLevel">
<el-select v-model="form.maintLevel" placeholder="请选择保养级别">
<el-option
v-for="dict in maint_level"
: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="maintGroup">
<el-input v-model="form.maintGroup" placeholder="请输入保养组别" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="保养负责人" prop="maintSupervisor">
<el-input v-model="form.maintSupervisor" placeholder="请输入保养负责人" />
</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="DmsMaintInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus';
import {
addDmsMaintInstanceActivity,
getDmsMaintInstanceActivityList
} from '@/api/dms/dmsMaintInstanceActivity';
import {
DmsMaintInstanceActivityForm
} from '@/api/dms/dmsMaintInstanceActivity/types';
import { getDmsBillsMaintInstance } from '@/api/dms/dmsBillsMaintInstance';
import { getCurrentTask } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { maint_level } = toRefs<any>(proxy?.useDict('maint_level'));
const route = useRoute();
const router = useRouter();
//
const processFormRef = ref<FormInstance>();
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
//
const loading = ref(false);
const buttonLoading = ref(false);
const workOrder = ref<any>({});
const workOrderStatusText = ref('');
const currentTask = ref<any>(null);
const taskVariables = ref<any>({});
//
const routeParams = computed(() => route.query);
//
const form = reactive<Partial<DmsMaintInstanceActivityForm>>({
maintInstanceId: routeParams.value.id,
maintLevel: undefined,
maintGroup: undefined,
maintSupervisor: undefined,
processHandleResolution: undefined
});
//
const rules = reactive<FormRules>({
maintLevel: [{ required: true, message: "保养级别不能为空", trigger: "change" }],
maintGroup: [{ required: true, message: "保养组别不能为空", trigger: "blur" }],
maintSupervisor: [{ required: true, message: "保养负责人不能为空", trigger: "blur" }],
processHandleResolution: [{ required: false, message: "处理意见不能为空", trigger: "blur" }]
});
//
const approvalButtonShow = computed(() => {
return routeParams.value.type === 'approval' && currentTask.value;
});
const currentStepName = computed(() => {
if (!currentTask.value) return '处理';
return currentTask.value.nodeName || '处理';
});
const currentStepTitle = computed(() => {
if (!currentTask.value) return '工单处理';
return `当前节点:${currentTask.value.nodeName || '工单处理'}`;
});
const needProcessResolution = computed(() => {
return routeParams.value.type === 'approval';
});
//
onMounted(async () => {
loading.value = true;
try {
//
await loadWorkOrderInfo();
//
if (routeParams.value.type === 'approval') {
await loadCurrentTask();
}
//
initializeFormData();
} catch (error) {
console.error('初始化失败:', error);
proxy?.$modal.msgError('加载数据失败');
} finally {
loading.value = false;
}
});
//
const loadWorkOrderInfo = async () => {
const businessId = routeParams.value.id;
if (!businessId) {
proxy?.$modal.msgError('缺少工单ID参数');
return;
}
const res = await getDmsBillsMaintInstance(businessId);
workOrder.value = res.data;
//
if (maint_level.value && workOrder.value.maintStatus !== undefined) {
const statusItem = maint_level.value.find((item: any) => String(item.value) === String(workOrder.value.maintStatus));
workOrderStatusText.value = statusItem ? statusItem.label : '未知状态';
} else {
workOrderStatusText.value = '未知状态';
}
};
//
const loadCurrentTask = async () => {
try {
const taskId = routeParams.value.taskId;
if (taskId) {
const res = await getCurrentTask(taskId);
currentTask.value = res.data;
}
} catch (error) {
console.error('获取任务信息失败:', error);
}
};
//
const initializeFormData = () => {
//
form.maintInstanceId = workOrder.value.maintInstanceId;
form.maintLevel = workOrder.value.maintLevel;
form.maintGroup = workOrder.value.maintGroup;
form.maintSupervisor = workOrder.value.maintSupervisor;
//
if (routeParams.value.type === 'approval') {
rules.processHandleResolution = [{ required: true, message: "处理意见不能为空", trigger: "blur" }];
}
};
//
const approvalVerifyOpen = async () => {
if (!processFormRef.value) return;
try {
const valid = await processFormRef.value.validate();
if (valid) {
//
taskVariables.value = {
entity: {
maintInstanceId: form.maintInstanceId,
maintLevel: form.maintLevel,
maintGroup: form.maintGroup,
maintSupervisor: form.maintSupervisor,
processHandleResolution: form.processHandleResolution || ''
}
};
// 使taskId
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
}
} catch (error) {
proxy?.$modal.msgError('表单验证失败');
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value?.init(routeParams.value.id);
};
//
const submitCallback = async () => {
try {
//
const getCurrentDateTime = () => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const seconds = now.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
await addDmsMaintInstanceActivity({
maintInstanceId: form.maintInstanceId,
maintLevel: form.maintLevel,
maintGroup: form.maintGroup,
maintSupervisor: form.maintSupervisor,
processHandleResolution: form.processHandleResolution || '',
handleTime: getCurrentDateTime()
});
proxy?.$modal.msgSuccess(`${currentStepName.value}完成`);
//
goBack();
} catch (error) {
console.error('保存业务数据失败:', error);
proxy?.$modal.msgError('保存业务数据失败');
}
};
//
const goBack = () => {
proxy?.$tab.closePage(proxy?.$route);
proxy?.$router.go(-1);
};
</script>
<style scoped>
.form-header {
font-size: 15px;
color: #409eff;
border-bottom: 1px solid #ddd;
margin: 8px 0 15px;
padding-bottom: 10px;
}
</style>

@ -111,9 +111,9 @@
<el-table-column label="备注" align="center" prop="remark" v-if="columns[13].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="计划明细" placement="top">
<!-- <el-tooltip content="计划明细" placement="top">
<el-button link type="primary" icon="Right" @click="jumpToDetail(scope.row)" v-hasPermi="['dms:dmsPlanInspect:edit']"></el-button>
</el-tooltip>
</el-tooltip>-->
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:dmsPlanInspect:edit']"></el-button>
</el-tooltip>
@ -126,6 +126,7 @@
<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="dmsPlanInspectFormRef" :model="form" :rules="rules" label-width="120px">
@ -141,7 +142,7 @@
<el-form-item label="巡检级别" prop="inspectLevel">
<el-radio-group v-model="form.inspectLevel">
<el-radio
v-for="dict in inspect_level"
v-for="dict in dms_inspect_level"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
@ -269,13 +270,13 @@
import { listDmsPlanInspect, getDmsPlanInspect, delDmsPlanInspect, addDmsPlanInspect, updateDmsPlanInspect } from '@/api/dms/dmsPlanInspect';
import { DmsPlanInspectVO, DmsPlanInspectQuery, DmsPlanInspectForm } from '@/api/dms/dmsPlanInspect/types';
import { getDmsBaseInspectRouteList } from "@/api/dms/dmsBaseInspectRoute";
import { listUser } from "@/api/system/user";
import { getUserList} from "@/api/system/user";
import Crontab from '@/components/Crontab/index.vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { active_flag, inspect_type, inspect_level } = toRefs<any>(proxy?.useDict('active_flag', 'inspect_type', 'inspect_level'));
const { active_flag, inspect_type, dms_inspect_level } = toRefs<any>(proxy?.useDict('active_flag', 'inspect_type', 'dms_inspect_level'));
const dmsPlanInspectList = ref<DmsPlanInspectVO[]>([]);
const buttonLoading = ref(false);
@ -593,18 +594,14 @@ const getDmsInspectRouteList = async () => {
//
let userList = ref([]);
const getUserList = async () => {
try {
const res = await listUser({ pageNum: 1, pageSize: 999 });
userList.value = res.rows;
} catch (error) {
console.error("获取用户列表失败:", error);
}
const getUser = async () => {
const res = await getUserList(null);
userList.value = res.data;
}
onMounted(() => {
getDmsInspectRouteList();
getUserList();
getUser();
getList();
});
</script>

@ -0,0 +1,310 @@
<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="主键标识" prop="planRepairDetailId">
<el-input v-model="queryParams.planRepairDetailId" placeholder="请输入主键标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="计划ID关联dms_plan_repair的plan_maint_id" prop="planRepairId">
<el-input v-model="queryParams.planRepairId" placeholder="请输入计划ID关联dms_plan_repair的plan_maint_id" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="检修计划明细类型(1设备 2设备类型)" prop="repairDetailTargetType">
<el-select v-model="queryParams.repairDetailTargetType" placeholder="请选择检修计划明细类型(1设备 2设备类型)" clearable >
<el-option v-for="dict in ${dictType}" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>-->
<el-form-item label="检修计划明细ID,根据检修计划明细类型关联对应表的主键" prop="repairDetailTargetId">
<el-input v-model="queryParams.repairDetailTargetId" placeholder="请输入检修计划明细ID,根据检修计划明细类型关联对应表的主键" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="故障类别" prop="faultType">
<el-select v-model="queryParams.faultType" placeholder="请选择故障类别" clearable >
<el-option v-for="dict in fault_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="检修说明" prop="repairDesc">
<el-input v-model="queryParams.repairDesc" placeholder="请输入检修说明" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="检修标准" prop="repairProtocol">
<el-input v-model="queryParams.repairProtocol" placeholder="请输入检修标准" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="操作描述" prop="operationDescription">
<el-input v-model="queryParams.operationDescription" 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:dmsPlanRepairDetail:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['dms:dmsPlanRepairDetail:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:dmsPlanRepairDetail:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:dmsPlanRepairDetail: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="dmsPlanRepairDetailList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键标识" align="center" prop="planRepairDetailId" v-if="columns[0].visible"/>
<el-table-column label="计划ID关联dms_plan_repair的plan_maint_id" align="center" prop="planRepairId" v-if="columns[2].visible"/>
<el-table-column label="检修计划明细类型(1设备 2设备类型)" align="center" prop="repairDetailTargetType" v-if="columns[3].visible"/>
<el-table-column label="检修计划明细ID,根据检修计划明细类型关联对应表的主键" align="center" prop="repairDetailTargetId" v-if="columns[4].visible"/>
<el-table-column label="故障类别" align="center" prop="faultType" v-if="columns[5].visible">
<template #default="scope">
<dict-tag :options="fault_type" :value="scope.row.faultType"/>
</template>
</el-table-column>
<el-table-column label="检修说明" align="center" prop="repairDesc" v-if="columns[6].visible"/>
<el-table-column label="检修标准" align="center" prop="repairProtocol" v-if="columns[7].visible"/>
<el-table-column label="操作描述" align="center" prop="operationDescription" 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:dmsPlanRepairDetail:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:dmsPlanRepairDetail: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>
<!-- 添加或修改检修计划明细对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="dmsPlanRepairDetailFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="主键标识" prop="planRepairDetailId">
<el-input v-model="form.planRepairDetailId" placeholder="请输入主键标识" />
</el-form-item>
<el-form-item label="计划ID关联dms_plan_repair的plan_maint_id" prop="planRepairId">
<el-input v-model="form.planRepairId" placeholder="请输入计划ID关联dms_plan_repair的plan_maint_id" />
</el-form-item>
<!-- <el-form-item label="检修计划明细类型(1设备 2设备类型)" prop="repairDetailTargetType">
<el-select v-model="form.repairDetailTargetType" placeholder="请选择检修计划明细类型(1设备 2设备类型)">
<el-option
v-for="dict in ${dictType}"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>-->
<el-form-item label="检修计划明细ID,根据检修计划明细类型关联对应表的主键" prop="repairDetailTargetId">
<el-input v-model="form.repairDetailTargetId" placeholder="请输入检修计划明细ID,根据检修计划明细类型关联对应表的主键" />
</el-form-item>
<el-form-item label="故障类别" prop="faultType">
<el-select v-model="form.faultType" placeholder="请选择故障类别">
<el-option
v-for="dict in fault_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="检修说明" prop="repairDesc">
<el-input v-model="form.repairDesc" placeholder="请输入检修说明" />
</el-form-item>
<el-form-item label="检修标准" prop="repairProtocol">
<el-input v-model="form.repairProtocol" placeholder="请输入检修标准" />
</el-form-item>
<el-form-item label="操作描述" prop="operationDescription">
<el-input v-model="form.operationDescription" 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="DmsPlanRepairDetail" lang="ts">
import { listDmsPlanRepairDetail, getDmsPlanRepairDetail, delDmsPlanRepairDetail, addDmsPlanRepairDetail, updateDmsPlanRepairDetail } from '@/api/dms/dmsPlanRepairDetail';
import { DmsPlanRepairDetailVO, DmsPlanRepairDetailQuery, DmsPlanRepairDetailForm } from '@/api/dms/dmsPlanRepairDetail/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { fault_type } = toRefs<any>(proxy?.useDict('fault_type'));
const dmsPlanRepairDetailList = ref<DmsPlanRepairDetailVO[]>([]);
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 dmsPlanRepairDetailFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `主键标识`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `计划ID关联dms_plan_repair的plan_maint_id`, visible: true },
{ key: 3, label: `检修计划明细类型(1设备 2设备类型)`, visible: true },
{ key: 4, label: `检修计划明细ID,根据检修计划明细类型关联对应表的主键`, visible: true },
{ key: 5, label: `故障类别`, visible: true },
{ key: 6, label: `检修说明`, visible: true },
{ key: 7, label: `检修标准`, visible: true },
{ key: 8, label: `操作描述`, visible: true },
{ key: 9, label: `创建部门`, visible: true },
{ key: 10, label: `创建人`, visible: true },
{ key: 11, label: `创建时间`, visible: true },
{ key: 12, label: `更新人`, visible: true },
{ key: 13, label: `更新时间`, visible: true },
]);
const initFormData: DmsPlanRepairDetailForm = {
planRepairDetailId: undefined,
planRepairId: undefined,
repairDetailTargetType: undefined,
repairDetailTargetId: undefined,
faultType: undefined,
repairDesc: undefined,
repairProtocol: undefined,
operationDescription: undefined,
}
const data = reactive<PageData<DmsPlanRepairDetailForm, DmsPlanRepairDetailQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
planRepairDetailId: undefined,
planRepairId: undefined,
repairDetailTargetType: undefined,
repairDetailTargetId: undefined,
faultType: undefined,
repairDesc: undefined,
repairProtocol: undefined,
operationDescription: undefined,
params: {
}
},
rules: {
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询检修计划明细列表 */
const getList = async () => {
loading.value = true;
const res = await listDmsPlanRepairDetail(queryParams.value);
dmsPlanRepairDetailList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
dmsPlanRepairDetailFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: DmsPlanRepairDetailVO[]) => {
ids.value = selection.map(item => item.planRepairDetailId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加检修计划明细";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: DmsPlanRepairDetailVO) => {
reset();
const _planRepairDetailId = row?.planRepairDetailId || ids.value[0]
const res = await getDmsPlanRepairDetail(_planRepairDetailId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改检修计划明细";
}
/** 提交按钮 */
const submitForm = () => {
dmsPlanRepairDetailFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.planRepairDetailId) {
await updateDmsPlanRepairDetail(form.value).finally(() => buttonLoading.value = false);
} else {
await addDmsPlanRepairDetail(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: DmsPlanRepairDetailVO) => {
const _planRepairDetailIds = row?.planRepairDetailId || ids.value;
await proxy?.$modal.confirm('是否确认删除检修计划明细编号为"' + _planRepairDetailIds + '"的数据项?').finally(() => loading.value = false);
await delDmsPlanRepairDetail(_planRepairDetailIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('dms/dmsPlanRepairDetail/export', {
...queryParams.value
}, `dmsPlanRepairDetail_${new Date().getTime()}.xlsx`)
}
onMounted(() => {
getList();
});
</script>

@ -78,7 +78,7 @@
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dms:dmsRepairInstance:add']"></el-button>
</el-col>
<el-col :span="1.5">
@ -86,7 +86,7 @@
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:dmsRepairInstance:remove']"></el-button>
</el-col>
</el-col>-->
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:dmsRepairInstance:export']"></el-button>
</el-col>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save