jhprjv2/ruoyi-ui/src/views/flowable/task/myProcess/index.vue

512 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="流程名称" prop="procDefName">
<el-input
v-model="queryParams.procDefName"
placeholder="请输入流程名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="流程类型" prop="category">
<el-select
v-model="queryParams.category"
@keyup.enter.native="handleQuery"
placeholder="请选择流程类型"
clearable
>
<el-option
v-for="dict in dict.type.sys_process_category"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="申请时间">
<el-date-picker
v-model="daterangeCheckTime"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:deployment:add']"
>新增流程</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:deployment:remove']"
>删除</el-button>
</el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane :label="tabs.all" name="all"></el-tab-pane>
<el-tab-pane :label="tabs.await" name="await"></el-tab-pane>
<el-tab-pane :label="tabs.finished" name="finished"></el-tab-pane>
</el-tabs>
<el-table v-loading="loading" :data="myProcessList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="项目名称" align="center" prop="businessKeyName" width="160" :show-overflow-tooltip="true"/>
<el-table-column label="流程编号" align="center" prop="procInsId" width="120" :show-overflow-tooltip="true"/>
<el-table-column label="流程名称" align="center" prop="procDefName" width="120" :show-overflow-tooltip="true"/>
<el-table-column label="流程类别" align="center" prop="category" >
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_process_category"
:value="scope.row.category"
/>
</template>
</el-table-column>
<el-table-column label="流程版本" align="center" width="80">
<template slot-scope="scope">
<el-tag size="medium" >v{{ scope.row.procDefVersion }}</el-tag>
</template>
</el-table-column>
<el-table-column label="提交时间" align="center" prop="createTime" width="180"/>
<el-table-column label="流程状态" align="center" width="100">
<template slot-scope="scope">
<el-tag v-if="scope.row.finishTime == null" size="mini">进行中</el-tag>
<el-tag type="success" v-if="scope.row.finishTime != null && scope.row.assigneeId != null" size="mini">已完成</el-tag>
<el-tag type="danger" v-if="scope.row.finishTime != null && scope.row.assigneeId == null" size="mini">已撤销</el-tag>
</template>
</el-table-column>
<el-table-column label="当前节点" align="center" prop="taskName">
<template slot-scope="scope">
<div v-if="scope.row.finishTime == null">{{ scope.row.taskName }}</div>
<div v-if="scope.row.finishTime != null">结束</div>
</template>
</el-table-column>
<el-table-column label="处理耗时" align="center" prop="duration" width="150">
<template slot-scope="scope">
{{getDurationDate(scope.row)}}
</template>
</el-table-column>
<el-table-column label="办理人" align="center" width="200">
<template slot-scope="scope">
<label v-if="scope.row.assigneeName">{{scope.row.assigneeName}} <el-tag type="info" size="mini">{{scope.row.assigneeDeptName}}</el-tag></label>
</template>
</el-table-column>
<el-table-column label="操作" width="150" align="center" fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button @click="handleFlowRecord(scope.row)" type="text" size="small" icon="el-icon-finished">查看详情</el-button>
<el-button v-if="scope.row.finishTime == null" @click="handleStop(scope.row)" type="text" size="small" icon="el-icon-refresh-left">撤销</el-button>
<el-button v-if="scope.row.finishTime == null" @click="handleDelete(scope.row)" type="text" size="small" icon="el-icon-delete" v-hasPermi="['system:deployment:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 发起流程 -->
<el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
<el-form :model="queryProcessParams" ref="queryProcessForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="流程名称" prop="name">
<el-input
v-model="queryProcessParams.name"
placeholder="请输入流程名称"
clearable
size="small"
@keyup.enter.native="handleProcessQuery"
/>
</el-form-item>
<el-form-item label="流程类型" prop="category">
<el-select
v-model="queryParams.category"
@keyup.enter.native="handleProcessQuery"
placeholder="请选择流程类型"
clearable
>
<el-option
v-for="dict in dict.type.sys_process_category"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleProcessQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetProcessQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="processLoading" fit :data="definitionList" border >
<el-table-column label="流程名称" align="center" prop="name" width="400" :show-overflow-tooltip="true"/>
<el-table-column label="流程版本" align="center">
<template slot-scope="scope">
<el-tag size="medium" >v{{ scope.row.version }}</el-tag>
</template>
</el-table-column>
<el-table-column label="流程分类" align="center" prop="category">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_process_category"
:value="scope.row.category"
/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleStartProcess(scope.row)"
>发起流程</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="processTotal>0"
:total="processTotal"
:page.sync="queryProcessParams.pageNum"
:limit.sync="queryProcessParams.pageSize"
@pagination="myDefinitionList"
/>
</el-dialog>
<initTaskDrawer ref="initTaskDrawer" :closeCallBack="getList"></initTaskDrawer>
<detailDrawer ref="detailDrawer"></detailDrawer>
</div>
</template>
<script>
import {
getDeployment,
delDeployment,
addDeployment,
updateDeployment,
exportDeployment,
flowRecord
} from "@/api/flowable/finished";
import { myProcessList,stopProcess } from "@/api/flowable/process";
import {allList,queryCount} from "@/api/flowable/businessKey";
import {myDefinitionList} from "@/api/flowable/definition";
import initTaskDrawer from "./initTaskDrawer.vue";
import detailDrawer from "./detail/detailDrawer.vue";
export default {
name: "Deploy",
components: {
initTaskDrawer,
detailDrawer
},
dicts: ["sys_process_category"],
data() {
return {
// 遮罩层
loading: true,
processLoading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
processTotal:0,
// 我发起的流程列表数据
myProcessList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
src: "",
definitionList:[],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
procDefName: null,
category: null,
params: null,
activeName:null,
},
// 查询参数
queryProcessParams: {
pageNum: 1,
pageSize: 10,
name: null,
category: null,
key: null,
tenantId: null,
deployTime: null,
derivedFrom: null,
derivedFromRoot: null,
parentDeploymentId: null,
engineVersion: null
},
// 表单参数
form: {},
// 表单校验
rules: {
},
daterangeCheckTime:[],
tabs:{
all:"全部申请0",
await:"进行中0",
finished:"已完成0",
},
activeName:"await",
};
},
created() {
this.queryParams.activeName = this.activeName;
this.getList();
},
methods: {
/** 查询流程定义列表 */
getList() {
this.loading = true;
this.queryParams.params = {};
if (null != this.daterangeCheckTime && "" != this.daterangeCheckTime) {
this.queryParams.params["beginDate"] = this.daterangeCheckTime[0];
this.queryParams.params["endDate"] = this.daterangeCheckTime[1];
}
this.queryCount(this.queryParams);
allList(this.queryParams).then(response => {
this.myProcessList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 统计 */
queryCount(params){
queryCount(this.queryParams).then(response => {
this.tabs.await = "进行中("+response.data.await+"";
this.tabs.finished = "已完成("+response.data.finished+"";
this.tabs.all = "全部申请("+(parseInt(response.data.await)+parseInt(response.data.finished))+"";
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
name: null,
category: null,
key: null,
tenantId: null,
deployTime: null,
derivedFrom: null,
derivedFromRoot: null,
parentDeploymentId: null,
engineVersion: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.daterangeCheckTime=[];
this.handleQuery();
},
/** 搜索按钮操作 */
handleProcessQuery() {
this.queryProcessParams.pageNum = 1;
this.myDefinitionList();
},
/** 重置按钮操作 */
resetProcessQuery() {
this.resetForm("queryProcessForm");
this.handleProcessQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.procInsId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.open = true;
this.title = "发起流程";
this.myDefinitionList();
},
myDefinitionList(){
myDefinitionList(this.queryProcessParams).then(response => {
this.definitionList = response.data.records;
this.processTotal = response.data.total;
this.processLoading = false;
});
},
/** 发起流程申请 */
handleStartProcess(row){
this.open = false;
this.$refs.initTaskDrawer.show(row);
// this.$router.push({ path: '/flowable/task/myProcess/send/index',
// query: {
// deployId: row.deploymentId,
// procDefId: row.id
// }
// })
},
/** 取消流程申请 */
handleStop(row){
const params = {
instanceId: row.procInsId
}
this.$modal.confirm('撤销流程会终止,是否继续?').then(function() {
this.loading = true;
return stopProcess(params);
}).then(res => {
this.$modal.msgSuccess(res.msg);
this.loading=false;
this.getList();
});
},
/** 流程流转记录 */
handleFlowRecord(row){
this.$refs.detailDrawer.show(row);
// this.$router.push({ path: '/flowable/task/myProcess/detail/index',
// query: {
// procInsId: row.procInsId,
// deployId: row.deployId,
// taskId: row.taskId
// }})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getDeployment(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改流程定义";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateDeployment(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addDeployment(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.procInsId || this.ids;// 暂不支持删除多个流程
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?删除后数据将不可找回!!', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.loading = true;
return delDeployment(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有流程定义数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
return exportDeployment(queryParams);
}).then(response => {
this.download(response.msg);
})
},
// 页签点击
handleClick() {
this.queryParams.activeName = this.activeName;
this.getList();
},
getDurationDate(row){
let day=0;
let hours=0;
let min = row.duration;
if(min>1440){
day = parseInt(min/1440);
min = min % 1440;
if(min>60){
hours = parseInt(min/60);
min = min % 60;
}
}else if(min>60){
hours = parseInt(min/60);
min = min % 60;
}
if(day>0){
if(day<10) day="0"+day;
if(hours<10) hours="0"+hours;
if(min<10) min="0"+min;
return day+""+hours+""+min+"";
}
if(hours>0){
if(hours<10) hours="0"+hours;
if(min<10) min="0"+min;
return hours+""+min+"";
}
if(min>0){
if(min<10) min="0"+min;
return min+"";
}
if(min==0){
return "1";
}
},
}
};
</script>