Merge remote-tracking branch 'origin/master'

master
夜笙歌 2 weeks ago
commit e727a76170

@ -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;

@ -78,10 +78,10 @@ watch(() => props.cron.hour, value => changeRadioValue(value))
watch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange())
function changeRadioValue(value) {
if (props.cron.min === '*') {
emit('update', 'min', '0', 'hour');
emit('update', 'min', '0', 'hour')
}
if (props.cron.second === '*') {
emit('update', 'second', '0', 'hour');
emit('update', 'second', '0', 'hour')
}
if (value === '*') {
radioValue.value = 1

@ -70,42 +70,46 @@
<p class="title">时间表达式</p>
<table>
<thead>
<th v-for="item of tabTitles" :key="item">{{item}}</th>
<th>Cron 表达式</th>
<tr>
<th v-for="item of tabTitles" :key="item">{{item}}</th>
<th>Cron 表达式</th>
</tr>
</thead>
<tbody>
<td>
<span v-if="crontabValueObj.second.length < 10">{{crontabValueObj.second}}</span>
<el-tooltip v-else :content="crontabValueObj.second" placement="top"><span>{{crontabValueObj.second}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.min.length < 10">{{crontabValueObj.min}}</span>
<el-tooltip v-else :content="crontabValueObj.min" placement="top"><span>{{crontabValueObj.min}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.hour.length < 10">{{crontabValueObj.hour}}</span>
<el-tooltip v-else :content="crontabValueObj.hour" placement="top"><span>{{crontabValueObj.hour}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.day.length < 10">{{crontabValueObj.day}}</span>
<el-tooltip v-else :content="crontabValueObj.day" placement="top"><span>{{crontabValueObj.day}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.month.length < 10">{{crontabValueObj.month}}</span>
<el-tooltip v-else :content="crontabValueObj.month" placement="top"><span>{{crontabValueObj.month}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.week.length < 10">{{crontabValueObj.week}}</span>
<el-tooltip v-else :content="crontabValueObj.week" placement="top"><span>{{crontabValueObj.week}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.year.length < 10">{{crontabValueObj.year}}</span>
<el-tooltip v-else :content="crontabValueObj.year" placement="top"><span>{{crontabValueObj.year}}</span></el-tooltip>
</td>
<td class="result">
<span v-if="crontabValueString.length < 90">{{crontabValueString}}</span>
<el-tooltip v-else :content="crontabValueString" placement="top"><span>{{crontabValueString}}</span></el-tooltip>
</td>
<tr>
<td>
<span v-if="crontabValueObj.second.length < 10">{{crontabValueObj.second}}</span>
<el-tooltip v-else :content="crontabValueObj.second" placement="top"><span>{{crontabValueObj.second}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.min.length < 10">{{crontabValueObj.min}}</span>
<el-tooltip v-else :content="crontabValueObj.min" placement="top"><span>{{crontabValueObj.min}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.hour.length < 10">{{crontabValueObj.hour}}</span>
<el-tooltip v-else :content="crontabValueObj.hour" placement="top"><span>{{crontabValueObj.hour}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.day.length < 10">{{crontabValueObj.day}}</span>
<el-tooltip v-else :content="crontabValueObj.day" placement="top"><span>{{crontabValueObj.day}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.month.length < 10">{{crontabValueObj.month}}</span>
<el-tooltip v-else :content="crontabValueObj.month" placement="top"><span>{{crontabValueObj.month}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.week.length < 10">{{crontabValueObj.week}}</span>
<el-tooltip v-else :content="crontabValueObj.week" placement="top"><span>{{crontabValueObj.week}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.year.length < 10">{{crontabValueObj.year}}</span>
<el-tooltip v-else :content="crontabValueObj.year" placement="top"><span>{{crontabValueObj.year}}</span></el-tooltip>
</td>
<td class="result">
<span v-if="crontabValueString.length < 90">{{crontabValueString}}</span>
<el-tooltip v-else :content="crontabValueString" placement="top"><span>{{crontabValueString}}</span></el-tooltip>
</td>
</tr>
</tbody>
</table>
</div>

@ -26,289 +26,289 @@ watch(() => props.ex, () => expressionChange())
//
function expressionChange() {
// -
isShow.value = false;
isShow.value = false
// [0123456]
let ruleArr = props.ex.split(' ');
let ruleArr = props.ex.split(' ')
//
let nums = 0;
let nums = 0
//
let resultArr = [];
let resultArr = []
// []
let nTime = new Date();
let nYear = nTime.getFullYear();
let nMonth = nTime.getMonth() + 1;
let nDay = nTime.getDate();
let nHour = nTime.getHours();
let nMin = nTime.getMinutes();
let nSecond = nTime.getSeconds();
let nTime = new Date()
let nYear = nTime.getFullYear()
let nMonth = nTime.getMonth() + 1
let nDay = nTime.getDate()
let nHour = nTime.getHours()
let nMin = nTime.getMinutes()
let nSecond = nTime.getSeconds()
// 100
getSecondArr(ruleArr[0]);
getMinArr(ruleArr[1]);
getHourArr(ruleArr[2]);
getDayArr(ruleArr[3]);
getMonthArr(ruleArr[4]);
getWeekArr(ruleArr[5]);
getYearArr(ruleArr[6], nYear);
getSecondArr(ruleArr[0])
getMinArr(ruleArr[1])
getHourArr(ruleArr[2])
getDayArr(ruleArr[3])
getMonthArr(ruleArr[4])
getWeekArr(ruleArr[5])
getYearArr(ruleArr[6], nYear)
// -便使
let sDate = dateArr.value[0];
let mDate = dateArr.value[1];
let hDate = dateArr.value[2];
let DDate = dateArr.value[3];
let MDate = dateArr.value[4];
let YDate = dateArr.value[5];
let sDate = dateArr.value[0]
let mDate = dateArr.value[1]
let hDate = dateArr.value[2]
let DDate = dateArr.value[3]
let MDate = dateArr.value[4]
let YDate = dateArr.value[5]
//
let sIdx = getIndex(sDate, nSecond);
let mIdx = getIndex(mDate, nMin);
let hIdx = getIndex(hDate, nHour);
let DIdx = getIndex(DDate, nDay);
let MIdx = getIndex(MDate, nMonth);
let YIdx = getIndex(YDate, nYear);
let sIdx = getIndex(sDate, nSecond)
let mIdx = getIndex(mDate, nMin)
let hIdx = getIndex(hDate, nHour)
let DIdx = getIndex(DDate, nDay)
let MIdx = getIndex(MDate, nMonth)
let YIdx = getIndex(YDate, nYear)
// ()
const resetSecond = function () {
sIdx = 0;
sIdx = 0
nSecond = sDate[sIdx]
}
const resetMin = function () {
mIdx = 0;
mIdx = 0
nMin = mDate[mIdx]
resetSecond();
resetSecond()
}
const resetHour = function () {
hIdx = 0;
hIdx = 0
nHour = hDate[hIdx]
resetMin();
resetMin()
}
const resetDay = function () {
DIdx = 0;
DIdx = 0
nDay = DDate[DIdx]
resetHour();
resetHour()
}
const resetMonth = function () {
MIdx = 0;
MIdx = 0
nMonth = MDate[MIdx]
resetDay();
resetDay()
}
//
if (nYear !== YDate[YIdx]) {
resetMonth();
resetMonth()
}
//
if (nMonth !== MDate[MIdx]) {
resetDay();
resetDay()
}
//
if (nDay !== DDate[DIdx]) {
resetHour();
resetHour()
}
//
if (nHour !== hDate[hIdx]) {
resetMin();
resetMin()
}
//
if (nMin !== mDate[mIdx]) {
resetSecond();
resetSecond()
}
//
goYear: for (let Yi = YIdx; Yi < YDate.length; Yi++) {
let YY = YDate[Yi];
let YY = YDate[Yi]
//
if (nMonth > MDate[MDate.length - 1]) {
resetMonth();
continue;
resetMonth()
continue
}
//
goMonth: for (let Mi = MIdx; Mi < MDate.length; Mi++) {
// 便
let MM = MDate[Mi];
MM = MM < 10 ? '0' + MM : MM;
MM = MM < 10 ? '0' + MM : MM
//
if (nDay > DDate[DDate.length - 1]) {
resetDay();
resetDay()
if (Mi === MDate.length - 1) {
resetMonth();
continue goYear;
resetMonth()
continue goYear
}
continue;
continue
}
//
goDay: for (let Di = DIdx; Di < DDate.length; Di++) {
// 便
let DD = DDate[Di];
let thisDD = DD < 10 ? '0' + DD : DD;
let DD = DDate[Di]
let thisDD = DD < 10 ? '0' + DD : DD
//
if (nHour > hDate[hDate.length - 1]) {
resetHour();
resetHour()
if (Di === DDate.length - 1) {
resetDay();
resetDay()
if (Mi === MDate.length - 1) {
resetMonth();
continue goYear;
resetMonth()
continue goYear
}
continue goMonth;
continue goMonth
}
continue;
continue
}
//
if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true && dayRule.value !== 'workDay' && dayRule.value !== 'lastWeek' && dayRule.value !== 'lastDay') {
resetDay();
continue goMonth;
resetDay()
continue goMonth
}
//
if (dayRule.value === 'lastDay') {
//
if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
while (DD > 0 && checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
DD--;
thisDD = DD < 10 ? '0' + DD : DD;
DD--
thisDD = DD < 10 ? '0' + DD : DD
}
}
} else if (dayRule.value === 'workDay') {
// 230
if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
while (DD > 0 && checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
DD--;
thisDD = DD < 10 ? '0' + DD : DD;
DD--
thisDD = DD < 10 ? '0' + DD : DD
}
}
// X
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week');
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week')
//
if (thisWeek === 1) {
//
DD++;
thisDD = DD < 10 ? '0' + DD : DD;
DD++
thisDD = DD < 10 ? '0' + DD : DD
//
if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
DD -= 3;
DD -= 3
}
} else if (thisWeek === 7) {
// 61
if (dayRuleSup.value !== 1) {
DD--;
DD--
} else {
DD += 2;
DD += 2
}
}
} else if (dayRule.value === 'weekDay') {
//
//
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week')
// dayRuleSup
if (dayRuleSup.value.indexOf(thisWeek) < 0) {
//
if (Di === DDate.length - 1) {
resetDay();
resetDay()
if (Mi === MDate.length - 1) {
resetMonth();
continue goYear;
resetMonth()
continue goYear
}
continue goMonth;
continue goMonth
}
continue;
continue
}
} else if (dayRule.value === 'assWeek') {
//
// 1
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week')
if (dayRuleSup.value[1] >= thisWeek) {
DD = (dayRuleSup.value[0] - 1) * 7 + dayRuleSup.value[1] - thisWeek + 1;
DD = (dayRuleSup.value[0] - 1) * 7 + dayRuleSup.value[1] - thisWeek + 1
} else {
DD = dayRuleSup.value[0] * 7 + dayRuleSup.value[1] - thisWeek + 1;
DD = dayRuleSup.value[0] * 7 + dayRuleSup.value[1] - thisWeek + 1
}
} else if (dayRule.value === 'lastWeek') {
//
// 230
if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
while (DD > 0 && checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
DD--;
thisDD = DD < 10 ? '0' + DD : DD;
DD--
thisDD = DD < 10 ? '0' + DD : DD
}
}
//
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week');
let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week')
//
if (dayRuleSup.value < thisWeek) {
DD -= thisWeek - dayRuleSup.value;
DD -= thisWeek - dayRuleSup.value
} else if (dayRuleSup.value > thisWeek) {
DD -= 7 - (dayRuleSup.value - thisWeek)
}
}
// 1005
DD = DD < 10 ? '0' + DD : DD;
DD = DD < 10 ? '0' + DD : DD
//
goHour: for (let hi = hIdx; hi < hDate.length; hi++) {
let hh = hDate[hi] < 10 ? '0' + hDate[hi] : hDate[hi]
//
if (nMin > mDate[mDate.length - 1]) {
resetMin();
resetMin()
if (hi === hDate.length - 1) {
resetHour();
resetHour()
if (Di === DDate.length - 1) {
resetDay();
resetDay()
if (Mi === MDate.length - 1) {
resetMonth();
continue goYear;
resetMonth()
continue goYear
}
continue goMonth;
continue goMonth
}
continue goDay;
continue goDay
}
continue;
continue
}
// ""
goMin: for (let mi = mIdx; mi < mDate.length; mi++) {
let mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi];
let mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi]
//
if (nSecond > sDate[sDate.length - 1]) {
resetSecond();
resetSecond()
if (mi === mDate.length - 1) {
resetMin();
resetMin()
if (hi === hDate.length - 1) {
resetHour();
resetHour()
if (Di === DDate.length - 1) {
resetDay();
resetDay()
if (Mi === MDate.length - 1) {
resetMonth();
continue goYear;
resetMonth()
continue goYear
}
continue goMonth;
continue goMonth
}
continue goDay;
continue goDay
}
continue goHour;
continue goHour
}
continue;
continue
}
// ""
goSecond: for (let si = sIdx; si <= sDate.length - 1; si++) {
let ss = sDate[si] < 10 ? '0' + sDate[si] : sDate[si];
let ss = sDate[si] < 10 ? '0' + sDate[si] : sDate[si]
//
if (MM !== '00' && DD !== '00') {
resultArr.push(YY + '-' + MM + '-' + DD + ' ' + hh + ':' + mm + ':' + ss)
nums++;
nums++
}
// 退
if (nums === 5) break goYear;
if (nums === 5) break goYear
//
if (si === sDate.length - 1) {
resetSecond();
resetSecond()
if (mi === mDate.length - 1) {
resetMin();
resetMin()
if (hi === hDate.length - 1) {
resetHour();
resetHour()
if (Di === DDate.length - 1) {
resetDay();
resetDay()
if (Mi === MDate.length - 1) {
resetMonth();
continue goYear;
resetMonth()
continue goYear
}
continue goMonth;
continue goMonth
}
continue goDay;
continue goDay
}
continue goHour;
continue goHour
}
continue goMin;
continue goMin
}
} //goSecond
} //goMin
@ -318,31 +318,31 @@ function expressionChange() {
}
// 100
if (resultArr.length === 0) {
resultList.value = ['没有达到条件的结果!'];
resultList.value = ['没有达到条件的结果!']
} else {
resultList.value = resultArr;
resultList.value = resultArr
if (resultArr.length !== 5) {
resultList.value.push('最近100年内只有上面' + resultArr.length + '条结果!')
}
}
// -
isShow.value = true;
isShow.value = true
}
//
function getIndex(arr, value) {
if (value <= arr[0] || value > arr[arr.length - 1]) {
return 0;
return 0
} else {
for (let i = 0; i < arr.length - 1; i++) {
if (value > arr[i] && value <= arr[i + 1]) {
return i + 1;
return i + 1
}
}
}
}
// ""
function getYearArr(rule, year) {
dateArr.value[5] = getOrderArr(year, year + 100);
dateArr.value[5] = getOrderArr(year, year + 100)
if (rule !== undefined) {
if (rule.indexOf('-') >= 0) {
dateArr.value[5] = getCycleArr(rule, year + 100, false)
@ -355,7 +355,7 @@ function getYearArr(rule, year) {
}
// ""
function getMonthArr(rule) {
dateArr.value[4] = getOrderArr(1, 12);
dateArr.value[4] = getOrderArr(1, 12)
if (rule.indexOf('-') >= 0) {
dateArr.value[4] = getCycleArr(rule, 12, false)
} else if (rule.indexOf('/') >= 0) {
@ -369,58 +369,58 @@ function getWeekArr(rule) {
//
if (dayRule.value === '' && dayRuleSup.value === '') {
if (rule.indexOf('-') >= 0) {
dayRule.value = 'weekDay';
dayRule.value = 'weekDay'
dayRuleSup.value = getCycleArr(rule, 7, false)
} else if (rule.indexOf('#') >= 0) {
dayRule.value = 'assWeek';
let matchRule = rule.match(/[0-9]{1}/g);
dayRuleSup.value = [Number(matchRule[1]), Number(matchRule[0])];
dateArr.value[3] = [1];
dayRule.value = 'assWeek'
let matchRule = rule.match(/[0-9]{1}/g)
dayRuleSup.value = [Number(matchRule[1]), Number(matchRule[0])]
dateArr.value[3] = [1]
if (dayRuleSup.value[1] === 7) {
dayRuleSup.value[1] = 0;
dayRuleSup.value[1] = 0
}
} else if (rule.indexOf('L') >= 0) {
dayRule.value = 'lastWeek';
dayRuleSup.value = Number(rule.match(/[0-9]{1,2}/g)[0]);
dateArr.value[3] = [31];
dayRule.value = 'lastWeek'
dayRuleSup.value = Number(rule.match(/[0-9]{1,2}/g)[0])
dateArr.value[3] = [31]
if (dayRuleSup.value === 7) {
dayRuleSup.value = 0;
dayRuleSup.value = 0
}
} else if (rule !== '*' && rule !== '?') {
dayRule.value = 'weekDay';
dayRule.value = 'weekDay'
dayRuleSup.value = getAssignArr(rule)
}
}
}
// ""-
function getDayArr(rule) {
dateArr.value[3] = getOrderArr(1, 31);
dayRule.value = '';
dayRuleSup.value = '';
dateArr.value[3] = getOrderArr(1, 31)
dayRule.value = ''
dayRuleSup.value = ''
if (rule.indexOf('-') >= 0) {
dateArr.value[3] = getCycleArr(rule, 31, false)
dayRuleSup.value = 'null';
dayRuleSup.value = 'null'
} else if (rule.indexOf('/') >= 0) {
dateArr.value[3] = getAverageArr(rule, 31)
dayRuleSup.value = 'null';
dayRuleSup.value = 'null'
} else if (rule.indexOf('W') >= 0) {
dayRule.value = 'workDay';
dayRuleSup.value = Number(rule.match(/[0-9]{1,2}/g)[0]);
dateArr.value[3] = [dayRuleSup.value];
dayRule.value = 'workDay'
dayRuleSup.value = Number(rule.match(/[0-9]{1,2}/g)[0])
dateArr.value[3] = [dayRuleSup.value]
} else if (rule.indexOf('L') >= 0) {
dayRule.value = 'lastDay';
dayRuleSup.value = 'null';
dateArr.value[3] = [31];
dayRule.value = 'lastDay'
dayRuleSup.value = 'null'
dateArr.value[3] = [31]
} else if (rule !== '*' && rule !== '?') {
dateArr.value[3] = getAssignArr(rule)
dayRuleSup.value = 'null';
dayRuleSup.value = 'null'
} else if (rule === '*') {
dayRuleSup.value = 'null';
dayRuleSup.value = 'null'
}
}
// ""
function getHourArr(rule) {
dateArr.value[2] = getOrderArr(0, 23);
dateArr.value[2] = getOrderArr(0, 23)
if (rule.indexOf('-') >= 0) {
dateArr.value[2] = getCycleArr(rule, 24, true)
} else if (rule.indexOf('/') >= 0) {
@ -431,7 +431,7 @@ function getHourArr(rule) {
}
// ""
function getMinArr(rule) {
dateArr.value[1] = getOrderArr(0, 59);
dateArr.value[1] = getOrderArr(0, 59)
if (rule.indexOf('-') >= 0) {
dateArr.value[1] = getCycleArr(rule, 60, true)
} else if (rule.indexOf('/') >= 0) {
@ -442,7 +442,7 @@ function getMinArr(rule) {
}
// ""
function getSecondArr(rule) {
dateArr.value[0] = getOrderArr(0, 59);
dateArr.value[0] = getOrderArr(0, 59)
if (rule.indexOf('-') >= 0) {
dateArr.value[0] = getCycleArr(rule, 60, true)
} else if (rule.indexOf('/') >= 0) {
@ -453,86 +453,86 @@ function getSecondArr(rule) {
}
// min-max
function getOrderArr(min, max) {
let arr = [];
let arr = []
for (let i = min; i <= max; i++) {
arr.push(i);
arr.push(i)
}
return arr;
return arr
}
//
function getAssignArr(rule) {
let arr = [];
let assiginArr = rule.split(',');
let arr = []
let assiginArr = rule.split(',')
for (let i = 0; i < assiginArr.length; i++) {
arr[i] = Number(assiginArr[i])
}
arr.sort(compare)
return arr;
return arr
}
//
function getAverageArr(rule, limit) {
let arr = [];
let agArr = rule.split('/');
let min = Number(agArr[0]);
let step = Number(agArr[1]);
let arr = []
let agArr = rule.split('/')
let min = Number(agArr[0])
let step = Number(agArr[1])
while (min <= limit) {
arr.push(min);
min += step;
arr.push(min)
min += step
}
return arr;
return arr
}
//
function getCycleArr(rule, limit, status) {
// status--01
let arr = [];
let cycleArr = rule.split('-');
let min = Number(cycleArr[0]);
let max = Number(cycleArr[1]);
let arr = []
let cycleArr = rule.split('-')
let min = Number(cycleArr[0])
let max = Number(cycleArr[1])
if (min > max) {
max += limit;
max += limit
}
for (let i = min; i <= max; i++) {
let add = 0;
let add = 0
if (status === false && i % limit === 0) {
add = limit;
add = limit
}
arr.push(Math.round(i % limit + add))
}
arr.sort(compare)
return arr;
return arr
}
// Array.sort
function compare(value1, value2) {
if (value2 - value1 > 0) {
return -1;
return -1
} else {
return 1;
return 1
}
}
// 2017-9-19 18:04:33
function formatDate(value, type) {
//
let time = typeof value == 'number' ? new Date(value) : value;
let Y = time.getFullYear();
let M = time.getMonth() + 1;
let D = time.getDate();
let h = time.getHours();
let m = time.getMinutes();
let s = time.getSeconds();
let week = time.getDay();
let time = typeof value == 'number' ? new Date(value) : value
let Y = time.getFullYear()
let M = time.getMonth() + 1
let D = time.getDate()
let h = time.getHours()
let m = time.getMinutes()
let s = time.getSeconds()
let week = time.getDay()
// type
if (type === undefined) {
return Y + '-' + (M < 10 ? '0' + M : M) + '-' + (D < 10 ? '0' + D : D) + ' ' + (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s);
return Y + '-' + (M < 10 ? '0' + M : M) + '-' + (D < 10 ? '0' + D : D) + ' ' + (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s)
} else if (type === 'week') {
// quartz 1
return week + 1;
return week + 1
}
}
//
function checkDate(value) {
let time = new Date(value);
let time = new Date(value)
let format = formatDate(time)
return value === format;
return value === format
}
onMounted(() => {
expressionChange()

@ -61,22 +61,24 @@ const props = defineProps({
}
}
})
const fullYear = ref(0)
const maxFullYear = ref(0)
const fullYear = Number(new Date().getFullYear())
const maxFullYear = fullYear + 10
const radioValue = ref(1)
const cycle01 = ref(0)
const cycle02 = ref(0)
const average01 = ref(0)
const cycle01 = ref(fullYear)
const cycle02 = ref(fullYear + 1)
const average01 = ref(fullYear)
const average02 = ref(1)
const checkboxList = ref([])
const checkCopy = ref([])
const checkCopy = ref([fullYear])
const cycleTotal = computed(() => {
cycle01.value = props.check(cycle01.value, fullYear.value, maxFullYear.value - 1)
cycle02.value = props.check(cycle02.value, cycle01.value + 1, maxFullYear.value)
cycle01.value = props.check(cycle01.value, fullYear, maxFullYear - 1)
cycle02.value = props.check(cycle02.value, cycle01.value + 1, maxFullYear)
return cycle01.value + '-' + cycle02.value
})
const averageTotal = computed(() => {
average01.value = props.check(average01.value, fullYear.value, maxFullYear.value - 1)
average01.value = props.check(average01.value, fullYear, maxFullYear - 1)
average02.value = props.check(average02.value, 1, 10)
return average01.value + '/' + average02.value
})
@ -97,8 +99,8 @@ function changeRadioValue(value) {
radioValue.value = 3
} else if (value.indexOf("/") > -1) {
const indexArr = value.split('/')
average01.value = Number(indexArr[1])
average02.value = Number(indexArr[0])
average01.value = Number(indexArr[0])
average02.value = Number(indexArr[1])
radioValue.value = 4
} else {
checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]
@ -129,14 +131,6 @@ function onRadioChange() {
break
}
}
onMounted(() => {
fullYear.value = Number(new Date().getFullYear())
maxFullYear.value = fullYear.value + 10
cycle01.value = fullYear.value
cycle02.value = cycle01.value + 1
average01.value = fullYear.value
checkCopy.value = [fullYear.value]
})
</script>
<style lang="scss" scoped>

@ -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>
@ -257,7 +258,7 @@
</div>
</template>
</el-dialog>
<!-- 添加Cron表达式生成器弹窗 -->
<el-dialog title="Cron表达式生成器" v-model="openCron" append-to-body destroy-on-close class="scrollbar">
<crontab @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab>
@ -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);
@ -569,7 +570,7 @@ const handleShowCron = () => {
}
}
}
expression.value = cronExp || form.value.cronExpression || "";
openCron.value = true;
}
@ -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