|
|
@@ -2,7 +2,9 @@
|
|
|
<div class="container-fluid">
|
|
|
<Navbar title="任务管理" :is-go-back="false" />
|
|
|
<a-button type="primary" @click="showDrawer"> 创建任务 </a-button>
|
|
|
- <a-button type="dashed" style="margin-left: 8px;" @click="loadTaskTemplate"> 加载任务模板 </a-button>
|
|
|
+ <a-button type="dashed" style="margin-left: 8px" @click="loadTaskTemplate">
|
|
|
+ 加载任务模板
|
|
|
+ </a-button>
|
|
|
<a-drawer
|
|
|
v-model:visible="visible"
|
|
|
class="custom-class"
|
|
|
@@ -62,6 +64,58 @@
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ taskDefineDto.selectedTaskType &&
|
|
|
+ taskDefineDto.selectedTaskType.value == '流程'
|
|
|
+ "
|
|
|
+ class="form-group"
|
|
|
+ >
|
|
|
+ <label for="lastname" class="col-sm-2 control-label">
|
|
|
+ <font color="red">*</font>流程编号
|
|
|
+ </label>
|
|
|
+ <div class="col-sm-10">
|
|
|
+ <a-select
|
|
|
+ v-model:value="taskDefineDto.processNo"
|
|
|
+ :options="processNos"
|
|
|
+ style="width: 100%"
|
|
|
+ @change="processNoChang"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ taskDefineDto.selectedTaskType &&
|
|
|
+ taskDefineDto.selectedTaskType.value == '流程'
|
|
|
+ "
|
|
|
+ class="form-group"
|
|
|
+ >
|
|
|
+ <label for="lastname" class="col-sm-2 control-label">
|
|
|
+ <font color="red">*</font>流程参数
|
|
|
+ </label>
|
|
|
+ <div class="col-sm-10" style="margin-bottom: 6px" />
|
|
|
+ <div
|
|
|
+ class="col-sm-10"
|
|
|
+ style="margin-left: 100px; margin-bottom: 70px"
|
|
|
+ >
|
|
|
+ <a-table
|
|
|
+ :columns="processColumns"
|
|
|
+ :data-source="processDatas"
|
|
|
+ :pagination="false"
|
|
|
+ >
|
|
|
+ <template #bodyCell="{ column, record }">
|
|
|
+ <template v-if="column.dataIndex === 'defaultValue'">
|
|
|
+ <EditTableCell
|
|
|
+ :record="record"
|
|
|
+ :param-name="'defaultValue'"
|
|
|
+ :control-type="'input'"
|
|
|
+ @change-all="tableDataChange"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </a-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div
|
|
|
v-if="
|
|
|
taskDefineDto.selectedTaskType != null &&
|
|
|
@@ -163,7 +217,13 @@
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="form-group">
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ taskDefineDto.selectedTaskType &&
|
|
|
+ taskDefineDto.selectedTaskType.value !== '流程'
|
|
|
+ "
|
|
|
+ class="form-group"
|
|
|
+ >
|
|
|
<label for="lastname" class="col-sm-2 control-label">接收人</label>
|
|
|
<div class="col-sm-10">
|
|
|
<v-select
|
|
|
@@ -175,7 +235,13 @@
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="form-group">
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ taskDefineDto.selectedTaskType &&
|
|
|
+ taskDefineDto.selectedTaskType.value !== '流程'
|
|
|
+ "
|
|
|
+ class="form-group"
|
|
|
+ >
|
|
|
<label for="lastname" class="col-sm-2 control-label">接收用户组</label>
|
|
|
<div class="col-sm-10">
|
|
|
<v-select
|
|
|
@@ -390,7 +456,9 @@
|
|
|
? ""
|
|
|
: record.taskType == "HTTP"
|
|
|
? "HTTP"
|
|
|
- : "流程报表"
|
|
|
+ : record.taskType == "PROCESS"
|
|
|
+ ? "流程"
|
|
|
+ : "流程报表"
|
|
|
}}
|
|
|
</template>
|
|
|
<template v-if="column.key == 'receiveUserNames'">
|
|
|
@@ -438,7 +506,7 @@
|
|
|
删除
|
|
|
</a-button>
|
|
|
<a-button
|
|
|
- v-if="record.taskType != 'HTTP'"
|
|
|
+ v-if="record.taskType != 'HTTP' && record.taskType != 'PROCESS'"
|
|
|
type="dashed"
|
|
|
:size="size"
|
|
|
@click="manualExecutionProcess(record.id)"
|
|
|
@@ -468,14 +536,60 @@ import 'vue-select/dist/vue-select.css';
|
|
|
import { Notify, Uuid } from 'pc-component-v3';
|
|
|
import CommonTable from './CommonTable.vue';
|
|
|
import { message } from 'ant-design-vue';
|
|
|
+import EditTableCell from './EditTableCell.vue';
|
|
|
export default {
|
|
|
components: {
|
|
|
vSelect,
|
|
|
CommonTable,
|
|
|
+ EditTableCell,
|
|
|
},
|
|
|
data: function () {
|
|
|
return {
|
|
|
size: 'small',
|
|
|
+ processColumns: [
|
|
|
+ {
|
|
|
+ key: 'name',
|
|
|
+ title: '全局参数名称',
|
|
|
+ dataIndex: 'name',
|
|
|
+ width: 80,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'defaultValue',
|
|
|
+ title: '全局参数值',
|
|
|
+ dataIndex: 'defaultValue',
|
|
|
+ width: 80,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'dataType',
|
|
|
+ title: '全局参数类型',
|
|
|
+ dataIndex: 'dataType',
|
|
|
+ width: 80,
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // title: '操作',
|
|
|
+ // dataIndex: 'operation',
|
|
|
+ // key: 'operation',
|
|
|
+ // width: 60,
|
|
|
+ // },
|
|
|
+ ].map(item => ({ ...item, align: 'center' })),
|
|
|
+ typeOptions: [
|
|
|
+ {
|
|
|
+ value: 'java.lang.Boolean',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'java.lang.Integer',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'java.lang.Double',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'java.lang.Long',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'java.lang.String',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ processDatas: [],
|
|
|
columns: [
|
|
|
{
|
|
|
title: '序号',
|
|
|
@@ -563,8 +677,14 @@ export default {
|
|
|
timeoutTermination: false, //是否超时终止
|
|
|
failureAlarm: false, //是否失败报警
|
|
|
selectedAlarmUser: null, //选择的报警联系人
|
|
|
+ processNo: null,
|
|
|
+ processParam: null,
|
|
|
},
|
|
|
+ processNos: [],
|
|
|
taskTypes: [
|
|
|
+ {
|
|
|
+ value: '流程',
|
|
|
+ },
|
|
|
{
|
|
|
value: 'HTTP任务',
|
|
|
},
|
|
|
@@ -605,6 +725,7 @@ export default {
|
|
|
|
|
|
mounted: function () {
|
|
|
var _self = this;
|
|
|
+ _self.loadProcess();
|
|
|
_self.getAllUsers();
|
|
|
_self.getAllGroups();
|
|
|
_self.getAllTaskDefineDtos();
|
|
|
@@ -625,27 +746,105 @@ export default {
|
|
|
this.pagination.per_page = length;
|
|
|
this.getAllTaskDefineDtos();
|
|
|
},
|
|
|
+ // 打开编辑或新建抽屉
|
|
|
showDrawer: function () {
|
|
|
var _self = this;
|
|
|
_self.visible = true;
|
|
|
+ _self.processDatas = [];
|
|
|
_self.restore();
|
|
|
},
|
|
|
- loadTaskTemplate: function(){
|
|
|
+
|
|
|
+ // 获取流程编号
|
|
|
+ loadProcess: function () {
|
|
|
+ const _self = this;
|
|
|
+ _self.processNos = [];
|
|
|
+ $.ajax({
|
|
|
+ url: Common.getApiURL('ProcessEditResource/list'),
|
|
|
+ type: 'get',
|
|
|
+ contentType: 'application/json',
|
|
|
+ beforeSend: function (request) {
|
|
|
+ Common.addTokenToRequest(request);
|
|
|
+ },
|
|
|
+ success: function (data) {
|
|
|
+ if (data.errorCode == 0) {
|
|
|
+ data.datas.forEach(item => {
|
|
|
+ _self.processNos.push({
|
|
|
+ value: item.no,
|
|
|
+ label: item.no + '-' + item.name,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ message.warning(data.errorMessage);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
|
|
|
+ Common.processException(XMLHttpRequest, textStatus, errorThrown);
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 流程编号改变获取流程参数
|
|
|
+ processNoChang: function (value) {
|
|
|
+ const _self = this;
|
|
|
+ _self.processDatas = [];
|
|
|
+ const params = { processNo: value };
|
|
|
+ $.ajax({
|
|
|
+ url: Common.getApiURL('ProcessEditResource/uniqueByNo'),
|
|
|
+ type: 'get',
|
|
|
+ data: params,
|
|
|
+ contentType: 'application/json',
|
|
|
+ beforeSend: function (request) {
|
|
|
+ Common.addTokenToRequest(request);
|
|
|
+ },
|
|
|
+ success: function (data) {
|
|
|
+ if (data.errorCode == 0) {
|
|
|
+ if (data.data && data.data.globalProperty) {
|
|
|
+ let jsonStr = JSON.stringify(data.data);
|
|
|
+ let datas = JSON.parse(jsonStr);
|
|
|
+ let globalProperty = JSON.parse(datas.globalProperty);
|
|
|
+ if(globalProperty.variables && globalProperty.variables.length>0){
|
|
|
+ _self.processDatas = globalProperty.variables;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ message.warning(data.errorMessage);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
|
|
|
+ Common.processException(XMLHttpRequest, textStatus, errorThrown);
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 更新表格数据
|
|
|
+ tableDataChange: function (record, paramName) {
|
|
|
+ var _self = this;
|
|
|
+ var row = _self.deepClone(record.value);
|
|
|
+ var datas = _self.deepClone(_self.processDatas);
|
|
|
+ datas.forEach(item => {
|
|
|
+ if (item.key == row.key) {
|
|
|
+ item[paramName] = row[paramName];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ _self.processDatas = datas;
|
|
|
+ },
|
|
|
+
|
|
|
+ loadTaskTemplate: function () {
|
|
|
$.ajax({
|
|
|
url: Common.getApiURL('TaskDefineResource/generateTask'),
|
|
|
type: 'get',
|
|
|
contentType: 'application/json',
|
|
|
- beforeSend: function(request) {
|
|
|
+ beforeSend: function (request) {
|
|
|
Common.addTokenToRequest(request);
|
|
|
},
|
|
|
- success: function(data) {
|
|
|
- if(data.errorCode == 0){
|
|
|
+ success: function (data) {
|
|
|
+ if (data.errorCode == 0) {
|
|
|
message.success(data.errorMessage);
|
|
|
} else {
|
|
|
message.warning(data.errorMessage);
|
|
|
}
|
|
|
},
|
|
|
- error: function(XMLHttpRequest, textStatus, errorThrown) {
|
|
|
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
|
|
|
Common.processException(XMLHttpRequest, textStatus, errorThrown);
|
|
|
},
|
|
|
});
|
|
|
@@ -742,6 +941,12 @@ export default {
|
|
|
_self.taskDefineDto.selectedTaskType = {
|
|
|
value: '流程报表',
|
|
|
};
|
|
|
+ } else if (item.taskType == 'PROCESS') {
|
|
|
+ _self.taskDefineDto.processNo = item.processNo;
|
|
|
+ _self.processDatas = JSON.parse(item.processParam);
|
|
|
+ _self.taskDefineDto.selectedTaskType = {
|
|
|
+ value: '流程',
|
|
|
+ };
|
|
|
}
|
|
|
if (item.taskTimeType == 'NONE') {
|
|
|
_self.taskDefineDto.selectedTimeType = {
|
|
|
@@ -910,10 +1115,27 @@ export default {
|
|
|
if (_self.taskDefineDto.selectedTaskType.value == 'HTTP任务') {
|
|
|
_self.taskDefineDto.processReportNo = null;
|
|
|
_self.taskDefineDto.processReportName = null;
|
|
|
+ _self.taskDefineDto.processNo = null;
|
|
|
+ _self.processDatas = [];
|
|
|
} else if (_self.taskDefineDto.selectedTaskType.value == '流程报表') {
|
|
|
_self.taskDefineDto.selectedRequestType = null;
|
|
|
_self.taskDefineDto.httpRequestUrl = null;
|
|
|
_self.taskDefineDto.httpRequestParam = null;
|
|
|
+ _self.taskDefineDto.processNo = null;
|
|
|
+ _self.processDatas = [];
|
|
|
+ } else if (_self.taskDefineDto.selectedTaskType.value == '流程') {
|
|
|
+ _self.taskDefineDto.processReportNo = null;
|
|
|
+ _self.taskDefineDto.processReportName = null;
|
|
|
+ _self.taskDefineDto.selectedRequestType = null;
|
|
|
+ _self.taskDefineDto.httpRequestUrl = null;
|
|
|
+ _self.taskDefineDto.httpRequestParam = null;
|
|
|
+ _self.taskDefineDto.selectedUser = [];
|
|
|
+ _self.taskDefineDto.selectedGroup = [];
|
|
|
+ }
|
|
|
+ if (_self.processDatas && _self.processDatas.length > 0) {
|
|
|
+ _self.taskDefineDto.processParam = JSON.stringify(_self.processDatas);
|
|
|
+ } else {
|
|
|
+ _self.taskDefineDto.processParam = null;
|
|
|
}
|
|
|
var receiveUserIds = [];
|
|
|
if (
|
|
|
@@ -966,7 +1188,12 @@ export default {
|
|
|
failureAlarm: _self.taskDefineDto.failureAlarm,
|
|
|
alarmUserIds: alarmUserIds,
|
|
|
taskStatus: _self.taskDefineDto.selectedStatus.value,
|
|
|
+ processNo: _self.taskDefineDto.processNo,
|
|
|
+ processParam: _self.taskDefineDto.processParam,
|
|
|
};
|
|
|
+ if (_self.taskDefineDto.selectedTaskType.value == '流程') {
|
|
|
+ requestDto.taskType = '流程任务';
|
|
|
+ }
|
|
|
TaskDefineResource.saveTaskDefine(requestDto).then(
|
|
|
successData => {
|
|
|
if (successData) {
|
|
|
@@ -1044,6 +1271,17 @@ export default {
|
|
|
response.errorMessage = '请填写流程报表名称';
|
|
|
return response;
|
|
|
}
|
|
|
+ } else if (_self.taskDefineDto.selectedTaskType.value == '流程'){
|
|
|
+ if (!_self.taskDefineDto.processNo){
|
|
|
+ response.errorCode = 8;
|
|
|
+ response.errorMessage = '请选择流程编号';
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ if(_self.processDatas.length == 0){
|
|
|
+ response.errorCode = 9;
|
|
|
+ response.errorMessage = '请添加流程参数';
|
|
|
+ return response;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return response;
|
|
|
@@ -1187,6 +1425,20 @@ export default {
|
|
|
},
|
|
|
);
|
|
|
},
|
|
|
+ // 深拷贝
|
|
|
+ deepClone: function (obj) {
|
|
|
+ const _self = this;
|
|
|
+ if (typeof obj !== 'object' || obj == null) {
|
|
|
+ return obj;
|
|
|
+ }
|
|
|
+ let result = Array.isArray(obj) ? [] : {};
|
|
|
+ for (let key in obj) {
|
|
|
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
|
+ result[key] = _self.deepClone(obj[key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
</script>
|